Files
mgmt/misc/make-rpm-changelog.sh
James Shubin 0ec00fe57f make: Improve release pipeline
Hopefully this makes releases a little better for users.
In particular, this avoids listing old build artifacts in the SHA256SUMS
files when we make new releases, and users can now download them
directly.

Now to make a release you run: `make tag && make release`.
After the first make session ends, you'll have a new tag released
publicly, and then during the second make session, the release target
will notice this new tag, build some assets, and upload them!
2018-11-30 19:08:53 -05:00

49 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
# This script generates an rpm changelog from the project's git history.
# version we're releasing
VERSION="$1"
# path to store the changelog
CHANGELOG="releases/${VERSION}/rpm/changelog"
# input to format flag for git tag
TAG_FORMAT="* %(creatordate:format:%a %b %d %Y) %(creator) %(refname:lstrip=2)"
# a list of tags to be parsed in the loop
TAGS=$(git tag --sort=-creatordate --format="$TAG_FORMAT" | sed -r 's/[0-9]+ -[0-9]+ //')
# placeholder for the next line of the list
THIS_TAGLINE=
# parse the list
while read -r LAST_TAGLINE; do
# read ahead one tag
if [ "$THIS_TAGLINE" == "" ]; then
# store the tag for the next iteration
THIS_TAGLINE="$LAST_TAGLINE"
continue
fi
# grab the tags from the last column of the taglines
THIS_TAG=$(echo "$THIS_TAGLINE" | awk '{print $NF}')
LAST_TAG=$(echo "$LAST_TAGLINE" | awk '{print $NF}')
# print the release description
printf "\n%s\n\n" "$THIS_TAGLINE" >> "$CHANGELOG"
# print all the commits between the tags
git shortlog -n ${LAST_TAG}...${THIS_TAG} | sed -r '/\):/s/^/ - /' >> "$CHANGELOG"
# first tag is special since there's no previous one
if [ "$LAST_TAG" == "0.0.1" ]; then
# print the release description
printf "\n%s\n\n" "$LAST_TAGLINE" >> "$CHANGELOG"
# print all the commits before the first tag
git shortlog -n $LAST_TAG | sed -r '/\):/s/^/ - /' >> "$CHANGELOG"
fi
# store the tag for the next iteration
THIS_TAGLINE="$LAST_TAGLINE"
done <<< "$TAGS"
# trim the first and last lines
sed -i '1d;$d' "$CHANGELOG"