~/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"
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.