#!/bin/sh # Release markers refer to source commits, not Maven's workspace version edits. set -eu mode=${1:-} version=${2:-} tag="portal-release-$version" if [ -z "$version" ] || ! git check-ref-format "refs/tags/$tag"; then echo 'Usage: sh scripts/release-notes.sh generate|publish VERSION' >&2 exit 1 fi commit=$(git rev-parse HEAD) case "$mode" in generate) # Fetch failures must not masquerade as a first release. if [ "$(git rev-parse --is-shallow-repository)" = true ]; then git fetch --unshallow origin fi git fetch origin 'refs/tags/portal-release-*:refs/tags/portal-release-*' previous=$(git describe --tags --abbrev=0 --match 'portal-release-*' --exclude "$tag" HEAD 2>/dev/null || true) range=HEAD if [ -n "$previous" ]; then range="$previous..HEAD" fi changes=$(git log --reverse --format='- %s (`%h`)' "$range" --) printf '# Changes in %s\n\nSource commit: `%s`\n\n' "$version" "$commit" if [ -n "$previous" ]; then printf 'Since release tag `%s` (nearest release in this branch history).\n\n' "$previous" else printf 'First recorded release: includes all available source history.\n\n' fi if [ -n "$changes" ]; then printf '%s\n' "$changes" else printf 'No source changes since the previous release.\n' fi ;; publish) if git show-ref --verify --quiet "refs/tags/$tag"; then if [ "$(git rev-parse "refs/tags/$tag^{commit}")" != "$commit" ]; then echo "Release tag $tag already identifies another commit" >&2 exit 1 fi else git -c user.name='Jenkins' -c user.email='jenkins@locusworks.net' \ tag -a "$tag" "$commit" -m "Release $version" fi # Never overwrite a remote release marker. git push origin "refs/tags/$tag:refs/tags/$tag" ;; *) echo 'Usage: sh scripts/release-notes.sh generate|publish VERSION' >&2 exit 1 ;; esac