From 943a19e7bf4bbabfa18ba8a9f712fc507c654655 Mon Sep 17 00:00:00 2001 From: David Simansky Date: Thu, 9 Oct 2025 17:29:19 +0200 Subject: [PATCH 1/3] Fix template name to be explicitly named and saved --- .../rhel-9/MustGather.dockerfile.tmpl | 2 +- pkg/dockerfilegen/generator.go | 17 ++++++++++------- pkg/dockerfilegen/templates.go | 10 +++++----- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/pkg/dockerfilegen/dockerfile-templates/rhel-9/MustGather.dockerfile.tmpl b/pkg/dockerfilegen/dockerfile-templates/rhel-9/MustGather.dockerfile.tmpl index 0ce062a23..3f0ef50ba 100644 --- a/pkg/dockerfilegen/dockerfile-templates/rhel-9/MustGather.dockerfile.tmpl +++ b/pkg/dockerfilegen/dockerfile-templates/rhel-9/MustGather.dockerfile.tmpl @@ -13,7 +13,7 @@ COPY --from=cli-artifacts /usr/share/openshift/linux_$TARGETARCH/{{ .oc_binary_n COPY must-gather/bin/* /usr/bin/ COPY LICENSE /licenses/ -RUN microdnf install -y rsync tar +RUN dnf install -y rsync tar ENV LOGS_DIR="/must-gather" RUN mkdir -p $LOGS_DIR && \ diff --git a/pkg/dockerfilegen/generator.go b/pkg/dockerfilegen/generator.go index 3b98643b5..6c8d2e963 100644 --- a/pkg/dockerfilegen/generator.go +++ b/pkg/dockerfilegen/generator.go @@ -168,6 +168,7 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error } rhelVersion := RHEL9 + templateFilePattern := "dockerfile-templates/rhel-9/*.tmpl" var soVersion string projectTag := metadata.Project.Tag if projectTag == "main" || metadata.Project.Tag == "" { @@ -185,6 +186,7 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error } if minorVersion < 17 { rhelVersion = RHEL8 + templateFilePattern = "dockerfile-templates/*.tmpl" } semverSoVersion := soversion.FromUpstreamVersion(strings.Replace(projectTag, "knative-v", "", 1)) soVersion = fmt.Sprintf("%v.%v", semverSoVersion.Major, semverSoVersion.Minor) @@ -199,6 +201,7 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error if semVer != nil { if semVer.Minor < 37 { rhelVersion = RHEL8 + templateFilePattern = "dockerfile-templates/*.tmpl" } } soVersion = fmt.Sprintf("%v.%v", semVer.Major, semVer.Minor) @@ -220,11 +223,11 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error d := map[string]interface{}{ "builder": builderImage, } - if _, err = saveDockerfile(d, DockerfileBuildImageTemplate, params.Output, params.DockerfilesBuildDir); err != nil { + if _, err = saveDockerfile(d, DockerfileBuildImageTemplate, templateFilePattern, params.Output, params.DockerfilesBuildDir); err != nil { return err } - if _, err = saveDockerfile(d, DockerfileSourceImageTemplate, params.Output, params.DockerfilesSourceDir); err != nil { + if _, err = saveDockerfile(d, DockerfileSourceImageTemplate, templateFilePattern, params.Output, params.DockerfilesSourceDir); err != nil { return err } @@ -316,7 +319,7 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error ErrBadConf, params.TemplateName) } templateFiles := "dockerfile-templates/*.tmpl" - if rhelVersion == "rhel-9" { + if rhelVersion == RHEL9 { templateFiles = "dockerfile-templates/rhel-9/*.tmpl" } t, err := template.ParseFS(dockerfileTemplate, templateFiles) @@ -338,7 +341,7 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error out = filepath.Join(params.Output, params.DockerfilesTestDir, filepath.Base(p)) } - dockerfilePath, err := saveDockerfile(d, dockerfileTemplate, out, "") + dockerfilePath, err := saveDockerfile(d, dockerfileTemplate, templateFiles, out, "") if err != nil { return err } @@ -474,7 +477,7 @@ func generateMustGatherDockerfile(params Params) error { } out := filepath.Join(params.Output, params.DockerfilesDir, filepath.Base(projectName)) - if _, err = saveDockerfile(d, DockerfileMustGatherTemplate, out, ""); err != nil { + if _, err = saveDockerfile(d, DockerfileMustGatherTemplate, templateFile, out, ""); err != nil { return err } if err = writeRPMLockFile(rpmsLockTemplate, params.RootDir); err != nil { @@ -593,8 +596,8 @@ func downloadImagesFrom(r string, branch string, urlFmt string) (map[string]stri return images, nil } -func saveDockerfile(d map[string]interface{}, imageTemplate embed.FS, output string, dir string) (string, error) { - bt, err := template.ParseFS(imageTemplate, "dockerfile-templates/*.tmpl") +func saveDockerfile(d map[string]interface{}, imageTemplate embed.FS, templatePattern, output string, dir string) (string, error) { + bt, err := template.ParseFS(imageTemplate, templatePattern) if err != nil { return "", fmt.Errorf("%w: Failed creating template: %w", ErrBadTemplate, errors.WithStack(err)) diff --git a/pkg/dockerfilegen/templates.go b/pkg/dockerfilegen/templates.go index 139ff1e6e..f9da0d03d 100644 --- a/pkg/dockerfilegen/templates.go +++ b/pkg/dockerfilegen/templates.go @@ -2,19 +2,19 @@ package dockerfilegen import "embed" -//go:embed dockerfile-templates/Default.dockerfile.tmpl dockerfile-templates/rhel-9/* +//go:embed dockerfile-templates/Default.dockerfile.tmpl dockerfile-templates/rhel-9/Default.dockerfile.tmpl var DockerfileDefaultTemplate embed.FS -//go:embed dockerfile-templates/FuncUtil.dockerfile.tmpl dockerfile-templates/rhel-9/* +//go:embed dockerfile-templates/FuncUtil.dockerfile.tmpl dockerfile-templates/rhel-9/FuncUtil.dockerfile.tmpl var DockerfileFuncUtilTemplate embed.FS -//go:embed dockerfile-templates/BuildImage.dockerfile.tmpl dockerfile-templates/rhel-9/* +//go:embed dockerfile-templates/BuildImage.dockerfile.tmpl dockerfile-templates/rhel-9/BuildImage.dockerfile.tmpl var DockerfileBuildImageTemplate embed.FS -//go:embed dockerfile-templates/SourceImage.dockerfile.tmpl dockerfile-templates/rhel-9/* +//go:embed dockerfile-templates/SourceImage.dockerfile.tmpl dockerfile-templates/rhel-9/SourceImage.dockerfile.tmpl var DockerfileSourceImageTemplate embed.FS -//go:embed dockerfile-templates/MustGather.dockerfile.tmpl dockerfile-templates/rhel-9/* +//go:embed dockerfile-templates/MustGather.dockerfile.tmpl dockerfile-templates/rhel-9/MustGather.dockerfile.tmpl var DockerfileMustGatherTemplate embed.FS //go:embed ubi8.rpms.lock.yaml From f125c3b89a6dfa230bd8bd3a5be834b86d6aee24 Mon Sep 17 00:00:00 2001 From: David Simansky Date: Thu, 9 Oct 2025 19:00:06 +0200 Subject: [PATCH 2/3] Fix unit tests --- .../testoutput/openshift/ci-operator/build-image/Dockerfile | 6 +++--- .../ci-operator/knative-images/discover/Dockerfile | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/project/testoutput/openshift/ci-operator/build-image/Dockerfile b/pkg/project/testoutput/openshift/ci-operator/build-image/Dockerfile index e2ab51b31..c7e989748 100755 --- a/pkg/project/testoutput/openshift/ci-operator/build-image/Dockerfile +++ b/pkg/project/testoutput/openshift/ci-operator/build-image/Dockerfile @@ -1,17 +1,17 @@ # DO NOT EDIT! Generated Dockerfile. -FROM registry.ci.openshift.org/ocp/4.17:cli-artifacts as tools +FROM registry.ci.openshift.org/ocp/4.19:cli-artifacts as tools # Dockerfile to bootstrap build and test in openshift-ci FROM registry.ci.openshift.org/openshift/release:rhel-9-release-golang-1.22-openshift-4.17 as builder ARG TARGETARCH -COPY --from=tools /usr/share/openshift/linux_$TARGETARCH/oc.rhel8 /usr/bin/oc +COPY --from=tools /usr/share/openshift/linux_$TARGETARCH/oc.rhel9 /usr/bin/oc RUN ln -s /usr/bin/oc /usr/bin/kubectl -RUN yum install -y httpd-tools +RUN dnf install -y httpd-tools RUN wget https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 && \ chmod 700 ./get-helm-3 diff --git a/pkg/project/testoutput/openshift/ci-operator/knative-images/discover/Dockerfile b/pkg/project/testoutput/openshift/ci-operator/knative-images/discover/Dockerfile index c96991058..db3c8c164 100755 --- a/pkg/project/testoutput/openshift/ci-operator/knative-images/discover/Dockerfile +++ b/pkg/project/testoutput/openshift/ci-operator/knative-images/discover/Dockerfile @@ -1,6 +1,6 @@ # DO NOT EDIT! Generated Dockerfile for cmd/discover. ARG GO_BUILDER=registry.ci.openshift.org/openshift/release:rhel-9-release-golang-1.22-openshift-4.17 -ARG GO_RUNTIME=registry.access.redhat.com/ubi8/ubi-minimal +ARG GO_RUNTIME=registry.access.redhat.com/ubi9/ubi-minimal FROM $GO_BUILDER as builder From a743e2ee45e9746fe643315a5fbd8b1c482e1438 Mon Sep 17 00:00:00 2001 From: David Simansky Date: Thu, 9 Oct 2025 19:17:59 +0200 Subject: [PATCH 3/3] Use higher version for must-gather on RHEL 9 --- pkg/dockerfilegen/generator.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkg/dockerfilegen/generator.go b/pkg/dockerfilegen/generator.go index 6c8d2e963..9aa059624 100644 --- a/pkg/dockerfilegen/generator.go +++ b/pkg/dockerfilegen/generator.go @@ -420,8 +420,13 @@ func generateMustGatherDockerfile(params Params) error { return fmt.Errorf("%w: Could not read metadata file: %w", ErrBadConf, errors.WithStack(err)) } - ocClientArtifactsImage := fmt.Sprintf(ocClientArtifactsBaseImage, metadata.Requirements.OcpVersion.Min) + if metadata.Project.Version != "" { + // explicit override OCP min version due to RHEL 9 images since 1.37 + if semver.New(metadata.Project.Version).Minor >= 37 && metadata.Requirements.OcpVersion.Min == "4.14" { + ocClientArtifactsImage = fmt.Sprintf(ocClientArtifactsBaseImage, "4.15") + } + } projectName := mustGatherDockerfileTemplateName projectDashCaseWithSep := projectName + "-"