گیتهاب
GitHub
مدیریت خودکار Issues، Pull Requests، Repositories و CI/CD در GitHub
نمای کلی
نود GitHub چیست؟
نود GitHub امکان اتصال و خودکارسازی فرآیندهای توسعه نرمافزار را در n8n فراهم میکند. GitHub بزرگترین پلتفرم Git-based hosting با بیش از ۱۰۰ میلیون توسعهدهنده است.
قابلیتهای کلیدی:
- مدیریت Issues: ایجاد، ویرایش، بستن، label و assign کردن issues
- Pull Requests: ایجاد PR، مدیریت review، merge و close
- Repository: ایجاد repo، مدیریت branches، دریافت اطلاعات
- Releases: ایجاد release، آپلود assets، مدیریت نسخهها
- Files: خواندن، ایجاد و ویرایش فایلها در repository
- Users & Organizations: دریافت اطلاعات کاربران و سازمانها
- Webhooks: دریافت eventها از GitHub (push, PR, issue, etc.)
حالتهای Trigger:
- GitHub Trigger: دریافت webhook eventها (push, pull_request, issues, release, etc.)
- Polling: بررسی دورهای تغییرات بدون نیاز به webhook
محدودیتهای API:
- Authenticated: ۵,۰۰۰ درخواست در ساعت
- GitHub App: ۱۵,۰۰۰ درخواست در ساعت (توصیه شده)
- Search API: ۳۰ درخواست در دقیقه
احراز هویت
احراز هویت GitHub
روش ۱: Personal Access Token (سادهترین)
- 1به Settings > Developer Settings > Personal Access Tokens بروید
- 2روی "Generate new token (classic)" کلیک کنید
- 3نام توکن و تاریخ انقضا را تنظیم کنید
- 4Scopes مورد نیاز را انتخاب کنید:
repo: دسترسی کامل به repositoriesadmin:repo_hook: مدیریت webhooksread:org: خواندن اطلاعات organizationuser: دسترسی به اطلاعات کاربرworkflow: مدیریت GitHub Actions
- 1Token را کپی کرده و در n8n وارد کنید
⚠️ نکته امنیتی: از Fine-grained tokens (جدیدتر) استفاده کنید که دسترسی محدودتری دارند.
روش ۲: GitHub App (توصیه شده برای Production)
- 1به Settings > Developer Settings > GitHub Apps بروید
- 2یک New GitHub App بسازید
- 3Permissions مورد نیاز را تنظیم کنید:
- Repository permissions: Issues (Read & Write), Pull requests (Read & Write), Contents (Read & Write)
- Organization permissions: Members (Read)
- 1App را روی repository یا organization نصب کنید
- 2App ID, Private Key و Installation ID را در n8n وارد کنید
مزایای GitHub App:
- Rate limit بالاتر (۱۵,۰۰۰ req/hour)
- دسترسیهای granular
- بدون وابستگی به اکانت شخصی
- مناسب برای team workflows
روش ۳: OAuth2
- 1در Settings > Developer Settings > OAuth Apps یک app بسازید
- 2Client ID و Client Secret را در n8n وارد کنید
- 3Callback URL را تنظیم کنید
- 4کاربران با OAuth login میکنند
عملیاتهای موجود
issue-create
ایجاد issue جدید در repository
issue-update
ویرایش issue موجود
issue-get
دریافت اطلاعات یک issue خاص
issue-list
دریافت لیست issues با فیلتر
issue-comment
ارسال کامنت روی issue یا PR
issue-lock
قفل یا باز کردن issue برای جلوگیری از کامنت
pr-create
ایجاد pull request جدید
pr-merge
Merge کردن pull request
pr-review
ارسال review روی pull request
pr-list
دریافت لیست PRها
repo-get
دریافت اطلاعات repository
repo-list
دریافت لیست repositories کاربر یا سازمان
file-get
خواندن محتوای فایل از repository
file-create-update
ایجاد یا ویرایش فایل در repository
release-create
ایجاد release جدید
release-list
دریافت لیست releases
webhook-create
ایجاد webhook برای دریافت eventها
actions-trigger
اجرای GitHub Actions workflow
کاربردهای متداول
کاربردهای رایج
۱. اطلاعرسانی Issue جدید در تلگرام
وقتی issue جدیدی ایجاد شود، پیام در گروه تلگرام تیم ارسال شود.
GitHub Trigger (issues.opened) → Telegram (sendMessage)۲. خودکارسازی Code Review
وقتی PR جدیدی ارسال شود، به reviewerها assign شود و در Slack اطلاعرسانی شود.
GitHub Trigger (pull_request.opened) → GitHub (اضافه کردن reviewer) → Slack (ارسال پیام)۳. مدیریت خودکار Labels
بر اساس محتوای issue، لیبل مناسب (bug, feature, question) خودکار اضافه شود.
GitHub Trigger (issues.opened) → IF (بررسی عنوان) → GitHub (اضافه کردن label)۴. Release Changelog Generator
وقتی release جدید ایجاد شود، changelog از commitها ساخته شده و در release notes اضافه شود.
GitHub Trigger (release.created) → GitHub (لیست commits) → Code (ساخت changelog) → GitHub (ویرایش release)۵. CI/CD Pipeline Trigger
پس از merge شدن PR، خودکار GitHub Actions اجرا شود و نتیجه در Slack اعلام شود.
GitHub Trigger (pull_request.closed & merged) → GitHub (trigger workflow) → Wait → GitHub (بررسی status) → Slack۶. Stale Issue Cleanup
هر هفته issues قدیمی بدون فعالیت پیدا شده و با کامنت هشدار و label "stale" مشخص شوند.
Schedule (هفتگی) → GitHub (لیست issues) → Filter (بدون update ۳۰ روز) → GitHub (اضافه label + کامنت)۷. همگامسازی Issue با Project Board
وقتی issue ایجاد یا بسته شود، در Notion/Trello/Jira بهروزرسانی شود.
GitHub Trigger (issues) → IF (opened/closed) → Notion (ایجاد/ویرایش page)۸. Dependency Security Alerts
وقتی Dependabot alert ایجاد شود، تیم امنیت از طریق ایمیل و Slack مطلع شود.
GitHub Trigger (security_advisory) → Email (ارسال به تیم) → Slack (ارسال alert)۹. خودکارسازی Documentation
وقتی فایلهای code تغییر کنند، مستندات خودکار از کامنتها generate شود.
GitHub Trigger (push) → GitHub (دریافت فایلهای تغییر یافته) → Code (generate docs) → GitHub (commit docs)۱۰. گزارش هفتگی فعالیت Repository
هر هفته گزارشی از تعداد commits، PRs، issues و contributors ساخته شود.
Schedule (یکشنبه) → GitHub (stats) → Code (ساخت گزارش) → Email/Telegram (ارسال گزارش)نکات حرفهای
نکات حرفهای
۱. از GitHub App بجای Personal Token استفاده کنید
GitHub App دارای rate limit بالاتر (۱۵,۰۰۰ vs ۵,۰۰۰)، دسترسی granular و عدم وابستگی به اکانت شخصی است.
۲. Webhook Secret تنظیم کنید
همیشه یک secret قوی برای webhooks تنظیم کنید تا از دریافت fake events جلوگیری شود. n8n به صورت خودکار signature را verify میکند.
۳. از Pagination استفاده کنید
GitHub API حداکثر ۱۰۰ آیتم در هر صفحه برمیگرداند. برای دریافت همه نتایج از per_page=100 و page parameter استفاده کنید.
۴. Conditional Requests برای کاهش Rate Limit
از header If-None-Match (ETag) استفاده کنید. اگر داده تغییر نکرده باشد، GitHub پاسخ 304 برمیگرداند و از quota مصرف نمیشود.
۵. GraphQL API برای کوئریهای پیچیده
برای دریافت چندین resource با یک درخواست، از GitHub GraphQL API (HTTP Request node) استفاده کنید. بسیار بهینهتر از REST API است.
۶. Status Checks با GitHub Actions
از repository_dispatch event برای trigger کردن GitHub Actions از n8n استفاده کنید. اینگونه CI/CD را خودکار مدیریت کنید.
۷. Template Repositories
برای ایجاد خودکار repos از template، از POST /repos/{template_owner}/{template_repo}/generate استفاده کنید.
۸. از Markdown در Issue/PR Body استفاده کنید
GitHub از Markdown و task lists پشتیبانی میکند. از - [ ] task برای checklist استفاده کنید.
۹. Branch Protection Rules
قبل از merge خودکار PR، مطمئن شوید branch protection rules را رعایت کردهاید (required reviews, status checks, etc.).
۱۰. از Labels برای Automation استفاده کنید
Labels عالی برای trigger کردن workflowها هستند. مثلاً label "deploy" برای شروع deployment.
۱۱. Commit Signing
اگر repo نیاز به signed commits دارد، GitHub App به صورت خودکار commitها را sign میکند.
۱۲. Rate Limit Monitoring
هدرهای پاسخ GitHub شامل X-RateLimit-Limit، X-RateLimit-Remaining و X-RateLimit-Reset هستند. اینها را monitor کنید.
۱۳. Organization-wide Webhooks
بجای webhook روی هر repo، یک org-level webhook بسازید که همه eventها را دریافت کند.
۱۴. GitHub Projects v2
از GitHub Projects API (GraphQL) برای مدیریت project boards خودکار استفاده کنید.
۱۵. Backup Strategy
به صورت دورهای از issues، PRs و wiki backup بگیرید. از GitHub API و n8n Schedule برای خودکارسازی backup استفاده کنید.
رفع مشکلات
رفع مشکلات رایج
❌ خطای 401 Unauthorized
علت: Token نامعتبر یا منقضی شده
راهحل
- Token را بررسی و در صورت نیاز regenerate کنید
- مطمئن شوید Token هنوز معتبر است (expiration date)
- اگر از GitHub App استفاده میکنید، Installation token ممکن است منقضی شده باشد
❌ خطای 403 Forbidden
علت: دسترسی کافی ندارید
راهحل
- Scopes توکن را بررسی کنید (repo, admin:repo_hook, etc.)
- مطمئن شوید به repository مورد نظر دسترسی دارید
- برای private repos، scope
repoلازم است - Rate limit ممکن است تمام شده باشد (header
X-RateLimit-Remainingرا بررسی کنید)
❌ خطای 404 Not Found
علت: Repository، Issue یا Resource پیدا نشد
راهحل
- نام owner و repo را exact بررسی کنید (case-sensitive نیست ولی باید صحیح باشد)
- برای private repos مطمئن شوید Token دسترسی
repoدارد - شماره issue/PR را بررسی کنید
❌ خطای 422 Validation Failed
علت: دادههای ارسالی نامعتبر
راهحل
- فیلدهای required را پر کنید
- فرمت دادهها را بررسی کنید
- برای file operations، SHA فایل موجود را ارسال کنید
- Labels باید قبلاً در repo تعریف شده باشند
❌ خطای 409 Conflict
علت: تداخل در عملیات (مثلاً merge conflict)
راهحل
- مطمئن شوید PR قابل merge است (conflict ندارد)
- برای file update، آخرین SHA را استفاده کنید
- Webhook URL duplicate نباشد
❌ خطای Rate Limit (403 with rate limit message)
علت: تعداد درخواستها از حد مجاز عبور کرده
راهحل
- از header
X-RateLimit-Resetزمان reset را ببینید - از GitHub App (15K/hr) بجای Token (5K/hr) استفاده کنید
- درخواستها را با Wait node فاصلهگذاری کنید
- از conditional requests (ETag) استفاده کنید
❌ Webhook Event دریافت نمیشود
علت: تنظیمات Webhook نادرست
راهحل
- URL را بررسی کنید (باید publicly accessible باشد)
- Content type باید
application/jsonباشد - events مورد نظر را فعال کنید
- در Webhook settings > Recent Deliveries خطاها را بررسی کنید
❌ خطای "Resource not accessible by integration"
علت: GitHub App permissions ناکافی
راهحل
- به Settings > GitHub Apps بروید و permissions را بررسی کنید
- App را روی repository مورد نظر reinstall کنید
- مطمئن شوید organization owner دسترسی app را approve کرده
