~/saidqb cat wiki/stack/git/project-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
- Build dulu di local/CI
cd project
npm install
npm run build # hasilnya masuk ke project/build/
cd ..- Commit hasil build (folder
build/biasanya di-.gitignorepas development — khusus untuk alur deploy ini, commit sementara supayagit subtreepunya sesuatu untuk didorong)
git add -f project/build
git commit -m "build: update production build"- Push subtree khusus folder
project/build(bukanprojectsaja) ke branch production
git subtree push --prefix=project/build origin production- 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"Kalau Branch production Sudah Ada Duluan (Bukan Dibuat dari subtree push)
Kalau branch production sudah pernah ada isinya sendiri (bukan hasil git subtree push pertama kali dari folder project/build), pakai git subtree add sekali di awal untuk menggabungkan branch itu ke folder project/build di branch development:
git subtree add --prefix=project/build origin production --squashCommand ini dipakai sekali saja — saat pertama kali menghubungkan folder project/build ke branch production yang sudah punya histori sendiri. Sesudah itu, sinkronisasi berikutnya pakai git subtree push seperti biasa di atas. Kalau langsung push tanpa add dulu padahal folder project/build belum pernah terhubung ke branch itu, git akan menolak karena tidak ada histori subtree yang bisa disambung.
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.