Skip to content

Correctly parse Go pseudo-versions

Oscar Tovar requested to merge otovar/support-go-psuedo-versions into master

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?

Edited by Oscar Tovar

Merge request reports