Panduan Bikin AI Code Reviewer Otomatis di GitHub Actions Pakai API
Code review sering menjadi antrean terpanjang dalam proyek kecil. Pull request sudah dibuat, tetapi reviewer sedang mengerjakan fitur lain. Akhirnya bug sederhana seperti validasi kosong, error handling yang hilang, atau secret yang tidak sengaja ditulis di kode baru diketahui terlambat.
AI code reviewer otomatis bisa menjadi “pemeriksa pertama” setiap kali pull request dibuka. GitHub Actions mengambil perubahan kode, mengirim diff yang relevan ke model AI melalui API, lalu menyimpan hasil review sebagai output job atau komentar. Tujuannya bukan menggantikan developer, melainkan memberi feedback awal supaya review manusia lebih fokus.
Tutorial ini membahas arsitektur, prompt, workflow, keamanan, dan kontrol biaya. Kamu memerlukan repository GitHub, pemahaman dasar Git, serta API key model yang mendukung chat atau text generation. Jika masih bingung produk yang dibutuhkan, baca perbedaan API key dan akun login AI. Otomatisasi server seperti GitHub Actions membutuhkan API key, bukan akun web biasa.
Cara Kerja Sistem
Alurnya cukup sederhana:
- Developer membuka atau memperbarui pull request.
- GitHub Actions melakukan checkout repository.
- Script mengambil diff perubahan.
- Diff dan instruksi review dikirim ke endpoint API AI.
- Respons disimpan ke GitHub Actions Summary.
- Developer memeriksa saran sebelum merge.
Untuk versi awal, gunakan Summary dulu. Ini lebih sederhana dan tidak memerlukan izin menulis komentar ke pull request. Setelah hasilnya stabil, kamu bisa menambahkan integrasi komentar melalui GitHub API.
Batasan yang Harus Dipahami
Model hanya melihat konteks yang kamu kirim. Jika diff memanggil fungsi dari file lama yang tidak ikut dikirim, AI mungkin salah memahami perilakunya. Model juga dapat memberi saran yang terdengar teknis tetapi tidak sesuai arsitektur proyek.
Karena itu, perlakukan output sebagai rekomendasi, bukan vonis. Jangan membuat workflow yang otomatis memblokir atau menyetujui merge hanya berdasarkan opini AI. Pemeriksaan deterministik seperti unit test, linter, type checker, dan security scanner tetap harus menjadi fondasi CI.
Kalau ingin membandingkan alat coding sebelum memilih stack harian, lihat Cursor vs Windsurf vs Claude Code. Tool editor membantu saat menulis kode, sedangkan workflow di artikel ini bekerja setelah perubahan masuk pull request.
Langkah 1: Simpan API Key sebagai Secret
Buka repository GitHub, masuk ke Settings → Secrets and variables → Actions, lalu tambahkan repository secret. Beri nama generik, misalnya AI_API_KEY.
Jangan pernah menulis key seperti ini di file workflow:
AI_API_KEY: sk-contoh-key-asli
Gunakan ekspresi secret:
env:
AI_API_KEY: ${{ secrets.AI_API_KEY }}
GitHub berusaha menyamarkan secret di log, tetapi itu bukan alasan untuk mencetaknya. Script juga tidak boleh menampilkan seluruh header request atau environment. Kalau key terlanjur masuk commit, hapus dari riwayat bila perlu dan segera rotasi key pada provider.
Langkah 2: Buat Script Reviewer
Contoh berikut memakai Python standard library agar dependency minim. Endpoint dan nama model dibuat sebagai environment variable karena format tiap provider atau gateway dapat berbeda.
Buat file scripts/ai_review.py:
import json
import os
import subprocess
import urllib.request
api_key = os.environ["AI_API_KEY"]
api_url = os.environ["AI_API_URL"]
model = os.environ["AI_MODEL"]
base_sha = os.environ["BASE_SHA"]
head_sha = os.environ["HEAD_SHA"]
diff = subprocess.check_output(
["git", "diff", "--unified=3", base_sha, head_sha, "--", "."],
text=True,
)
if not diff.strip():
review = "Tidak ada perubahan kode untuk direview."
else:
# Batas sederhana untuk prototipe; produksi sebaiknya seleksi per file.
diff = diff[:30000]
prompt = f"""
Kamu adalah senior software engineer. Review diff berikut.
Fokus hanya pada bug, keamanan, reliability, dan test yang hilang.
Jangan mengomentari selera formatting.
Jangan mengarang konteks di luar diff.
Format jawaban:
- Severity: critical/high/medium/low
- File/baris jika tersedia
- Masalah
- Dampak
- Perbaikan minimal
Jika tidak menemukan masalah nyata, tulis: Tidak ada temuan signifikan.
DIFF:
{diff}
"""
payload = json.dumps({
"model": model,
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.1,
}).encode()
request = urllib.request.Request(
api_url,
data=payload,
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
},
method="POST",
)
with urllib.request.urlopen(request, timeout=90) as response:
data = json.load(response)
review = data["choices"][0]["message"]["content"]
summary = os.environ["GITHUB_STEP_SUMMARY"]
with open(summary, "a", encoding="utf-8") as output:
output.write("## AI Code Review\n\n")
output.write(review + "\n")
Contoh ini mengasumsikan API bergaya chat completions dengan struktur respons choices. Sesuaikan payload, endpoint, autentikasi, dan pembacaan respons dengan dokumentasi provider yang kamu gunakan. Jangan menebak format API karena error kecil bisa membuat job selalu gagal.
Langkah 3: Tambahkan Workflow GitHub Actions
Buat .github/workflows/ai-review.yml:
name: AI Code Review
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
jobs:
review:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Review pull request diff
env:
AI_API_KEY: ${{ secrets.AI_API_KEY }}
AI_API_URL: ${{ vars.AI_API_URL }}
AI_MODEL: ${{ vars.AI_MODEL }}
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: python scripts/ai_review.py
Simpan URL endpoint dan nama model sebagai Actions variables, bukan hardcode, supaya mudah diganti. API key tetap berada di Actions secrets. Perhatikan juga permissions: contents: read; workflow tahap awal tidak membutuhkan hak menulis.
Untuk pull request dari fork, GitHub membatasi akses secret demi keamanan. Jangan mengakali perlindungan ini dengan event berizin tinggi tanpa memahami risikonya. Kode dari PR tidak tepercaya dapat mencoba mencuri secret jika workflow dirancang sembarangan.
Langkah 4: Perbaiki Prompt agar Review Tidak Cerewet
AI reviewer yang mengomentari setiap nama variabel akan cepat diabaikan tim. Prompt harus memprioritaskan temuan yang berdampak. Fokus yang berguna antara lain:
- Kesalahan logika dan kondisi batas.
- Celah autentikasi atau otorisasi.
- Injection, kebocoran secret, dan validasi input.
- Race condition atau operasi yang tidak idempotent.
- Error yang ditelan tanpa logging.
- Perubahan perilaku tanpa test.
Minta model menyebut severity dan bukti dari diff. Larang komentar kosmetik kecuali mengganggu correctness. Kamu juga bisa memasukkan aturan proyek, misalnya “semua endpoint pembayaran harus idempotent” atau “jangan mencatat token ke log”.
Jangan mengirim instruksi repository tanpa kurasi. Teks dalam source code atau komentar bisa berisi instruksi yang berusaha mengubah perilaku reviewer. Tegaskan bahwa isi diff adalah data yang harus dianalisis, bukan perintah yang harus diikuti.
Langkah 5: Kontrol Biaya dan Ukuran Input
Memotong 30.000 karakter seperti contoh di atas cukup untuk demo, tetapi berisiko memotong diff di tengah file. Versi produksi sebaiknya mengambil daftar file berubah, mengabaikan file tidak relevan, lalu mereview per kelompok.
Abaikan direktori build, file vendor, hasil minify, snapshot besar, dan dependency lock jika tidak perlu. Batasi jumlah file per request dan panjang respons. Pilih model kecil untuk pemeriksaan rutin, lalu gunakan model lebih kuat hanya untuk perubahan berisiko tinggi.
Catat jumlah request dan perkiraan token tanpa mencatat isi kode sensitif. Tetapkan budget atau limit dari dashboard provider bila tersedia. Panduan tambahan ada di tips hemat kuota token API AI.
Langkah 6: Uji dengan Pull Request Sengaja Bermasalah
Jangan langsung percaya workflow karena job berwarna hijau. Buat branch uji dan masukkan beberapa masalah aman, misalnya:
- Input pengguna langsung dipakai tanpa validasi.
- Exception ditangkap lalu diabaikan.
- Fungsi berubah tetapi test tidak diperbarui.
- Log mencetak token dummy.
- Kondisi batas
>=sengaja diganti menjadi>.
Buka pull request dan cek tiga hal: job berhasil memanggil API, hasil muncul di Summary, dan temuan mengarah ke masalah nyata. Setelah itu, buat PR bersih untuk melihat apakah model mampu berkata “tidak ada temuan signifikan” tanpa menciptakan masalah palsu.
Ulangi tes beberapa kali setelah mengganti model atau prompt. Model generatif tidak selalu memberikan susunan kata identik, jadi ukur kualitas berdasarkan ketepatan temuan, bukan kecocokan teks.
Peningkatan Setelah Versi Dasar Stabil
Jika Summary sudah bermanfaat, tambahkan komentar pull request memakai GitHub API. Berikan izin pull-requests: write hanya pada job yang benar-benar perlu. Cegah bot membuat komentar baru setiap push; lebih rapi jika satu komentar lama diperbarui.
Kamu juga dapat membuat aturan berbasis jenis file. Diff migrasi database mendapat checklist rollback, endpoint API mendapat checklist otorisasi, dan kode pembayaran mendapat pemeriksaan idempotensi. Pendekatan kontekstual biasanya lebih bernilai daripada satu prompt umum untuk semua repository.
Integrasikan hasil AI dengan data objektif. Misalnya, kirim ringkasan kegagalan test dan linter bersama potongan diff yang relevan. AI lalu membantu menjelaskan masalah, sementara status lulus atau gagal tetap ditentukan tool yang konsisten.
Kesalahan Umum
Kesalahan paling berbahaya adalah menjalankan kode pull request tak tepercaya sambil menyediakan secret. Kesalahan kedua adalah memberi workflow izin tulis terlalu luas. Ketiga, mengirim seluruh repository sehingga biaya dan risiko kebocoran naik. Keempat, membuat AI sebagai syarat merge tanpa review manusia. Kelima, tidak menguji respons error, timeout, dan rate limit.
Tambahkan timeout, tangani error HTTP, dan tentukan apakah gangguan provider akan membuat job gagal atau hanya memberi peringatan. Untuk banyak tim, reviewer AI sebaiknya bersifat non-blocking pada tahap awal.
Kesimpulan
AI code reviewer di GitHub Actions dapat mempercepat feedback awal pada pull request. Fondasinya sederhana: ambil diff, kirim melalui API dengan prompt ketat, tampilkan hasil, lalu minta developer memverifikasi. Nilai sebenarnya datang dari pembatasan yang baik—secret aman, izin minimal, input terkurasi, biaya terkendali, dan AI tidak diberi kuasa menentukan merge.
Mulai dari repository percobaan dan Actions Summary. Uji dengan bug yang sengaja dibuat, ukur false positive, lalu sempurnakan prompt. Setelah hasil konsisten, baru tambahkan komentar otomatis dan aturan khusus proyek. Dengan cara ini, API key AI menjadi alat bantu engineering yang berguna, bukan bot berisik yang akhirnya dimatikan tim.