BelajarKoding Logobelajarkoding

Platform belajar web development Indonesia. Artikel, cheat sheets, roadmap, dan code challenges untuk developer Indonesia.

Navigasi

  • Artikel
  • Cheat Sheets
  • Roadmap
  • Challenges
  • Pricing
  • Search

Produk Lain

  • JagoHermes
  • KelasClaude
  • KilatKoding
  • BelajarVibeCoding
  • JualanKoding

Support

  • Privacy Policy
  • Terms of Service
  • Email

© 2026 BelajarKoding. All rights reserved.

Galih PratamaBagian dari ekosistem Galih Pratama
belajarkoding LogobyGalih Pratama
RoadmapArtikelCheat SheetsChallengesUpgrade
belajarkoding LogobyGalih Pratama
RoadmapArtikelCheat SheetsChallengesUpgrade
belajarkoding LogobyGalih Pratama
RoadmapArtikelCheat SheetsChallengesUpgrade

Daftar Isi

Basic Workflow StructureCommon TriggersRunnersEnvironment VariablesSecretsMatrix StrategyCommon ActionsCheckout CodeSetup LanguagesCachingArtifactsJob DependenciesConditionalsOutputsConcurrencyPermissionsTimeoutsDocker ActionsReusable WorkflowsContext VariablesPattern UmumNode.js CIDeploy on TagPR CommentsAuto-label PRsDebuggingBest PracticesCommon ActionsResources
GitHub ActionsCI/CDDevOpsAutomation

GitHub Actions Cheat Sheet

Quick reference GitHub Actions. Workflow syntax, common triggers, jobs, steps, secrets, caching, dan CI/CD best practices.

YAML8 min read1.536 kata
Silakan login atau daftar untuk membaca cheat sheet ini.

#Basic Workflow Structure

Struktur dasar workflow GitHub Actions yang terdiri dari nama, trigger, jobs, dan steps untuk menjalankan automasi.

yaml
name: Workflow Name
 
on: [push, pull_request]
 
jobs:
 job-name:
  runs-on: ubuntu-latest
 
  steps:
   - uses: actions/checkout@v5
   - run: echo "Hello World"

#Common Triggers

Berbagai cara untuk memicu workflow berjalan, seperti push, pull request, schedule, atau manual trigger.

yaml
# Push to branches
on:
 push:
  branches: [ main, develop ]
  tags: [ 'v*' ]
  paths:
   - 'src/**'
   - '!docs/**'
 
# Pull requests
on:
 pull_request:
  types: [opened, synchronize, reopened]
  branches: [ main ]
 
# Schedule (cron)
on:
 schedule:
  - cron: '0 0 * * *' # Daily at midnight UTC
  - cron: '0 */6 * * *' # Every 6 hours
 
# Manual trigger
on:
 workflow_dispatch:
  inputs:
   environment:
    description: 'Deploy environment'
    required: true
    type: choice
    options: [staging, production]
 
# Multiple events
on: [push, pull_request, workflow_dispatch]
 
# Workflow call (reusable)
on:
 workflow_call:
  inputs:
   config-path:
    required: true
    type: string

#Runners

Runner adalah mesin tempat workflow berjalan, bisa menggunakan GitHub-hosted atau self-hosted runner.

yaml
# GitHub-hosted
runs-on: ubuntu-latest    # Ubuntu (most common)
runs-on: windows-latest    # Windows
runs-on: macos-latest    # macOS
runs-on: ubuntu-22.04    # Specific version
 
# Matrix
runs-on: ${{ matrix.os }}
 
# Self-hosted
runs-on: self-hosted
runs-on: [self-hosted, linux, x64]

#Environment Variables

Environment variables memungkinkan kita menyimpan konfigurasi yang bisa digunakan di berbagai level workflow.

yaml
# Workflow level
env:
 NODE_ENV: production
 
jobs:
 build:
  # Job level
  env:
   API_URL: https://api.example.com
 
  steps:
   # Step level
   - run: npm build
    env:
     BUILD_ENV: staging
 
   # Use variables
   - run: echo "API is $API_URL"
   - run: echo "Node env is ${{ env.NODE_ENV }}"

#Secrets

Secrets menyimpan informasi sensitif seperti API keys yang tidak boleh terlihat di kode workflow.

yaml
# Use secrets
- run: npm run deploy
 env:
  API_KEY: ${{ secrets.API_KEY }}
  DATABASE_URL: ${{ secrets.DATABASE_URL }}
 
# GitHub token (auto-provided)
- run: gh api /user
 env:
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

#Matrix Strategy

Matrix strategy memungkinkan menjalankan workflow dengan kombinasi parameter berbeda secara paralel.

yaml
strategy:
 matrix:
  os: [ubuntu-latest, windows-latest, macos-latest]
  node-version: [18, 20, 22]
  # Creates 9 jobs (3 × 3)
 
 fail-fast: true # Stop all if one fails
 max-parallel: 2 # Run max 2 jobs simultaneously
 
steps:
 - uses: actions/setup-node@v6
  with:
   node-version: ${{ matrix.node-version }}

#Common Actions

Actions adalah komponen reusable yang memudahkan setup environment dan melakukan tugas-tugas umum.

#Checkout Code

Action untuk mengambil kode dari repository ke dalam runner.

yaml
- uses: actions/checkout@v5
 with:
  fetch-depth: 0 # Full history
  submodules: true # Include submodules

#Setup Languages

Actions untuk setup bahasa pemrograman seperti Node.js, Python, Go, dan Java dengan versi tertentu.

yaml
# Node.js
- uses: actions/setup-node@v6
 with:
  node-version: '20'
  cache: 'npm'
 
# Python
- uses: actions/setup-python@v5
 with:
  python-version: '3.12'
  cache: 'pip'
 
# Go
- uses: actions/setup-go@v5
 with:
  go-version: '1.21'
 
# Java
- uses: actions/setup-java@v4
 with:
  distribution: 'temurin'
  java-version: '21'

#Caching

Caching mempercepat build dengan menyimpan dependencies yang sudah di-install sebelumnya.

yaml
# Automatic (Node.js)
- uses: actions/setup-node@v6
 with:
  node-version: '20'
  cache: 'npm'
 
# Manual
- uses: actions/cache@v4
 with:
  path: |
   ~/.npm
   node_modules
  key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
  restore-keys: |
   ${{ runner.os }}-node-

#Artifacts

Artifacts memungkinkan menyimpan dan berbagi file hasil build antar jobs atau workflow.

yaml
# Upload
- uses: actions/upload-artifact@v4
 with:
  name: build-files
  path: dist/
  retention-days: 7
 
# Download
- uses: actions/download-artifact@v4
 with:
  name: build-files
  path: dist/

#Job Dependencies

Job dependencies mengatur urutan eksekusi jobs agar jobs tertentu menunggu jobs lain selesai.

yaml
jobs:
 build:
  runs-on: ubuntu-latest
  steps:
   - run: npm build
 
 test:
  needs: build # Wait for build
  runs-on: ubuntu-latest
  steps:
   - run: npm test
 
 deploy:
  needs: [build, test] # Wait for both
  runs-on: ubuntu-latest
  steps:
   - run: npm run deploy

#Conditionals

Conditionals memungkinkan menjalankan jobs atau steps berdasarkan kondisi tertentu seperti branch atau event.

yaml
# Job level
jobs:
 deploy:
  if: github.ref == 'refs/heads/main'
  runs-on: ubuntu-latest
 
# Step level
steps:
 - name: Deploy to production
  if: github.event_name == 'push' && github.ref == 'refs/heads/main'
  run: npm run deploy
 
 # Common conditions
 - if: success() # Previous steps succeeded
 - if: failure() # Previous steps failed
 - if: always()  # Always run
 - if: cancelled() # Workflow cancelled
 
 # Check actor
 - if: github.actor != 'dependabot[bot]'
  run: npm test
 
 # Check event
 - if: github.event_name == 'pull_request'
  run: echo "This is a PR"

#Outputs

Outputs memungkinkan jobs berbagi data hasil eksekusi dengan jobs lain dalam workflow.

yaml
jobs:
 build:
  runs-on: ubuntu-latest
  outputs:
   version: ${{ steps.get-version.outputs.version }}
 
  steps:
   - id: get-version
    run: echo "version=1.2.3" >> $GITHUB_OUTPUT
 
 deploy:
  needs: build
  runs-on: ubuntu-latest
  steps:
   - run: echo "Deploying version ${{ needs.build.outputs.version }}"

#Concurrency

Concurrency mengatur agar workflow yang sama tidak berjalan bersamaan, membatalkan yang lama saat yang baru dimulai.

yaml
concurrency:
 group: ${{ github.workflow }}-${{ github.ref }}
 cancel-in-progress: true # Cancel old runs on new push

#Permissions

Permissions mengatur hak akses workflow terhadap repository dan API GitHub.

yaml
permissions:
 contents: write   # Push to repo
 pull-requests: write # Comment on PRs
 issues: write    # Manage issues
 packages: write   # Publish packages
 deployments: write # Create deployments

#Timeouts

Timeouts membatasi waktu eksekusi jobs dan steps untuk mencegah workflow berjalan terlalu lama.

yaml
jobs:
 build:
  runs-on: ubuntu-latest
  timeout-minutes: 10 # Job timeout
 
  steps:
   - run: npm test
    timeout-minutes: 5 # Step timeout

#Docker Actions

Docker actions memungkinkan menggunakan container atau build/push Docker images dalam workflow.

yaml
# Use container
jobs:
 build:
  runs-on: ubuntu-latest
  container:
   image: node:20-alpine
   env:
    NODE_ENV: production
 
# Build & push Docker image
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
 with:
  username: ${{ secrets.DOCKER_USERNAME }}
  password: ${{ secrets.DOCKER_PASSWORD }}
 
- uses: docker/build-push-action@v5
 with:
  context: .
  push: true
  tags: user/app:latest
  cache-from: type=gha
  cache-to: type=gha,mode=max

#Reusable Workflows

Reusable workflows memungkinkan membuat workflow yang bisa digunakan ulang di berbagai repository atau workflow lain.

yaml
# .github/workflows/reusable.yml
on:
 workflow_call:
  inputs:
   environment:
    required: true
    type: string
  outputs:
   result:
    value: ${{ jobs.deploy.outputs.result }}
 
jobs:
 deploy:
  runs-on: ubuntu-latest
  outputs:
   result: ${{ steps.deploy.outputs.status }}
  steps:
   - run: echo "Deploying to ${{ inputs.environment }}"
yaml
# .github/workflows/main.yml
jobs:
 call-workflow:
  uses: ./.github/workflows/reusable.yml
  with:
   environment: production

#Context Variables

Context variables menyediakan informasi tentang event, repository, dan environment yang bisa digunakan dalam workflow.

yaml
# GitHub context
${{ github.event_name }}   # push, pull_request, etc.
${{ github.ref }}       # refs/heads/main
${{ github.sha }}       # Commit SHA
${{ github.actor }}      # User who triggered
${{ github.repository }}   # owner/repo
${{ github.workspace }}    # /home/runner/work/repo/repo
 
# Runner context
${{ runner.os }}       # Linux, Windows, macOS
${{ runner.arch }}      # X64, ARM, ARM64
${{ runner.temp }}      # Temp directory
 
# Job context
${{ job.status }}       # success, failure, cancelled
 
# Steps context
${{ steps.step-id.outputs.value }}
${{ steps.step-id.conclusion }} # success, failure

#Pattern Umum

Common patterns menunjukkan contoh workflow yang sering digunakan untuk berbagai jenis proyek.

#Node.js CI

Workflow standar untuk continuous integration aplikasi Node.js dengan testing dan linting.

yaml
name: Node.js CI
 
on: [push, pull_request]
 
jobs:
 test:
  runs-on: ubuntu-latest
 
  strategy:
   matrix:
    node-version: [18, 20, 22]
 
  steps:
   - uses: actions/checkout@v5
   - uses: actions/setup-node@v6
    with:
     node-version: ${{ matrix.node-version }}
     cache: 'npm'
   - run: npm ci
   - run: npm test
   - run: npm run lint

#Deploy on Tag

Workflow yang otomatis deploy aplikasi ketika ada tag baru (release) dibuat.

yaml
name: Release
 
on:
 push:
  tags: ['v*']
 
jobs:
 deploy:
  runs-on: ubuntu-latest
  steps:
   - uses: actions/checkout@v5
   - run: npm ci
   - run: npm run build
   - run: npm publish
    env:
     NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

#PR Comments

Workflow untuk memberikan komentar otomatis pada pull request.

yaml
- uses: actions/github-script@v7
 with:
  script: |
   github.rest.issues.createComment({
    issue_number: context.issue.number,
    owner: context.repo.owner,
    repo: context.repo.repo,
    body: 'Build successful!'
   })

#Auto-label PRs

Workflow untuk otomatis memberikan label pada pull request berdasarkan file yang diubah.

yaml
- uses: actions/labeler@v5
 with:
  repo-token: ${{ secrets.GITHUB_TOKEN }}

#Debugging

Teknik-teknik debugging untuk memecahkan masalah dalam workflow GitHub Actions.

yaml
# Debug step
- name: Debug
 run: |
  echo "Event: ${{ github.event_name }}"
  echo "Ref: ${{ github.ref }}"
  echo "SHA: ${{ github.sha }}"
  env
 
# Enable debug logs
# Set repository secrets:
# ACTIONS_RUNNER_DEBUG = true
# ACTIONS_STEP_DEBUG = true

#Best Practices

Panduan praktik terbaik untuk membuat workflow GitHub Actions yang efisien dan aman.

  • Pin action versions (@v4, not @main)
  • Use caching for dependencies
  • Set timeouts for jobs/steps
  • Use concurrency to cancel old runs
  • Split workflows by purpose (CI, deploy, release)
  • Use secrets for credentials
  • Add branch protection rules
  • Use matrix for multi-version testing
  • Fail fast in matrix builds
  • Use reusable workflows for common tasks

#Common Actions

Tabel daftar actions populer yang sering digunakan dalam workflow.

ActionPurpose
actions/checkout@v5Checkout code
actions/setup-node@v6Setup Node.js
actions/cache@v4Cache dependencies
actions/upload-artifact@v4Save build outputs
docker/build-push-action@v5Build & push Docker
aws-actions/configure-aws-credentials@v4AWS auth
google-github-actions/auth@v2GCP auth
azure/login@v2Azure auth

#Resources

Link-link berguna untuk belajar GitHub Actions lebih dalam.

  • GitHub Actions Documentation
  • Actions Marketplace
  • Workflow Syntax
  • act - Run locally

Happy automating!

Baca Cheat Sheet Lengkap

Login atau daftar akun gratis untuk membaca cheat sheet ini.

LoginDaftar Gratis
Share: