بله، میشود GitHub Actions را بهصورت لوکال اجرا کرد، ولی با چند نکته و محدودیت مهم. اجازه بده کامل و عملی توضیحش بدهم:
✅ روش استفاده از GitHub Actions بهصورت محلی
GitHub Actions خودش روی سرورهای GitHub اجرا میشود (در Free Plan محدود به دقیقه، نوع runner، و دسترسی به secrets خصوصی است).
اما برای اجرای همان workflowها روی سیستم خودت (بدون محدودیت زمانی یا حساب)، میتوانی از ابزارهای متنباز زیر استفاده کنی:
🔹 گزینه ۱: استفاده از act (سادهترین روش)
act یک ابزار CLI است که به تو اجازه میدهد workflowهای GitHub Actions را در کامپیوتر خودت با Docker اجرا کنی.
نصب
# macOS / Linux
brew install act
# Windows (با Scoop)
scoop install act
اجرای workflow
در پوشه مخزن (که فایل .github/workflows/ دارد):
act
میتواند با آرگومانهای خاص اجرا شود:
# اجرای فقط workflow مربوط به pull_request
act pull_request
# اجرای job خاص
act -j build
ویژگیها
-
از Docker برای اجرای jobها استفاده میکند (هر job در یک container).
-
میتواند secrets محلی بخواند (مثلاً از .secrets یا env).
-
محدودیتی در زمان یا نوع runner ندارد.
-
تقریباً با syntax واقعی GitHub Actions سازگار است.
نکته:
برخی actionها (بهخصوص آنهایی که به GitHub API نیاز دارند مثل actions/checkout@v4) ممکن است نیاز به mock یا token محلی داشته باشند.
🔹 گزینه ۲: استفاده از Self-hosted Runner
اگر میخواهی واقعاً از GitHub Actions خود GitHub استفاده کنی ولی روی سرور یا لپتاپ خودت اجرا شود:
-
به مخزن در GitHub برو.
-
مسیر زیر را باز کن:
Settings → Actions → Runners → New self-hosted runner
-
دستوراتی که GitHub بهت میدهد را در سیستم خودت اجرا کن:
./config.sh --url https://github.com/USERNAME/REPO --token XYZ
./run.sh
-
حالا وقتی workflow اجرا میشود، jobها در سیستم محلی تو اجرا میشوند، نه در سرور GitHub.
✅ مزیت:
-
workflow واقعی روی GitHub اجرا میشود، اما با منابع سختافزاری خودت.
-
محدودیت دقیقههای GitHub runner را نداری.
⚠️ نکته:
-
در Free Plan فقط میتوانی runner خصوصی برای مخزن خودت تعریف کنی، نه برای Organization خصوصی (در آن حالت GitHub Pro/Team لازم است).
-
سیستم تو باید روشن و متصل به اینترنت باشد هنگام اجرای job.
🧭 نتیجهگیری سریع
روش |
نوع اجرا |
محدودیت |
نیاز به اینترنت |
سازگاری |
act |
کاملاً لوکال |
ندارد |
اختیاری |
بسیار زیاد |
Self-hosted Runner |
نیمهلوکال (اتصال به GitHub) |
محدود به حساب Free |
بله |
کامل |