Langkah 6 β Deploy ke Production
Prinsip pembagian peran di production: agent menyiapkan segalanya, manusia menekan tombol untuk yang berisiko. Seiring kepercayaan (dan guardrail) tumbuh, kategori "berisiko" menyempit β tapi tidak pernah kosong.
Merge ke main = deploy. Tanpa langkah manual, tanpa "deploy day". Karena setiap PR sudah melewati tiga lapis review (Langkah 5), merge adalah keputusan rilis.
name: deploy
on:
push:
branches: [main]
concurrency: production # tidak pernah dua deploy berbarengan
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm run build
- run: <PERINTAH_DEPLOY_PLATFORMMU>
# contoh: flyctl deploy --remote-only
# vercel deploy --prod --token=$VERCEL_TOKEN
# ssh deploy@server 'cd app && ./release.sh'
Pilih platform yang punya rollback bawaan (Fly.io, Vercel, Railway, Cloud Run, Coolify) β jangan rakit sendiri kalau tidak harus.
:::warning Kredensial deploy milik CI, bukan milik agent Secret deploy (token cloud, SSH key production) hidup di CI secrets. Agent di laptopmu/VPS tidak pernah memegangnya β jalur agent ke production hanya satu: lewat PR yang di-merge. Ini satu-satunya pemisahan yang membuat seluruh pola ini aman. :::
Checkpoint: merge PR sepele (mis. copy) β production ter-update otomatis dalam hitungan menit, tanpa satu perintah manual pun.
Sebelum mempercepat laju rilis, pastikan mundurnya lebih cepat lagi:
# contoh per platform
flyctl releases rollback # Fly.io
vercel rollback # Vercel
gcloud run services update-traffic <SVC> --to-revisions=<REV>=100 # Cloud Run
Latih sekali sungguhan (deploy perubahan kecil β rollback β verifikasi). Catat perintahnya di AGENTS.md dan di pesan tersemat (pinned) chat Telegram-mu β saat insiden, kamu tidak mau mencari dokumentasi.
Checkpoint: kamu (atau agent, atas perintahmu dari Telegram) bisa rollback production dalam waktu di bawah 2 menit, terukur.
Kode baru boleh sampai production dalam keadaan mati, lalu dinyalakan bertahap. Untuk operasi solo tidak perlu platform mahal β env var atau tabel config sudah cukup:
// pola minimal yang cukup untuk 90% kasus
export const flags = {
exportCsv: process.env.FLAG_EXPORT_CSV === '1',
};
Aturan untuk agent (masukkan ke AGENTS.md): fitur baru yang menyentuh alur penting dirilis di belakang flag, default mati. Menyalakan flag = keputusan manusia via Telegram, bukan bagian dari task agent.
Checkpoint: minimal satu fitur nyata dirilis mati β dinyalakan dari chat β (opsional) dimatikan lagi, tanpa deploy ulang.
Migrasi adalah perubahan paling tidak-reversible di sistemmu. Aturan kerasnya:
- Selalu backward-compatible per langkah β pola expand β migrate β contract: tambah kolom baru (deploy N), tulis-ganda dan backfill (N), baru hapus kolom lama (N+1, setelah yakin).
- Migrasi destruktif (DROP, pengubahan tipe, DELETE massal) tidak pernah auto-deploy β agent boleh menyiapkan file migrasinya, kamu yang menjalankan setelah membaca dan mem-backup:
pg_dump "$DATABASE_URL" | gzip > backup-$(date +%F-%H%M).sql.gz
npm run migrate:up
- Backup otomatis harian + sekali pernah dicoba restore. Backup yang belum pernah di-restore adalah harapan, bukan backup.
Checkpoint: aturan 1β2 tertulis di AGENTS.md; ada backup otomatis; kamu pernah me-restore backup ke database kosong dan aplikasinya jalan.
Tulis daftar pendek "yang selalu lewat manusia" β sisanya bebas mengalir otomatis. Contoh awal yang sehat:
## Gerbang manusia (agent menyiapkan, manusia mengeksekusi)
- Migrasi DB destruktif
- Menyalakan feature flag di production
- Perubahan pada auth, billing, atau penghapusan data user
- Deploy saat sedang ada insiden aktif
Daftar ini hidup: tiap retro mingguan (Langkah 5), pindahkan item yang sudah terbukti aman ke jalur otomatis, tambahkan kategori baru kalau ada insiden.
Checkpoint: daftar gerbang manusia ada di AGENTS.md dan kamu bisa menyebutkan alasannya untuk tiap item.
Selanjutnya: Langkah 7 β Monitoring & On-call via Chat