Logo

~/saidqb cat wiki/stack/git/project-app-build-dan-doc.md

MDproject-app-build-dan-doc.md

commit by saidqb

Struktur 3 — Ada doc/, project/, dan project/ Perlu Build

Sama seperti Struktur 2 (ada doc/ dan project/), tapi project/ di sini isinya source code yang belum bisa langsung dijalankan — perlu proses build dulu (npm run build, vite build, dsb), hasilnya masuk ke sub-folder build/ di dalam project/.

repo/
├── doc/                   <- dokumentasi internal — TIDAK di-deploy
└── project/
    ├── src/                <- source mentah — TIDAK langsung di-deploy
    ├── package.json
    └── build/              <- HASIL build — INI SAJA yang di-deploy

Yang boleh nyampe ke production cuma project/build/ — bukan doc/, dan bukan juga project/src/ (source mentah tidak perlu, bahkan sebaiknya tidak, ikut ke server).

Urutan Deploy

  1. Build dulu di local/CI
cd project
npm install
npm run build     # hasilnya masuk ke project/build/
cd ..
  1. Commit hasil build (folder build/ biasanya di-.gitignore pas development — khusus untuk alur deploy ini, commit sementara supaya git subtree punya sesuatu untuk didorong)
git add -f project/build
git commit -m "build: update production build"
  1. Push subtree khusus folder project/build (bukan project saja) ke branch production
git subtree push --prefix=project/build origin production
  1. Di server, tarik branch production — isinya sudah rata folder build itu sendiri sebagai root, siap disajikan langsung oleh web server (Nginx/Apache) tanpa proses tambahan
ssh user@server "cd /var/www/app && git pull origin production"

Kenapa build-nya di-commit dulu (bukan build langsung di server)

git subtree cuma bisa mendorong apa yang sudah ada di histori git, bukan menjalankan perintah. Jadi hasil build harus di-commit dulu di local/CI sebelum git subtree push bisa mengambilnya. Alternatifnya, proses build+commit+push ini biasanya diotomatisasi lewat CI/CD (GitHub Actions dsb) supaya tidak perlu dikerjakan manual tiap deploy.

Kapan cocok pakai pola ini

  • Frontend (React/Vue/Vite) yang hasil build-nya statis (HTML/CSS/JS) dan itu saja yang perlu ada di server.
  • Ingin server production tidak menyimpan node_modules, source mentah, atau tool build sama sekali — cuma hasil jadinya.