Pendahuluan

Untuk memastikan rilis bisa dilakukan secara cepat namun tetap aman, workflow GitHub Actions perlu menerapkan validasi dependency, build dan unit test, lalu smoke test ke staging sebelum release. Artikel ini langsung menunjukkan bagaimana merangkai workflow yang membarengi setiap tahap itu, menangkap kegagalan, serta menyediakan opsi rollback dan gate manual.

Anda akan melihat contoh YAML, strategi caching, cara memicu release otomatis dan manual, serta mekanisme notifikasi agar tim dev bisa mempercepat rilis tanpa mengorbankan kualitas.

Komponen Workflow Release Otomatis

1. Validasi Dependency

Langkah pertama adalah memastikan dependency tidak mengandung kerentanan atau lisensi yang tidak diizinkan. Untuk proyek JavaScript/PHP, kita bisa menjalankan npm audit/composer audit dan memeriksa lisensi pakai skrip sederhana.

Pada contoh workflow berikut, job dependency-check menjalankan audit dan lisensi. Jika audit gagal, job akan berhenti sehingga release tidak dilanjutkan.

name: Release Otomatis
on:
  workflow_dispatch:
  push:
    tags:
      - 'v*'
jobs:
  dependency-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install dependencies
        run: npm ci
      - name: Audit dependencies
        run: npm audit --audit-level=moderate
      - name: Validasi lisensi
        run: npx license-checker --production --summary

Jika paket audit/lisensi tidak ada, Anda dapat menggantinya dengan alat lain, misalnya npm audit diganti yarn audit sesuai manajer paket.

2. Build dan Unit Test

Job berikutnya harus memastikan build berhasil dan unit test dijalankan. Gunakan caching dependency untuk mempercepat proses:

  build-test:
    needs: dependency-check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: '18'
          cache: 'npm'
      - name: Install dependencies
        run: npm ci
      - name: Build aplikasi
        run: npm run build
      - name: Jalankan unit test
        run: npm test

Penggunaan actions/setup-node dengan cache: 'npm' otomatis menyimpan folder ~/.npm dan node_modules sehingga waktu install menurun drastis.

3. Smoke Test terhadap Staging

Setelah build dan test berhasil, deploy ke staging untuk smoke test. Pastikan smoke test memanggil endpoint penting dan menolak rilis jika respon tidak sesuai.

  smoke-test:
    needs: build-test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy ke staging (simulasi)
        run: ./scripts/deploy-staging.sh
      - name: Smoke test
        run: curl -f https://staging.example.com/health || exit 1

Kegagalan curl otomatis menghentikan workflow dengan exit code 1 sehingga release tidak dilanjutkan.

Mekanisme Deteksi Kegagalan dan Rollback

GitHub Actions menghentikan workflow saat job gagal, tetapi pada lingkungan nyata Anda perlu rollback otomatis. Tambahkan job terpisah:

  rollback:
    needs: smoke-test
    if: failure()
    runs-on: ubuntu-latest
    steps:
      - name: Jalankan rollback ke versi sebelumnya
        run: ./scripts/rollback.sh

Kondisi if: failure() memastikan rollback hanya dijalankan bila salah satu job sebelumnya gagal. Pastikan skrip rollback dapat mempromosikan artefak release sebelumnya atau memanggil ulang skrip deploy versi stabil.

Gate Manual dan Notifikasi

Untuk release yang butuh konfirmasi manusia, tambahkan job dengan workflow_dispatch atau job manual approval menggunakan environment GitHub:

  manual-gate:
    needs: smoke-test
    runs-on: ubuntu-latest
    environment:
      name: production
      url: https://production.example.com
    steps:
      - name: Konfirmasi manual
        run: echo "Tunggu approval dari tim sebelum lanjut"

Lingkungan dengan proteksi menyertakan tombol "Review deployment" di UI GitHub yang memaksa tim melakukan verifikasi sebelum job selanjutnya dijalankan.

Untuk notifikasi, gunakan action seperti actions/github-script atau integrasi Slack/Teams setelah job berhasil atau gagal. Contoh:

  notify:
    needs: [rollback, smoke-test]
    runs-on: ubuntu-latest
    steps:
      - name: Kirim notifikasi
        uses: 8398a7/action-slack@v3
        with:
          status: ${{ job.status }}
          fields: repo,commit

Trigger Release: Otomatis dan Manual

Workflow di atas dipicu dua cara: push tag v* untuk release otomatis, dan workflow_dispatch agar developer bisa menjalankan manual. Dengan push tag, pipeline dijalankan langsung setelah versi baru dibuat.

Untuk manual, buka tab "Actions" di repo, pilih workflow, lalu klik "Run workflow". Ini cocok untuk release eksperimental atau hotfix.

Tips Praktis

  • Strategi caching: gunakan action bawaan (setup-node dengan cache: 'npm' atau actions/cache untuk Composer) dan validasi hash package-lock.json/composer.lock.
  • Debug: sertakan env debug (misalnya DEBUG=1) dalam job yang bermasalah, serta set langkah if: always() untuk tindakan pembersihan/log.
  • Trade-off: smoke test staging menambah durasi, tetapi mencegah rollback mahal di production. Gunakan fitur cancel-in-progress untuk membatalkan run lama.

Kesimpulan

Workflow GitHub Actions yang membentang dari validasi dependency, build/unit test, smoke test, hingga gate manual memungkinkan release otomatis yang tetap aman. Tambahkan rollback otomatis, notifikasi, dan caching agar proses terukur dan dapat diandalkan.

Dengan pendekatan ini, tim dev dapat mempercepat rilis, tetapi tetap memastikan dependensi bebas bahaya, ujicoba sudah lengkap, dan staging sudah terverifikasi sebelum versi baru diluncurkan.