Pengertian
GitHub Actions adalah layanan CI/CD bawaan GitHub. Setiap kali Anda push atau membuka pull request, GitHub dapat menjalankan alur kerja (workflow) otomatis: memasang dependensi, menjalankan skrip pemeriksaan, membangun situs, hingga mengunggah hasil.
Untuk proyek website statis seperti ini, kegunaan utamanya adalah menjaga konsistensi: memastikan setiap artikel punya metadata lengkap, slug unik, berkas markdown tersedia, dan hasil build selalu sinkron dengan sumber.
Alur dasarnya:
checkoutrepositori.- Pasang Node.js dan dependensi.
- Jalankan
npm run check(validasi konten). - Jalankan
npm run build(pre-render + sitemap). - (Opsional) unggah hasil sebagai artifact atau deploy.
Kelebihan
- Gratis untuk repositori publik dengan kuota menit yang longgar.
- Terintegrasi: tidak perlu server CI terpisah.
- Menangkap kesalahan lebih awal: sebelum merge atau deploy.
- Konsisten: memakai versi Node dan dependensi yang sama tiap kali.
- Dapat diperluas: artifact, notifikasi, deploy otomatis.
Kekurangan
- Waktu build terbatas: pekerjaan sangat berat bisa kena batas menit.
- Ketergantungan binari native (mis. Sharp) perlu cocok dengan runner.
- Butuh disiplin: hasil build yang di-commit harus tetap sinkron.
- Debugging bisa membingungkan bagi pemula, terutama soal cache.
- Menambah waktu tunggu pada pull request besar.
Catatan penting: Karena proyek ini menyimpan HTML hasil build di repositori, jalankan build di CI lalu pastikan hasilnya tidak berbeda. Bila berbeda, berarti ada yang lupa di-commit — dan workflow sebaiknya gagal agar ketahuan.
Struktur Workflow
Buat berkas .github/workflows/validate.yml:
name: Validasi Situs
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Siapkan Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- name: Pasang dependensi
run: npm ci
- name: Validasi konten
run: npm run check
- name: Build situs
run: npm run build
- name: Pastikan hasil build ter-commit
run: |
if [ -n "$(git status --porcelain)" ]; then
echo "::error::Hasil build berbeda. Jalankan 'npm run build' lalu commit."
git status --short
exit 1
fiPenjelasan penting:
npm cimemasang dependensi persis sesuaipackage-lock.json.cache: npmmempercepat instalasi pada run berikutnya.- Langkah terakhir memastikan
sitemap.xmldan HTML hasil build sudah di-commit — pola yang cocok untuk proyek ini.
Menambahkan Artifact
Unggah folder keluaran agar bisa diunduh dari halaman run:
- name: Siapkan output publik
run: node scripts/prep-output.js && npx pagefind --site public
- name: Unggah artifact
uses: actions/upload-artifact@v4
with:
name: public
path: public
retention-days: 7Deploy Opsional ke Vercel
Bila ingin deploy dari Actions (bukan integrasi Git Vercel), tambahkan langkah berikut beserta secret VERCEL_TOKEN:
- name: Deploy ke Vercel
if: github.ref == 'refs/heads/main'
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
run: npx vercel deploy --prod --yes --token "$VERCEL_TOKEN"Matriks Versi Node
Menguji beberapa versi Node membantu memastikan kompatibilitas:
strategy:
matrix:
node-version: [20, 22]
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}Tabel Langkah dan Tujuan
| Langkah | Perintah | Tujuan |
|---|---|---|
| Checkout | actions/checkout@v4 | Ambil kode repositori |
| Setup Node | actions/setup-node@v4 | Versi Node + cache npm |
| Instalasi | npm ci | Pasang dependensi konsisten |
| Validasi | npm run check | Cek metadata vs markdown |
| Build | npm run build | Pre-render + sitemap |
| Verifikasi | git status --porcelain | Deteksi hasil build tertinggal |
| Artifact | upload-artifact@v4 | Simpan keluaran |
Troubleshooting
npm cigagal: pastikanpackage-lock.jsonikut ter-commit dan sinkron denganpackage.json.- Sharp gagal di runner: runner GitHub memakai Linux glibc; jangan commit
node_modules, biarkan dipasang ulang. Jika tetap gagal, kunci versi Sharp. - Build sukses tapi job gagal: berarti langkah verifikasi mendeteksi file hasil build yang belum di-commit — jalankan
npm run buildlokal lalu commit. - CI lambat: aktifkan
cache: npm, dan hindari menjalankanpagefindbila tidak diperlukan di setiap run. permission deniedsaat push dari Actions: gunakanGITHUB_TOKENbawaan lewatpermissions: contents: write, dan hindari push kemaintanpa aturan branch.- Workflow tidak jalan: cek nama branch (
mainvsmaster) dan path berkas workflow yang benar.
Kesimpulan
GitHub Actions menjadikan kualitas situs statis terjaga otomatis: setiap push divalidasi, dibangun, dan diperiksa konsistensinya. Cukup satu berkas validate.yml, proyek terhindar dari artikel tanpa metadata, slug duplikat, atau hasil build yang tertinggal sebelum menyentuh produksi.