From 0814d57fe7d5adcb1172c2f48d5c130b3374015f Mon Sep 17 00:00:00 2001 From: Dentrax Date: Sat, 13 Jul 2024 15:13:19 +0300 Subject: [PATCH 1/6] lint: version stream Signed-off-by: Dentrax --- pkg/lint/rules.go | 44 ++++++++++++++++ pkg/lint/rules_test.go | 52 +++++++++++++++++++ .../version-stream-missing-provides-1.2.yaml | 15 ++++++ ...ream-missing-update-tagfilter-1.2-999.yaml | 24 +++++++++ ...n-stream-missing-update-tagfilter-1.2.yaml | 24 +++++++++ 5 files changed, 159 insertions(+) create mode 100644 pkg/lint/testdata/files/version-stream-missing-provides-1.2.yaml create mode 100644 pkg/lint/testdata/files/version-stream-missing-update-tagfilter-1.2-999.yaml create mode 100644 pkg/lint/testdata/files/version-stream-missing-update-tagfilter-1.2.yaml diff --git a/pkg/lint/rules.go b/pkg/lint/rules.go index a00321fa5..7699a13df 100644 --- a/pkg/lint/rules.go +++ b/pkg/lint/rules.go @@ -468,6 +468,50 @@ var AllRules = func(l *Linter) Rules { //nolint:gocyclo return err }, }, + { + Name: "valid-version-stream", + Description: "check the provides and tag filter if version stream suffix is passed to package name", + Severity: SeverityError, + LintFunc: func(c config.Configuration) error { + // This regex captures a string that ends with a semantic version (semver) suffix. + // It returns two groups: + // - Group 1: The prefix part of the string before the semver. + // - Group 2: The semver (major.minor or major.minor.patch). + // If there is no semver suffix, the string will not match. + re := regexp.MustCompile(`^(.*?)-(\d+\.\d+(?:\.\d+)?)$`) + + // It means that the package is not a version streamed, so early return. + if !re.MatchString(c.Package.Name) { + return nil + } + + matches := re.FindStringSubmatch(c.Package.Name) + if len(matches) != 3 { + return fmt.Errorf("invalid package name %s for version stream, regex matches %+v", c.Package.Name, matches) + } + + packageName := matches[1] + versionStream := matches[2] + + // package-name=${{package.full-version}} + provides := fmt.Sprintf("%s=%s-r%d", packageName, c.Package.Version, c.Package.Epoch) + // Some packages does not have ${{package.full-version}}, instead they have PACKAGE=VERSION.999. This is for backward compatibility. + provides999 := fmt.Sprintf("%s=%s.999", packageName, versionStream) + if !slices.Contains(c.Package.Dependencies.Provides, provides) && !slices.Contains(c.Package.Dependencies.Provides, provides999) { + return fmt.Errorf("package is version streamed but %s=${{package.full-version}} is missing on dependencies.provides", packageName) + } + + if c.Update.Enabled && !c.Update.Manual && c.Update.GitHubMonitor != nil { + // package-name-X.Y, package-name-X.Y., X.Y, vX.Y, X.Y., vX.Y., release-X.Y, release-X.Y. + filtersToCheck := []string{c.Package.Name, c.Package.Name + ".", versionStream, "v" + versionStream, versionStream + ".", "v" + versionStream + ".", "release-" + versionStream, "release-" + versionStream + "."} + + if !slices.Contains(filtersToCheck, c.Update.GitHubMonitor.TagFilter) && !slices.Contains(filtersToCheck, c.Update.GitHubMonitor.TagFilterPrefix) { + return fmt.Errorf("package is version streamed but tag filter %s is missing on update.github", versionStream) + } + } + return nil + }, + }, } } diff --git a/pkg/lint/rules_test.go b/pkg/lint/rules_test.go index bca989efe..10395e3ec 100644 --- a/pkg/lint/rules_test.go +++ b/pkg/lint/rules_test.go @@ -412,6 +412,58 @@ func TestLinter_Rules(t *testing.T) { }, }, }, + }, + { + file: "version-stream-missing-provides-1.2.yaml", + minSeverity: SeverityError, + want: EvalResult{ + File: "version-stream-missing-provides-1.2", + Errors: EvalRuleErrors{ + { + Rule: Rule{ + Name: "valid-version-stream", + Severity: SeverityError, + }, + Error: fmt.Errorf("[valid-version-stream]: package is version streamed but version-stream-missing-provides=${{package.full-version}} is missing on dependencies.provides (ERROR)"), + }, + }, + }, + wantErr: false, + matches: 1, + }, + { + file: "version-stream-missing-update-tagfilter-1.2.yaml", + minSeverity: SeverityError, + want: EvalResult{ + File: "version-stream-missing-update-tagfilter-1.2", + Errors: EvalRuleErrors{ + { + Rule: Rule{ + Name: "valid-version-stream", + Severity: SeverityError, + }, + Error: fmt.Errorf("[valid-version-stream]: package is version streamed but tag filter 1.2 is missing on update.github (ERROR)"), + }, + }, + }, + wantErr: false, + matches: 1, + }, + { + file: "version-stream-missing-update-tagfilter-1.2-999.yaml", + minSeverity: SeverityError, + want: EvalResult{ + File: "version-stream-missing-update-tagfilter-1.2", + Errors: EvalRuleErrors{ + { + Rule: Rule{ + Name: "valid-version-stream", + Severity: SeverityError, + }, + Error: fmt.Errorf("[valid-version-stream]: package is version streamed but tag filter 1.2 is missing on update.github (ERROR)"), + }, + }, + }, wantErr: false, matches: 1, }, diff --git a/pkg/lint/testdata/files/version-stream-missing-provides-1.2.yaml b/pkg/lint/testdata/files/version-stream-missing-provides-1.2.yaml new file mode 100644 index 000000000..19c81da59 --- /dev/null +++ b/pkg/lint/testdata/files/version-stream-missing-provides-1.2.yaml @@ -0,0 +1,15 @@ +package: + name: version-stream-missing-provides-1.2 + version: 1.2.3 + epoch: 0 + description: "a version-streamed package with no dependencies.provides" + +pipeline: + - uses: fetch + with: + uri: https://test.com/version-stream-missing-provides/${{package.version}}.tar.gz + expected-sha256: ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269 + +test: + pipeline: + - runs: "echo 'test'" diff --git a/pkg/lint/testdata/files/version-stream-missing-update-tagfilter-1.2-999.yaml b/pkg/lint/testdata/files/version-stream-missing-update-tagfilter-1.2-999.yaml new file mode 100644 index 000000000..da0f4c620 --- /dev/null +++ b/pkg/lint/testdata/files/version-stream-missing-update-tagfilter-1.2-999.yaml @@ -0,0 +1,24 @@ +package: + name: version-stream-missing-update-tagfilter-1.2 + version: 1.2.3 + epoch: 0 + description: "a version-streamed package with no dependencies.provides" + dependencies: + provides: + - version-stream-missing-update-tagfilter=1.2.999 + +pipeline: + - uses: fetch + with: + uri: https://test.com/version-stream-missing-update-tagfilter/${{package.version}}.tar.gz + expected-sha256: ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269 + +test: + pipeline: + - runs: "echo 'test'" + +update: + enabled: true + github: + identifier: test/version-stream-missing-update-tagfilter + use-tag: true diff --git a/pkg/lint/testdata/files/version-stream-missing-update-tagfilter-1.2.yaml b/pkg/lint/testdata/files/version-stream-missing-update-tagfilter-1.2.yaml new file mode 100644 index 000000000..198efe940 --- /dev/null +++ b/pkg/lint/testdata/files/version-stream-missing-update-tagfilter-1.2.yaml @@ -0,0 +1,24 @@ +package: + name: version-stream-missing-update-tagfilter-1.2 + version: 1.2.3 + epoch: 0 + description: "a version-streamed package with no dependencies.provides" + dependencies: + provides: + - version-stream-missing-update-tagfilter=${{package.full-version}} + +pipeline: + - uses: fetch + with: + uri: https://test.com/version-stream-missing-update-tagfilter/${{package.version}}.tar.gz + expected-sha256: ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269 + +test: + pipeline: + - runs: "echo 'test'" + +update: + enabled: true + github: + identifier: test/version-stream-missing-update-tagfilter + use-tag: true From b73c71a382dfd4c85ed3d0768287bbfd5beb4412 Mon Sep 17 00:00:00 2001 From: Dentrax Date: Mon, 15 Jul 2024 14:38:59 +0300 Subject: [PATCH 2/6] support more versions and check version matches Signed-off-by: Dentrax --- pkg/lint/rules.go | 42 +++++++++++++++---- pkg/lint/rules_test.go | 16 +++++++ .../version-stream-mismatch-version-1.2.yaml | 15 +++++++ 3 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 pkg/lint/testdata/files/version-stream-mismatch-version-1.2.yaml diff --git a/pkg/lint/rules.go b/pkg/lint/rules.go index 7699a13df..20fd186ba 100644 --- a/pkg/lint/rules.go +++ b/pkg/lint/rules.go @@ -493,17 +493,45 @@ var AllRules = func(l *Linter) Rules { //nolint:gocyclo packageName := matches[1] versionStream := matches[2] - // package-name=${{package.full-version}} - provides := fmt.Sprintf("%s=%s-r%d", packageName, c.Package.Version, c.Package.Epoch) - // Some packages does not have ${{package.full-version}}, instead they have PACKAGE=VERSION.999. This is for backward compatibility. - provides999 := fmt.Sprintf("%s=%s.999", packageName, versionStream) - if !slices.Contains(c.Package.Dependencies.Provides, provides) && !slices.Contains(c.Package.Dependencies.Provides, provides999) { + if !strings.HasPrefix(c.Package.Version, versionStream) { + return fmt.Errorf("package is version streamed but package.version %s starts with different than given version stream %s", c.Package.Version, versionStream) + } + + providesList := []string{ + fmt.Sprintf("%s=%s-r%d", packageName, c.Package.Version, c.Package.Epoch), + fmt.Sprintf("%s=%s-r%d", packageName, versionStream, c.Package.Epoch), + fmt.Sprintf("%s=%s", packageName, c.Package.Version), + fmt.Sprintf("%s=%s", packageName, versionStream), + fmt.Sprintf("%s=%s.999", packageName, versionStream), + } + + anyMatch := false + for _, provides := range providesList { + if slices.Contains(c.Package.Dependencies.Provides, provides) { + anyMatch = true + break + } + } + + if !anyMatch { return fmt.Errorf("package is version streamed but %s=${{package.full-version}} is missing on dependencies.provides", packageName) } if c.Update.Enabled && !c.Update.Manual && c.Update.GitHubMonitor != nil { - // package-name-X.Y, package-name-X.Y., X.Y, vX.Y, X.Y., vX.Y., release-X.Y, release-X.Y. - filtersToCheck := []string{c.Package.Name, c.Package.Name + ".", versionStream, "v" + versionStream, versionStream + ".", "v" + versionStream + ".", "release-" + versionStream, "release-" + versionStream + "."} + prefixesToCheck := []string{"", "v", packageName, "release"} + separators := []string{"", ".", "-", "_"} + versionsToCheck := []string{versionStream, strings.ReplaceAll(versionStream, ".", "-"), strings.ReplaceAll(versionStream, ".", "_")} + + var filtersToCheck []string + for _, prefix := range prefixesToCheck { + for _, separator := range separators { + for _, version := range versionsToCheck { + for _, suffix := range separators { + filtersToCheck = append(filtersToCheck, prefix+separator+version+suffix) + } + } + } + } if !slices.Contains(filtersToCheck, c.Update.GitHubMonitor.TagFilter) && !slices.Contains(filtersToCheck, c.Update.GitHubMonitor.TagFilterPrefix) { return fmt.Errorf("package is version streamed but tag filter %s is missing on update.github", versionStream) diff --git a/pkg/lint/rules_test.go b/pkg/lint/rules_test.go index 10395e3ec..44ce670bc 100644 --- a/pkg/lint/rules_test.go +++ b/pkg/lint/rules_test.go @@ -482,6 +482,22 @@ func TestLinter_Rules(t *testing.T) { }, }, }, + }, + { + file: "version-stream-mismatch-version-1.2.yaml", + minSeverity: SeverityError, + want: EvalResult{ + File: "version-stream-mismatch-version-1.2", + Errors: EvalRuleErrors{ + { + Rule: Rule{ + Name: "valid-version-stream", + Severity: SeverityError, + }, + 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)"), + }, + }, + }, wantErr: false, matches: 1, }, diff --git a/pkg/lint/testdata/files/version-stream-mismatch-version-1.2.yaml b/pkg/lint/testdata/files/version-stream-mismatch-version-1.2.yaml new file mode 100644 index 000000000..5164d335d --- /dev/null +++ b/pkg/lint/testdata/files/version-stream-mismatch-version-1.2.yaml @@ -0,0 +1,15 @@ +package: + name: version-stream-mismatch-version-1.2 + version: 1.7 # Supposed to be 1.2.* + epoch: 0 + description: "a version-streamed package with no dependencies.provides" + +pipeline: + - uses: fetch + with: + uri: https://test.com/version-stream-mismatch-version/${{package.version}}.tar.gz + expected-sha256: ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269 + +test: + pipeline: + - runs: "echo 'test'" From 439fb7d46f59ded672b230dba8dd80f1da5f9112 Mon Sep 17 00:00:00 2001 From: Dentrax Date: Mon, 15 Jul 2024 14:58:23 +0300 Subject: [PATCH 3/6] handle for versionprefix and custom provider names Signed-off-by: Dentrax --- pkg/lint/rules.go | 23 +++++++++++++++-------- pkg/lint/rules_test.go | 4 ++-- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/pkg/lint/rules.go b/pkg/lint/rules.go index 20fd186ba..834c3dd72 100644 --- a/pkg/lint/rules.go +++ b/pkg/lint/rules.go @@ -497,12 +497,19 @@ var AllRules = func(l *Linter) Rules { //nolint:gocyclo return fmt.Errorf("package is version streamed but package.version %s starts with different than given version stream %s", c.Package.Version, versionStream) } - providesList := []string{ - fmt.Sprintf("%s=%s-r%d", packageName, c.Package.Version, c.Package.Epoch), - fmt.Sprintf("%s=%s-r%d", packageName, versionStream, c.Package.Epoch), - fmt.Sprintf("%s=%s", packageName, c.Package.Version), - fmt.Sprintf("%s=%s", packageName, versionStream), - fmt.Sprintf("%s=%s.999", packageName, versionStream), + var providesList []string + addToProvidesList := func(key string) { + providesList = append(providesList, fmt.Sprintf("%s=%s-r%d", key, c.Package.Version, c.Package.Epoch)) + providesList = append(providesList, fmt.Sprintf("%s=%s-r%d", key, versionStream, c.Package.Epoch)) + providesList = append(providesList, fmt.Sprintf("%s=%s", key, c.Package.Version)) + providesList = append(providesList, fmt.Sprintf("%s=%s", key, versionStream)) + providesList = append(providesList, fmt.Sprintf("%s=%s.999", key, versionStream)) + } + addToProvidesList(packageName) + + // Some packages have different provides for package name, i.e. python-3 instead of python. + if majorMinor := strings.Split(versionStream, "."); len(majorMinor) > 1 { + addToProvidesList(fmt.Sprintf("%s-%s", packageName, majorMinor[0])) } anyMatch := false @@ -518,7 +525,7 @@ var AllRules = func(l *Linter) Rules { //nolint:gocyclo } if c.Update.Enabled && !c.Update.Manual && c.Update.GitHubMonitor != nil { - prefixesToCheck := []string{"", "v", packageName, "release"} + prefixesToCheck := []string{"", "v", packageName, "release", strings.ReplaceAll(packageName, "-fips", ""), c.Update.GitHubMonitor.StripPrefix} separators := []string{"", ".", "-", "_"} versionsToCheck := []string{versionStream, strings.ReplaceAll(versionStream, ".", "-"), strings.ReplaceAll(versionStream, ".", "_")} @@ -534,7 +541,7 @@ var AllRules = func(l *Linter) Rules { //nolint:gocyclo } if !slices.Contains(filtersToCheck, c.Update.GitHubMonitor.TagFilter) && !slices.Contains(filtersToCheck, c.Update.GitHubMonitor.TagFilterPrefix) { - return fmt.Errorf("package is version streamed but tag filter %s is missing on update.github", versionStream) + return fmt.Errorf("package is version streamed but tag filter %s is mismatch on update.github", versionStream) } } return nil diff --git a/pkg/lint/rules_test.go b/pkg/lint/rules_test.go index 44ce670bc..eea335d93 100644 --- a/pkg/lint/rules_test.go +++ b/pkg/lint/rules_test.go @@ -442,7 +442,7 @@ func TestLinter_Rules(t *testing.T) { Name: "valid-version-stream", Severity: SeverityError, }, - Error: fmt.Errorf("[valid-version-stream]: package is version streamed but tag filter 1.2 is missing on update.github (ERROR)"), + Error: fmt.Errorf("[valid-version-stream]: package is version streamed but tag filter 1.2 is mismatch on update.github (ERROR)"), }, }, }, @@ -460,7 +460,7 @@ func TestLinter_Rules(t *testing.T) { Name: "valid-version-stream", Severity: SeverityError, }, - Error: fmt.Errorf("[valid-version-stream]: package is version streamed but tag filter 1.2 is missing on update.github (ERROR)"), + Error: fmt.Errorf("[valid-version-stream]: package is version streamed but tag filter 1.2 is mismatch on update.github (ERROR)"), }, }, }, From 21870b1102e16faeaff2ec861f002727eb540a16 Mon Sep 17 00:00:00 2001 From: Dentrax Date: Mon, 22 Jul 2024 16:37:08 +0300 Subject: [PATCH 4/6] set severity to warning Signed-off-by: Dentrax --- pkg/lint/rules.go | 2 +- pkg/lint/rules_test.go | 26 ++++++++++--------- .../version-stream-mismatch-version-1.2.yaml | 3 +++ .../version-stream-missing-provides-1.2.yaml | 3 +++ 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/pkg/lint/rules.go b/pkg/lint/rules.go index 834c3dd72..b6306862d 100644 --- a/pkg/lint/rules.go +++ b/pkg/lint/rules.go @@ -471,7 +471,7 @@ var AllRules = func(l *Linter) Rules { //nolint:gocyclo { Name: "valid-version-stream", Description: "check the provides and tag filter if version stream suffix is passed to package name", - Severity: SeverityError, + Severity: SeverityWarning, LintFunc: func(c config.Configuration) error { // This regex captures a string that ends with a semantic version (semver) suffix. // It returns two groups: diff --git a/pkg/lint/rules_test.go b/pkg/lint/rules_test.go index eea335d93..99c3da413 100644 --- a/pkg/lint/rules_test.go +++ b/pkg/lint/rules_test.go @@ -412,19 +412,21 @@ func TestLinter_Rules(t *testing.T) { }, }, }, + wantErr: false, + matches: 1, }, { file: "version-stream-missing-provides-1.2.yaml", - minSeverity: SeverityError, + minSeverity: SeverityWarning, want: EvalResult{ File: "version-stream-missing-provides-1.2", Errors: EvalRuleErrors{ { Rule: Rule{ Name: "valid-version-stream", - Severity: SeverityError, + Severity: SeverityWarning, }, - Error: fmt.Errorf("[valid-version-stream]: package is version streamed but version-stream-missing-provides=${{package.full-version}} is missing on dependencies.provides (ERROR)"), + Error: fmt.Errorf("[valid-version-stream]: package is version streamed but version-stream-missing-provides=${{package.full-version}} is missing on dependencies.provides (WARNING)"), }, }, }, @@ -433,16 +435,16 @@ func TestLinter_Rules(t *testing.T) { }, { file: "version-stream-missing-update-tagfilter-1.2.yaml", - minSeverity: SeverityError, + minSeverity: SeverityWarning, want: EvalResult{ File: "version-stream-missing-update-tagfilter-1.2", Errors: EvalRuleErrors{ { Rule: Rule{ Name: "valid-version-stream", - Severity: SeverityError, + Severity: SeverityWarning, }, - Error: fmt.Errorf("[valid-version-stream]: package is version streamed but tag filter 1.2 is mismatch on update.github (ERROR)"), + Error: fmt.Errorf("[valid-version-stream]: package is version streamed but tag filter 1.2 is mismatch on update.github (WARNING)"), }, }, }, @@ -451,16 +453,16 @@ func TestLinter_Rules(t *testing.T) { }, { file: "version-stream-missing-update-tagfilter-1.2-999.yaml", - minSeverity: SeverityError, + minSeverity: SeverityWarning, want: EvalResult{ File: "version-stream-missing-update-tagfilter-1.2", Errors: EvalRuleErrors{ { Rule: Rule{ Name: "valid-version-stream", - Severity: SeverityError, + Severity: SeverityWarning, }, - Error: fmt.Errorf("[valid-version-stream]: package is version streamed but tag filter 1.2 is mismatch on update.github (ERROR)"), + Error: fmt.Errorf("[valid-version-stream]: package is version streamed but tag filter 1.2 is mismatch on update.github (WARNING)"), }, }, }, @@ -485,16 +487,16 @@ func TestLinter_Rules(t *testing.T) { }, { file: "version-stream-mismatch-version-1.2.yaml", - minSeverity: SeverityError, + minSeverity: SeverityWarning, want: EvalResult{ File: "version-stream-mismatch-version-1.2", Errors: EvalRuleErrors{ { Rule: Rule{ Name: "valid-version-stream", - Severity: SeverityError, + Severity: SeverityWarning, }, - 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)"), + Error: fmt.Errorf("[valid-version-stream]: package is version streamed but package.version 1.7 starts with different than given version stream 1.2 (WARNING)"), }, }, }, diff --git a/pkg/lint/testdata/files/version-stream-mismatch-version-1.2.yaml b/pkg/lint/testdata/files/version-stream-mismatch-version-1.2.yaml index 5164d335d..3a495d13b 100644 --- a/pkg/lint/testdata/files/version-stream-mismatch-version-1.2.yaml +++ b/pkg/lint/testdata/files/version-stream-mismatch-version-1.2.yaml @@ -13,3 +13,6 @@ pipeline: test: pipeline: - runs: "echo 'test'" + +update: + enabled: true diff --git a/pkg/lint/testdata/files/version-stream-missing-provides-1.2.yaml b/pkg/lint/testdata/files/version-stream-missing-provides-1.2.yaml index 19c81da59..31c1a5f4b 100644 --- a/pkg/lint/testdata/files/version-stream-missing-provides-1.2.yaml +++ b/pkg/lint/testdata/files/version-stream-missing-provides-1.2.yaml @@ -13,3 +13,6 @@ pipeline: test: pipeline: - runs: "echo 'test'" + +update: + enabled: true From 00378f460bec018e589e1c9122a134b5124e34bc Mon Sep 17 00:00:00 2001 From: Dentrax Date: Fri, 1 Nov 2024 20:55:51 +0300 Subject: [PATCH 5/6] add support to check subpackage naming standard Signed-off-by: Dentrax --- pkg/lint/rules.go | 9 +++++++ pkg/lint/rules_test.go | 20 ++++++++++++++++ ...on-stream-wrong-subpackage-naming-1.2.yaml | 24 +++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 pkg/lint/testdata/files/version-stream-wrong-subpackage-naming-1.2.yaml diff --git a/pkg/lint/rules.go b/pkg/lint/rules.go index b6306862d..c5ecc2f76 100644 --- a/pkg/lint/rules.go +++ b/pkg/lint/rules.go @@ -524,6 +524,15 @@ var AllRules = func(l *Linter) Rules { //nolint:gocyclo return fmt.Errorf("package is version streamed but %s=${{package.full-version}} is missing on dependencies.provides", packageName) } + // Any subpackage that contains the package name, should follow `${{package.name}}-xyz` format. + for _, s := range c.Subpackages { + if strings.Contains(s.Name, c.Package.Name) { + if !strings.HasPrefix(s.Name, c.Package.Name) { + return fmt.Errorf("subpackage %s should be in format ${{package.name}}-XYZ-SUBPACKAGENAME for a valid version stream", s.Name) + } + } + } + if c.Update.Enabled && !c.Update.Manual && c.Update.GitHubMonitor != nil { prefixesToCheck := []string{"", "v", packageName, "release", strings.ReplaceAll(packageName, "-fips", ""), c.Update.GitHubMonitor.StripPrefix} separators := []string{"", ".", "-", "_"} diff --git a/pkg/lint/rules_test.go b/pkg/lint/rules_test.go index 99c3da413..698cd407d 100644 --- a/pkg/lint/rules_test.go +++ b/pkg/lint/rules_test.go @@ -469,6 +469,24 @@ func TestLinter_Rules(t *testing.T) { wantErr: false, matches: 1, }, + { + file: "version-stream-wrong-subpackage-naming-1.2.yaml", + minSeverity: SeverityWarning, + want: EvalResult{ + File: "version-stream-wrong-subpackage-naming-1.2", + Errors: EvalRuleErrors{ + { + Rule: Rule{ + Name: "valid-version-stream", + Severity: SeverityWarning, + }, + Error: fmt.Errorf("[valid-version-stream]: package is version streamed but version-stream-wrong-subpackage-naming=${{package.full-version}} is missing on dependencies.provides (WARNING)"), + }, + }, + }, + wantErr: false, + matches: 1, + }, { file: "valid-update-schedule.yaml", minSeverity: SeverityWarning, @@ -484,6 +502,8 @@ func TestLinter_Rules(t *testing.T) { }, }, }, + wantErr: false, + matches: 1, }, { file: "version-stream-mismatch-version-1.2.yaml", diff --git a/pkg/lint/testdata/files/version-stream-wrong-subpackage-naming-1.2.yaml b/pkg/lint/testdata/files/version-stream-wrong-subpackage-naming-1.2.yaml new file mode 100644 index 000000000..1afa50820 --- /dev/null +++ b/pkg/lint/testdata/files/version-stream-wrong-subpackage-naming-1.2.yaml @@ -0,0 +1,24 @@ +package: + name: version-stream-wrong-subpackage-naming-1.2 + version: 1.2.3 + epoch: 0 + description: "a version-streamed package with no dependencies.provides" + +pipeline: + - uses: fetch + with: + uri: https://test.com/version-stream-missing-provides/${{package.version}}.tar.gz + expected-sha256: ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269 + +subpackages: + - name: this-is-subpackage-of-version-stream-wrong-subpackage-naming-1.2 + description: "a package with incorrect subpackage prefix" + pipeline: + - runs: exit 0 + +test: + pipeline: + - runs: "echo 'test'" + +update: + enabled: true From b4248f30893c0668f190aada604f92e6e33693d1 Mon Sep 17 00:00:00 2001 From: Dentrax Date: Sat, 2 Nov 2024 15:14:34 +0300 Subject: [PATCH 6/6] fix subpackage match func Signed-off-by: Dentrax --- pkg/lint/rules.go | 2 +- .../files/version-stream-wrong-subpackage-naming-1.2.yaml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/lint/rules.go b/pkg/lint/rules.go index c5ecc2f76..c1dc190f4 100644 --- a/pkg/lint/rules.go +++ b/pkg/lint/rules.go @@ -526,7 +526,7 @@ var AllRules = func(l *Linter) Rules { //nolint:gocyclo // Any subpackage that contains the package name, should follow `${{package.name}}-xyz` format. for _, s := range c.Subpackages { - if strings.Contains(s.Name, c.Package.Name) { + if strings.Contains(s.Name, packageName) { if !strings.HasPrefix(s.Name, c.Package.Name) { return fmt.Errorf("subpackage %s should be in format ${{package.name}}-XYZ-SUBPACKAGENAME for a valid version stream", s.Name) } diff --git a/pkg/lint/testdata/files/version-stream-wrong-subpackage-naming-1.2.yaml b/pkg/lint/testdata/files/version-stream-wrong-subpackage-naming-1.2.yaml index 1afa50820..389acecbb 100644 --- a/pkg/lint/testdata/files/version-stream-wrong-subpackage-naming-1.2.yaml +++ b/pkg/lint/testdata/files/version-stream-wrong-subpackage-naming-1.2.yaml @@ -15,6 +15,10 @@ subpackages: description: "a package with incorrect subpackage prefix" pipeline: - runs: exit 0 + - name: subpackage-of-version-stream-wrong-subpackage-naming-foo-bar-baz-1.2 + description: "a package with incorrect subpackage prefix" + pipeline: + - runs: exit 0 test: pipeline: