⚙️ DevOps & Otomasi CI/CD

Mengenal Perbedaan Runner Codeberg Actions dan Varian Lazy

Memilih label runner yang tepat di Codeberg Actions menentukan apakah skrip otomasi kamu selesai dalam hitungan detik atau justru terjebak antrean panjang dan berhenti mendadak karena kehabisan memori.

Bagi para pengembang dan pengelola proyek sumber terbuka yang bermigrasi ke Codeberg, fitur Codeberg Actions (yang ditenagai oleh mesin Forgejo Actions) menjadi tulang punggung untuk menjalankan pengujian kode, membangun situs statis, hingga menjalankan bot terjadwal secara otomatis. Setiap kali sebuah peristiwa seperti git push, pembukaan pull request, atau jadwal cron terpicu, sistem akan menugaskan pekerjaan tersebut ke dalam kontainer Linux x86_64 milik infrastruktur bersama Codeberg.

Di dalam berkas konfigurasi workflow YAML, pengembang dihadapkan pada enam pilihan label resmi yang disediakan pengelola layanan: codeberg-tiny, codeberg-small, codeberg-medium, serta tiga kembarannya yang memiliki akhiran -lazy. Sekilas, keenam nama tersebut tampak hanya berbeda pada ukuran kapasitas komputasi saja, padahal ada mekanisme penjadwalan antrean di baliknya yang sangat memengaruhi kecepatan eksekusi repositori kamu.

Kesalahan yang paling sering terjadi di lapangan adalah kebiasaan meniru konfigurasi repositori besar dengan langsung memasang label codeberg-medium untuk tugas-tugas sepele. Alih-alih berjalan lebih ngebut, pekerjaan ringan tersebut justru sering kali harus mengantre lama di belakang proyek kompilasi berat milik pengguna lain pada jam-jam sibuk.

Ilustrasi perbandingan arsitektur kapasitas dan antrean runner Codeberg Actions untuk otomasi repositori
Pemetaan kapasitas resource dan prioritas penjadwalan menentukan efisiensi eksekusi workflow di infrastruktur bersama Codeberg.

Tabel Perbandingan Spesifikasi Keenam Runner Codeberg

Secara arsitektural, seluruh hosted runner resmi di Codeberg dibagi berdasarkan dua dimensi utama: kelas kapasitas sumber daya (tiny, small, medium) yang mengatur jatah prosesor, memori, serta batas durasi eksekusi, dan tingkat prioritas antrean (reguler vs -lazy) yang menentukan kapan kontainer kamu dijadwalkan berjalan oleh server.

Label RunnervCPURAM + Disk BuildBatas WaktuPrioritas Antrean
codeberg-tiny1 core2 GB2 menitNormal (diproses lebih cepat)
codeberg-tiny-lazy1 core2 GB2 menitRendah (menunggu beban longgar)
codeberg-small2 core4 GB5 menitNormal
codeberg-small-lazy2 core4 GB5 menitRendah (menunggu beban longgar)
codeberg-medium4 core8 GB10 menitNormal (antrean paling padat)
codeberg-medium-lazy4 core8 GB10 menitRendah (menunggu beban longgar)

Memahami Perbedaan Varian Reguler dan Akhiran Lazy

Banyak pengguna baru menyangka bahwa akhiran -lazy berarti runner tersebut berjalan dengan kecepatan prosesor yang dicekik atau memiliki batas waktu yang lebih panjang. Faktanya, spesifikasi perangkat keras dan batas waktu eksekusi varian lazy sama persis dengan saudara kembar regulernya; perbedaan satu-satunya terletak pada kebijakan prioritas antrean.

1. Varian Reguler untuk Respons Interaktif

Label tanpa akhiran seperti codeberg-tiny, codeberg-small, dan codeberg-medium diprioritaskan untuk skenario pengembangan yang sifatnya interaktif. Ketika kamu baru saja mendorong perubahan kode (push) atau meninjau pull request dari kontributor dan membutuhkan umpan balik status secepat mungkin, varian reguler akan mendahului antrean latar belakang.

2. Varian Lazy untuk Pekerjaan Latar Belakang

Sebaliknya, codeberg-tiny-lazy, codeberg-small-lazy, dan codeberg-medium-lazy dirancang khusus bagi tugas-tugas yang tidak sensitif terhadap waktu (not time-sensitive). Contoh paling ideal meliputi otomasi terjadwal via schedule (cron job), sinkronisasi data berkala, pembaruan indeks pencarian harian, atau pembuatan rilis malam hari. Dengan memakai label -lazy, kamu ikut menjaga kesehatan infrastruktur komunitas Codeberg dengan memberi jalan kepada rekan pengembang lain yang sedang menunggu hasil uji interaktif.

Tips Efisiensi Lapangan: Karena jumlah slot kontainer codeberg-medium paling terbatas dan diperebutkan oleh proyek kompilasi besar, antreannya kerap mengular pada jam sibuk. Jika skrip kamu sebenarnya hanya butuh waktu 30 hingga 60 detik dengan konsumsi RAM di bawah 2 GB, menggunakan codeberg-tiny jauh lebih cepat selesai dibandingkan memaksakan diri mengantre di codeberg-medium.

Tiga Jebakan Teknis yang Sering Menyebabkan Workflow Gagal

Sebagai layanan nirlaba berbasis komunitas, Codeberg menerapkan batasan sumber daya yang jauh lebih ketat dibandingkan penyedia komersial seperti GitHub Actions. Memahami bagaimana kuota memori-disk dihitung, ketatnya pemutusan batas waktu, serta pemetaan label sistem operasi akan menghindarkan repositori kamu dari kegagalan mendadak.

🔍 Buka Rincian Teknis: Kuota Gabungan RAM-Disk, Timeout Ketat, dan Jebakan ubuntu-latest

1. Kuota RAM dan Ruang Disk Dihitung Gabungan

Angka 2 GB, 4 GB, dan 8 GB pada spesifikasi runner bukan sekadar kapasitas RAM murni untuk proses aplikasi. Nilai tersebut mencakup total ruang penyimpanan sementara (tmpfs / overlay disk) yang ditulis oleh workflow kamu selama berjalan. Jika kamu memakai codeberg-tiny lalu mengunduh puluhan paket dependensi atau memproses ratusan aset gambar hingga total pemakaian RAM ditambah file sementara menembus 2 GB, kontainer akan langsung dihentikan paksa dengan status Out of Memory (OOM).

2. Pemutusan Paksa Saat Batas Waktu Terlewati

Batas durasi 2 menit (tiny), 5 menit (small), dan 10 menit (medium) bersifat mutlak per pekerjaan (job). Kebijakan ini diterapkan untuk mencegah penyalahgunaan sumber daya komputasi gratis. Apabila proses build melewati batas 2 menit 1 detik di codeberg-tiny, sistem langsung membatalkan proses tanpa toleransi tambahan.

3. Label ubuntu-latest Akan Menggantung Selamanya

Saat menyalin templat berkas YAML dari repositori GitHub, pengembang sering lupa mengganti baris runs-on: ubuntu-latest. Di ekosistem Codeberg, label tersebut tidak dikenali secara baku sehingga job tidak akan pernah mendapatkan kontainer dan terus tertahan pada status Waiting hingga kedaluwarsa, kecuali kamu menautkan self-hosted runner pribadi milikmu sendiri.

Panduan Memilih Runner dan Contoh Konfigurasi Workflow

Strategi terbaik dalam menyusun berkas .forgejo/workflows/ adalah menyesuaikan jenis runner dengan sifat pemicu (event trigger) dan berat beban komputasinya. Kamu bahkan bisa menggabungkan runner reguler dan varian -lazy secara dinamis di dalam satu berkas konfigurasi yang sama.

Berikut contoh penerapan ekspresi kondisional pada parameter runs-on agar workflow otomatis memakai runner reguler saat kamu melakukan git push, namun beralih ke varian -lazy ketika dijalankan oleh jadwal otomatis:

name: Build dan Sinkronisasi Otomatis
on:
  push:
    branches: [ main ]
  schedule:
    - cron: '0 */6 * * *'
jobs:
  deploy-site:
    # Pakai runner reguler saat push interaktif, dan varian lazy saat cron terjadwal
    runs-on: ${{ github.event_name == 'schedule' && 'codeberg-small-lazy' || 'codeberg-small' }}
    steps:
      - name: Checkout Repositori
        uses: actions/checkout@v4
      - name: Jalankan Skrip Build dengan Bun
        run: |
          bun install --frozen-lockfile
          bun run build

Dengan memetakan kebutuhan beban kerja secara proporsional antara ukuran tiny, small, medium, dan memanfaatkan varian -lazy untuk jadwal rutin, alur kerja CI/CD di repositori Codeberg kamu akan berjalan jauh lebih stabil, bebas dari gangguan timeout, sekaligus ramah terhadap ekosistem sumber daya komunitas.