REFERENSI CEPAT GITHUB ACTIONS
Workflow, trigger, job, secret, caching, artifact
Dasar Workflow
Workflow Minimal
# .github/workflows/ci.yml
name: CI
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: echo "Hello from CI"
Konsep Utama
| Workflow | File YAML di .github/workflows/ yang mendefinisikan otomasi |
| Event | Trigger yang memulai workflow (push, PR, jadwal, dll.) |
| Job | Kumpulan step yang berjalan di runner yang sama |
| Step | Tugas individual — menjalankan perintah atau menggunakan action |
| Runner | VM yang menjalankan job (ubuntu-latest, macos-latest, windows-latest) |
| Action | Unit kode yang bisa digunakan ulang, direferensikan dengan uses: |
Trigger
Event Umum
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: "0 6 * * 1" # every Monday 6 AM UTC
workflow_dispatch: # manual trigger
Filter Event
| branches: | Trigger hanya untuk branch tertentu |
| paths: | Trigger hanya saat file yang cocok berubah |
| tags: | Trigger saat push tag (v*) |
| types: [opened, synchronize] | Filter tipe aktivitas PR |
| branches-ignore: | Kecualikan branch tertentu |
| paths-ignore: | Kecualikan path file tertentu |
Job & Step
Konfigurasi Job
jobs:
test:
runs-on: ubuntu-latest
needs: build # depends on build job
if: github.ref == 'refs/heads/main'
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- run: npm test
Tipe Step
| run: | Jalankan perintah shell |
| uses: | Gunakan action yang sudah dipublikasikan |
| with: | Teruskan input ke action |
| name: | Nama tampilan di UI |
| id: | Referensikan output step via steps..outputs |
| if: | Eksekusi kondisional |
| continue-on-error: true | Jangan gagalkan job jika step gagal |
Action
Menggunakan Action
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- uses: ./.github/actions/my-action # local action
Action Populer
| actions/checkout@v4 | Checkout kode repository |
| actions/setup-node@v4 | Install Node.js |
| actions/setup-python@v5 | Install Python |
| actions/upload-artifact@v4 | Upload artifact build |
| actions/download-artifact@v4 | Unduh artifact dari job lain |
| actions/cache@v4 | Cache dependensi antar run |
| actions/github-script@v7 | Jalankan JS dengan klien GitHub API |
Environment Variable
Mengatur Variabel
env: # workflow-level
NODE_ENV: production
jobs:
build:
env: # job-level
CI: true
steps:
- run: echo "$MY_VAR"
env: # step-level
MY_VAR: hello
Variabel Default
| github.sha | SHA commit yang memicu workflow |
| github.ref | Ref branch atau tag (refs/heads/main) |
| github.repository | Nama owner/repo |
| github.actor | User yang memicu workflow |
| github.event_name | Event yang memicu workflow |
| runner.os | OS runner (Linux, macOS, Windows) |
Secret
Menggunakan Secret
steps:
- run: deploy --token "$TOKEN"
env:
TOKEN: ${{ secrets.DEPLOY_TOKEN }}
- uses: some/action@v1
with:
api-key: ${{ secrets.API_KEY }}
Aturan Secret
| secrets.GITHUB_TOKEN | Token yang dibuat otomatis, dicakup ke repo |
| Settings → Secrets | Tambah secret di pengaturan repo atau org |
| Masking | Nilai secret disembunyikan di log secara otomatis |
| Environment secrets | Dicakup ke environment deployment |
| Org secrets | Dibagikan ke seluruh repo dalam organisasi |
Matrix Strategy
Matrix Build
jobs:
test:
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
node: [18, 20]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
Opsi Matrix
| matrix: | Definisikan kombinasi variabel yang akan di-expand |
| include: | Tambah kombinasi tambahan ke matrix |
| exclude: | Hapus kombinasi tertentu |
| fail-fast: false | Lanjutkan job lain jika satu gagal |
| max-parallel: 2 | Batasi job matrix yang berjalan bersamaan |
Caching
Cache Dependensi
- uses: actions/cache@v4
with:
path: ~/.npm
key: npm-${{ hashFiles('package-lock.json') }}
restore-keys: npm-
Caching Bawaan
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm # auto-cache for npm/yarn/pnpm
- uses: actions/setup-python@v5
with:
python-version: "3.12"
cache: pip # auto-cache for pip
Artifact
Upload & Download
- uses: actions/upload-artifact@v4
with:
name: build-output
path: dist/
retention-days: 7
- uses: actions/download-artifact@v4
with:
name: build-output
Catatan Artifact
| retention-days | Hapus otomatis setelah N hari (default 90) |
| path | File atau direktori yang diunggah (mendukung glob) |
| Lintas-job | Upload di satu job, download di job lain dengan needs: |
| compression-level | 0 (tidak ada) hingga 9 (maksimal), default 6 |
Pola Umum
Deployment Kondisional
- name: Deploy to production
if: github.ref == 'refs/heads/main'
run: ./deploy.sh
- name: Post PR comment
if: github.event_name == 'pull_request'
run: gh pr comment $PR --body "Build passed"
Ekspresi Berguna
| success() | True jika semua step sebelumnya berhasil |
| failure() | True jika ada step sebelumnya yang gagal |
| always() | Jalankan terlepas dari status (cleanup) |
| cancelled() | True jika workflow dibatalkan |
| contains(github.ref, 'release') | Pemeriksaan contains string |
| startsWith(github.ref, 'refs/tags') | Pemeriksaan prefix string |
| hashFiles('**/lock*') | SHA-256 file (untuk cache key) |