
اتوماسیون یادداشتهای انتشار GitHub و اعلانهای Slack
9 دقیقه مطالعه · منتشر شده ۱۴۰۵/۵/۷
دانلود workflow
فایل JSON آماده import در n8n — credentialها باید در n8n شما تنظیم شوند.
- فایل JSON را دانلود کنید.
- در n8n: Workflows → Import from File.
- Credentialهای هر node را متصل کنید.
- workflow را فعال کنید.
شناسه workflow: 6763 · منبع: کاتالوگ Pixori
اتوماسیون یادداشتهای انتشار GitHub و اعلانهای Slack
این Workflow اتوماسیون ایجاد یادداشتهای انتشار GitHub از pull requestهای ادغام شده را انجام میدهد. سپس یک پیشنویس انتشار در GitHub منتشر کرده و یک اعلان به یک کانال Slack ارسال میکند و فرآیند انتشار را برای تیمهای توسعه ساده میسازد.
دستهبندیها: DevOps، اتوماسیون، CI/CD
این Workflow و موارد بیشتر را در کاتالوگ n8n در Pixori.me پیدا کنید: https://pixori.me/n8n
---
🚀 نمای کلی Workflow
این Workflow برای سادهسازی فرآیند تولید یادداشتهای انتشار طراحی شده است. با جمعآوری جزئیات مخزن از طریق یک فرم کاربرپسند شروع میشود. سپس، دادههای لازم را از GitHub، از جمله آخرین تگ و تمام pull requestهای ادغام شده از زمان آن تگ را دریافت میکند. این pull requestها بر اساس برچسبهایشان دستهبندی شده و به صورت یادداشتهای انتشار Markdown قالببندی میشوند. در نهایت، یک پیشنویس انتشار در GitHub ایجاد شده و یک خلاصه اعلان به یک کانال Slack مشخص ارسال میشود.
این Workflow به بلوکهای منطقی زیر ساختار یافته است:
1. دریافت ورودی: جمعآوری اطلاعات مخزن از طریق یک فرم کاربر.
2. تنظیم پیکربندی: آمادهسازی پارامترهای پیکربندی و نگاشت برچسبها.
3. بازیابی دادههای GitHub: دریافت آخرین تگ Git، تاریخ کامیت آن و pull requestهای ادغام شده از زمان آن کامیت.
4. تولید یادداشتهای انتشار: گروهبندی pull requestها بر اساس برچسب و تولید یادداشتهای انتشار قالببندی شده.
5. ایجاد انتشار GitHub: ایجاد یک پیشنویس انتشار در GitHub با یادداشتهای تولید شده.
6. اعلان Slack: ارسال خلاصه یادداشتهای انتشار به یک کانال Slack.
---
🧩 تجزیه و تحلیل گره به گره
1. دریافت ورودی: جمعآوری جزئیات مخزن
- هدف: این بلوک به عنوان نقطه ورود Workflow عمل میکند و اطلاعات ضروری در مورد مخزن GitHub و شاخهای که یادداشتهای انتشار برای آن تولید میشوند را جمعآوری میکند.
- گرهها:
* GitHub Release Input Form (Form Trigger)
* نقش: فرمی را به کاربر برای جمعآوری نام مخزن، مالک مخزن و نام شاخه ارائه میدهد.
* پیکربندی:
* عنوان فرم: "GitHub Release Input Form"
* فیلدها:
* نام مخزن (الزامی)
* مالک مخزن (الزامی)
* نام شاخه (الزامی)
* ورودی: ندارد (گره تریگر).
* خروجی: شیء JSON حاوی ورودی کاربر.
* نسخه: 2.2
* یادداشتها: با ارسال فرم، Workflow را فعال میکند.
2. تنظیم پیکربندی: آمادهسازی متغیرها و نگاشتها
- هدف: این بلوک ورودی کاربر را پردازش میکند، نگاشتهای پیشفرض را برای دستهبندی pull requestها بر اساس برچسبها تنظیم میکند و یک چک لیست QA را برای ضمیمه شدن به یادداشتهای انتشار تعریف میکند.
- گرهها:
* Config (Set Node)
* نقش: متغیرها را بر اساس ورودیهای فرم اختصاص میدهد و نگاشتهای ثابت را تعریف میکند.
* متغیرها:
* repoOwner, repoName, defaultBranch: از دادههای فرم استخراج شدهاند.
* labelMap: یک رشته JSON که برچسبهای GitHub را به دستهبندیهای پیشوند اموجی نگاشت میکند (مثلاً "Feature": "🚀 Features").
* qaChecklist: آرایهای از رشتهها که موارد چک لیست QA را نشان میدهد.
* ورودی: دادههای JSON از GitHub Release Input Form.
* خروجی: شیء JSON حاوی متغیرهای پیکربندی ساختاریافته.
* نسخه: 3.4
* یادداشتها: labelMap و qaChecklist رشتههای ثابت هستند و باید فرمتهای معتبر JSON/آرایه داشته باشند.
3. بازیابی دادههای GitHub: دریافت اطلاعات انتشار
- هدف: این بلوک به طور متوالی دادههای حیاتی را از GitHub جمعآوری میکند: آخرین تگ Git، تاریخ کامیت آن تگ و تمام pull requestهای ادغام شده که پس از تاریخ آن کامیت ایجاد شدهاند.
- گرهها:
* Get Latest Git Tag (HTTP Request)
* نقش: API GitHub را برای دریافت تمام تگهای مخزن مشخص شده فراخوانی کرده و آخرین تگ نسخه معنایی را شناسایی میکند.
* URL: https://api.github.com/repos/{{repoOwner}}/{{repoName}}/tags
* احراز هویت: توکن OAuth API GitHub (اعتبار با نام "GitHub account").
* ورودی: خروجی از گره Config.
* خروجی: آرایه JSON از تگها؛ اولین مورد به عنوان آخرین تگ فرض میشود.
* نسخه: 4.2
* موارد لبهای: محدودیتهای نرخ API، اعتبارنامههای نامعتبر، آرایه تگ خالی.
* Get Commit Date of Latest Tag (HTTP Request)
* نقش: اطلاعات کامیت دقیق را برای آخرین تگ برای استخراج تاریخ کامیت آن بازیابی میکند.
* URL: به طور پویا از خروجی گره قبلی ساخته شده است: {{$json["commit"]["url"]}}.
* ورودی: خروجی از Get Latest Git Tag.
* خروجی: شیء JSON حاوی جزئیات کامیت، از جمله مُهر زمانی.
* نسخه: 4.2
* موارد لبهای: URL نامعتبر یا گم شده، خطاهای API.
* Fetch All Merged PRs Since Last Tag (HTTP Request)
* نقش: API جستجوی GitHub را برای pull requestهای ادغام شده در مخزن و شاخه مشخص شده، که پس از تاریخ کامیت آخرین تگ ادغام شدهاند، جستجو میکند.
* URL: به طور پویا ساخته شده است، به عنوان مثال: https://api.github.com/search/issues?q=is:pr+is:merged+repo:{{repoOwner}}/{{repoName}}+base:{{defaultBranch}}+merged:>={{commitDate}}
* ورودی: خروجی از گرههای Config و Get Commit Date of Latest Tag.
* خروجی: شیء JSON حاوی آرایه items با جزئیات PR.
* نسخه: 4.2
* موارد لبهای: محدودیتهای صفحهبندی API (پیشفرض 100 نتیجه)، محدودیتهای نرخ API، عدم یافتن PR.
4. تولید یادداشتهای انتشار: قالببندی و ساختار محتوا
- هدف: این بلوک لیست pull requestهای ادغام شده را پردازش میکند. آنها را بر اساس برچسبهای مطابق با
labelMapپیکربندی شده گروهبندی میکند، آنها را به بخشهای Markdown قالببندی میکند و چک لیست QA از پیش تعریف شده را ضمیمه میکند. - گرهها:
* Adjusted: Group PRs & Generate Release Notes (Code Node - JavaScript)
* نقش:
* دادههای PR را از گره قبلی میخواند.
* PRها را بر اساس برچسبهای مطابق با labelMap گروهبندی میکند. PRهای مطابق داده نشده در دسته "📋 Others" قرار میگیرند.
* PRهای گروهبندی شده را به بخشهای Markdown با عنوانها و لیستهای گلولهای قالببندی میکند.
* موارد چک لیست QA را به عنوان چک باکسهای Markdown علامت نخورده ضمیمه میکند.
* ورودی: آرایه JSON از PRها از Fetch All Merged PRs Since Last Tag.
* خروجی: شیء JSON با یک ویژگی واحد release_notes حاوی رشته Markdown تولید شده.
* نسخه: 2
* موارد لبهای: دادههای PR گم شده یا بدشکل، PRهای بدون برچسب، لیست PR خالی.
5. ایجاد انتشار GitHub: انتشار پیشنویس انتشار
- هدف: یک انتشار پیشنویس GitHub در مخزن با استفاده از آخرین تگ و محتوای یادداشتهای انتشار تولید شده ایجاد میکند.
- گرهها:
* Github Pre Release (HTTP Request)
* نقش: API GitHub را برای ایجاد یک انتشار فراخوانی میکند.
* پارامترها:
* tag_name و name: به نام آخرین تگ تنظیم شدهاند.
* body: به محتوای Markdown از ویژگی release_notes تنظیم شده است.
* draft: روی true تنظیم شده است.
* prerelease: روی false تنظیم شده است.
* URL: https://api.github.com/repos/{{repoOwner}}/{{repoName}}/releases
* متد: POST
* احراز هویت: احراز هویت هدر HTTP عمومی (مبتنی بر توکن).
* ورودی: JSON یادداشتهای انتشار از گره کد و متغیرهای پیکربندی.
* خروجی: پاسخ JSON از API GitHub، شامل URL انتشار.
* نسخه: 4.2
* موارد لبهای: خطاهای مجوز API، تگ نامعتبر، مشکلات شبکه.
6. اعلان Slack: اطلاعرسانی به تیم
- هدف: پیامی را به یک کانال Slack ارسال میکند و تیم را در مورد پیشنویس انتشار تازه ایجاد شده مطلع کرده و خلاصه یادداشتهای انتشار را شامل میشود.
- گرهها:
* Send message to slack (HTTP Request)
* نقش: یک payload پیام را به URL وبهوک Slack ارسال میکند.
* URL: توسط کاربر پیکربندی شده است (URL وبهوک Slack).
* متد: POST
* Body: payload JSON حاوی یک فیلد text که یادداشتهای انتشار Markdown و URL انتشار GitHub را ترکیب میکند.
* ورودی: یادداشتهای انتشار و URL انتشار GitHub از گرههای قبلی.
* خروجی: پاسخ API Slack.
* نسخه: 4.2
* موارد لبهای: URL وبهوک Slack نامعتبر یا گم شده، خطاهای شبکه، محدودیتهای اندازه پیام.
---
📋 جدول خلاصه
| نام گره | نوع گره | نقش عملکردی | گره(های) ورودی | گره(های) خروجی |
|---|---|---|---|---|
GitHub Release Input Form | Form Trigger | جمعآوری اطلاعات مالک مخزن، نام مخزن، شاخه | ندارد | Config |
Config | Set | آمادهسازی متغیرهای پیکربندی و نگاشتها | GitHub Release Input Form | Get Latest Git Tag |
Get Latest Git Tag | HTTP Request | دریافت آخرین تگ Git از مخزن GitHub | Config | Get Commit Date of Latest Tag |
Get Commit Date of Latest Tag | HTTP Request | دریافت تاریخ کامیت آخرین تگ | Get Latest Git Tag | Fetch All Merged PRs Since Last Tag |
Fetch All Merged PRs Since Last Tag | HTTP Request | بازیابی PRهای ادغام شده پس از آخرین تگ | Get Commit Date of Latest Tag | Adjusted: Group PRs & Generate Release Notes |
Adjusted: Group PRs & Generate Release Notes | Code (JavaScript) | گروهبندی PRها بر اساس برچسب و تولید یادداشتهای Markdown | Fetch All Merged PRs Since Last Tag | Github Pre Release |
Github Pre Release | HTTP Request | ایجاد انتشار پیشنویس GitHub | Adjusted: Group PRs & Generate Release Notes | Send message to slack |
Send message to slack | HTTP Request | ارسال پیام یادداشتهای انتشار به Slack | Github Pre Release | ندارد |
---
🛠️ بازسازی Workflow
برای بازسازی این Workflow از ابتدا:
1. یک گره Form Trigger اضافه کنید و آن را همانطور که در بخش "GitHub Release Input Form" توضیح داده شده است، پیکربندی کنید.
2. یک گره Set اضافه کنید و متغیرهای repoOwner, repoName, defaultBranch, labelMap و qaChecklist را پیکربندی کنید.
3. یک گره HTTP Request برای "Get Latest Git Tag" اضافه کنید. URL و احراز هویت را پیکربندی کنید.
4. یک گره HTTP Request دیگر برای "Get Commit Date of Latest Tag" اضافه کنید. URL را به طور پویا به خروجی گره قبلی ارجاع دهید.
5. یک گره HTTP Request سوم برای "Fetch All Merged PRs Since Last Tag" اضافه کنید. URL را با استفاده از متغیرهای گرههای قبلی به طور پویا بسازید.
6. یک گره Code اضافه کنید و کد جاوا اسکریپت را برای "Adjusted: Group PRs & Generate Release Notes" جایگذاری کنید.
7. یک گره HTTP Request چهارم برای "Github Pre Release" اضافه کنید. URL، متد و پارامترهای بدنه را برای ایجاد یک انتشار پیشنویس پیکربندی کنید.
8. یک گره HTTP Request پنجم برای "Send message to slack" اضافه کنید. URL (وبهوک Slack شما) و بدنه پیام را پیکربندی کنید.
9. گرهها را به ترتیب توضیح داده شده وصل کنید.
10. اعتبارات را برای حساب GitHub و وبهوک Slack خود تنظیم کنید.
Nodeهای استفادهشده
سوالات متداول
این Workflow چگونه یادداشتهای انتشار GitHub را تولید میکند؟▾
این Workflow با دریافت اطلاعات مخزن از طریق یک فرم شروع میشود، سپس آخرین تگ Git و pull requestهای ادغام شده از آن زمان را بازیابی میکند. این pull requestها بر اساس برچسبهایشان دستهبندی شده و به صورت یادداشتهای انتشار Markdown قالببندی میشوند.
چه اطلاعاتی برای اجرای این Workflow لازم است؟▾
شما به نام مخزن GitHub، نام مالک مخزن و نام شاخه نیاز دارید. همچنین، برای دسترسی به API GitHub، نیاز به یک توکن OAuth دارید.
آیا این Workflow فقط برای تیمهای توسعه مناسب است؟▾
این Workflow به طور خاص برای سادهسازی فرآیند انتشار برای تیمهای توسعه طراحی شده است، اما هر تیمی که از GitHub برای مدیریت کد و نیاز به اطلاعرسانی انتشار دارد، میتواند از آن بهرهمند شود.
workflowهای مرتبط
- پاکسازی خودکار فایلهای قدیمی Cloudflare R2 با n8nDevOps
- خودکارسازی بهروزرسانی n8n با Coolify و API گیتهابDevOps
- حسابرسی استفاده از اعتبارنامهها در n8n و ارسال به Google Sh…DevOps
- نظارت بر تازگی پشتیبانگیری Google Drive با اسنک و Google Sh…DevOps
- ممیزی خودکار پرچمهای ویژگی اندروید از گیتهاب به اسلکDevOps
- تحلیل خودکار عملکرد ساخت اپلیکیشن موبایل با n8n و هوش مصنوعیDevOps
