@@ -152,9 +152,27 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error
152152 goVersion = strings .Join (strings .Split (goVersion , "." )[0 :2 ], "." )
153153 }
154154
155+ metadata , err := project .ReadMetadataFile (params .ProjectFilePath )
156+ if err != nil {
157+ if ! errors .Is (err , os .ErrNotExist ) {
158+ return fmt .Errorf ("%w: Failed to read project metadata file: %w" ,
159+ ErrBadConf , errors .WithStack (err ))
160+ }
161+ log .Println ("File not found:" , params .ProjectFilePath , "(Using defaults)" )
162+ metadata = project .DefaultMetadata ()
163+ }
164+
165+ rhelVersion := "rhel-8"
166+ minorVersion , err := strconv .Atoi (strings .Replace (metadata .Project .Tag , "knative-v1." , "" , 1 ))
167+ if err != nil {
168+ if minorVersion >= 17 {
169+ rhelVersion = "rhel-9"
170+ }
171+ }
172+
155173 builderImage := params .DockerfileImageBuilderFmt
156174 if builderImage == "" {
157- builderImage = builderImageForGoVersion (goVersion )
175+ builderImage = builderImageForGoVersion (goVersion , rhelVersion )
158176 } else {
159177 // Builder image might be provided without formatting '%s' string as plain value
160178 if strings .Count (params .DockerfileImageBuilderFmt , "%s" ) == 1 {
@@ -164,16 +182,6 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error
164182
165183 goPackageToImageMapping := map [string ]string {}
166184
167- metadata , err := project .ReadMetadataFile (params .ProjectFilePath )
168- if err != nil {
169- if ! errors .Is (err , os .ErrNotExist ) {
170- return fmt .Errorf ("%w: Failed to read project metadata file: %w" ,
171- ErrBadConf , errors .WithStack (err ))
172- }
173- log .Println ("File not found:" , params .ProjectFilePath , "(Using defaults)" )
174- metadata = project .DefaultMetadata ()
175- }
176-
177185 d := map [string ]interface {}{
178186 "builder" : builderImage ,
179187 }
@@ -261,7 +269,11 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error
261269 ErrBadConf , params .TemplateName )
262270 }
263271
264- t , err := template .ParseFS (dockerfileTemplate , "dockerfile-templates/*.tmpl" )
272+ templateFiles := "dockerfile-templates/*.tmpl"
273+ if rhelVersion == "rhel-9" {
274+ templateFiles = "dockerfile-templates/rhel-9/*.tmpl"
275+ }
276+ t , err := template .ParseFS (dockerfileTemplate , templateFiles )
265277 if err != nil {
266278 return fmt .Errorf ("%w: Parsing failed: %w" ,
267279 ErrBadTemplate , errors .WithStack (err ))
@@ -573,19 +585,22 @@ func writeRPMLockFile(rpmsLockTemplate fs.FS, rootDir string) error {
573585 return nil
574586}
575587
576- func builderImageForGoVersion (goVersion string ) string {
577- builderImageFmt := "registry.ci.openshift.org/openshift/release:rhel-8-release-golang-%s-openshift-%s"
588+ func builderImageForGoVersion (goVersion , rhelVersion string ) string {
589+ if rhelVersion == "" {
590+ rhelVersion = "rhel-8"
591+ }
592+ builderImageFmt := "registry.ci.openshift.org/openshift/release:%s-release-golang-%s-openshift-%s"
578593
579594 switch goVersion {
580595 case "1.21" :
581- return fmt .Sprintf (builderImageFmt , goVersion , "4.16" )
596+ return fmt .Sprintf (builderImageFmt , rhelVersion , goVersion , "4.16" )
582597 case "1.22" :
583- return fmt .Sprintf (builderImageFmt , goVersion , "4.17" )
598+ return fmt .Sprintf (builderImageFmt , rhelVersion , goVersion , "4.17" )
584599 case "1.23" :
585- return fmt .Sprintf (builderImageFmt , goVersion , "4.19" )
600+ return fmt .Sprintf (builderImageFmt , rhelVersion , goVersion , "4.19" )
586601 case "1.24" :
587602 fallthrough
588603 default :
589- return fmt .Sprintf (builderImageFmt , goVersion , "4.20" )
604+ return fmt .Sprintf (builderImageFmt , rhelVersion , goVersion , "4.20" )
590605 }
591606}
0 commit comments