New to Kestra?
Use blueprints to kickstart your first workflows.
Publish a weekly Liquibase release report with Kestra. Capture liquibase history, count applied change sets in Python, and post the digest to Slack.
Every migrated database keeps a perfect deployment record in its change log table, and almost nobody reads it. This blueprint turns that record into a weekly digest: io.kestra.plugin.liquibase.CLI runs liquibase history and captures the full output as a file artifact, a Python step reduces it to a change set count, and Slack receives the summary every Monday morning. The question what changed in the database this week stops requiring a database client to answer.
capture_history (io.kestra.plugin.liquibase.CLI) connects through the standard Liquibase environment variables filled from Kestra secrets. For the self-contained demo it first applies a small changelog so the history has entries; against a real database you remove that update command and keep only the history capture.liquibase history writes the deployment record to history.txt, which outputFiles uploads to internal storage, preserving the full report alongside the execution.summarize_history (io.kestra.plugin.scripts.python.Script on the Process runner) pulls the file in through inputFiles, counts the deployed change set lines, and emits the count through Kestra's output protocol.post_digest interpolates the count into a Slack message pointing at the archived full report, and the errors block alerts Discord when the report cannot be produced.Schedule trigger runs the report every Monday at 08:00.liquibase history output archived per week in internal storage, ready for audits.The history lives in the database, but a report is a routine: run on schedule, keep the artifact, compute the summary, deliver it, and complain when it breaks. Kestra provides the schedule, internal storage for each week's full report, the output protocol that carries the Python summary into the notification, and error handling that distinguishes a quiet week from a broken pipeline.
DB_URL secret to jdbc:h2:file:./demo-db with username sa and an empty password; the seeded update gives the history real entries. For production, use your real JDBC URL, such as jdbc:postgresql://db-host:5432/app, and remove the seeding update command.taskRunner to Docker.DB_URL: JDBC URL of the target database.DB_USERNAME: database username.DB_PASSWORD: database password.SLACK_WEBHOOK_URL: Slack incoming webhook URL for the digest.DISCORD_WEBHOOK_URL: Discord incoming webhook URL for failure alerts.weekly trigger.CLI task per target and summing the counts in the Python step.