Otomasi Pipeline CI/CD untuk Nuxt dan Go API dengan GitHub Actions dimulai dengan definisi langkah terukur yang menangani linting, unit test, build, sampai rilis. Dengan workflow yang tersusun, setiap commit bisa divalidasi dan aplikasi siap dirilis tanpa penanganan manual.

Desain Workflow CI/CD di GitHub Actions

Untuk menjaga konsistensi dua bagian aplikasi, buat satu workflow YAML utama yang memicu linting, testing, build, dan release. Penjelasan berikut memberikan struktur dasar yang bisa dikembangkan sesuai kebutuhan.

Penampakan Workflow Utama

name: Otomasi Pipeline CI/CD
on:
  push:
    branches: ["main"]
    tags: ["v*"]
  pull_request:
    branches: ["main"]
jobs:
  lint:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        service: ["nuxt", "go"]
    steps:
      - uses: actions/checkout@v4
      - name: Setup
        run: |
          if [ "${{ matrix.service }}" = "nuxt" ]; then pnpm install; fi
          if [ "${{ matrix.service }}" = "go" ]; then go env -w GOPRIVATE=*/; fi
      - name: Cache dependencies
        uses: actions/cache@v4
        with:
          path: |
            ${{ matrix.service == 'nuxt' && 'node_modules' }}
            ${{ matrix.service == 'go' && '$GOMODCACHE' }}
          key: ${{ runner.os }}-${{ matrix.service }}-${{ hashFiles('**/go.sum','**/package-lock.json','**/pnpm-lock.yaml') }}
      - name: Run lint
        run: |
          if [ "${{ matrix.service }}" = "nuxt" ]; then pnpm lint; fi
          if [ "${{ matrix.service }}" = "go" ]; then go vet ./...; fi
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node and Go
        run: |
          pnpm install
          go mod download
      - name: Run unit test Nuxt
        run: pnpm test:unit
      - name: Run unit test Go API
        run: go test ./...
  build:
    runs-on: ubuntu-latest
    needs: [lint, test]
    steps:
      - uses: actions/checkout@v4
      - run: pnpm install
      - run: pnpm build
      - run: go build -o bin/api ./cmd/api
      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: build-output
          path: |
            .output/public
            bin/api
  release:
    runs-on: ubuntu-latest
    needs: build
    if: startsWith(github.ref, 'refs/tags/v')
    steps:
      - uses: actions/checkout@v4
      - name: Create Draft Release
        uses: softprops/action-gh-release@v1
        with:
          name: ${{ github.ref_name }}
          body: "Rilis otomatis dari workflow CI/CD"
          draft: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Workflow tersebut memastikan linting dan testing dilakukan sebelum build, lalu build dibatasi sampai release hanya untuk tag yang sesuai. Job lint menggunakan matrix agar linting Nuxt dan Go berjalan paralel tanpa mengulang checkout.

Linting dan Tooling Paralel dengan Matrix

Matrix job cocok untuk menjalankan tooling khusus tiap service tanpa menduplikasi job. Pada contoh di atas, job lint menggunakan strategy.matrix.service untuk membedakan perintah Nuxt dan Go. Keuntungannya:

  • Linting Nuxt (ESLint/Stylelint) dan Go (gofmt/go vet) berjalan bersamaan.
  • Setiap tenant dapat memiliki caching sendiri sehingga tidak saling mengganggu.
  • Jika satu lint gagal, keseluruhan pipeline berhenti lebih awal.

Pastikan setiap langkah memanggil dependensi yang relevan (pnpm/install dan go env) karena matrix tidak otomatis memuat toolchain lain.

Konfigurasi Caching yang Efisien

Cache membantu menghemat waktu terutama saat dependency Nuxt besar dan modul Go tidak berubah. Gunakan actions/cache@v4 dengan key yang menangkap perubahan lockfile atau go.sum.

Strategi cache yang baik:

  • Cache node_modules berdasarkan pnpm-lock.yaml atau package-lock.json.
  • Cache GOMODCACHE agar modul Go tidak perlu diunduh ulang.
  • Tambahkan fallback seperti restore-keys jika key spesifik tidak ditemukan.

Stop menggunakan cache untuk direktori build atau output sehingga tidak mengganggu artifact baru.

Build dan Artefak untuk Nuxt + Go

Job build bergantung pada job lint dan test. Di sini, pnpm build menyiapkan Nuxt SSR/Static, sementara go build menghasilkan binary API.

Unggah hasil build sebagai artifact agar job release atau deployment lain bisa mengunduhnya secara konsisten. Artifact juga berguna saat melakukan roll-back atau debugging error di job release.

Strategi Rilis dan Deployment

Define job release yang hanya berjalan pada tag yang sesuai (misalnya v*.*.*). Pendekatan ini memungkinkan automatic versioning dan pengisian changelog sederhana.

Pilihan umum untuk release:

  • Draft release dengan softprops/action-gh-release agar tim bisa meninjau dahulu.
  • Menautkan artifact build dengan release agar file Nuxt dan binary Go tersedia.
  • Menambahkan job deployment terpisah yang mengambil release tag dan mengirim ke hosting/cluster.

Jika menggunakan deployment otomatis, pastikan job release mengeset environment variables yang dibutuhkan, lalu memanggil action seperti appleboy/ssh-action atau docker/build-push-action sesuai target.

Secrets dan Konfigurasi Lingkungan

Tambahkan secrets berikut di GitHub repository Settings > Secrets and variables:

  • GITHUB_TOKEN – sudah tersedia otomatis, digunakan untuk create release.
  • NPM_TOKEN – bila mengakses registry pribadi saat install Nuxt.
  • GO_PRIVATE – jika perlu akses repositori Go private.
  • SSH_PRIVATE_KEY atau DOCKER_USERNAME/DOCKER_PASSWORD jika deployment mendorong ke server atau registry.

Gunakan env: dalam workflow untuk memasukkan secrets ke job tertentu tanpa mengekspos dalam log.

Debugging dan Observasi Job

Ketika workflow gagal, beberapa langkah membantu menganalisis:

  • Set ACTIONS_RUNNER_DEBUG ke true di secret atau variables untuk log lebih detail.
  • Gunakan output && dan || di bash untuk mengecek status perintah dengan mencetak pesan custom.
  • Periksa tab Anatomy di GitHub Actions untuk melihat detail setiap step, terutama cache restore/upload.

Tambahkan langkah seperti run: ls -R hanya saat debugging untuk memastikan struktur direktori; hapus nanti agar tidak membanjiri log.

Dengan pendekatan ini, tim bisa menyesuaikan workflow, menambahkan deployment ke staging, dan tetap menjaga pipeline primer untuk Nuxt dan Go API.

Kesimpulan: Otomasi pipeline CI/CD Nuxt plus Go API dengan GitHub Actions membutuhkan linting matrix, caching efektif, artifact build, dan job release berbasis tag. Penanganan secrets dan debugging yang tepat memastikan pipeline berjalan stabil dan dapat berkembang sesuai kebutuhan tim.