#!/usr/bin/env bash set -euo pipefail VERSION="${1:-}" if [[ ! "$VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z.-]+)?$ ]]; then echo "Usage: $0 v.." >&2 exit 2 fi if git rev-parse -q --verify "refs/tags/$VERSION" >/dev/null; then echo "Tag $VERSION already exists; generate the archive before creating the tag." >&2 exit 1 fi PREVIOUS_TAG="$(git describe --tags --abbrev=0 --match 'v*' 2>/dev/null || true)" if [[ -n "$PREVIOUS_TAG" ]]; then RANGE="$PREVIOUS_TAG..HEAD" RANGE_LABEL="$PREVIOUS_TAG..$VERSION" else RANGE="HEAD" RANGE_LABEL="initial..$VERSION" fi COMMITS="$(git log "$RANGE" --no-merges --format='- `%h` %s')" if [[ -z "$COMMITS" ]]; then echo "No commits found in $RANGE; refusing to create empty release notes." >&2 exit 1 fi OUTPUT="docs/releases/${VERSION}.md" mkdir -p "$(dirname "$OUTPUT")" cat > "$OUTPUT" < EOF echo "Generated $OUTPUT from $RANGE"