.github/workflows/:
Repo GitHub: trisnalesmana/aimentor
Tab Actions: github.com/trisnalesmana/aimentor/actions
Status saat ini
Ringkasan kondisi pipeline setelah workflow di-push kemain:
CI sudah jalan. CD belum siap dipakai sampai environment
production dan secrets di-setup di GitHub.Job CI — mana yang blocking?
Cara cek sendiri
Lewat browser
- Buka Actions
- Klik workflow CI — run hijau = pipeline utama lulus
- Klik workflow Deploy Cloudflare — kalau kosong, belum pernah dijalankan
- Settings → Environments — pastikan ada
production - Settings → Secrets and variables → Actions — cek secret sudah terisi
Lewat GitHub CLI
Checklist setup CD
Centang ini sebelum menjalankan Deploy Cloudflare pertama kali:1
Buat environment production
GitHub → Settings → Environments → New environment → nama:
Opsional: tambah required reviewers supaya deploy butuh approval.
productionOpsional: tambah required reviewers supaya deploy butuh approval.
2
Isi DOTENV_SHARED
Salin seluruh isi file
Format: satu
.env shared lokal (bukan path file).Format: satu
KEY=value per baris, multiline secret di GitHub.3
Isi DATABASE_URL
URL Neon production untuk migrate saat deploy, misalnya:
postgresql://...@ep-xxx.neon.tech/neondb?sslmode=require4
Isi token Cloudflare
CLOUDFLARE_API_TOKEN— token dengan akses Workers (Wrangler)CLOUDFLARE_ACCOUNT_ID— dari dashboard Cloudflare
5
(Opsional) WORKER_SECRETS_B64
Kalau opsi Push worker secrets aktif saat deploy:Salin output ke secret
WORKER_SECRETS_B64.6
Jalankan deploy manual
Actions → Deploy Cloudflare → Run workflow → pilih branch
main.CI (ci.yml)
Setiap push atau PR ke main menjalankan job paralel:
lint
lint
bun run lint:ci — Biome pada scripts/, thub, .github/ (blocking).bun run lint (seluruh monorepo) belum di-gate di CI karena masih ada lint debt legacy.doctor
doctor
./thub doctor --ci — cek struktur env, script, dan dependency (blocking).docs
docs
mint validate + mint broken-links di apps/docs (blocking).test-api
test-api
bun run test (vitest) di apps/api dengan TZ=Asia/Jakarta (blocking).test-web
test-web
bun run test di apps/web (blocking).Simulasi lokal
CD (deploy-cloudflare.yml)
Deploy hanya manual — tidak auto-deploy saat merge ke main.
1
Buat environment `production`
Di GitHub repo → Settings → Environments → tambah
Opsional: aktifkan required reviewers untuk gate deploy.
production.Opsional: aktifkan required reviewers untuk gate deploy.
2
Isi repository secrets
* Diperlukan jika opsi Push worker secrets diaktifkan saat deploy.
3
Generate WORKER_SECRETS_B64
WORKER_SECRETS_B64.4
Jalankan workflow
GitHub → Actions → Deploy Cloudflare → Run workflow.Input opsional:
Apa yang dijalankan di CI deploy
scripts/ci-materialize-env.sh— tulis.envdariDOTENV_SHARED, optionalDATABASE_URL→.env.production.local, lalu./thub env merge --prodscripts/ci-push-worker-secrets.sh— decodeWORKER_SECRETS_B64→ push viasync-worker-secrets.shscripts/deploy-prod.sh— migrate, build, deploy Workers./thub smoke prod— health check production
Perbandingan dengan deploy lokal
Deploy lokal tetap valid untuk hotfix cepat; CI/CD untuk audit trail dan env terpusat di GitHub.
Troubleshooting CI
Semua job gagal di bun install --frozen-lockfile
Semua job gagal di bun install --frozen-lockfile
Pesan:
lockfile had changes, but lockfile is frozen.Penyebab: package.json berubah (misalnya workspace apps/docs) tapi bun.lock belum di-commit.Perbaikan lokal:doctor gagal di CI tapi lokal OK
doctor gagal di CI tapi lokal OK
Pastikan
bun install --frozen-lockfile sukses dan tidak ada file .env yang di-commit. Doctor CI tidak butuh secret nyata — hanya struktur repo.API tests gagal di CI
API tests gagal di CI
Saat ini tidak menggagalkan workflow (
continue-on-error). Banyak test API butuh env lengkap atau masih assertion lama. Job ini informatif dulu — perbaikan test API bisa dilakukan bertahap.migrate gagal
migrate gagal
Cek
DATABASE_URL di environment production. URL harus reachable dari runner GitHub (Neon dengan SSL).smoke prod gagal setelah deploy
smoke prod gagal setelah deploy
Tunggu propagasi Cloudflare (~1 menit), lalu re-run hanya smoke:
./thub smoke prod lokal dengan env production, atau re-run workflow dengan skip migrate/build.