Correctly parse Go pseudo-versions
What does this MR do?
This adds specs that confirm support for Go pseudoversions in semver_dialects
v3.
It also ensures that we don't regress in this use case.
What are the relevant issue numbers?
Relates to gitlab-org/gitlab#442097 (closed).
Benchmarks
❯ ruby benchmark/go_ips.rb
ruby 3.0.6p216 (2023-03-30 revision 23a532679b) [arm64-darwin23]
Warming up --------------------------------------
go-release 89.865k i/100ms
legacy-release 12.325k i/100ms
go-prerelease 84.748k i/100ms
legacy-prerelease 9.636k i/100ms
go-complex 53.992k i/100ms
legacy-complex 4.605k i/100ms
Calculating -------------------------------------
go-release 907.185k (± 0.5%) i/s - 4.583M in 5.052130s
legacy-release 125.558k (± 0.6%) i/s - 628.575k in 5.006445s
go-prerelease 840.808k (± 0.8%) i/s - 4.237M in 5.040034s
legacy-prerelease 96.285k (± 1.5%) i/s - 481.800k in 5.005013s
go-complex 536.917k (± 0.6%) i/s - 2.700M in 5.028143s
legacy-complex 45.926k (± 0.5%) i/s - 230.250k in 5.013603s
Comparison:
go-release: 907185.1 i/s
go-prerelease: 840807.7 i/s - 1.08x slower
go-complex: 536917.2 i/s - 1.69x slower
legacy-release: 125557.5 i/s - 7.23x slower
legacy-prerelease: 96284.7 i/s - 9.42x slower
legacy-complex: 45926.1 i/s - 19.75x slower
Compared the results from the specs with the Go version using a playground.
Integration test
❯ rake 'test_parsers[go]'
═════════════════════════════════════════════════════════════════════════════════
testing parser on file=.pmdb/advisories/v2/go/1714633348/000000000.ndjson
═════════════════════════════════════════════════════════════════════════════════
Successfully parsed affected range file=.pmdb/advisories/v2/go/1714633348/000000000.ndjson line=1
Successfully parsed affected range file=.pmdb/advisories/v2/go/1714633348/000000000.ndjson line=2
═════════════════════════════════════════════════════════════════════════════════
testing parser on file=.pmdb/advisories/v2/go/1714806151/000000000.ndjson
═════════════════════════════════════════════════════════════════════════════════
Successfully parsed affected range file=.pmdb/advisories/v2/go/1714806151/000000000.ndjson line=1
Successfully parsed affected range file=.pmdb/advisories/v2/go/1714806151/000000000.ndjson line=2
Successfully parsed affected range file=.pmdb/advisories/v2/go/1714806151/000000000.ndjson line=3
Successfully parsed affected range file=.pmdb/advisories/v2/go/1714806151/000000000.ndjson line=4
Successfully parsed affected range file=.pmdb/advisories/v2/go/1714806151/000000000.ndjson line=5
Successfully parsed affected range file=.pmdb/advisories/v2/go/1714806151/000000000.ndjson line=6
Successfully parsed affected range file=.pmdb/advisories/v2/go/1714806151/000000000.ndjson line=7
═════════════════════════════════════════════════════════════════════════════════
testing parser on file=.pmdb/advisories/v2/go/1715065378/000000000.ndjson
═════════════════════════════════════════════════════════════════════════════════
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715065378/000000000.ndjson line=1
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715065378/000000000.ndjson line=2
═════════════════════════════════════════════════════════════════════════════════
testing parser on file=.pmdb/advisories/v2/go/1715151758/000000000.ndjson
═════════════════════════════════════════════════════════════════════════════════
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715151758/000000000.ndjson line=1
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715151758/000000000.ndjson line=2
═════════════════════════════════════════════════════════════════════════════════
testing parser on file=.pmdb/advisories/v2/go/1715238203/000000000.ndjson
═════════════════════════════════════════════════════════════════════════════════
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715238203/000000000.ndjson line=1
═════════════════════════════════════════════════════════════════════════════════
testing parser on file=.pmdb/advisories/v2/go/1715324572/000000000.ndjson
═════════════════════════════════════════════════════════════════════════════════
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715324572/000000000.ndjson line=1
═════════════════════════════════════════════════════════════════════════════════
testing parser on file=.pmdb/advisories/v2/go/1715410960/000000000.ndjson
═════════════════════════════════════════════════════════════════════════════════
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715410960/000000000.ndjson line=1
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715410960/000000000.ndjson line=2
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715410960/000000000.ndjson line=3
═════════════════════════════════════════════════════════════════════════════════
testing parser on file=.pmdb/advisories/v2/go/1715756568/000000000.ndjson
═════════════════════════════════════════════════════════════════════════════════
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715756568/000000000.ndjson line=1
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715756568/000000000.ndjson line=2
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715756568/000000000.ndjson line=3
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715756568/000000000.ndjson line=4
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715756568/000000000.ndjson line=5
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715756568/000000000.ndjson line=6
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715756568/000000000.ndjson line=7
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715756568/000000000.ndjson line=8
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715756568/000000000.ndjson line=9
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715756568/000000000.ndjson line=10
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715756568/000000000.ndjson line=11
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715756568/000000000.ndjson line=12
═════════════════════════════════════════════════════════════════════════════════
testing parser on file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson
═════════════════════════════════════════════════════════════════════════════════
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=1
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=2
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=3
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=4
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=5
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=6
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=7
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=8
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=9
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=10
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=11
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=12
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=13
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715842966/000000000.ndjson line=14
═════════════════════════════════════════════════════════════════════════════════
testing parser on file=.pmdb/advisories/v2/go/1715929376/000000000.ndjson
═════════════════════════════════════════════════════════════════════════════════
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715929376/000000000.ndjson line=1
Successfully parsed affected range file=.pmdb/advisories/v2/go/1715929376/000000000.ndjson line=2
═════════════════════════════════════════════════════════════════════════════════
Does this MR meet the acceptance criteria?
-
Changelog entry added -
Documentation created/updated for this project, if necessary -
Tests added for this feature/bug -
Conforms to the code review guidelines -
Security reports checked/validated by reviewer
Edited by Oscar Tovar