# Prosedur Rollback Rilis (Rollback Runbook) Dokumen ini mendokumentasikan prosedur pembatalan rilis (*rollback*) jika terdeteksi kegagalan kritis atau regresi setelah deployment ke produksi. --- ## 1. Prinsip Utama Rollback 1. **Kecepatan Tindakan**: Rilis baru harus dapat dibatalkan dalam waktu kurang dari 3 menit. 2. **Immutable Artifacts**: Setiap commit di `main` menghasilkan image GHCR bertag SHA unik (`ghcr.io/tarulab/km-:`). Jangan pernah menimpa commit SHA lama. 3. **Pemisahan Boundary**: Rollback frontend (ERP/POS/B2B) dapat dilakukan secara independen tanpa menyentuh backend Go jika tidak ada perubahan skema database. --- ## 2. Skenario A: Rollback Frontend (ERP / POS / B2B) Jika bug hanya terdapat pada UI frontend tanpa perubahan API: 1. **Identifikasi Commit SHA Stabil Sebelumnya**: Misal commit stabil sebelumnya adalah `d0526b1`. 2. **Perbarui Versi Image pada VPS**: Jalankan command dengan menentukan `IMAGE_TAG`: ```bash IMAGE_TAG=d0526b1 podman compose -f infra/containers/compose.prod.yml up -d erp pos b2b ``` 3. **Verifikasi Browser**: Buka `https://erp-km.trl.my.id` atau `https://pos-km.trl.my.id` dengan hard refresh (`Ctrl + Shift + R`) untuk memastikan bundle lama termuat. --- ## 3. Skenario B: Rollback Backend & Database Jika terjadi kegagalan pada backend Go atau data integrity: 1. **Hentikan Container Backend**: ```bash podman stop keluargamart-backend ``` 2. **Rollback Migrasi Skema Database (Jika Ada)**: Jika rilis yang gagal menyertakan migrasi database: ```bash # Jalankan perintah migrasi down mundur 1 langkah podman run --rm --network keluargamart \ -e DATABASE_URL="postgres://erp:password@postgres:5432/erp?sslmode=disable" \ ghcr.io/tarulab/km-backend: migrate down 1 ``` 3. **Nyalakan Backend dengan Image Versi Stabil**: ```bash IMAGE_TAG= podman compose -f infra/containers/compose.prod.yml up -d backend ``` 4. **Validasi Health Endpoint**: ```bash curl -f http://127.0.0.1:3004/ready # Output harus: {"status":"ok","db":"ok","redis":"ok"} ``` --- ## 4. Post-Rollback Checklist - [ ] Lakukan investigasi akar masalah (*post-mortem*) pada log container yang gagal. - [ ] Buat issue bug tracking di GitHub (`fix: ...`). - [ ] Jangan me-redeploy ke produksi sebelum issue diperbaiki dan seluruh test di CI hijau.