Episode ini mengotomatisasi kualitas dan rilis: pipeline build dan test dengan GitHub Actions, menjaga dependency aman dengan go mod verify dan govulncheck, serta release workflow dengan versioning, semantic imports, dan distribusi binary.

Menjalankan build dan test secara manual akan tertinggal. Saat tim bertumbuh, kualitas kode harus dijamin oleh mesin: setiap komit dipakai dalam pipeline, setiap pull request diverifikasi, dan setiap tag menghasilkan release. Episode 17 mengotomatisasi semua itu untuk project Go.
Episode 17 membahas pipeline CI/CD dengan GitHub Actions, pengamanan dependency dengan go mod verify dan govulncheck, serta release workflow yang mencakup versioning, semantic imports, dan distribusi binary lintas platform.
Workflow GitHub Actions didefinisikan di .github/workflows/. Workflow berikut menjalankan format, vet, dan test pada setiap push dan pull request:
name: CI
on:
push:
branches: [main]
pull_request:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: "1.23"
- run: gofmt -l .
- run: go vet ./...
- run: go test -race ./...go test -race mengaktifkan race detector — wajib untuk project yang memakai goroutine. Langkah build binary bisa ditambahkan untuk memastikan project tetap bisa di-compile untuk arsitektur target.
Unduhan dependency berulang memperlambat pipeline. Setup Go di GitHub Actions mendukung cache go.sum otomatis, atau gunakan cache manual:
go mod download
go build -o app ./cmd/serverDengan cache, waktu pipeline bisa turun drastis. Untuk pull request dari kontributor luar, pastikan permission workflow tidak membocorkan secret.
go mod verify memeriksa apakah module yang tersimpan masih cocok dengan checksum go.sum. Menjalankannya di CI mendeteksi dependency yang rusak atau dimodifikasi sejak unduh.
go mod verify
go list -m -json all | jq -r '.Version' | wc -lgovulncheck adalah tool resmi dari Go team yang mendeteksi kerentanan pada dependency project. Ia hanya melaporkan kerentanan yang benar-benar terpanggil dari kode kalian, mengurangi noise.
go install golang.org/x/vuln/cmd/govulncheck@latestgovulncheck ./...Ketika menemukan kerentanan, lakukan go get pkg@versi-terbaru lalu go mod tidy. Integrasikan govulncheck ke pipeline CI agar pull request dengan dependency rentan langsung ditolak.
Rilis memakai semantic versioning: MAJOR.MINOR.PATCH. Major berubah untuk breaking change, minor untuk fitur baru, patch untuk perbaikan. Go menerapkan aturan khusus: module v2 ke atas harus menambah sufiks /v2 di path modulnya.
git tag v1.2.0
git push origin v1.2.0goreleaser mengotomatisasi pembuatan release: membangun binary untuk banyak OS dan arsitektur, membuat archive, menulis release notes, dan mengunggahnya ke GitHub Releases.
project_name: api-go
builds:
- env: [CGO_ENABLED=0]
goos: [linux, darwin, windows]
goarch: [amd64, arm64]Jalankan goreleaser release setelah tag dibuat. Hasilnya: file api-go_1.2.0_linux_amd64.tar.gz, api-go_1.2.0_darwin_arm64.tar.gz, dan seterusnya — siap didistribusikan tanpa toolchain Go.
Untuk package yang dipakai orang lain, patuhi aturan: jika ada breaking change, naikkan major version dan pindahkan kode ke direktori v2/ atau v3/ dengan path modul sesuai. Konsumen cukup mengupdate versi di go.mod mereka.
Beberapa praktik yang menjaga pipeline tetap sehat:
Dengan pipeline yang sehat, tim bisa merilis sering tanpa takut merusak production.
Episode 17 mengotomatisasi perjalanan kode ke production: pipeline CI dengan GitHub Actions yang menjalankan gofmt, go vet, dan go test -race, keamanan dependency dengan go mod verify dan govulncheck, serta release workflow dengan semantic versioning, goreleaser, dan semantic imports.
Inti yang harus dibawa pulang:
go test -race wajib untuk kode ber-goroutine.govulncheck melaporkan kerentanan yang benar-benar terpakai.MAJOR.MINOR.PATCH./v2 di path.goreleaser menghasilkan binary lintas platform untuk release.Di episode 18 selanjutnya kita akan membahas tooling modern dan fitur stabil terbaru — toolchain go tool, gopls, go test, go fmt, dan go vet, fitur stable seperti fuzz testing, package slices dan maps, serta tren produksi cloud-native Go.