#!/usr/bin/env bash # Generate release notes using LLM analysis of git commits # Usage: ./scripts/generate-release-notes.sh [previous-tag] set -euo pipefail VERSION=${1:-} PREVIOUS_TAG=${2:-} if [ -z "$VERSION" ]; then echo "Usage: $0 [previous-tag]" echo "Example: $0 4.29.0 v4.28.0" exit 1 fi # Find previous tag if not specified if [ -z "$PREVIOUS_TAG" ]; then PREVIOUS_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") if [ -z "$PREVIOUS_TAG" ]; then echo "No previous tag found, using all commits" PREVIOUS_TAG=$(git rev-list --max-parents=0 HEAD) fi fi echo "Generating release notes for v${VERSION}..." echo "Analyzing commits since ${PREVIOUS_TAG}..." # Get commit log COMMIT_LOG=$(git log ${PREVIOUS_TAG}..HEAD --pretty=format:"%h %s" --no-merges) if [ -z "$COMMIT_LOG" ]; then echo "No commits found since ${PREVIOUS_TAG}" exit 1 fi # Count commits COMMIT_COUNT=$(echo "$COMMIT_LOG" | wc -l) echo "Found ${COMMIT_COUNT} commits" # Generate release notes using LLM API # Supports both OpenAI and Anthropic Claude # Set either OPENAI_API_KEY or ANTHROPIC_API_KEY if [ -n "${ANTHROPIC_API_KEY:-}" ]; then LLM_PROVIDER="anthropic" elif [ -n "${OPENAI_API_KEY:-}" ]; then LLM_PROVIDER="openai" else echo "Error: Either OPENAI_API_KEY or ANTHROPIC_API_KEY environment variable must be set" exit 1 fi echo "Using LLM provider: ${LLM_PROVIDER}" # Prepare prompt for LLM read -r -d '' PROMPT < "$OUTPUT_FILE" echo "" echo "Saved to: $OUTPUT_FILE" fi