Files
desa-darmasaba/.claude/commands/deploy-stg.md

4.2 KiB

deploy-stg

Deploy ke staging environment secara penuh: version bump, cek migrasi, commit, push, trigger GitHub workflow (publish + re-pull), dan verifikasi versi.

Repo GitHub: bipproductbali/desa-darmasaba
Branch stg: stg
STG URL: https://desa-darmasaba-stg.wibudev.com


Alur Eksekusi

Langkah 0 — Cek /api/version

Sebelum apapun, pastikan endpoint /api/version sudah ada:

grep -n '"/version"' src/app/api/\[\[...slugs\]\]/route.ts

Jika belum ada, tambahkan langsung ke main API group (referensi dari package.json via fs.readFile).


Langkah 1 — Version Bump

Baca versi saat ini dari package.json, bump patch version (+1), lalu tulis ulang:

# Baca versi saat ini
node -e "const p=require('./package.json'); const [maj,min,pat]=p.version.split('.').map(Number); console.log(maj+'.'+min+'.'+(pat+1))"

Update package.json dengan versi baru. Simpan versi baru sebagai $NEW_VERSION.


Langkah 2 — Cek Prisma Migration

bunx prisma migrate status
  • Jika output mengandung kata pending atau drift → buat migrasi baru:
    bunx prisma migrate dev --name bump-stg-<new_version>
    
  • Jika sudah up-to-date → lanjut ke langkah berikutnya.

Langkah 3 — Build Check

bun run build

Jika build gagal, stop dan perbaiki error dulu sebelum melanjutkan deploy.


Langkah 4 — Commit

Stage semua perubahan dan commit:

git add package.json
git add prisma/migrations/ # jika ada migrasi baru
git commit -m "chore: bump version to $NEW_VERSION for stg deploy"

Langkah 5 — Push ke origin/stg

git push origin HEAD:stg

Tunggu push selesai sebelum trigger workflow.


Langkah 6 — Trigger publish.yml

Input 1: stack_env = stg
Input 2: tag = versi dari package.json (contoh: 0.1.25)

gh workflow run publish.yml \
  --repo bipprojectbali/desa-darmasaba \
  --ref stg \
  -f stack_env=stg \
  -f tag=$NEW_VERSION

Tunggu 5 detik lalu dapatkan run ID:

sleep 5
RUN_ID=$(gh run list \
  --workflow=publish.yml \
  --repo bipprojectbali/desa-darmasaba \
  --limit 1 \
  --json databaseId \
  -q '.[0].databaseId')

Monitor sampai selesai:

gh run watch $RUN_ID --repo bipprojectbali/desa-darmasaba

Jika publish gagalstop, jangan lanjut ke re-pull.


Langkah 7 — Trigger re-pull.yml

Setelah publish berhasil, trigger re-pull:

Input 1: stack_env = stg
Input 2: stack_name = desa-darmasaba → stack yang di-deploy: desa-darmasaba-stg

gh workflow run re-pull.yml \
  --repo bipprojectbali/desa-darmasaba \
  --ref main \
  -f stack_name=desa-darmasaba \
  -f stack_env=stg

Tunggu 5 detik lalu monitor:

sleep 5
REPULL_ID=$(gh run list \
  --workflow=re-pull.yml \
  --repo bipprojectbali/desa-darmasaba \
  --limit 1 \
  --json databaseId \
  -q '.[0].databaseId')
gh run watch $REPULL_ID --repo bipprojectbali/desa-darmasaba

Langkah 8 — Verifikasi Versi

Bandingkan versi di stg dengan versi lokal:

# Versi lokal
LOCAL_VER=$(node -e "console.log(require('./package.json').version)")

# Versi di STG (tunggu container siap ~30 detik)
sleep 30
STG_VER=$(curl -s https://desa-darmasaba-stg.wibudev.com/api/version | node -e "process.stdin.resume();let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>console.log(JSON.parse(d).version))")

echo "Local  : $LOCAL_VER"
echo "STG    : $STG_VER"
  • Jika LOCAL_VER == STG_VERDeploy berhasil!
  • Jika berbeda → cek logs container di Portainer atau jalankan gh run view $REPULL_ID --repo bipprojectbali/desa-darmasaba --log

Ringkasan Workflow Inputs

Workflow Input Value
publish.yml stack_env stg
publish.yml tag versi dari package.json (e.g. 0.1.25)
re-pull.yml stack_name desa-darmasaba
re-pull.yml stack_env stg

Catatan

  • Jangan jalankan re-pull.yml jika publish.yml belum selesai/berhasil.
  • Verifikasi versi dilakukan via /api/version (bukan /api/utils/version).
  • Jika gh belum login: gh auth login.
  • Untuk cek status workflow manual: gh run list --repo bipprojectbali/desa-darmasaba.