Blueprints

Automated weekly Git commit summary and Slack notification

Source

yaml
id: ai-summarize-weekly-git-commits
namespace: company.team

inputs:
  - id: repository
    type: URI
    defaults: https://github.com/kestra-io/blueprints
    description: Repository to summarize last week's progress

  - id: branch
    type: STRING
    defaults: main
    description: Git branch to summarize last week's progress

tasks:
  - id: wdir
    type: io.kestra.plugin.core.flow.WorkingDirectory
    tasks:
      - id: clone_repo
        type: io.kestra.plugin.git.Clone
        branch: "{{ inputs.branch }}"
        url: "{{ inputs.repository }}"
        # username: your-git-user-name # Needed only for private repos
        # password: "{{ secret('GITHUB_ACCESS_TOKEN') }}" # Needed only for private repos

      - id: fetch_commits
        type: io.kestra.plugin.scripts.shell.Commands
        taskRunner:
          type: io.kestra.plugin.scripts.runner.docker.Docker
        containerImage: bitnami/git:latest
        commands:
          # 1. Deepen clone if shallow
          - git fetch --unshallow origin main || true

          # 2. Update main branch
          - git fetch origin main

          # 3. Fetch commits from the last 7 days (weekly)
          - git log origin/main --since="7 days ago" --pretty=format:"%h %ad %s"
            --date=short > commits.txt

          # 4. Show how many were found
          - echo "Fetched $(wc -l < commits.txt) commits from the last 7 days"
        outputFiles:
          - commits.txt

      - id: summarize_commits
        type: io.kestra.plugin.openai.Responses
        apiKey: "{{ secret('OPENAI_API_KEY') }}"
        model: gpt-4o
        input: |
          Summarize the following Git commits into a clear and concise weekly development update for users.
          Output plain text for Slack, no markdown or extra formatting.
          Here are the commit messages:

          {{ read(outputs.fetch_commits.outputFiles['commits.txt']) }}             

  - id: slack
    type: io.kestra.plugin.notifications.slack.SlackIncomingWebhook
    url: https://kestra.io/api/mock # replace with "{{secret('SLACK_WEBHOOK_URL')}}" for production
    payload: |
      {{
        {
          "text": "This week's repository updates for " ~ inputs.repository ~ ". " ~ outputs.summarize_commits.outputText 
        }
      }}

triggers:
  - id: weekly-trigger
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "0 15 * * 5" # Every Friday at 15:00 (3:00 PM) UTC

description: |
  This Kestra flow provides an automated, weekly summary of Git commit activity for a specified repository and branch. Every Friday at 3 PM UTC, it:

    - Clones the target Git repository (default: main branch)
    - Fetches all commits from the last 7 days
    - Uses OpenAI to generate a plain-text summary of the week’s changes
    - Posts the update to a Slack channel via webhook

  The flow is configurable for any repository and branch, and is suitable for both public and private repositories (with proper secrets). This ensures all stakeholders receive a concise, human-readable recap of project progress each week, directly in Slack.

About this blueprint

Notifications AI Git Kestra

This Kestra flow provides an automated, weekly summary of Git commit activity for a specified repository and branch. Every Friday at 3 PM UTC, it:

  • Clones the target Git repository (default: main branch)
  • Fetches all commits from the last 7 days
  • Uses OpenAI to generate a plain-text summary of the week’s changes
  • Posts the update to a Slack channel

The flow is configurable for any repository and branch, and is suitable for both public and private repositories (with proper secrets). This ensures all stakeholders receive a concise, human-readable recap of project progress each week, directly in Slack.

Configuration:

  • Add secrets for the Slack incoming webhook URL, OpenAI API key, and GitHub credentials if needed.
  • Change the repository URL and branch as needed.
  • For public repositories, no credentials are needed.
  • For private repositories, supply GitHub Personal Access Token via Kestra secrets.
  • Modify the schedule by adjusting the CRON expression.

This automation keeps teams and stakeholders up-to-date on weekly development activity without manual status reporting.

Working Directory

Clone

Commands

Docker

Responses

Slack Incoming Webhook

Schedule

New to Kestra?

Use blueprints to kickstart your first workflows.

Get started with Kestra