Request icon
ChatCompletion icon
SlackIncomingWebhook icon
Schedule icon

Daily GitHub Changelog Written by Mistral and Posted to Slack

Turn recent GitHub commits into a daily human readable changelog with Mistral in Kestra, and post it to Slack on a schedule with failure alerts.

Categories
AI

Commit logs are written for reviewers, not for the rest of the company. This blueprint chains three tasks: io.kestra.plugin.core.http.Request pulls the ten latest commits from the public GitHub API, io.kestra.plugin.mistral.ChatCompletion rewrites them as one plain prose paragraph for a non-technical reader, and a Slack task delivers it. A disabled-by-default schedule makes it a daily digest once you flip it on.

How it works

  1. fetch_commits (io.kestra.plugin.core.http.Request) calls https://api.github.com/repos/{owner}/{repo}/commits?per_page=10 with the GitHub JSON Accept header. Public repositories need no token; the response body is available as {{ outputs.fetch_commits.body }}.
  2. write_changelog (io.kestra.plugin.mistral.ChatCompletion) sends a SYSTEM message that fixes the style, one paragraph, no hashes, no markdown, no quotation marks, and a USER message carrying the raw commit JSON. The paragraph comes back as {{ outputs.write_changelog.response }}.
  3. notify interpolates the paragraph into the Slack payload. The prompt forbids quotation marks and line breaks so the prose stays a safe JSON scalar; if you loosen the style rules, escape the text before interpolating.
  4. The errors block posts a distinct Slack alert when the fetch or the completion fails.
  5. A disabled-by-default Schedule trigger runs the digest daily at 08:00.

What you get

  • A changelog a product manager can read, generated from the commits engineers already write.
  • A three task chain showing the core pattern: fetch data, transform it with an LLM, deliver the result.
  • Repository and model as flow inputs, so the same flow covers any public repository.
  • A failure alert so an expired webhook or API error never kills the digest silently.

Who it's for

  • Engineering managers who paste commit lists into Slack by hand every morning.
  • Developer relations and product teams tracking what shipped without reading diffs.
  • Anyone wiring an LLM between an HTTP source and a notification for the first time.

Why orchestrate this with Kestra

The digest is only useful if it arrives every day, which means scheduling, retries on flaky API calls, secrets for the API key and webhook, and a record of exactly which commits produced which paragraph. Kestra provides all of that around three declarative tasks, and the execution history doubles as an archive of every changelog ever posted.

Prerequisites

  • A Mistral API key with access to the chosen model.
  • A Slack incoming webhook for the digest and failure alerts.
  • A public GitHub repository; private repositories need an Authorization header with a token secret.

Secrets

  • MISTRAL_API_KEY: Mistral API bearer token.
  • SLACK_WEBHOOK_URL: Slack incoming webhook URL.

Quick start

  1. Add the two secrets to your Kestra namespace.
  2. Execute the flow and check the changelog paragraph in Slack.
  3. Point repository at your own repository and set disabled: false on the daily trigger.

How to extend

  • Compare against the previous run by fetching commits since the last execution date with {{ trigger.date }}.
  • Post the same paragraph to Discord or email by adding another notification task.
  • Add jsonResponseSchema to also extract a structured list of change types for a dashboard.
  • Raise per_page or switch to the releases endpoint for lower commit volume repositories.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.