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.
Komentar
0 komentar
Masuk ke akun kamu untuk ikut berkomentar.
Belum ada komentar
Jadilah yang pertama ikut berdiskusi!