Request icon
Loop icon
If icon
DiscordIncomingWebhook icon
Log icon
Schedule icon

GitHub Issue Priority Triage and Discord Digest

Triage GitHub issues by priority labels and send structured Discord embed alerts. Deterministic, zero-cost triage with no external AI dependencies.

Categories
CloudCore

Triaging active open-source or product repositories manually often leads to delayed response times for critical bugs. While AI-based summarization blueprints exist for Slack, many engineering teams run their operations in Discord and prefer deterministic, zero-cost triage that avoids third-party LLM API latency, token charges, and hallucination risks.

This blueprint automates GitHub issue triage using native label filtering (bug, critical, urgent, priority) and delivers structured, color-coded Discord embed alert cards straight into your team's incident or engineering channel via an incoming webhook. Routine issues are logged in Kestra's execution history without pinging Discord, avoiding notification fatigue while surfacing critical bugs in real time.

How it works

  1. Fetch Issues (fetch_recent_issues): An HTTP request task (io.kestra.plugin.core.http.Request) queries GitHub's /issues REST API endpoint for the target repository, sorting by latest update timestamp.
  2. Iterate Batch (process_issues_loop): A flowable Loop task (io.kestra.plugin.core.flow.Loop) iterates through each returned issue.
  3. Evaluate Labels (check_if_urgent): An If conditional task (io.kestra.plugin.core.flow.If) applies a jq filter to fromJson(item.value).labels to detect priority labels (bug, critical, urgent, priority).
  4. Dispatch Discord Embed (alert_discord_urgent): For matching priority issues, io.kestra.plugin.discord.DiscordIncomingWebhook formats and posts a rich Discord embed card with the issue number, author, state, and direct URL.
  5. Log Routine Issues (log_routine_issue): Issues without priority labels are written to execution logs for traceability without triggering chat alerts.
  6. Error Notification (alert_api_failure): An errors block traps HTTP timeouts, token permission errors, or GitHub rate limits, alerting the team on Discord immediately.

What you get

  • Deterministic, zero-token triage: No external LLM dependencies, API quotas, or token bills.
  • Discord-native cards: Color-coded rich embed notifications with author handles, issue numbers, and quick links.
  • Noise reduction: High-priority issues alert Discord; routine issues remain in execution logs.
  • Fail-safe observability: Immediate warning in Discord if GitHub rate limits or credentials fail.

Who it is for

  • Engineering and DevOps teams using Discord for chatops and operational alerts.
  • Open-source maintainers needing automated visibility into blocker bugs across busy repos.
  • Teams looking for a lightweight, zero-LLM-cost alternative to AI triage flows.

Why orchestrate this with Kestra

Ad-hoc cron scripts or serverless bots lack built-in retry mechanics, secret masking, and execution lineage. Kestra orchestrates the entire triage lifecycle in declarative YAML: scheduling sweeps, securely interpolating credentials, branching conditionally on issue labels, and posting actionable chatops alerts with complete audit history.

Prerequisites

  • A GitHub Personal Access Token (classic with repo scope or fine-grained with Issues: Read-only permission).
  • A Discord channel with an Incoming Webhook configured.

Secrets

  • GITHUB_TOKEN: GitHub personal access token used in the Authorization header.
  • DISCORD_WEBHOOK_URL: Full Discord incoming webhook URL (https://discord.com/api/webhooks/...).

Quick start

  1. Configure GITHUB_TOKEN and DISCORD_WEBHOOK_URL in your Kestra namespace or instance secrets.
  2. Import this flow into your target namespace.
  3. Execute the flow manually to test issue inspection on kestra-io/kestra (or configure your own repository).
  4. Verify that critical issues appear in your Discord channel as rich embed cards.
  5. Enable the weekday_schedule trigger for automated sweeps every weekday at 09:00 UTC.

How to extend

  • Custom label taxonomies: Customize the jq filter in check_if_urgent to match your organization's labels (e.g., p0, severity/critical, security).
  • Filter pull requests: Add fromJson(item.value).pull_request == null to exclude pull requests if your repository mixes PRs and issues on the endpoint.
  • On-call mentions: Add role pings (<@&ROLE_ID>) in the Discord payload to notify specific response rotations.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.