#!/usr/bin/env bash set -euo pipefail usage() { echo "Usage: $0 VERSION (for example: 0.30)" } if [[ ${1:-} == "-h" || ${1:-} == "--help" ]]; then usage exit 0 fi if [[ $# -ne 1 || ! $1 =~ ^[0-9]+\.[0-9]+(\.[0-9]+)?$ ]]; then usage >&2 exit 2 fi version=$1 tag="v$version" root=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd) cd "$root" if [[ -n $(git status --porcelain) ]]; then echo "Release requires a clean working tree." >&2 exit 1 fi if git rev-parse -q --verify "refs/tags/$tag" >/dev/null; then echo "Tag $tag already exists." >&2 exit 1 fi command -v dch >/dev/null || { echo "Install devscripts to use dch." >&2; exit 1; } command -v dpkg-parsechangelog >/dev/null || { echo "Install dpkg-dev to use dpkg-parsechangelog." >&2; exit 1; } current_version=$(dpkg-parsechangelog --show-field Version) if [[ $current_version == "$version" ]]; then echo "debian/changelog already has version $version." >&2 exit 1 fi dch --newversion "$version" --distribution stable --force-distribution sed -i "s/^__version__ = .*/__version__ = \"$version\"/" src/damaris/__init__.py if [[ $(dpkg-parsechangelog --show-field Version) != "$version" ]] || [[ $(sed -n 's/^__version__ = "\([^"]*\)"$/\1/p' src/damaris/__init__.py) != "$version" ]]; then echo "Release version did not update consistently; inspect the changelog and package version." >&2 exit 1 fi echo "About to commit the version bump and create tag $tag." read -r -p "Continue? [y/N] " answer if [[ ! $answer =~ ^[Yy]$ ]]; then echo "Release preparation stopped; version and changelog edits were kept." exit 1 fi git add debian/changelog src/damaris/__init__.py git commit -m "Release $tag" git tag -a "$tag" -m "Release $tag" echo "Created local release tag $tag. Push the commit and tag to start the package workflow." echo " git push origin HEAD" echo " git push origin $tag"