Skip to content

Commit 315c1c4

Browse files
committed
support more versions and check version matches
Signed-off-by: Dentrax <furkan.turkal@chainguard.dev>
1 parent a80d408 commit 315c1c4

3 files changed

Lines changed: 68 additions & 7 deletions

File tree

pkg/lint/rules.go

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -481,17 +481,45 @@ var AllRules = func(l *Linter) Rules { //nolint:gocyclo
481481
packageName := matches[1]
482482
versionStream := matches[2]
483483

484-
// package-name=${{package.full-version}}
485-
provides := fmt.Sprintf("%s=%s-r%d", packageName, c.Package.Version, c.Package.Epoch)
486-
// Some packages does not have ${{package.full-version}}, instead they have PACKAGE=VERSION.999. This is for backward compatibility.
487-
provides999 := fmt.Sprintf("%s=%s.999", packageName, versionStream)
488-
if !slices.Contains(c.Package.Dependencies.Provides, provides) && !slices.Contains(c.Package.Dependencies.Provides, provides999) {
484+
if !strings.HasPrefix(c.Package.Version, versionStream) {
485+
return fmt.Errorf("package is version streamed but package.version %s starts with different than given version stream %s", c.Package.Version, versionStream)
486+
}
487+
488+
providesList := []string{
489+
fmt.Sprintf("%s=%s-r%d", packageName, c.Package.Version, c.Package.Epoch),
490+
fmt.Sprintf("%s=%s-r%d", packageName, versionStream, c.Package.Epoch),
491+
fmt.Sprintf("%s=%s", packageName, c.Package.Version),
492+
fmt.Sprintf("%s=%s", packageName, versionStream),
493+
fmt.Sprintf("%s=%s.999", packageName, versionStream),
494+
}
495+
496+
anyMatch := false
497+
for _, provides := range providesList {
498+
if slices.Contains(c.Package.Dependencies.Provides, provides) {
499+
anyMatch = true
500+
break
501+
}
502+
}
503+
504+
if !anyMatch {
489505
return fmt.Errorf("package is version streamed but %s=${{package.full-version}} is missing on dependencies.provides", packageName)
490506
}
491507

492508
if c.Update.Enabled && !c.Update.Manual && c.Update.GitHubMonitor != nil {
493-
// package-name-X.Y, package-name-X.Y., X.Y, vX.Y, X.Y., vX.Y., release-X.Y, release-X.Y.
494-
filtersToCheck := []string{c.Package.Name, c.Package.Name + ".", versionStream, "v" + versionStream, versionStream + ".", "v" + versionStream + ".", "release-" + versionStream, "release-" + versionStream + "."}
509+
prefixesToCheck := []string{"", "v", packageName, "release"}
510+
separators := []string{"", ".", "-", "_"}
511+
versionsToCheck := []string{versionStream, strings.ReplaceAll(versionStream, ".", "-"), strings.ReplaceAll(versionStream, ".", "_")}
512+
513+
var filtersToCheck []string
514+
for _, prefix := range prefixesToCheck {
515+
for _, separator := range separators {
516+
for _, version := range versionsToCheck {
517+
for _, suffix := range separators {
518+
filtersToCheck = append(filtersToCheck, prefix+separator+version+suffix)
519+
}
520+
}
521+
}
522+
}
495523

496524
if !slices.Contains(filtersToCheck, c.Update.GitHubMonitor.TagFilter) && !slices.Contains(filtersToCheck, c.Update.GitHubMonitor.TagFilterPrefix) {
497525
return fmt.Errorf("package is version streamed but tag filter %s is missing on update.github", versionStream)

pkg/lint/rules_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,24 @@ func TestLinter_Rules(t *testing.T) {
467467
wantErr: false,
468468
matches: 1,
469469
},
470+
{
471+
file: "version-stream-mismatch-version-1.2.yaml",
472+
minSeverity: SeverityError,
473+
want: EvalResult{
474+
File: "version-stream-mismatch-version-1.2",
475+
Errors: EvalRuleErrors{
476+
{
477+
Rule: Rule{
478+
Name: "valid-version-stream",
479+
Severity: SeverityError,
480+
},
481+
Error: fmt.Errorf("[valid-version-stream]: package is version streamed but package.version 1.7 starts with different than given version stream 1.2 (ERROR)"),
482+
},
483+
},
484+
},
485+
wantErr: false,
486+
matches: 1,
487+
},
470488
}
471489

472490
for _, tt := range tests {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package:
2+
name: version-stream-mismatch-version-1.2
3+
version: 1.7 # Supposed to be 1.2.*
4+
epoch: 0
5+
description: "a version-streamed package with no dependencies.provides"
6+
7+
pipeline:
8+
- uses: fetch
9+
with:
10+
uri: https://test.com/version-stream-mismatch-version/${{package.version}}.tar.gz
11+
expected-sha256: ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269
12+
13+
test:
14+
pipeline:
15+
- runs: "echo 'test'"

0 commit comments

Comments
 (0)