GitHub Actions یعنی با هر رویداد (مثلاً push یا PR) یک گردشکار YAML روی سرور GitHub اجرا شود: تست، lint، ساخت. Secret را در مخزن ذخیره میکنی نه داخل کد.
🎯 اهداف یادگیری
- workflow، job، step و runner را جدا کنی
- CI را روی PR اجباری کنی
- secret را از Environment بخوانی نه از لاگ
- OIDC را بهجای Access Key ابری ترجیح دهی
شکل ۱۷ — Event → Workflow → Jobs موازی → Checks → Merge/Deploy.
شکل ۱۸ — صفحهٔ run: جابهای lint/test/build و لاگ سبز.
📄 اولین workflow
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:
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 ${{ 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.