Replace cargo-release with just release recipe
cargo-release assumes git branches and push semantics that conflict
with jj. A justfile recipe handles the same steps directly: validate
version, check for clean working copy, bump Cargo.toml, commit, push
bookmark via jj, and create/push the git tag.
Assisted-by: Claude Opus 4.6 via pi
diff --git a/README.md b/README.md
index c851c8c..822fdcc 100644
--- a/README.md
+++ b/README.md
@@ -163,13 +163,8 @@ let doc: kdl::KdlDocument = serde_kdl2::to_doc(&config)?;
## Releasing
-Releases use [cargo-release](https://github.com/crates-io/cargo-release).
-Run one of the following locally:
-
```sh
-cargo release patch # 0.1.0 → 0.1.1
-cargo release minor # 0.1.0 → 0.2.0
-cargo release major # 0.1.0 → 1.0.0
+just release X.Y.Z
```
This bumps the version in `Cargo.toml`, commits, tags, and pushes. GitHub
diff --git a/justfile b/justfile
index 1df132b..0e87341 100644
--- a/justfile
+++ b/justfile
@@ -53,4 +53,23 @@ mutants:
fi
exit "$rc"
+release version:
+ #!/usr/bin/env bash
+ set -euo pipefail
+ if ! echo "{{ version }}" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$'; then
+ echo "Usage: just release X.Y.Z[-pre]"
+ exit 1
+ fi
+ if ! jj diff --quiet; then
+ echo "Error: working copy has uncommitted changes"
+ exit 1
+ fi
+ sed -i '' 's/^version = ".*"/version = "{{ version }}"/' Cargo.toml
+ cargo check --quiet
+ jj commit -m 'Release {{ version }}'
+ jj bookmark set main -r @-
+ jj git push --remote origin -b main
+ git -C "$(jj git root)" tag "v{{ version }}" "$(jj log -r @- --no-graph -T 'commit_id')"
+ git -C "$(jj git root)" push origin "v{{ version }}"
+
all: fmt clippy coverage
diff --git a/release.toml b/release.toml
deleted file mode 100644
index 7f575eb..0000000
--- a/release.toml
+++ /dev/null
@@ -1,4 +0,0 @@
-allow-branch = ["main"]
-sign-commit = false
-sign-tag = false
-push-remote = "origin"