Commit Diff


commit - 8c81d1baa0b4b98e6531d1d3ef7dd137a711d05f
commit + c9d114e9fe4f0b9d4483b7122e6b55f18e52e3df
blob - /dev/null
blob + dea15fd48da875489377b25cabbd2bc881bc30e7 (mode 755)
--- /dev/null
+++ hack/release
@@ -0,0 +1,38 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+require() { command -v "$1" &>/dev/null || {
+	echo "error: $1 not found"
+	exit 1
+}; }
+require git
+require git-cliff
+require cargo
+require cargo-release
+
+# --- pre-flight ---
+
+if [ -n "$(git status --porcelain)" ]; then
+	echo "error: working tree is dirty"
+	exit 1
+fi
+
+next=$(git-cliff --bumped-version 2>/dev/null | sed 's/^v//')
+
+if git tag | grep -qx "v$next"; then
+	echo "no releasable commits since v$next"
+	exit 0
+fi
+
+echo "releasing -> v$next"
+
+# --- release ---
+
+cargo release "$next" --execute
+
+# --- changelog ---
+
+git-cliff --tag "v$next" --output CHANGELOG.md
+git add CHANGELOG.md
+git commit --amend --no-edit
+git push --force