Skip to content

Commit 8f16499

Browse files
committed
support more versions and check version matches
Signed-off-by: Dentrax <furkan.turkal@chainguard.dev>
1 parent 6ae5eaa commit 8f16499

File tree

3 files changed

+68
-7
lines changed

3 files changed

+68
-7
lines changed

pkg/lint/rules.go

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

467-
// package-name=${{package.full-version}}
468-
provides := fmt.Sprintf("%s=%s-r%d", packageName, c.Package.Version, c.Package.Epoch)
469-
// Some packages does not have ${{package.full-version}}, instead they have PACKAGE=VERSION.999. This is for backward compatibility.
470-
provides999 := fmt.Sprintf("%s=%s.999", packageName, versionStream)
471-
if !slices.Contains(c.Package.Dependencies.Provides, provides) && !slices.Contains(c.Package.Dependencies.Provides, provides999) {
467+
if !strings.HasPrefix(c.Package.Version, versionStream) {
468+
return fmt.Errorf("package is version streamed but package.version %s starts with different than given version stream %s", c.Package.Version, versionStream)
469+
}
470+
471+
providesList := []string{
472+
fmt.Sprintf("%s=%s-r%d", packageName, c.Package.Version, c.Package.Epoch),
473+
fmt.Sprintf("%s=%s-r%d", packageName, versionStream, c.Package.Epoch),
474+
fmt.Sprintf("%s=%s", packageName, c.Package.Version),
475+
fmt.Sprintf("%s=%s", packageName, versionStream),
476+
fmt.Sprintf("%s=%s.999", packageName, versionStream),
477+
}
478+
479+
anyMatch := false
480+
for _, provides := range providesList {
481+
if slices.Contains(c.Package.Dependencies.Provides, provides) {
482+
anyMatch = true
483+
break
484+
}
485+
}
486+
487+
if !anyMatch {
472488
return fmt.Errorf("package is version streamed but %s=${{package.full-version}} is missing on dependencies.provides", packageName)
473489
}
474490

475491
if c.Update.Enabled && !c.Update.Manual && c.Update.GitHubMonitor != nil {
476-
// package-name-X.Y, package-name-X.Y., X.Y, vX.Y, X.Y., vX.Y., release-X.Y, release-X.Y.
477-
filtersToCheck := []string{c.Package.Name, c.Package.Name + ".", versionStream, "v" + versionStream, versionStream + ".", "v" + versionStream + ".", "release-" + versionStream, "release-" + versionStream + "."}
492+
prefixesToCheck := []string{"", "v", packageName, "release"}
493+
separators := []string{"", ".", "-", "_"}
494+
versionsToCheck := []string{versionStream, strings.ReplaceAll(versionStream, ".", "-"), strings.ReplaceAll(versionStream, ".", "_")}
495+
496+
var filtersToCheck []string
497+
for _, prefix := range prefixesToCheck {
498+
for _, separator := range separators {
499+
for _, version := range versionsToCheck {
500+
for _, suffix := range separators {
501+
filtersToCheck = append(filtersToCheck, prefix+separator+version+suffix)
502+
}
503+
}
504+
}
505+
}
478506

479507
if !slices.Contains(filtersToCheck, c.Update.GitHubMonitor.TagFilter) && !slices.Contains(filtersToCheck, c.Update.GitHubMonitor.TagFilterPrefix) {
480508
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
@@ -451,6 +451,24 @@ func TestLinter_Rules(t *testing.T) {
451451
wantErr: false,
452452
matches: 1,
453453
},
454+
{
455+
file: "version-stream-mismatch-version-1.2.yaml",
456+
minSeverity: SeverityError,
457+
want: EvalResult{
458+
File: "version-stream-mismatch-version-1.2",
459+
Errors: EvalRuleErrors{
460+
{
461+
Rule: Rule{
462+
Name: "valid-version-stream",
463+
Severity: SeverityError,
464+
},
465+
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)"),
466+
},
467+
},
468+
},
469+
wantErr: false,
470+
matches: 1,
471+
},
454472
}
455473

456474
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)