- ✅
- ✅ - ✅ - ✅
This commit is contained in:
@@ -0,0 +1,245 @@
|
||||
# Release Workflow
|
||||
|
||||
Panduan rilis: commit perubahan, naikan versi, push. Konsisten dengan pola history repo (single feature commit + version commit terpisah).
|
||||
|
||||
---
|
||||
|
||||
## Aturan versi (semver untuk 0.x)
|
||||
|
||||
Project masih `0.x.y` — API belum stabil, semver yang dipakai:
|
||||
|
||||
| Tipe perubahan | Bump | Contoh |
|
||||
|---|---|---|
|
||||
| **MAJOR** `0.x.y → 1.0.0` | hanya saat siap rilis publik / API stabil | nanti |
|
||||
| **MINOR** `0.11.0 → 0.12.0` | fitur baru, breaking change, schema/migration baru, removal API | midtrans-only flow, structured itinerary |
|
||||
| **PATCH** `0.10.2 → 0.10.3` | bugfix, dependency upgrade, copy/UI tweaks tanpa schema | upgrade lib vulnerability, fix hydration |
|
||||
|
||||
**Aturan praktis:** kalau perlu jalankan `prisma migrate deploy` setelah pull → minor. Kalau cuma `git pull && pm2 restart` → patch.
|
||||
|
||||
---
|
||||
|
||||
## Pre-flight check (wajib sebelum commit)
|
||||
|
||||
```bash
|
||||
# 1. Type check (filter cache stale Next.js)
|
||||
npx tsc --noEmit 2>&1 | grep -v "\.next"
|
||||
|
||||
# 2. Lint
|
||||
npm run lint
|
||||
|
||||
# 3. (Opsional) test seed kalau ubah schema/seed
|
||||
npm run seed
|
||||
```
|
||||
|
||||
Kalau ada error di TS atau ESLint, **jangan commit**. Fix dulu.
|
||||
|
||||
---
|
||||
|
||||
## Standard flow (rekomendasi)
|
||||
|
||||
Pola dari history repo: **1 commit fitur** + **1 commit versi** terpisah.
|
||||
|
||||
### 1. Verify status
|
||||
|
||||
```bash
|
||||
git status
|
||||
git diff --stat
|
||||
```
|
||||
|
||||
Pastikan tidak ada file sensitif (`.env`, `*.key`, upload KYC, `app/generated/prisma/`) ter-track.
|
||||
|
||||
### 2. Stage perubahan
|
||||
|
||||
Default — semua perubahan logis:
|
||||
|
||||
```bash
|
||||
git add -A
|
||||
```
|
||||
|
||||
Kalau ada file yang sengaja dipisah commit-nya, pakai selective:
|
||||
|
||||
```bash
|
||||
git add path/to/file1 path/to/file2
|
||||
```
|
||||
|
||||
### 3. Commit fitur
|
||||
|
||||
Pakai pesan singkat, lowercase, deskriptif. Pola history:
|
||||
|
||||
- ✅ `midtrans-only payment + reconcile, structured itinerary items, admin roadmap`
|
||||
- ✅ `add payment and integration with midtrans`
|
||||
- ✅ `create public layout and admin and fix escrow and refund`
|
||||
- ✅ `chore: remove generated prisma client from repository`
|
||||
|
||||
Prefix `chore:`, `fix:` boleh dipakai tapi tidak wajib. Yang penting: deskriptif & ringkas.
|
||||
|
||||
```bash
|
||||
git commit -m "deskripsi singkat perubahan utama"
|
||||
```
|
||||
|
||||
### 4. Bump versi
|
||||
|
||||
Edit manual `package.json` di field `"version"`, atau pakai npm:
|
||||
|
||||
```bash
|
||||
# Bump tanpa auto-commit & tag (kita commit manual)
|
||||
npm version 0.12.0 --no-git-tag-version
|
||||
```
|
||||
|
||||
`--no-git-tag-version` penting — repo ini **tidak pakai git tag**, cuma commit dengan pesan = nomor versi.
|
||||
|
||||
### 5. Commit versi (terpisah)
|
||||
|
||||
```bash
|
||||
git add package.json
|
||||
git commit -m "0.12.0"
|
||||
```
|
||||
|
||||
Pesan = nomor versi saja, tanpa prefix/kata lain. Konsisten dengan history (`0.11.0`, `0.10.3`, `0.10.2`, ...).
|
||||
|
||||
### 6. Push
|
||||
|
||||
```bash
|
||||
git push origin main
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Post-deploy actions
|
||||
|
||||
Setelah merge ke main + auto-deploy / `git pull` di server:
|
||||
|
||||
### Wajib kalau ada migration baru
|
||||
|
||||
```bash
|
||||
# Cek dulu migration belum applied
|
||||
npx prisma migrate status
|
||||
|
||||
# Apply
|
||||
npx prisma migrate deploy
|
||||
|
||||
# Restart PM2 supaya Prisma client re-load
|
||||
pm2 restart setrip --update-env
|
||||
```
|
||||
|
||||
### Wajib kalau ubah field di env
|
||||
|
||||
```bash
|
||||
# Edit .env di server, lalu
|
||||
pm2 restart setrip --update-env
|
||||
```
|
||||
|
||||
### Opsional — seed (hanya untuk dev/staging, JANGAN production)
|
||||
|
||||
```bash
|
||||
npm run seed
|
||||
```
|
||||
|
||||
⚠️ **Production**: seed wipe seluruh data. Jangan dijalankan di production.
|
||||
|
||||
---
|
||||
|
||||
## Skenario umum
|
||||
|
||||
### A. Bug fix kecil (patch)
|
||||
|
||||
```bash
|
||||
npx tsc --noEmit 2>&1 | grep -v "\.next" && npm run lint
|
||||
|
||||
git add path/to/fix
|
||||
git commit -m "fix: deskripsi bug"
|
||||
|
||||
npm version patch --no-git-tag-version # 0.11.0 → 0.11.1
|
||||
git add package.json
|
||||
git commit -m "0.11.1"
|
||||
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### B. Fitur baru tanpa schema change (minor)
|
||||
|
||||
Sama dengan A, ganti `patch` jadi `minor`:
|
||||
|
||||
```bash
|
||||
npm version minor --no-git-tag-version # 0.11.0 → 0.12.0
|
||||
```
|
||||
|
||||
### C. Fitur baru DENGAN schema/migration (minor)
|
||||
|
||||
```bash
|
||||
# 1. Buat migration
|
||||
npx prisma migrate dev --name nama_migration
|
||||
|
||||
# 2. Smoke test
|
||||
npm run seed
|
||||
npx tsc --noEmit 2>&1 | grep -v "\.next"
|
||||
|
||||
# 3. Commit fitur + migration sekaligus
|
||||
git add -A
|
||||
git commit -m "deskripsi fitur"
|
||||
|
||||
# 4. Bump versi minor
|
||||
npm version minor --no-git-tag-version
|
||||
git add package.json
|
||||
git commit -m "$(node -p "require('./package.json').version")"
|
||||
|
||||
git push origin main
|
||||
|
||||
# 5. Di production, setelah git pull:
|
||||
npx prisma migrate deploy
|
||||
pm2 restart setrip --update-env
|
||||
```
|
||||
|
||||
### D. Multiple perubahan logis di branch yang sama (split commits)
|
||||
|
||||
Pisahkan jadi commit kecil per topik supaya history bersih:
|
||||
|
||||
```bash
|
||||
# Commit 1: foundation (mis. schema + service)
|
||||
git add prisma/ server/
|
||||
git commit -m "add X service"
|
||||
|
||||
# Commit 2: UI yang konsumsi
|
||||
git add features/ app/
|
||||
git commit -m "wire X to UI"
|
||||
|
||||
# Commit 3: docs
|
||||
git add docs/ *.md
|
||||
git commit -m "docs: X usage guide"
|
||||
|
||||
# Commit 4: version bump
|
||||
npm version minor --no-git-tag-version
|
||||
git add package.json
|
||||
git commit -m "$(node -p "require('./package.json').version")"
|
||||
|
||||
git push origin main
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Kesalahan umum & cara recovery
|
||||
|
||||
| Kesalahan | Recovery |
|
||||
|---|---|
|
||||
| Commit pesan typo, **belum push** | `git commit --amend -m "pesan baru"` |
|
||||
| Commit pesan typo, **sudah push** | jangan amend (force-push hilangin history kolaborator). Bikin commit baru `git commit --allow-empty -m "fix: pesan sebelumnya typo"` atau biarkan |
|
||||
| Lupa bump versi sebelum push | bikin commit versi baru di atasnya — bukan amend |
|
||||
| Bump versi salah angka (mis. 0.12.0 padahal harusnya patch 0.11.1) | revisi `package.json`, bikin commit baru `chore: revert version to 0.11.1` |
|
||||
| Commit termasuk file sensitif (`.env`, upload) | jangan push. `git reset --soft HEAD~1`, un-stage file sensitif, tambah ke `.gitignore`, commit ulang |
|
||||
| Sudah push dengan file sensitif | rotate secret yang ke-leak, lalu pakai `git filter-repo` atau hubungi maintainer git history |
|
||||
|
||||
---
|
||||
|
||||
## Cheatsheet (one-liner)
|
||||
|
||||
Untuk update biasa (fitur kecil tanpa schema):
|
||||
|
||||
```bash
|
||||
npx tsc --noEmit 2>&1 | grep -v "\.next" && npm run lint && \
|
||||
git add -A && git commit -m "deskripsi" && \
|
||||
npm version minor --no-git-tag-version && \
|
||||
git add package.json && git commit -m "$(node -p "require('./package.json').version")" && \
|
||||
git push origin main
|
||||
```
|
||||
|
||||
Ganti `minor` → `patch` untuk bug fix. Jangan jalankan kalau ada step yang minta keputusan manual (mis. conflict, migration baru).
|
||||
Reference in New Issue
Block a user