Repository navigation
sr 7.0.1
[7.0.1] - 2026-10-12
Release-engineering patch: fixes the pipeline defects that stopped v7.0.0
from producing a GitHub Release, and aligns the declared Python floor with
what the code has required since 7.0.0. No behavioural changes to sr
itself — same commands, same exit codes, same session format.
Fixed
- The release workflow could never publish. It verified the built asset
withsha256sum -c build/sr.pyz.sha256from the repository root, but the
checksum file names the asset bare (<digest> sr.pyz) andsha256sum -c
resolves that name against the working directory — so the v7.0.0 release
died withsr.pyz: No such file or directory. The step now runs the check
frombuild/. The released asset pair itself was always correct: download
sr.pyzandsr.pyz.sha256into one directory and run
sha256sum -c sr.pyz.sha256there. - A CI gate line that could never pass. The checksum-name gate grepped
the installer forASSET = "sr.pyz"(with spaces) while
scripts/install.shhas always saidASSET="sr.pyz". The gate now greps
the real spelling and additionally pins the bare-name ↔cd buildpairing
in the release workflow and the build tool. - The CI man-page comparison was a calendar time bomb. A raw
diff -u
included the generated.THdate line, so the gate only passed while the
runner's date matched the day the page was committed. CI now uses
build_manpage.py --check, which ignores the date. - The installer job relied on the runner image carrying pytest for its
fail-closed updater gate; it now installs pytest explicitly.
Changed
- Minimum Python is 3.10 (declared: 3.9 — and broken there). 7.0.0 used
dataclass(slots=True), a 3.10 feature, in 36 places, so both 3.9 CI legs
died during collection and a real 3.9 install would have failed on import.
requires-python, the classifiers, the CI matrix (3.10/3.11/3.13/3.14 on
Linux + macOS, 3.12 on Linux),install.sh,sr-cli, the npm launcher and
sr doctornow declare the same floor, and a structural test keeps them
from drifting apart again. Python 3.9 environments keep the 6.x Bash
implementation from thev6.1.0release assets.
Added
make workflow-check(tools/check_workflows.py) — the gate that was
missing. It parses.github/workflows/*.yml, syntax-checks everyrun:
block and executes the hermetic workflow steps verbatim, with the
workflows' own environment, so a workflow line that disagrees with the
repository fails locally before the push instead of on a runner after the
tag.tests/test_workflows.pyre-runs both steps that died on the
v7.0.0 runners as regression tests.
Install
# standalone single file (no package manager)
curl -fsSL https://raw.githubusercontent.com/paulmann/sr-search-replace/main/scripts/install.sh | bash
# or
pipx install sr-search-replace
npm install -g sr-search-replaceVerify the download
sha256sum -c sr.pyz.sha256 # must print "OK"
sr selftest # end-to-end smoke test
sr doctor # environment and installation reportUpdate an existing standalone install
sr update --check
sr updateFull manual: sr help · Migration from 6.x: sr help compat