| #!/bin/sh | |
| # SPDX-License-Identifier: GPL-2.0-or-later | |
| # | |
| # Prepare a release: update VERSION.txt and create the version bump | |
| # commit. This handles steps 1 and 2 of the release procedure in | |
| # AGENTS.md. Step 3 (drafting the tag message) requires judgement to | |
| # categorise and summarise changes, so is left to the caller. | |
| set -e | |
| usage() { | |
| echo "Usage: $0 <version>" >&2 | |
| echo "" >&2 | |
| echo " version X.Y.Z or vX.Y.Z" >&2 | |
| echo "" >&2 | |
| echo "Example: $0 1.8.1" >&2 | |
| exit 1 | |
| } | |
| RAW="$1" | |
| if [ -z "$RAW" ]; then | |
| usage | |
| fi | |
| VERSION="${RAW#v}" | |
| case "$VERSION" in | |
| [0-9]*.[0-9]*.[0-9]*) | |
| ;; | |
| *) | |
| echo "Error: version '$VERSION' does not look like X.Y.Z" >&2 | |
| exit 1 | |
| ;; | |
| esac | |
| TAG="v${VERSION}" | |
| if git rev-parse "$TAG" >/dev/null 2>&1; then | |
| echo "Error: tag $TAG already exists" >&2 | |
| exit 1 | |
| fi | |
| if ! git diff-index --quiet HEAD; then | |
| echo "Error: working tree is dirty; commit or stash first" >&2 | |
| exit 1 | |
| fi | |
| echo "$VERSION" > VERSION.txt | |
| git add VERSION.txt | |
| git commit -m "$(cat <<EOF | |
| Bump version to $TAG | |
| Prepare for a new release. | |
| EOF | |
| )" | |
| echo "Building with make..." | |
| git clean -fdx | |
| make check | |
| echo "" | |
| echo "Building with meson..." | |
| git clean -fdx | |
| meson setup build | |
| meson test -C build | |
| echo "" | |
| echo "All builds and tests passed." | |
| echo "Next: draft the tag message to tag-message.txt, then run:" | |
| echo " scripts/finalize-release tag-message.txt" |