Setiap deploy berjalan di self-hosted runner, bukan ubuntu-latest. Artinya mesin runner adalah server tujuan itu sendiri — tidak ada transfer artifact, build langsung di server produksi.
Tiga workflow
Semua workflow ada di .github/workflows/ dan dipicu oleh push ke branch masing-masing:
| Workflow | Branch trigger | Runner label | Direktori deploy |
|---|---|---|---|
deploy_production.yml | v3 | self-hosted, production | ${{ vars.PROJECT_DIR }} (repo variable) |
deploy_staging.yml | staging | self-hosted, staging | /home/dazo-dev-app/htdocs/app.dazo.dev.cicd |
deploy_toko_digital.yml | toko_digital | self-hosted, toko_digital | /home/deployer/app/dazo.toko-digital |
Trigger
on:
push:
branches:
- v3 # atau staging, atau toko_digitalTidak ada workflow_dispatch, tidak ada pull_request trigger, tidak ada approval gate. Satu-satunya cara memicu deploy adalah push ke branch tersebut.
Konsekuensinya:
- Force-push ke
v3langsung mengenai produksi tanpa peringatan - Tidak ada dry-run — deploy langsung membangun di server
- Tidak ada rollback otomatis — untuk rollback,
git revertlalu push lagi
Langkah deploy
Ketiga workflow hampir identik. Urutan langkahnya:
1. Checkout code
- name: Checkout code
uses: actions/checkout@v3Mengambil kode commit yang memicu workflow.
2. Clear cache
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan optimize:clear
php artisan config:cache
php artisan view:cacheBersihkan seluruh cache lalu bangun ulang config dan view. Cache dibangun ulang supaya konfigurasi baru langsung efektif.
3. Pull code (destruktif)
git fetch --all
git reset --hard origin/<branch>4. Install dependencies
composer install --no-dev --optimize-autoloader --ignore-platform-req=ext-mongodb
npm ci--no-dev— tidak memasang dependensi development--optimize-autoloader— optimalkan autoloader untuk produksi--ignore-platform-req=ext-mongodb— lewati pengecekan ekstensi MongoDB di mesin runnernpm ci— pasang dependensi frontend daripackage-lock.json(reproducible)
5. Build frontend
npm run buildStaging dan toko_digital menambahkan flag memory:
NODE_OPTIONS="--max-old-space-size=4096" npm run buildProduksi tidak memakai flag ini. Kemungkinan karena runner produksi punya memory lebih besar atau build sudah stabil. Jika build produksi gagal dengan error JavaScript heap out of memory, tambahkan flag yang sama.
6. Fix permissions (produksi & staging saja)
sudo /usr/local/bin/chmod-dazo.shScript eksternal di luar repo memperbaiki permission file. Workflow toko_digital tidak menjalankan langkah ini.
Self-hosted runner
Runner bukan GitHub-hosted VM, melainkan mesin fisik/server yang didaftarkan ke GitHub Actions. Keuntungannya: deploy langsung di mesin tujuan, tidak perlu transfer artifact via SSH.
Kelemahannya:
- Jika runner sedang down, workflow menunggu sampai runner online (tidak ada timeout eksplisit)
- Tidak ada isolated environment — runner memakai konfigurasi server yang sama
sudotersedia di runner, artinya workflow punya akses root ke server
Yang tidak ada
| Hal | Status |
|---|---|
| Test otomatis sebelum deploy | Tidak ada |
| Build verification lokal sebelum push | Tidak ada (tanggung jawab developer) |
| Lint / code style check | Tidak ada |
| Staging environment sebagai gate wajib | Tidak ada — bisa push langsung ke v3 |
| Approval gate | Tidak ada |
| Rollback otomatis | Tidak ada |
| Notifikasi setelah deploy | Tidak ada (cek manual di tab Actions) |
| Cache dependency antar run | Tidak ada |
Monitoring deploy
- Buka
https://github.com/dazodevops/dazoapp/actions - Cari run terbaru untuk workflow yang sesuai
- Status hijau ≠ aplikasi sehat — hanya berarti langkah build selesai
- Setelah deploy, verifikasi manual:
- Buka
app.dazo.id— pastikan halaman login muncul - Cek
storage/logs/laravel.log— cari error 500 - Test satu endpoint API
- Cek
php artisan schedule:list
- Buka
Risiko dan mitigasi
Mitigasi yang dianjurkan (sebelum push ke v3):
npm run buildlolos lokalphp artisan testlolos (walau minim)- Tidak ada
console.log/dd()/var_dump()di diff - Tidak ada perubahan di
config/jwt.phpatauJWT_SECRETtanpa koordinasi lintas repo - Tidak ada perubahan URL service tanpa koordinasi lintas repo
Lihat juga
- Deployment — branch, aturan operasi git, scheduler, queue
- Local Development — verifikasi lokal sebelum push
- Environment —
.envdanglobal.jsyang tidak terlihat dari repo