اتوماسیون یادداشت‌های انتشار GitHub و اعلان‌های Slack

اتوماسیون یادداشت‌های انتشار GitHub و اعلان‌های Slack

9 دقیقه مطالعه · منتشر شده ۱۴۰۵/۵/۷

دانلود workflow

فایل JSON آماده import در n8n — credentialها باید در n8n شما تنظیم شوند.

  1. فایل JSON را دانلود کنید.
  2. در n8n: Workflows → Import from File.
  3. Credentialهای هر node را متصل کنید.
  4. 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 FormForm Triggerجمع‌آوری اطلاعات مالک مخزن، نام مخزن، شاخهنداردConfig
ConfigSetآماده‌سازی متغیرهای پیکربندی و نگاشت‌هاGitHub Release Input FormGet Latest Git Tag
Get Latest Git TagHTTP Requestدریافت آخرین تگ Git از مخزن GitHubConfigGet Commit Date of Latest Tag
Get Commit Date of Latest TagHTTP Requestدریافت تاریخ کامیت آخرین تگGet Latest Git TagFetch All Merged PRs Since Last Tag
Fetch All Merged PRs Since Last TagHTTP Requestبازیابی PRهای ادغام شده پس از آخرین تگGet Commit Date of Latest TagAdjusted: Group PRs & Generate Release Notes
Adjusted: Group PRs & Generate Release NotesCode (JavaScript)گروه‌بندی PRها بر اساس برچسب و تولید یادداشت‌های MarkdownFetch All Merged PRs Since Last TagGithub Pre Release
Github Pre ReleaseHTTP Requestایجاد انتشار پیش‌نویس GitHubAdjusted: Group PRs & Generate Release NotesSend message to slack
Send message to slackHTTP Requestارسال پیام یادداشت‌های انتشار به SlackGithub 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های مرتبط

این workflow در کاتالوگ Pixori.me بایگانی شده است. لایسنس اصلی متعلق به سازنده workflow است.