Branch dan workflow
| Branch | Workflow | Runner | Target |
|---|---|---|---|
v3 | deploy_production.yml | self-hosted production | Produksi |
staging | deploy_staging.yml | self-hosted staging | Staging |
toko_digital | deploy_toko_digital.yml | self-hosted toko_digital | Toko Digital |
Branch produksi adalah v3, bukan main. main ada di repo tapi tidak digunakan untuk deploy.
Ada 25+ branch aktif
Banyak bernama personal (adi, ardi_temp, quickstart-bimbo). Konfirmasi ke user branch mana yang jadi target sebelum operasi git.
Apa yang dilakukan workflow
Setiap deploy otomatis menjalankan langkah berikut di self-hosted runner:
# 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:cache
# Pull code (DESTRUCTIVE — perubahan lokal di server hilang)
git fetch --all
git reset --hard origin/v3
# Install dependencies (tanpa dev)
composer install --no-dev --optimize-autoloader --ignore-platform-req=ext-mongodb
npm ci
# Build frontend
npm run build
# Fix permissions
sudo /usr/local/bin/chmod-dazo.shAturan operasi git
- Jangan commit, push, atau merge tanpa diminta eksplisit
- Pisahkan commit pembenahan dari commit fitur
- Jangan gabungkan refactor dengan perubahan fungsional
- Sebelum push ke
v3, pastikannpm run builddanphp artisan testlolos lokal
Setup server — yang tidak terlihat dari repo
Dua blocker yang membuat project gagal jalan di server baru:
resources/js/global.js— gitignored. Harus dibuat manual di server, denganenv = 'production'. Lihat Environment..env— wajibDB_CONNECTION=mongodbdan seluruh kredensial service..env.exampletertinggal 87 variabel.
Scheduler dan cron
app/Console/Kernel.php mendaftarkan 3 schedule:
$schedule->command('app:downgrade')->everyMinute();
$schedule->command('app:addon-expired')->everyMinute();
$schedule->command('notif:subscription')->daily();Dua command pertama berjalan setiap menit — pastikan keduanya idempoten dan cepat.
Server butuh cron entry:
* * * * * cd /path/to/dazoapp && php artisan schedule:run >> /dev/null 2>&1Queue — perlu perhatian
.env saat ini QUEUE_CONNECTION=sync. Artinya:
PaymentTimerjob berjalan blocking dalam request- 6 Mailable
ShouldQueue(OTP, notifikasi) juga blocking
Jika ada service worker eksternal yang seharusnya memproses job, konfigurasi ini perlu diperiksa. Worker mungkin punya sumber pekerjaan sendiri (misalnya polling MongoDB) — konfirmasi ke tim.
Perintah artisan custom yang relevan untuk deploy
| Command | Fungsi |
|---|---|
app:downgrade | Turunkan paket langganan kedaluwarsa |
app:addon-expired | Nonaktifkan add-on kedaluwarsa |
wallet:sync-orders {--store_id=} | Sinkronkan pembayaran order ke saldo wallet |
order:send-digital-link {order_id} | Kirim manual link produk digital |
Setelah deploy
Verifikasi cepat:
- Buka
app.dazo.id— pastikan halaman login muncul - Cek
storage/logs/laravel.log— cari error 500 atau exception - Test satu endpoint API (mis.
GET /api/testjwtdengan token) - Cek scheduler:
php artisan schedule:list - Pastikan tidak ada
console.log/dd()yang lolos — cari di diff
Checklist sebelum push ke v3
-
npm run buildlolos lokal -
php artisan testlolos (walau minim, tetap jalankan) - Tidak ada
console.log/dd()di diff - Tidak ada file debug/backup/mockup di root
- Tidak ada perubahan di
config/jwt.php,JWT_SECRET, atau payload token tanpa koordinasi lintas repo - Tidak ada perubahan URL service tanpa koordinasi lintas repo
- Commit message jelas, terpisah antara fitur dan pembenahan