Mengupas masalah release manual: menentukan versi, menulis changelog, publish, dan tagging yang rentan error. Kemudian bagaimana Conventional Commits mengubah riwayat commit menjadi data yang bisa dianalisis mesin, dan mengapa semantic-release mengalahkan semver-script seadanya.

Di episode 0 kita menyiapkan environment: Git, Node.js, VS Code, dan GitHub CLI. Sekarang kita berhenti sejenak untuk memahami kenapa semua alat itu diperlukan. Pertanyaan besarnya: mengapa release masih dikerjakan manual, padahal proses itu membuang waktu dan rawan error?
Sejarahnya, release selalu menjadi titik paling menegangkan dalam siklus pengembangan. Versi bisa lupa dinaikkan, changelog bisa meleset dari kenyataan, dan tag bisa tertinggal. Semantic-release lahir justru untuk menghapus drama itu: dengan mengubah riwayat commit menjadi data, mesin bisa menentukan versi, menulis changelog, dan merilis tanpa campur tangan manusia.
Ada empat pekerjaan manual yang harus diulang setiap kali rilis:
v1.2.3 dan memastikannya ter-push.Masing-masing punya celah error. Versi bisa lupa dinaikkan, changelog bisa tidak lengkap, dan tag bisa salah posisi — biasanya baru ketahuan saat user membandingkan versi yang beredar.
$ npm version patch
$ npm run build
$ npm publish
$ git tag v1.2.3
$ git push --tags
$ # changelog? eh, lupa ditulis...Semua langkah mengandalkan memori dan kedisiplinan tim. Satu langkah terlewat, hasilnya adalah versi yang tidak konsisten dengan kenyataan.
Solusinya bukan mengingat lebih keras, melainkan membuat riwayat commit bisa dibaca mesin. Dengan format commit yang baku, mesin bisa menyimpulkan jenis perubahan secara otomatis: feat menaikkan minor, fix menaikkan patch, dan BREAKING CHANGE: menaikkan major.
feat: tambahkan halaman login
fix: perbaiki validasi email
chore: update dependensi keamanan
BREAKING CHANGE: ganti API authKarena commit bersifat kanonik dan permanen, changelog tidak lagi bergantung ingatan manusia — ia diturunkan ulang dari riwayat setiap kali rilis. Changelog yang sama akan konsisten dihitung ulang kapan pun, oleh siapa pun, di mesin mana pun.
| Aspek | Release Manual | semver-script | semantic-release |
|---|---|---|---|
| Menentukan versi | Manual, rawan lupa | Otomatis naik 1 patch | Dari jenis commit (semver) |
| Changelog | Tulis manual | Tidak ada | Auto dari commit history |
| Tag git | Manual git tag | Manual | Auto sesuai tagFormat |
| Publish registry | Manual | Manual | Auto via plugin npm |
| Terintegrasi CI | Tidak | Tidak | Pipeline penuh |
| Traceability versi ke commit | Tidak | Tidak | Tag mengarah ke commit rilis |
semver-script yang naik patch terus-menerus menghasilkan 1.0.0, 1.0.1, 1.0.2 padahal ada fitur besar baru — versinya jadi kebohongan. Semantic-release menghitung versi berdasarkan dampak perubahan, bukan urutan rilis.
Warning
Naik versi manual itu berbahaya dalam dua arah. Menaikkan patch padahal ada breaking change membuat user tertipu bahwa API tetap kompatibel. Sebaliknya, menaikkan major padahal hanya perbaikan kecil memicu churn upgrade yang tidak perlu. Keduanya merusak kepercayaan pada versi — persis masalah yang dihapus semantic-release.
Pola pikirnya berubah dari "menjalankan checklist" menjadi "menyusun sistem". Checklist mengandalkan orang yang patuh; sistem mengandalkan aturan yang otomatis. Perbedaan filosofinya kira-kira begini:
# era manual: 5 langkah, 5 peluang salah
1. cek package.json -> naikkan versi manual
2. baca git log -> tulis changelog
3. jalankan build -> pastikan sukses
4. publish ke registry -> jangan lupa token
5. git tag + push --tags -> jangan lupa push
# era otomatis: 1 perintah, 0 keputusan manual
npx semantic-releasePerhatikan bagaimana setiap langkah era manual membawa keputusan subjektif: versi berapa, changelog format apa, tag mana yang benar. Era otomatis memindahkan seluruh keputusan itu ke konfigurasi yang bisa di-review, diuji, dan divalidasi sekali — lalu dipakai selamanya.
Semantic-release sendiri lahir dari kenyataan bahwa tim besar di dunia nyata tidak bisa disiplin manual dalam skala panjang. Ia dipakai oleh ribuan project open-source sebagai contoh nyata bahwa otomatisasi versi berjalan stabil di lingkungan yang benar-benar produksi.
Ketika proses rilis otomatis, dampaknya merambat ke seluruh alur kerja tim:
Jujur dulu: tidak semua proyek butuh ini. Proyek kecil satu orang yang belum punya user eksternal mungkin cukup dengan tag manual. Semantic-release baru terasa nilainya ketika ada user yang bergantung pada versi, changelog harus dipertahankan, dan lebih dari satu orang menyentuh branch yang sama. Di titik itu, menyerahkan versi kepada mesin adalah penghematan besar.
npx semantic-release
# analisis commit -> hitung versi -> tulis changelog
# -> buat tag -> publish -> buat GitHub Release
# semua dari riwayat commit yang berstrukturPerhatikan: tidak ada prompt konfirmasi, tidak ada keputusan subjektif. Konfigurasi di release.config.cjs menentukan semuanya, dan riwayat commit adalah satu-satunya input.
Pada episode 1 ini kalian telah memahami:
Di episode 2 kita akan membedah konsep dasar dan arsitektur: aturan semver, cara commit analyzer bekerja, serta bagaimana plugin pipeline menyusun sebuah rilis dari awal sampai akhir. Sampai jumpa di episode 2!