Logo

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

MDproject-app-build-dan-doc

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
bash
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)
bash
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
bash
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
bash
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:

bash
git subtree add --prefix=project/build origin production --squash

Command 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.