# CI/CD & Deployment Runbook
Dokumen ini menjelaskan pipeline otomatisasi Continuous Integration & Continuous Delivery (CI/CD) serta panduan rollback untuk KeluargaMart Monorepo.
---
## 1. Arsitektur Pipeline CI/CD
Pipeline CI/CD monorepo dikonfigurasi menggunakan **GitHub Actions** dengan dua alur kerja utama:
```mermaid
flowchart TD
subgraph Trigger["Git Event Trigger"]
PR["Pull Request / Push"]
Release["Git Tag v*.*.* / Push to main"]
end
subgraph CI["Workflow: .github/workflows/ci.yml"]
DG["1. Drift Guard
(scripts/check-drift.py)"]
BE["2. Go Backend CI
(test & build binary)"]
FE["3. Frontend & Packages CI
(turbo lint, test, build)"]
end
subgraph CD["Workflow: .github/workflows/deploy-ghcr.yml"]
Matrix["Build Matrix:
- backend
- erp
- pos
- b2b
- nextreport"]
GHCR["Push Images to GHCR
(ghcr.io/keluargamart/*)"]
Deploy["Trigger Webhook / Deploy to VPS"]
end
PR --> CI
DG --> BE
DG --> FE
Release --> CD
Matrix --> GHCR --> Deploy
```
---
## 2. Alur Kerja Continuous Integration (`ci.yml`)
Dijalankan secara otomatis pada setiap **Push ke branch `main`** dan pada setiap **Pull Request**:
### Job 1: `drift-guard` (Penjaga Desinkronisasi Kontrak)
- Memeriksa keselarasan antara `apps/backend/docs/openapi.yaml`, `catalog.go`, `@keluargamart/contracts`, dan `@keluargamart/permissions`.
- Mencegah PR di-merge jika terdapat rute API atau permission yang tidak sinkron.
### Job 2: `backend-ci` (Pengujian Backend Go)
- Menjalankan `go test -v -race ./...` di dalam `apps/backend`.
- Mengompilasi binary `go build -o bin/server ./cmd/server` untuk memvalidasi buildability.
### Job 3: `frontend-ci` (Pengujian Frontend & Packages)
- Menyiapkan environment Node.js 22 & pnpm v12 dengan dependency cache.
- Menjalankan `pnpm turbo run lint` untuk static analysis.
- Menjalankan `pnpm turbo run test` (80 test files, 625+ unit tests).
- Menjalankan `pnpm turbo run build` untuk memverifikasi tidak ada error kompilasi Vite/Nuxt.
---
## 3. Alur Kerja Continuous Delivery (`deploy-ghcr.yml`)
Dijalankan ketika commit masuk ke `main` atau tag rilis (`v*`):
- Menggunakan **Matrix Strategy** untuk membangun 5 container image secara paralel:
- `ghcr.io//km-backend`
- `ghcr.io//km-erp`
- `ghcr.io//km-pos`
- `ghcr.io//km-b2b`
- `ghcr.io//km-nextreport`
- Menggunakan cache Docker layer (`type=gha`) untuk mempercepat build time hingga di bawah 2 menit.
- Tagging otomatis:
- `latest`
- `sha-`
- `v` (jika dipicu oleh git tag).
---
## 4. Prosedur Deployment & Rollback
### Prosedur Deploy Produksi (VPS / Kubernetes)
1. **Pull Image Terbaru**:
```bash
podman compose -f infra/containers/compose.yml pull
```
2. **Jalankan Database Migration**:
```bash
podman exec -it keluargamart-backend /app/server migrate up
```
3. **Restart Layanan dengan Zero-Downtime**:
```bash
podman compose -f infra/containers/compose.yml up -d --remove-orphans
```
### Prosedur Rollback Cepat (Emergency Rollback)
Jika terdeteksi kegagalan kritis di production:
1. **Kembalikan Tag Image Container ke SHA Sebelumnya**:
Ubah tag image pada `compose.yml` atau `.env` server ke commit SHA stabil sebelumnya (misalnya `sha-d0526b1`):
```bash
IMAGE_TAG=sha-d0526b1 podman compose -f infra/containers/compose.yml up -d
```
2. **Rollback Migrasi Database (Jika Diperlukan)**:
```bash
podman exec -it keluargamart-backend /app/server migrate down 1
```
3. **Verifikasi Health Check Endpoint**:
```bash
curl -f http://localhost:8080/api/v1/health
```