Cheatsheet GitHub Actions - Struktur Standar dan Daftar Aksi yang Paling Berguna

Sedikit tentang GitHub Actions yang umum dan struktur mereka.

Konten Halaman

GitHub Actions
adalah platform otomatisasi dan CI/CD dalam GitHub, digunakan untuk membangun, menguji, dan mendeploy kode Anda berdasarkan kejadian seperti push, pull request, atau jadwal tertentu.

Selain penggunaan standar GitHub, Anda juga dapat menggunakan GitHub Actions pada server Gitea self-hosted.

github actions flow

Ringkasan ini mencakup struktur GitHub Actions, deskripsi singkat, dan aksi paling umum yang digunakan dalam alur kerja open source maupun komersial.
Aksi mencakup alat resmi, komunitas, dan pihak ketiga, mendukung otomatisasi dari pembuatan dan pengujian hingga penerapan,
manajemen rilis, QA, dan notifikasi.

Struktur Konfigurasi Dasar

GitHub Actions Workflows didefinisikan dalam file YAML yang berada di direktori .github/workflows dalam repositori.

name: Nama Workflow
on:
  push:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - name: Run tests
        run: npm test
  • Blok on menentukan kejadian pemicu.
  • Setiap job berjalan di runner sendiri.
  • steps dapat menjalankan perintah shell atau memanggil aksi yang dapat digunakan kembali.

Komponen Utama Workflow

Komponen Deskripsi
Workflow Proses otomatis (YAML) yang dipicu oleh suatu kejadian
Event Aktivitas yang memicu workflow (push, pull_request, dll.)
Job Serangkaian langkah yang dieksekusi di runner, dapat berjalan berurutan atau paralel
Step Setiap perintah atau aksi dalam sebuah job
Runner VM atau container di mana job dijalankan
Action Ekstensi/penambahan yang dapat digunakan kembali yang mengemas tugas tertentu

Kejadian Pemicu

  • push
  • pull_request
  • schedule (menggunakan sintaks cron)
  • workflow_dispatch (pemicu manual, memungkinkan parameter input)
  • release, issue, dll.

Contoh:

on:
  push:
    branches: [ main ]
  workflow_dispatch:
    inputs:
      environment:
        description: 'Lingkungan Deployment'
        required: true
        default: 'production'
        type: string

Aksi Bawaan yang Berguna

Aksi Tujuan Parameter Umum
actions/checkout Memeriksa kode repositori ref, token, submodules, persist-credentials
actions/setup-node Menyiapkan lingkungan Node.js node-version, cache, architecture, check-latest
actions/setup-python Menyiapkan Python python-version, architecture
actions/cache Meng-cache dependensi path, key, restore-keys
docker/build-push-action Membangun & mendorong gambar Docker context, file, platforms, tags, push, build-args
actions/upload-artifact Mengunggah artefak pembangunan name, path, if-no-files-found
actions/download-artifact Mengunduh artefak name, path
github/email-actions Mengirim notifikasi email to, subject, content, attachments
peter-evans/create-pull-request Membuat PR melalui workflow branch, title, body, labels, base
actions/github-script Menjalankan JavaScript acak dalam workflow script, github-token

Parameter Aksi

Parameter Umum untuk Setiap Panggilan Aksi:

- name: Beberapa Aksi atau Langkah
  uses: owner/repo@ref
  with:
    param1: value
    param2: value
  env:
    ENV_VAR: value
  if: ${{ condition }}
  run: command_to_run
  shell: bash|pwsh|python|sh
  continue-on-error: true|false
  • with: argumen yang diberikan ke aksi (lihat dokumen aksi untuk semua opsi)
  • env: variabel lingkungan untuk langkah
  • if: eksekusi kondisional
  • run: perintah shell (jika tidak menggunakan aksi)
  • shell: shell yang digunakan untuk menjalankan langkah
  • continue-on-error: tetap melanjutkan bahkan jika langkah gagal

Mendefinisikan Input Aksi Kustom

Dalam metadata aksi Anda (action.yml):

inputs:
  example-input:
    description: 'Contoh input'
    required: false
    default: 'default-value'

Ketika digunakan dalam workflow:

- uses: my/action@v1
  with:
    example-input: 'custom-value'

Diakses sebagai variabel lingkungan INPUT_EXAMPLE_INPUT ketika aksi dijalankan.

Contoh: Workflow dengan Parameter Manual

name: Deploy
on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'Lingkungan Deployment'
        required: true
        default: 'production'
        type: string
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Deploy to environment
        run: echo "Deploying to ${{ github.event.inputs.environment }}"

Pasar Aksi

  • Ribuan aksi yang dapat digunakan kembali tersedia di GitHub Marketplace.
  • Kategori mencakup: deployment cloud, alat notifikasi, kerangka pengujian, analisis kode, dan lainnya.
  • Eksplorasi: actions/checkout, actions/setup-node, docker/build-push-action, actions/cache, actions/upload-artifact, dan banyak lainnya.

Tips Cepat

  • Letakkan file workflow di .github/workflows.
  • Gunakan workflow_dispatch dengan inputs untuk eksekusi manual dan berparameter.
  • Gunakan aksi cache untuk mempercepat instalasi dependensi.
  • Gunakan matriks job untuk menguji berbagai versi OS/runtime.
  • Gunakan rahasia untuk data sensitif, dirujuk sebagai ${{ secrets.SECRET_NAME }}.

Cheatsheet ini mencakup esensial penggunaan, konfigurasi, dan ekstensi GitHub Actions untuk otomatisasi, CI/CD, dan lainnya. Untuk detail dan pembaruan lebih lanjut, selalu periksa dokumentasi resmi GitHub dan repositori aksi.

GitHub Actions Umum

Berikut adalah daftar praktis aksi GitHub yang sering digunakan untuk membantu mengotomatisasi CI/CD, pengujian, pembuatan, deployment, dan tugas alur kerja:

Aksi Resmi Inti

Aksi Tujuan Parameter Kunci
actions/checkout Memeriksa kode repositori ref, submodules
actions/setup-node Menyiapkan lingkungan Node.js node-version, cache
actions/setup-python Menyiapkan lingkungan Python python-version
actions/setup-java Menyiapkan JDK Java distribution, java-version
actions/cache Meng-cache dependensi dan output pembangunan path, key, restore-keys
actions/upload-artifact Mengunggah artefak pembangunan name, path
actions/download-artifact Mengunduh artefak dari workflow name, path
actions/github-script Menjalankan JavaScript menggunakan konteks GitHub dan API script
actions/create-release Membuat rilis GitHub tag_name, release_name
actions/upload-release-asset Mengunggah aset ke rilis upload_url, asset_path
actions/labeler Otomatis menerapkan label ke issues/PRs repo-token, configuration-path

Aksi Komunitas & Pihak Ketiga Populer

Aksi Tujuan
docker/build-push-action Membangun dan mendorong gambar Docker
actions/setup-go Menyiapkan lingkungan Go
super-linter/super-linter Pemeriksaan otomatis kode universal
trufflesecurity/trufflehog Memindai rahasia dan kredensial
peaceiris/actions-gh-pages Mendeploy situs statis ke GitHub Pages
JamesIves/github-pages-deploy-action Mendeploy proyek ke GitHub Pages
peter-evans/create-pull-request Membuat pull request secara otomatis
softprops/action-gh-release Membuat dan mengunggah rilis GitHub
ad-m/github-push-action Mengirim perubahan kembali ke repositori GitHub
actions/setup-dotnet Menyiapkan SDK .NET
azure/login Mengautentikasi ke Azure
google-github-actions/auth Mengautentikasi ke Google Cloud

Aksi Pengujian, QA, dan Pelaporan

Aksi Tujuan
actions/setup-ruby Menyiapkan lingkungan Ruby
codecov/codecov-action Mengunggah laporan cakupan kode ke Codecov
coverallsapp/github-action Mengunggah hasil cakupan ke Coveralls
dorny/test-reporter Menambahkan hasil pengujian ke GitHub Checks
stefanzweifel/git-auto-commit-action Mengkomit dan mendorong perubahan file secara otomatis

Aksi Deployment & Notifikasi

Aksi Tujuan
appleboy/scp-action Mengunggah file menggunakan SCP
SamKirkland/FTP-Deploy-Action Mendeploy file melalui FTP/FTPS
cypress-io/github-action Menjalankan pengujian akhir ujung Cypress
slackapi/slack-github-action Mengirim pesan ke Slack
dawidd6/action-send-mail Mengirim email selama eksekusi workflow

Aksi Utilitas & Manajemen Workflow

Aksi Tujuan
peter-evans/repository-dispatch Memicu workflow repositori eksternal
fregante/setup-git-user Menetapkan kredensial pengguna Git
andymckay/labeler Memberi label issues dan PR berdasarkan jalur
actions/configure-pages Mengonfigurasi penerbitan ke GitHub Pages
EndBug/add-and-commit Menambahkan & mengkomit file dalam workflow
dangoslen/changelog-enforcer Memeriksa apakah changelog diperbarui untuk PRs

Cara Mencari Lebih Lanjut

Ada banyak GurHub Actions yang memungkinkan otomatisasi workflow seperti pengujian otomatis, deployment ke produksi, notifikasi, dan integrasi dengan layanan lainnya. Github Marketplace menyediakan ribuan aksi di berbagai kategori seperti pengujian, keamanan, deployment, notifikasi, kualitas kode, dan integrasi. Daftar yang disusun seperti “Awesome Actions” juga sangat berguna untuk inspirasi dan penemuan.

Tautan Berguna