Pada pengembangan Laravel, mengotomasi rilis membantu menjaga konsistensi kualitas sekaligus mempercepat cycle delivery. Artikel ini langsung menyajikan cara membuat pipeline GitHub Actions yang berjalan dari linting sampai tagging otomatis sehingga tim tidak perlu menunggu manual release.

Dengan konfigurasi yang tepat, pipeline ini melakukan lint, test, build artefak, dan hanya ke langkah rilis ketika semua tahapan sebelumnya sukses. Tag baru dibuat secara otomatis berdasarkan pola versi, sehingga rilis bisa diulang dengan minimal risiko.

Prinsip dasar pipeline Laravel

Membentuk pipeline harus mengikuti alur lint → test → build → release. Setiap tahap harus terisolasi dan dapat diulang. Gunakan caching composer dan npm untuk mempercepat job, serta artefak build untuk memastikan release berdasarkan artefak yang sama dengan yang diuji.

GitHub Actions cocok karena mendukung job paralel, caching, dan integrasi artefak. Di tahap atas Anda perlu memastikan file .env tidak bocor dengan menyimpan secrets di repository atau organization dan hanya membacanya saat job membutuhkan.

Langkah-langkah setup pipeline

Membuat workflow file

Buat file .github/workflows/release.yml dengan job lint, test, build, dan release. Setiap job harus mengandalkan artefak job sebelumnya jika perlu.

name: Laravel Release Pipeline

on:
  push:
    branches: [main]
  workflow_dispatch:

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup PHP
        uses: shivammathur/setup-php@v3
        with:
          php-version: '8.2'
      - name: Install dependencies
        run: |
          composer install --prefer-dist --no-interaction --no-progress
      - name: Run lint
        run: php artisan lint

  test:
    needs: lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup PHP
        uses: shivammathur/setup-php@v3
        with:
          php-version: '8.2'
      - name: Restore composer cache
        uses: actions/cache@v4
        with:
          path: vendor
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
      - name: Install dependencies
        run: composer install --prefer-dist --no-interaction --no-progress
      - name: Run tests
        env:
          DB_CONNECTION: sqlite
        run: php artisan test --parallel

  build:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
      - name: Install frontend
        run: npm install
      - name: Build assets
        run: npm run production
      - name: Upload artefak
        uses: actions/upload-artifact@v3
        with:
          name: laravel-build
          path: |
            vendor
            public/build
            routes

Dengan pendekatan ini Anda memastikan lint dan test fase selesai sebelum build dijalankan. Gunakan actions/cache untuk composer dan npm agar job lebih cepat.

Menentukan variabel lingkungan dan rahasia

Jangan menyimpan kredensial langsung di Git. Simpan API keys, database URL, dan token deploy di GitHub Secrets. Pada job release, panggil variabel seperti ${{ secrets.DEPLOY_KEY }} dalam langkah deploy.

Memisahkan secrets per environment (staging vs production) mencegah kecelakaan rilis. Gunakan pattern workflow dispatch dengan input environment agar bisa memilih target rilis manual jika dibutuhkan.

Tagging dan release otomatis

Setelah build selesai, job release harus menghasilkan tag baru dan membuat release GitHub. Rancang job yang hanya berjalan saat branch utama menerima push. Tag bisa generik seperti v1.2.3 berdasarkan script kecil yang membaca versi dari composer.json atau file VERSION.

  release:
    needs: build
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v4
      - name: Dapatkan versi
        id: version
        run: |
          VERSION=$(php -r "echo json_decode(file_get_contents('composer.json'), true)['version'];")
          echo "::set-output name=tag::$VERSION"
      - name: Buat tag dan release
        uses: softprops/action-gh-release@v1
        with:
          tag_name: ${{ steps.version.outputs.tag }}
          files: public/build
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Script ini memastikan tag konsisten dengan versi package. Softprops action membantu membuat release GitHub sekaligus mengupload artifacts yang sudah dibangun.

Tambahkan langkah rollback minimal dengan menyertakan job manual atau deployment gate. Misalnya push ke branch rollback bisa memicu action yang menggunakan tag release sebelumnya untuk deploy.

Monitoring, debugging, dan developer experience

Untuk menjaga DX, aktifkan notifikasi pada channel tim (Slack, Microsoft Teams) jika job gagal. Gunakan artefak log (actions/upload-artifact) untuk menyimpan output debug.

Tips debugging umum: periksa cache key saat dependency tidak terpasang, atau gunakan php -v dan composer show dalam langkah lint untuk memastikan environment benar. Buat job dry run dengan workflow dispatch agar engineer bisa memeriksa pipeline tanpa commit baru.

Dengan pipeline yang tercatat, tim bisa mengulang rilis hanya dengan push branch utama atau memicu workflow dispatch. Dokumentasikan langkah untuk rollback agar setiap anggota tim bisa mengakses solusi ketika rilis mengalami masalah.