Untuk mempercepat rilis dan menjaga konsistensi kode Go Fiber, Anda perlu menautkan linting lokal, pipeline CI/CD, dan generation changelog otomatis. Solusi ini memastikan setiap commit memenuhi standar format kode, tidak merusak unit test, dan terdokumentasi secara otomatis sebelum release.

Linting lokal dengan gofmt, golangci-lint, dan pre-commit

Linting lokal memastikan perubahan sudah rapih sejak awal, sehingga build CI lebih sedikit gagal karena gaya kode atau masalah statis. gofmt adalah formatter bawaan yang wajib dijalankan sebelum commit, sedangkan golangci-lint menggabungkan banyak checker (misspell, staticcheck, gofmt, vet, dll) dalam satu binary.

Persiapan alat

Instalasi bisa dilakukan dengan go install dan golangci-lint mengikuti dokumentasi resminya. Pastikan folder $GOPATH/bin sudah dalam PATH agar bisa dijalankan dari terminal. Simpan versi yang stabil di go.mod atau README agar tim tahu versi yang digunakan.

Konfigurasi pre-commit lokal

Pre-commit hooks memaksa developer menjalankan lint sebelum push. Contoh konfigurasi .pre-commit-config.yaml:

repos:
  - repo: https://github.com/pre-commit/mirrors-gofmt
    rev: v0.0.0
    hooks:
      - id: gofmt
        args: ["-w"]
  - repo: https://github.com/dnephin/pre-commit-golangci-lint
    rev: v1.0.0
    hooks:
      - id: golangci-lint
        args: ["run", "./..."]

Setelah konfigurasi, jalankan pre-commit install. Jika hook gagal, periksa pesan dari formatter atau linter sebelum mengulang commit. Pastikan golangci-lint dikonfigurasi via .golangci.yml agar konsisten dengan pipeline.

Workflow lint + unit test di CI/CD

CI/CD wajib menjalankan linting dan unit test setiap push ke cabang utama agar regressi tidak lolos. Berikut contoh GitHub Actions yang bisa diadaptasi ke GitLab CI.

Workflow GitHub Actions

name: Lint dan Test Go Fiber

on:
  push:
    branches: ["main", "release/*"]
  pull_request:
    branches: ["main"]

jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Go
        uses: actions/setup-go@v4
        with:
          go-version: '1.22'
      - name: Install golangci-lint
        run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
      - name: Run gofmt
        run: gofmt -w ./...
      - name: Run golangci-lint
        run: golangci-lint run ./...
      - name: Run unit tests
        run: go test ./...

Dengan urutan ini, gaya kode dan linting diverifikasi sebelum eksekusi test. Jika lint gagal, log dari golangci-lint menunjukkan file dan rule yang dilanggar; jalankan kembali perintah yang sama secara lokal untuk debugging.

Trade-off dan debugging

Menjalankan gofmt di CI bisa memodifikasi file secara otomatis. Pastikan pre-commit sudah menyiapkan perubahan sebelum mengirim commit agar CI tidak selalu gagal. Jika golangci-lint memakan waktu, file konfigurasi bisa memfilter target spesifik (misalnya hanya direktori handler). Dokumentasikan konfigurasi lint agar developer tahu kenapa rule tertentu dinonaktifkan.

Otomasi changelog berbasis Conventional Commits

Changelog otomatis menghemat waktu release dan mencegah lupa mencatat perubahan penting. Kunci utama adalah menerapkan format Conventional Commits (misalnya feat:, fix:, chore:). Format ini dipetakan ke kategori changelog.

Pipeline changelog dan release

Gunakan alat seperti git-chglog atau skrip sederhana yang membaca commit terbaru. Contoh skrip Bash untuk change log:

#!/bin/bash
set -euo pipefail
latest_tag=$(git describe --tags --abbrev=0)
next_tag=$(git tag --sort=-creatordate | head -n1)

changed=$(git log ${latest_tag}..HEAD --pretty=format:"%s")
if [[ -z $changed ]]; then
  echo "Tidak ada perubahan untuk changelog."
  exit 0
fi

cat <> CHANGELOG.md

## ${(date +"%Y-%m-%d")}
$changed
EOF

Integrasikan skrip ini ke pipeline release (misalnya job GitHub Actions yang dijalankan manual atau otomatis saat membuat tag). Setelah changelog terupdate, buat tag dan push ke remote agar release repository terbarui.

Format changelog yang bisa dibaca

Terapkan template sederhana:

## [Unreleased]
- feat: Tambahkan endpoint untuk laporan harian
- fix: Perbaiki panic saat payload kosong

Gunakan skrip untuk memindahkan blok "Unreleased" ke versi baru saat release. Format ini memudahkan QA melihat perubahan besar sesuai kategori Conventional Commits.

Bagaimana automasi mempercepat release

Lint dan test otomatis mengurangi waktu debugging di akhir sprint. Developer tahu bahwa commit yang lolos lint dan test sudah memenuhi standar internal, sehingga review bisa fokus pada arsitektur. Changelog otomatis memastikan catatan rilis lengkap tanpa menunggu seseorang menulisnya secara manual.

Dengan menghubungkan pre-commit, pipeline CI/CD, dan skrip changelog, setiap perubahan memiliki rangkaian pemeriksaan otomatis. Ini menjaga konsistensi kode Go Fiber, mempercepat rilis, serta meminimalkan risiko regresi dan dokumentasi yang terlewat.