New to Kestra?
Use blueprints to kickstart your first workflows.
Event-driven deploy: a dbt completion webhook confirms the run succeeded, dispatches a GitHub Actions workflow, and notifies Slack via Kestra.
Connect your data pipeline to your delivery pipeline so a GitHub Actions deploy fires the moment your dbt models finish building. This blueprint closes the gap between "data is fresh" and "the app that depends on it ships", removing the manual hand-off where someone watches dbt finish and then clicks Run on a GitHub Actions workflow. A webhook from dbt starts the flow, Kestra verifies the upstream run actually succeeded, dispatches the deploy workflow with traceable inputs, and reports the outcome to Slack. The result is an event-driven, auditable bridge between dbt transformations and GitHub Actions deployments.
on_dbt_complete trigger (io.kestra.plugin.core.trigger.Webhook) exposes a webhook URL guarded by a secret key. dbt POSTs to it when a run completes, and the request body becomes available as trigger.body.confirm_dbt_run (io.kestra.plugin.core.http.Request) issues a GET against the dbt_status_url input to confirm the upstream run succeeded. If that request fails, the flow stops before anything is deployed.dispatch_deploy (io.kestra.plugin.github.actions.RunWorkflow) dispatches the target GitHub Actions workflow on the chosen repository, workflowId, and ref, passing triggered_by: kestra and a dbt_execution reference ({{ trigger.body ?? execution.id }}) so the deploy is linked back to the dbt run that caused it.notify (io.kestra.plugin.slack.notifications.SlackIncomingWebhook) posts a message naming the workflow, repository, and ref that were dispatched.GitHub Actions can schedule and react to repository events, but it has no native awareness of when an external dbt run finishes. Kestra fills that gap: the webhook trigger turns a dbt completion event into a deploy, the HTTP confirmation step enforces a success precondition GitHub Actions cannot see, and built-in retries, full execution lineage, and declarative YAML keep the whole hand-off versioned and observable. You describe the cross-tool workflow once instead of wiring brittle glue scripts between two schedulers.
workflow_dispatch trigger and matching inputs.GITHUB_TOKEN: token authorized to dispatch workflows on the target repository.DBT_COMPLETE_WEBHOOK_KEY: key guarding the webhook trigger.SLACK_WEBHOOK_URL: Slack incoming webhook URL for notifications.GITHUB_TOKEN, DBT_COMPLETE_WEBHOOK_KEY, and SLACK_WEBHOOK_URL as secrets in your Kestra namespace.repository, workflow_id, ref, and dbt_status_url inputs.Pause task before dispatch_deploy to require human approval on production deploys.confirm_dbt_run response body to deploy only specific environments.