@@ -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 )
0 commit comments