چیت شیت GitHub Actions
یک مرجع GitHub Actions قابلجستجو و قابلچاپ: trigger های گردشکار، job ها، step ها، عبارتها، matrix ها، caching و گردشکارهای قابلاستفاده مجدد. رایگان.
Workflow skeleton & triggers
12.github/workflows/ci.yml
name: CI
on: push
on: { push: { branches: [main] } }
on: { push: { tags: ["v*"] } }
on: pull_request
on: { pull_request: { paths: ["src/**"] } }
on: { schedule: [{ cron: "0 6 * * 1" }] }
on: workflow_dispatch
workflow_dispatch: { inputs: { env: { type: choice, options: [dev, prod] } } }
on: { release: { types: [published] } }
on: workflow_call
Jobs & runners
12jobs: { build: { runs-on: ubuntu-latest } }
runs-on: [macos-latest / windows-latest]
runs-on: [self-hosted, linux, x64]
needs: build
needs: [lint, test]
if: github.ref == 'refs/heads/main'
container: node:22
services: { redis: { image: redis:7, ports: ["6379:6379"] } }
outputs: { sha: ${{ steps.vars.outputs.sha }} }
needs.build.outputs.sha
defaults: { run: { working-directory: app } }
strategy: { fail-fast: false }
Steps & popular actions
14- uses: actions/checkout@v4
- uses: actions/checkout@v4 with fetch-depth: 0
- uses: actions/setup-node@v4 with node-version: 22
- uses: actions/setup-python@v5 with python-version: "3.12"
- uses: shivammathur/setup-php@v2 with php-version: "8.3"
- run: npm ci && npm test
- run: | (multiline)
- name: Build
- id: vars
echo "sha=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
echo "PATH_EXTRA=/opt/bin" >> "$GITHUB_ENV"
- uses: actions/upload-artifact@v4
- uses: actions/download-artifact@v4
continue-on-error: true
Expressions & contexts
14${{ github.ref }}
${{ github.ref_name }}
${{ github.sha }}
${{ github.event_name }}
${{ github.actor }}
${{ github.repository }}
${{ github.event.pull_request.number }}
${{ secrets.API_KEY }}
${{ vars.SITE_URL }}
${{ env.NODE_ENV }}
${{ runner.os }} / ${{ runner.temp }}
${{ steps.vars.outputs.sha }}
contains(), startsWith(), format()
GITHUB_TOKEN
Conditionals & matrix
11if: success() / failure() / always()
if: cancelled()
if: github.event_name == 'push'
if: startsWith(github.ref, 'refs/tags/')
if: contains(github.event.head_commit.message, '[skip e2e]')
strategy: { matrix: { node: [20, 22] } }
matrix: { os: [ubuntu-latest, macos-latest], node: [20, 22] }
${{ matrix.node }}
matrix: { include: [{ os: ubuntu-latest, node: 23, experimental: true }] }
matrix: { exclude: [{ os: macos-latest, node: 20 }] }
max-parallel: 2
Caching & artifacts
11- uses: actions/cache@v4
key: npm-${{ hashFiles('package-lock.json') }}
restore-keys: | npm-
path: ~/.npm
setup-node@v4 with cache: npm
setup-python@v5 with cache: pip
upload-artifact@v4 with name/path
upload-artifact: retention-days: 5
download-artifact@v4 (no name)
if-no-files-found: error
Cache limit: 10 GB per repo
Environments & permissions
11permissions: { contents: read }
permissions: { contents: write, pull-requests: write }
permissions: { id-token: write }
environment: production
environment: { name: prod, url: https://app.example.com }
Environment protection rules
env: { NODE_ENV: production }
secrets.GITHUB_TOKEN
Settings > Secrets and variables > Actions
Org secrets with repo allowlists
pull_request_target: use with care
Reusable workflows & composite actions
11on: { workflow_call: { inputs: ..., secrets: ... } }
jobs: { ci: { uses: org/repo/.github/workflows/ci.yml@v1 } }
uses: ./.github/workflows/ci.yml
with: { node-version: 22 }
secrets: inherit
${{ inputs.node-version }}
action.yml with runs: { using: composite }
steps: - run: ... shell: bash
uses: ./.github/actions/setup
inputs/outputs in action.yml
Nesting limit: 4 levels of reusable calls
Concurrency & timeouts
9concurrency: { group: deploy, cancel-in-progress: true }
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
timeout-minutes: 15 (job level)
timeout-minutes: 5 (step level)
retry via nick-fields/retry@v3
jobs.<id>.strategy.max-parallel
if: always() on cleanup steps
Scheduled runs can be delayed/skipped
Common recipes
12on: push: tags: ["v*"] + softprops/action-gh-release@v2
on: push: paths: ["apps/api/**"]
dorny/paths-filter@v3
peaceiris/actions-gh-pages@v4
docker/build-push-action@v6
docker/login-action@v3 with ghcr.io
aws-actions/configure-aws-credentials@v4 (OIDC)
appleboy/ssh-action@v1
codecov/codecov-action@v4
github/codeql-action
dependabot.yml + auto-merge workflow
schedule + stale action
Debugging
12Secret ACTIONS_STEP_DEBUG = true
Secret ACTIONS_RUNNER_DEBUG = true
Re-run jobs > Enable debug logging
act
act -j build
act -s GITHUB_TOKEN=$(gh auth token)
echo "::debug::message"
echo "::error file=app.js,line=1::Oops"
echo "::group::Install" ... "::endgroup::"
$GITHUB_STEP_SUMMARY
mxschmitt/action-tmate@v3
cat "$GITHUB_EVENT_PATH"
gh CLI for Actions
13gh run list
gh run list --workflow ci.yml
gh run watch
gh run view 123456 --log
gh run view --log-failed
gh run rerun 123456 --failed
gh run cancel 123456
gh run download 123456
gh workflow list
gh workflow run ci.yml -f env=prod
gh workflow disable ci.yml
gh secret set API_KEY
gh cache list / gh cache delete
هیچ موردی با «:q» مطابقت ندارد.
درباره چیت شیت GitHub Actions
این تقلبنامه GitHub Actions فایلهای YAML گردشکار را در یک صفحه قابلجستجو فشرده میکند: اسکلت گردشکار و trigger ها، job ها و runner ها، step ها و action های محبوب، عبارتها و context ها، شرطها و matrix build ها، caching و artifact ها، environment ها و مجوزها، گردشکارهای قابلاستفاده مجدد و action های ترکیبی، همزمانی و timeout ها، دستورالعملهای رایج، دیباگ، و دستورهای gh CLI برای Actions.
فایلهای گردشکار بیشتر نحوی هستند که باید بهخاطر سپرد (کدام trigger روی یک تگ فعال میشود، چگونه به یک secret ارجاع دهیم، عبارت if که یک step را روی یک fork رد میکند، الگوی cache key برای یک lockfile)، پس هر ردیف قطعه YAML را با یک توضیح یکخطی نشان میدهد.
این برگه رایگان و سمتکلاینت است: ردیفها را زنده با جعبه جستجو فیلتر کنید، با فهرست مطالب چسبان بین بخشها بپرید، هر قطعه را با یک کلیک کپی کنید و صفحه را بهعنوان مرجع روی میز چاپ کنید.
نحوه استفاده از چیت شیت GitHub Actions
- بخشها را مرور کنید، از Workflow skeleton & triggers و Jobs & runners تا gh CLI for Actions.
- برای فیلتر زنده هر ردیف، کلیدواژهای مانند matrix، secrets یا cache را جستجو کنید.
- برای یک کار build، test یا deploy آماده جهت تطبیق، به Common recipes بروید.
- روی یک قطعه YAML یا آیکون کپی آن کلیک کنید تا در فایل گردشکار شما کپی شود.
- برگه را برای یک مرجع آفلاین GitHub Actions چاپ کنید.