New to Kestra?
Use blueprints to kickstart your first workflows.
Audit Jira issue comment silence, alert Slack or auto-post a nudge comment, and log the result for engineering and support teams.
An open Jira issue can sit for weeks with its status field untouched while the real signal of neglect is quieter: nobody has said anything about it. A status-based SLA check can show an issue as still "In Progress" right up until someone closes it, long after anyone actually looked at it. This blueprint reads the issue's full comment history, measures the real number of days since the last comment, and can post an automatic nudge once you have explicitly said this flow is allowed to.
This blueprint was created by Mohit Jeswani.
get_comments (io.kestra.plugin.jira.comments.Get) fetches every comment on the
issue. Read-only; nothing is posted here. allowFailure: true covers an API or auth
error without failing the flow outright.evaluate (io.kestra.plugin.core.output.OutputValues) takes the date-only portion of
every comment's created timestamp, finds the most recent one, and compares it against
silence_days, classifying the issue as ACTIVE, SILENT_AUTO_NUDGE,
SILENT_NEEDS_HUMAN, or PROBE_FAILED, folding confirm_nudge into the silent
classification itself.route (io.kestra.plugin.core.flow.Switch):io.kestra.plugin.jira.issues.CreateComment (the safe
remediation, since a comment is reversible and changes no issue field), then posts a
Slack notice.summary logs the comment count and severity, closing the governance cycle.errors alerts Slack if the flow itself fails, for example an expired API token.confirm_nudge to
allow it, and that changes no issue field, assignee, or status.comments.Get and
issues.CreateComment used together as a compliance gate, distinct from this repo's
existing Jira blueprints, which search by status and updated timestamp via JQL rather
than reading an issue's actual comment history, and which are explicitly read-only.Jira can list and post comments on request, but it has no silence policy, no escalation, and
no Slack integration of its own. Kestra keeps silence_days and confirm_nudge as flow
inputs, turns a raw comment timeline into a silence decision, and keeps a full execution
history of every issue this flow has checked and what it did about it.
silence_days
to confirm the silent path.Jira is a hosted SaaS platform (or a self-managed Server instance) with no simple official
standalone Docker image for Cloud, so get_comments cannot be exercised against a local
container; validate against a real Jira Cloud free-tier site first.
JIRA_API_TOKEN: the Jira API token used by get_comments and post_nudge_comment,
alongside jira_username for Basic authentication. In Kestra OSS, provide it as the
base64-encoded environment variable SECRET_JIRA_API_TOKEN.SLACK_WEBHOOK_URL: used by all three Slack alert cases and the errors block. In Kestra
OSS, provide it as the base64-encoded environment variable SECRET_SLACK_WEBHOOK_URL.| Input | Default | Purpose |
|---|---|---|
issue_key |
PROJ-123 |
Jira issue to monitor |
silence_days |
7 |
Days since the last comment past which the issue is silent |
confirm_nudge |
false |
Authorizes this flow to post a nudge comment itself |
{{ outputs.get_comments.rows }} / .size: every comment on the issue and how many there
are, as Jira's REST v2 API reports them.{{ outputs.evaluate.values.comment_count }} / .last_comment_date: the comment count and
the date-only portion of the most recent comment's timestamp.{{ outputs.evaluate.values.severity }}: ACTIVE, SILENT_AUTO_NUDGE,
SILENT_NEEDS_HUMAN, or PROBE_FAILED.created field uses a timezone-offset format (for example
2026-09-01T10:15:30.000+0000), not the Z-suffixed format jq's fromdateiso8601
expects; verified directly against comments.Get's own response handling, since neither
its Javadoc nor its field list documents the exact timestamp format. This blueprint
deliberately compares only the first 10 characters (the date) rather than parsing the full
timestamp, avoiding the format mismatch entirely at the cost of day-level, not
hour-level, precision.1970-01-01 sentinel date),
not as a parsing error, since allowFailure only catches a failed API call, not an empty
but valid comment list.confirm_nudge applies to every run that finds the issue silent, not once; a scheduled
run with it set to true posts a new nudge comment every time it fires and the issue is
still silent, so raise silence_days or disable the trigger once a human has picked the
issue up to avoid repeat nudges.JIRA_API_TOKEN and SLACK_WEBHOOK_URL secrets.jira_base_url, jira_username, and issue_key to a real Jira Cloud issue.summary logs a comment count and date.silence_days and confirm_nudge: false, confirm
alert_silent fires.confirm_nudge: true and confirm post_nudge_comment posts a comment and
alert_auto_nudged fires.daily trigger once the inputs reflect a real issue and policy.issue_key from a JQL search (such as this repo's existing
jira-stale-issue-sla-compliance-gate) to run this comment-silence check across every
issue a status-based sweep already flagged, instead of one issue at a time.confirm_nudge per issue priority, auto-nudging only Critical/Blocker issues
while lower-priority ones stay alert-only.