New to Kestra?
Use blueprints to kickstart your first workflows.
Gate dashboard publishing on a Sifflet rule run with Kestra. The publish only runs when the rule launches cleanly, and Slack hears about every block.
Publishing a dashboard and checking its data are usually two unrelated schedules, and the publish always wins the race. This blueprint inverts the order: io.kestra.plugin.sifflet.RunRule runs first, and the publish step sits behind it in the same Kestra execution. Kestra's sequential task semantics do the gating, a task that fails stops the flow, so a rule run that cannot launch means the publish never fires and Slack gets a block alert instead of a success message.
run_gate_rule (io.kestra.plugin.sifflet.RunRule) authenticates with the API key, targets your tenant through baseUrl, and launches a run of the guard rule, typically a freshness or volume check on the tables the dashboard reads.publish_dashboard stands in for your real publish step, a Log task here so the flow runs anywhere. It executes only when the gate task succeeded.notify_team posts the rule run status and HTTP code to Slack on the happy path; the errors block posts a distinct BLOCKED alert when the gate stops the flow.Schedule trigger runs the gate and publish together at 06:30.Sifflet detects problems, but detection on its own schedule cannot stop a publish that runs somewhere else. Kestra turns the rule run into a hard dependency: the publish task literally waits behind it, failures produce a distinct block alert, and the execution history records the gate and the publish as one auditable unit. Note that the task gates on the rule run launching successfully; for incident-level verdicts on the results, pair this flow with Sifflet's own alerting on the rule.
SIFFLET_API_KEY: Sifflet API bearer token used to run the rule.SIFFLET_BASE_URL: base URL of your Sifflet tenant API.SLACK_WEBHOOK_URL: Slack incoming webhook URL.SIFFLET_API_KEY, SIFFLET_BASE_URL, and SLACK_WEBHOOK_URL secrets to your Kestra namespace.rule_id input to the rule that guards your dashboard and execute the flow.publish_dashboard with your real refresh and enable the daily trigger.retry on the gate task to ride out transient API errors without blocking the publish unnecessarily.