GitHub Codespace adalah mesin development yang berjalan di cloud, bukan CI runner yang kebetulan memiliki editor. Environment ini tetap interaktif ketika developer mengedit file, menjalankan command, menyalakan server, melakukan debugging, dan membuat commit. Perbedaan ini menjelaskan tiga hal yang sering tercampur: cara kuota compute dihitung, cara localhost dapat dibuka dari browser, dan kapan CI mulai bekerja setelah kode di-push.
Core-hours mengukur kapasitas mesin dikalikan waktu aktif
Compute Codespaces dihitung dalam core-hours. Modelnya sederhana:
core-hours = jumlah core mesin × jam aktifCodespace 2-core yang aktif selama satu jam menghabiskan dua core-hours. Mesin 4-core menghabiskan empat core-hours dalam waktu yang sama. Mesin 8-core menghabiskan delapan.
Karena itu, kuota yang dinyatakan dalam core-hours tidak dapat dibaca sebagai jumlah jam biasa tanpa melihat ukuran mesin. Jika sebuah akun memiliki 120 core-hours, batas teoritis waktu aktifnya menjadi:
mesin 2-core -> 60 jam
mesin 4-core -> 30 jam
mesin 8-core -> 15 jamKuota yang sama menghasilkan waktu penggunaan yang lebih pendek ketika ukuran mesin membesar karena mesin tersebut memakai kapasitas compute lebih banyak pada saat yang sama.
Kata yang penting adalah aktif. Penggunaan compute mulai dihitung ketika codespace dibuat atau dinyalakan dan berhenti ketika codespace dihentikan atau dihapus. Editor tidak harus terus digunakan agar compute tetap berjalan. Selama codespace masih running, waktunya tetap dihitung.
GitHub memakai idle timeout untuk menghentikan codespace yang tidak aktif secara otomatis. Default-nya 30 menit dan pengguna dapat mengatur nilai lain untuk codespace baru. Timeout yang lebih pendek berguna agar session development yang ditinggalkan tidak terus memakai compute lebih lama dari yang diperlukan.
Storage dihitung secara terpisah. Menghentikan codespace mengakhiri penggunaan compute aktif, tetapi filesystem-nya dapat tetap disimpan agar environment tersebut bisa dilanjutkan kemudian.
Codespaces dan CI menyelesaikan masalah yang berbeda
Codespace dan sistem CI dapat menjalankan banyak command yang sama, tetapi model eksekusinya berbeda.
Developer dapat menjalankan ini di dalam Codespace:
npm install
npm test
npm run devDeveloper menentukan kapan command dijalankan, dapat memeriksa state di tengah proses, mengedit kode setelah terjadi error, dan mempertahankan environment selama berjam-jam atau berhari-hari.
CI biasanya berjalan setelah event seperti push atau pull request:
edit di Codespaces
|
v
git commit / git push
|
v
CI workflow dimulai
|
+-- install dependencies
+-- lint
+-- test
+-- build
|
v
pass atau failCI adalah otomasi terhadap state repository. Codespaces adalah development environment interaktif untuk session developer.
Batas ini penting secara operasional. npm test yang berhasil di Codespace membuktikan test tersebut lolos pada environment development itu pada saat tersebut. CI mengulang pemeriksaan di environment yang dikendalikan workflow dan dapat menjadikannya pemeriksaan konsisten untuk setiap push atau pull request.
npm run dev menyalakan server di mesin remote
Misalnya aplikasi Vite dijalankan dengan:
npm run devdan menampilkan:
Local: http://localhost:5173/Pada komputer development lokal, localhost:5173 berarti port 5173 pada komputer tersebut. Di Codespaces, alamat yang sama merujuk ke Codespace VM atau container di cloud, bukan langsung ke perangkat tempat browser berjalan.
Hubungannya seperti ini:
browser di perangkat developer
|
| HTTPS
v
GitHub forwarded-port endpoint
|
v
Codespace port 5173
|
v
Vite dev serverGitHub Codespaces dapat mendeteksi URL localhost yang dicetak aplikasi lalu meneruskan port tersebut secara otomatis. Port yang sudah di-forward kemudian bisa dibuka melalui panel Ports atau link yang muncul di terminal.
Alamat eksternalnya berbentuk kurang lebih seperti:
https://CODESPACENAME-5173.app.github.devDomain tersebut sebaiknya tidak ditulis permanen di application logic karena forwarding domain merupakan bagian dari infrastruktur GitHub dan dapat berubah. Codespaces menyediakan environment variable untuk kasus ketika aplikasi memang perlu membentuk alamat yang memahami mekanisme port forwarding.
Port forwarding berbeda dari bind address server
Ada dua batas jaringan yang perlu dibedakan:
- development server harus listen pada address yang dapat dijangkau di dalam environment Codespace;
- GitHub harus meneruskan port yang sesuai ke endpoint yang dapat dibuka browser.
Sebagian development server secara default hanya bind ke loopback. Jika port sudah di-forward tetapi aplikasi tetap tidak dapat dibuka, bind address server menjadi salah satu hal pertama yang perlu diperiksa.
Pada Vite, bind address dapat dibuat eksplisit dengan:
npm run dev -- --host 0.0.0.0atau langsung:
vite --host 0.0.0.00.0.0.0 berarti proses listen pada semua interface IPv4 yang tersedia di network namespace-nya. Nilai ini tidak otomatis membuat aplikasi terbuka untuk seluruh internet. Eksposur tetap ditentukan oleh port forwarding Codespaces dan visibility yang diberikan pada port tersebut.
Pemisahan ini penting untuk keamanan. Forwarded port Codespaces secara default bersifat private. Bergantung pada kebijakan repository dan organisasi, port dapat diubah agar terlihat oleh anggota organisasi atau dapat diakses publik. Development server karena itu tidak boleh menganggap bahwa keberadaan forwarded URL berarti server tersebut memang ditujukan untuk penggunaan publik.
Development loop praktis di Codespaces
Untuk project Node.js, alur normalnya singkat:
npm install
npm run devSetelah itu developer membuka port yang terdeteksi melalui panel Ports, mengedit kode, dan membiarkan development server melakukan reload aplikasi. Operasi Git tetap berjalan seperti biasa:
git status
git add .
git commit -m "Describe the change"
git pushSetelah push, otomasi repository seperti GitHub Actions dapat berjalan secara terpisah dari Codespace.
Alur lengkapnya menjadi:
source repository
|
v
Codespace starts
|
+-- editor
+-- terminal
+-- npm run dev
| |
| +-- localhost:5173
| |
| +-- forwarded URL
|
+-- git push
|
v
CI workflowPembagian ini membuat setiap komponen memiliki tanggung jawab yang jelas. Codespaces menyediakan workstation cloud yang interaktif. Core-hours mengukur compute aktif yang dipakai workstation tersebut. Port forwarding menghubungkan server di environment remote ke browser developer. CI mulai bekerja ketika event repository memicu pemeriksaan otomatis. Dengan memisahkan empat lapisan ini, perilaku Codespaces lebih mudah dianalisis ketika penggunaan kuota, networking, atau workflow mengalami masalah.