refactor(version,git): derive the tag grammar from the canonical spec - #499
Merged
Merged
Conversation
Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
…r from taggrammar Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
internal/versionandinternal/giteach carried their own hand-written copy of the release-tag regex (semverRegex,baseVersionRegex,rcSuffixRegex, and git'sversionTagRegex), policed only by a cross-package drift test. The git release classifier also decided "is this a published release" with a literal!strings.Contains(tag, "-rc."), which misclassifies any non-default prerelease token as a finished release.Fix
Back both packages with the
internal/taggrammarleaf spec introduced in #498, so the parser and the tag predicate can no longer diverge:versionderives its parse andString()output from ataggrammar.Spec. AddsNewCalculatorWithGrammar,ParseWithGrammar,ParseBaseWithGrammar; the existingNewCalculator/Parse/ParseBasestay as default-spec wrappers so no call site changes. Default output is byte-identical.gitdelegatesIsValidVersionTagto the spec (deletes the hand-copied regex) and addsIsValidVersionTagSpec. The release classifier now asks the spec "parses as a version with no prerelease segment" instead of matching a literal-rc., via a newGetLatestReleaseTagSpec.gitimports onlytaggrammar(no version cycle).No behavior change under the default grammar; this is the plumbing the configurable block wires into next.
Verification
go build ./...cleango test ./... -racegreen (2471 tests)golangci-lint run ./internal/version/ ./internal/git/cleangitdoes not importversion(confirmed viago list -deps)Relates to #434.