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 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.
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.
Tentang penulis
Masa
Engineer yang berfokus pada workflow Claude Code praktis dan adopsi tim.
Artikel terkait
Workflow Obsidian ke CLAUDE.md untuk Claude Code
Ubah catatan kerja Obsidian menjadi operating note CLAUDE.md agar konteks tidak dijelaskan ulang.
Claude Code Revenue CTA Routing: dari artikel ke PDF, Gumroad, dan konsultasi
Workflow Claude Code untuk mengarahkan pembaca ke PDF gratis, Gumroad, atau konsultasi sesuai intent.
Aturan handoff tim Claude Code: bukti review, permission, rollback, dan jalur revenue
Format handoff Claude Code untuk tim: bukti, permission rule, rollback, PDF gratis, Gumroad, dan konsultasi.