fix: do not fail the release when pyproject.toml is already current (#18)

## The defect

The release step added in #17 commits the computed version unconditionally:

```sh
git add pyproject.toml
git commit -m "chore(release): v${VERSION}"
```

If `pyproject.toml` already carries that version — a re-run of a release, or a version corrected by hand — nothing is staged, `git commit` exits non-zero, and `set -euo pipefail` fails the job. By that point the image has already been pushed, so the release is half-done: published container, no tag. The next run then computes the same version again from the same commits.

## The fix

Skip the commit and its branch push when there is nothing staged; tag either way.

## Verification

The step was extracted from the workflow and run against a scratch repository with a real `origin`:

- `VERSION` equal to the file's version → logs `pyproject.toml is already at 0.1.0`, pushes the tag, no commit.
- `VERSION` different → commits `chore(release): v0.2.0`, pushes the branch, then the tag.

Both paths leave `main` and the tags consistent. `bash -n` clean.

Found while porting this same release scheme to `music-mirror`, which carries the guarded version from the start.

---------

Co-authored-by: Emma Thorpe <emma.thorpe@citrix.com>
Reviewed-on: #18
This commit was merged in pull request #18.
This commit is contained in:
2026-08-21 14:50:08 +01:00
co-authored by Emma Thorpe
parent e2ec48f1db
commit efa76ce17b
+9 -1
View File
@@ -188,11 +188,19 @@ jobs:
git config user.name "${{ github.actor }}" git config user.name "${{ github.actor }}"
git config user.email "${{ github.actor }}@users.noreply.${REGISTRY}" git config user.email "${{ github.actor }}@users.noreply.${REGISTRY}"
git add pyproject.toml git add pyproject.toml
git commit -m "chore(release): v${VERSION}"
# The file may already carry this version, in which case there is
# nothing to commit and `git commit` would fail the job after the
# image has already been pushed.
if git diff --cached --quiet; then
echo "pyproject.toml is already at ${VERSION}"
else
git commit -m "chore(release): v${VERSION}"
# Push the branch before the tag. If main has moved on and this push # Push the branch before the tag. If main has moved on and this push
# is rejected, the job fails without having left a tag pointing at a # is rejected, the job fails without having left a tag pointing at a
# commit that is not on main. # commit that is not on main.
git push origin "HEAD:${GITHUB_REF_NAME}" git push origin "HEAD:${GITHUB_REF_NAME}"
fi
git tag -a "v${VERSION}" -m "v${VERSION}" git tag -a "v${VERSION}" -m "v${VERSION}"
git push origin "v${VERSION}" git push origin "v${VERSION}"