#!/bin/bash # Generate an rpm %changelog entry for this release and prepend it to # the spec's existing %changelog section. # # Usage: generate-rpm-changelog.sh # # Collects commits since the previous v* tag, drops the bump-version # chore commits generated by CI, and writes a dated entry attributed # to $CHANGELOG_AUTHOR (defaults to the gitea-actions bot identity). set -euo pipefail SPEC="$1" VERSION="$2" AUTHOR="${CHANGELOG_AUTHOR:-Gitea Actions }" if [ ! -f "$SPEC" ]; then echo "error: spec file not found: $SPEC" >&2 exit 1 fi # Find the previous release tag (exclude the current tag at HEAD). PREV_TAG=$(git describe --tags --abbrev=0 --match='v*' HEAD^ 2>/dev/null || echo "") if [ -n "$PREV_TAG" ]; then RANGE="${PREV_TAG}..HEAD" LOG=$(git log --no-merges --pretty=format:'- %s' "$RANGE" \ | grep -v '^- chore: bump version' \ | grep -v '^- Merge ' \ || true) else LOG="" fi if [ -z "$LOG" ]; then LOG="- No user-visible changes" fi DATE=$(LC_ALL=C date -u +'%a %b %d %Y') ENTRY="* ${DATE} ${AUTHOR} - ${VERSION}-1 ${LOG} " # Prepend the entry to the %changelog section. TMP=$(mktemp) awk -v entry="$ENTRY" ' inserted == 0 && /^%changelog[[:space:]]*$/ { print print entry inserted = 1 next } { print } ' "$SPEC" > "$TMP" if ! grep -q '^%changelog' "$SPEC"; then echo "error: no %changelog section in $SPEC — refusing to mangle" >&2 rm -f "$TMP" exit 1 fi mv "$TMP" "$SPEC" echo "Added changelog entry for ${VERSION}:" echo "$ENTRY"