Use Cases (Diperbarui: 3/6/2026)

GitHub Actions Lanjutan dengan Claude Code: permission, OIDC, cache, dan matrix CI

Rancang GitHub Actions yang aman dengan Claude Code: permission, OIDC, cache, matrix, dan YAML siap pakai.

GitHub Actions Lanjutan dengan Claude Code: permission, OIDC, cache, dan matrix CI

GitHub Actions mudah kalau tujuannya cuma menjalankan test setelah push. Bagian yang sulit adalah menjaga permission tetap sempit, cache tidak memakai dependency lama, test berjalan di beberapa environment, deploy cloud tidak memakai key jangka panjang, dan Claude Code tidak melihat secret yang tidak perlu.

Panduan ini memakai Claude Code sebagai partner desain workflow, bukan sekadar pembuat YAML. Contoh di bawah adalah workflow GitHub Actions lengkap yang bisa kamu copy, sesuaikan, lalu jalankan. Yang penting: setiap job harus bisa menjelaskan kenapa butuh permission tertentu, secret apa yang bisa dibaca, dan apa yang terjadi ketika pull request datang dari fork.

Saya memeriksa panduan ini terhadap dokumentasi resmi GitHub untuk workflow syntax, GITHUB_TOKEN permissions, AWS OIDC, dependency caching, concurrency, dan Claude Code GitHub Actions.

Arsitektur

Workflow lanjutan bukan berarti semua hal dibuat otomatis. Workflow yang baik membatasi dampak kerusakan, membuat error mudah ditelusuri, membatalkan run yang sudah usang, dan tetap menyisakan approval manusia untuk perubahan production.

flowchart LR
  PR["Pull request"] --> Gate["matrix test and lint"]
  Gate --> Cache["lockfile cache"]
  Gate --> Claude["Claude Code review"]
  Gate --> Deploy["OIDC deploy"]
  Deploy --> Env["GitHub environment approval"]
  Env --> AWS["AWS role"]

Beberapa istilah perlu jelas. Matrix adalah tabel kombinasi, misalnya Node.js 22 dan 24 di Ubuntu dan Windows. OIDC, OpenID Connect, menukar identitas sementara dari GitHub Actions menjadi credential cloud berdurasi pendek. Dengan begitu kamu tidak menyimpan AWS access key jangka panjang di GitHub Secrets. Concurrency mengontrol run yang berjalan bersamaan. Permissions menentukan apa yang boleh dilakukan GITHUB_TOKEN.

Kasus penggunaan nyata

Use case pertama adalah quality gate untuk pull request. Lint, type-check, dan test dijalankan di lebih dari satu runtime sebelum merge. Ini membantu menemukan masalah path di Windows, perbedaan Node.js, dan lockfile yang tidak sinkron.

Use case kedua adalah deploy ke staging. Setelah main lolos, GitHub Actions mengambil AWS IAM role lewat OIDC dan deploy tanpa static access key. Untuk production, tambahkan approval lewat GitHub Environment.

Use case ketiga adalah CI bersama di monorepo. Jika banyak package mengulang Node setup, install, dan test, reusable workflow mencegah versi action dan policy cache berbeda-beda.

Use case keempat adalah review PR dengan Claude Code. Mulai dari membaca diff dan memberi komentar. Permission untuk menulis file atau push sebaiknya baru diberikan setelah branch protection, required review, dan rollback jelas.

Prompt untuk Claude Code

Minta desain dengan batasan dulu, baru minta file YAML.

Design GitHub Actions for this repository.
The goals are pull request quality gates, staging deployment, and Claude Code review.

Constraints:
- Use least-privilege GITHUB_TOKEN permissions.
- Use OIDC for AWS. Do not store long-lived AWS access keys in Secrets.
- Include package-lock.json in dependency cache keys.
- Assume secrets are not available on forked pull requests.
- If pull_request_target is suggested, explain why PR head code is not checked out.
- Produce GitHub Actions YAML that is valid as written.

End with concrete failure cases and verification steps.

Prompt seperti ini memaksa Claude Code menjelaskan keputusan security, bukan hanya mengisi template umum.

Gerbang kualitas PR

Workflow ini memakai actions/checkout@v6 dan actions/setup-node@v6, major version yang relevan pada Juni 2026. GitHub-hosted runner biasanya langsung bisa menjalankannya. Kalau kamu memakai self-hosted runner, cek versi runner dulu sebelum upgrade workflow.

name: pr-quality-gate

on:
  pull_request:
    branches: [main]
  push:
    branches: [main]

permissions:
  contents: read

concurrency:
  group: pr-quality-${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  test:
    name: node-${{ matrix.node }}-${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    timeout-minutes: 15
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest]
        node: [22, 24]

    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - name: Setup Node
        uses: actions/setup-node@v6
        with:
          node-version: ${{ matrix.node }}
          cache: npm
          cache-dependency-path: package-lock.json

      - name: Install dependencies
        run: npm ci

      - name: Lint
        run: npm run lint

      - name: Type check
        run: npm run typecheck

      - name: Test
        run: npm test

Job ini cukup memakai contents: read karena tidak menulis ke repository. concurrency membatalkan run lama dari branch yang sama. Cache diikat ke package-lock.json; hindari cache node_modules penuh kecuali benar-benar perlu, karena native module dan perbedaan OS bisa membuatnya rapuh.

Deploy AWS dengan OIDC

Pola yang aman adalah mendaftarkan GitHub sebagai OIDC provider di AWS, membuat IAM role yang sempit, lalu membatasi trust policy berdasarkan repository, branch, atau environment. Di workflow, id-token: write diperlukan agar GitHub bisa meminta token OIDC.

name: deploy-staging

on:
  workflow_dispatch:
  push:
    branches: [main]

permissions:
  contents: read
  id-token: write

concurrency:
  group: deploy-staging
  cancel-in-progress: false

jobs:
  deploy:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    environment: staging

    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v6
        with:
          role-to-assume: arn:aws:iam::123456789012:role/claude-code-github-actions-staging
          aws-region: ap-northeast-1

      - name: Verify caller identity
        run: aws sts get-caller-identity

      - name: Deploy
        run: |
          npm ci
          npm run build
          echo "Deploy command goes here"

Ganti role ARN, region, dan perintah deploy. Untuk production, gunakan environment terpisah dan required reviewers.

Reusable workflow

Reusable workflow cocok ketika beberapa workflow mengulang check yang sama. Ini juga mencegah satu file tertinggal di versi action lama.

# .github/workflows/reusable-node-check.yml
name: reusable-node-check

on:
  workflow_call:
    inputs:
      node-version:
        required: false
        type: string
        default: "24"

permissions:
  contents: read

jobs:
  check:
    runs-on: ubuntu-latest
    timeout-minutes: 15

    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - name: Setup Node
        uses: actions/setup-node@v6
        with:
          node-version: ${{ inputs.node-version }}
          cache: npm
          cache-dependency-path: package-lock.json

      - name: Install
        run: npm ci

      - name: Check
        run: |
          npm run lint
          npm run typecheck
          npm test

Workflow pemanggil:

# .github/workflows/ci.yml
name: ci

on:
  pull_request:
    branches: [main]

permissions:
  contents: read

jobs:
  node-check:
    uses: ./.github/workflows/reusable-node-check.yml
    with:
      node-version: "24"

Jangan sembunyikan perbedaan nyata dalam reusable workflow yang terlalu besar. Kalau tiap package punya command berbeda, minta Claude Code memisahkan setup umum dan langkah khusus package.

Tinjauan PR dengan Claude Code

Claude Code Action v1 memakai anthropics/claude-code-action@v1, prompt, dan claude_args. Jangan copy contoh lama yang masih memakai @beta atau direct_prompt.

name: claude-pr-review

on:
  pull_request:
    types: [opened, synchronize, reopened]

permissions:
  contents: read
  pull-requests: write
  issues: write

jobs:
  review:
    if: github.event.pull_request.head.repo.full_name == github.repository
    runs-on: ubuntu-latest
    timeout-minutes: 20

    steps:
      - name: Checkout
        uses: actions/checkout@v6

      - name: Claude Code review
        uses: anthropics/claude-code-action@v1
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          prompt: |
            Review this pull request as a senior engineer.
            Focus on security, broken tests, unnecessary permissions, and missing verification.
            Do not modify files. Leave concise review comments only.
          claude_args: |
            --max-turns 5

Workflow ini melewati PR dari fork karena repository secrets biasanya tidak tersedia di sana. Kalau harus mendukung fork, buat jalur low-trust yang tidak memakai secret dan tidak menjalankan code luar dengan permission tinggi.

Kegagalan umum

Kesalahan paling berbahaya adalah memakai pull_request_target lalu checkout head PR. Event ini bisa berjalan dengan permission yang dekat dengan repository utama, sehingga code dari fork luar bisa menjadi risiko secret leak.

Kesalahan kedua adalah mencetak secrets untuk debug. GitHub memang mask banyak nilai exact, tetapi string turunan, JSON, base64, dan debug log dari tool lain bisa tetap bocor. Berikan Claude Code nama dan tujuan secret, bukan nilainya.

Kesalahan ketiga adalah cache key terlalu luas. key: node-cache dapat memulihkan dependency lama setelah lockfile berubah. Gunakan cache-dependency-path atau hashFiles('**/package-lock.json').

Kesalahan keempat adalah matrix terlalu besar. Dua OS dan dua versi Node.js masih masuk akal; tiga OS, empat runtime, dan delapan package menjadi 96 jobs. Jalankan matrix kecil di PR dan coverage luas di nightly.

Kesalahan kelima adalah membiarkan action major version terlalu lama. Pada 2026, banyak action resmi memakai Node runtime yang lebih baru. Untuk self-hosted runner, update runner dulu sebelum workflow.

Jalur monetisasi

CI yang aman membantu halaman yang berhubungan dengan revenue: landing page, template berbayar, checkout, lead form, dan materi kursus bisa dirilis dalam PR kecil tanpa risiko deploy rusak atau secret bocor. Untuk mulai sendiri, gunakan cheatsheet Claude Code gratis. Untuk tim yang perlu merancang permissions, OIDC, Claude Code review, branch protection, dan CI monorepo berdasarkan repository nyata, gunakan training dan konsultasi Claude Code.

Baca juga: setup CI/CD, Git workflow, strategi testing, dan praktik security.

Hasil uji langsung

Untuk artikel ini, saya mengekstrak blok YAML dari MDX dan memvalidasinya dengan YAML parser. Contoh berhasil dibaca sebagai YAML dan mencakup on, permissions, concurrency, matrix, reusable workflow, deploy OIDC, dan Claude Code Action v1. Sebelum menjalankan di repository nyata, ganti AWS role ARN, npm scripts, environment, dan secret ANTHROPIC_API_KEY.

#Claude Code #GitHub Actions #CI/CD #automation #DevOps
Gratis

PDF gratis: cheatsheet Claude Code

Masukkan email dan unduh satu halaman berisi command, kebiasaan review, dan workflow aman.

Kami menjaga datamu dan tidak mengirim spam.

Masa

Tentang penulis

Masa

Engineer yang berfokus pada workflow Claude Code praktis dan adopsi tim.