Release mechanics for v1.0.0: version single-sourcing and tag #80
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
The final work unit for the milestone. Everything else in the
1.0.0milestone must land first.
Current state:
mfer/constants.go:5—Version = "0.1.0"Makefile:9—VERSION := 0.1.0GOLDFLAGSinjects-X main.Version=$(VERSION)intocmd/mferSo the version is written down in at least two places that must be kept in
sync by hand, and a third value is injected at build time. There is nothing
preventing them from disagreeing, and nothing that checks.
The README commits to SemVer. The repo has no tags at all.
Definition of done
derives from it.
make build,mfer --version,mfer version, and thelibrary constant all report the same string, and it is impossible for them
to drift.
mfer --versionoutput is valid SemVer and matches the tag exactly.mfer --versionandmfer versionproduce identical output (see also#64).
1.0.0.docker build .succeeds and the built binary reports1.0.0.TODO.mdand the README reflect that 1.0.0 is released.Implementation requirements
merged PR that leaves the repo ready to tag; the tag itself is
sneak's.1.0.0milestone isclosed. Verify the milestone is otherwise empty before starting, and say
so in the PR body.
via ldflags alone is insufficient —
go installof the library does notrun the Makefile, so a consumer importing
mferas a library would see anempty version. The Go constant is the more defensible source, with the
build verifying rather than supplying it.
ReleaseDateinmfer/constants.goneeds the same treatment or anexplicit decision to drop it. A hand-maintained release date is another
thing that silently goes stale.
1.0.0 tag on the wrong module path is not fixable without a 2.0.0.
(closes #80).