Git 2026

فصل ۲۸ · GitHub Actions

GitHub Actions — از رویداد تا استقرار

GitHub Actions یعنی با هر رویداد (مثلاً push یا PR) یک گردش‌کار YAML روی سرور GitHub اجرا شود: تست، lint، ساخت. Secret را در مخزن ذخیره می‌کنی نه داخل کد.

🎯 اهداف یادگیری

  • workflow، job، step و runner را جدا کنی
  • CI را روی PR اجباری کنی
  • secret را از Environment بخوانی نه از لاگ
  • OIDC را به‌جای Access Key ابری ترجیح دهی
جریان GitHub Actions

شکل ۱۷ — Event → Workflow → Jobs موازی → Checks → Merge/Deploy.

اجرای workflow در GitHub

شکل ۱۸ — صفحهٔ run: جاب‌های lint/test/build و لاگ سبز.

📄 اولین workflow

.github/workflows/ci.yml
name: CI
on:
  pull_request:
  push:
    branches: [main]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.13"
      - run: pip install -r src/requirements.txt
      - run: python src/build.py --html

قواعد:

  • pin اکشن‌ها حداقل روی major (@v4)؛ برای عرضهٔ حساس روی SHA
  • pull_request از fork به secretهای مخزن دسترسی ندارد (امنیت)
  • concurrency را برای لغو runهای کهنه روی همان شاخه بگذار

♻️ Reusable و matrix

از ۲۰۲۵ می‌توان workflowهای reusable را تو در تو صدا زد (تا سقف مستند GitHub). ماتریس برای چند نسخهٔ Node/Python:

matrix
strategy:
  fail-fast: false
  matrix:
    node: [20, 22]

workflow_dispatch حالا تا ۲۵ ورودی دارد — برای ops دستی بهتر از JSON هکی.

🔑 Secrets و OIDC

ابر بدون کلید ماندگار
permissions:
  id-token: write
  contents: read
steps:
  - uses: aws-actions/configure-aws-credentials@v4
    with:
      role-to-assume: arn:aws:iam::123:role/gha
      aws-region: eu-central-1

GitHub یک JWT کوتاه‌عمر به ابر می‌دهد. اگر ریپو لو برود، کلید AWS در Git نیست.

echo secret

echo ${{ secrets.X }} در لاگ می‌آید مگر mask شود. حتی mask هم کامل نیست. secret را چاپ نکن.

🖥️ Actions در VS Code

افزونهٔ GitHub Actions: workflowها، runها، لاگ. gh run watch در ترمینال یکپارچه. روی PR تب Checks همان نتیجه را نشان می‌دهد.

سؤالات مصاحبه (با پاسخ)

Junior — runner چیست؟ ماشین (GitHub-hosted یا self-hosted) که stepها را اجرا می‌کند.

Mid — تفاوت pull_request و pull_request_target؟ دومی در زمینهٔ base با secret اجرا می‌شود — خطرناک اگر checkout روی کد fork باشد.

Senior — OIDC چه حمله‌ای را می‌بندد؟ کلیدهای بلندمدت ذخیره‌شده در secrets که با log یا memory dump می‌لکد؛ همچنین چرخش دستی.

✅ چک‌لیست فهم

  • CI روی هر PR اجرا می‌شود
  • production از Environment با Approve می‌آید
  • اکشن‌ها pin شده‌اند
  • OIDC را حداقل مفهومی بلدی

فصل بعد: امنیت زنجیرهٔ تأمین روی GitHub.

فصل ۲۸ از ۳۶ · مرجع جامع و حرفه‌ای Git و GitHub · ویرایش 1.0.0