#!/bin/sh set -eu PROJECT_UC= while getopts 'd:V:n:N:m:' flag; do case "$flag" in d) DATE="$OPTARG" ;; V) VVERSION="v$OPTARG" ;; n) PROJECT="$OPTARG" ;; N) PROJECT_UC="$OPTARG" ;; m) MAILING_LIST="$OPTARG" ;; *) exit 2 ;; esac done shift $((OPTIND - 1)) assert_arg() { if [ -z "$1" ]; then echo "Missing $2" >&2 exit 2 fi } assert_arg "${DATE:-}" '-d DATE' assert_arg "${VVERSION:-}" '-V VERSION' assert_arg "${PROJECT:-}" '-n PROJECT' assert_arg "${MAILING_LIST:-}" '-m MAILING_LIST' if [ -z "${PROJECT_UC:-}" ]; then PROJECT_UC="$PROJECT" fi if git show "$VVERSION" 1>/dev/null 2>/dev/null; then echo "Version '$VVERSION' already exists." >&2 exit 1 fi sh aux/workflow/assert-changelog.sh -N "$PROJECT_UC" -n "$PROJECT" "$VVERSION" sh aux/workflow/assert-readme.sh -n "$PROJECT" -m "$MAILING_LIST" "$VVERSION" if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then echo "Date '$DATE' is not up-to-date." >&2 exit 1 fi if [ "Release $VVERSION" != "$(git log --format=%B -1 HEAD | head -n1)" ]; then echo "Commit message isn't 'Release $VVERSION'." >&2 exit 1 fi if ! (git diff --quiet && git diff --quiet --staged); then echo 'Dirty repository.' exit 1 fi git tag "$VVERSION" sh aux/workflow/sign-tarballs.sh -n "$PROJECT" cat <&2 Now push the tag and the signature before pushing the commit: git push origin refs/notes/signatures/tar.gz -o skip-ci --no-verify git push --tags -o skip-ci --no-verify git push EOF