Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,15 @@ COPY LICENSE /licenses/
USER 65532

LABEL \
com.redhat.component="openshift-serverless-1-{{.project_dashcase}}{{.component_dashcase}}-rhel8-container" \
name="openshift-serverless-1/{{.project_dashcase}}{{.component_dashcase}}-rhel8" \
com.redhat.component="openshift-serverless-1-{{.project_dashcase}}{{.component_dashcase}}-{{.rhelVersion}}-container" \
name="openshift-serverless-1/{{.project_dashcase}}{{.component_dashcase}}-{{.rhelVersion}}" \
version=$VERSION \
summary="Red Hat OpenShift Serverless 1 {{.project}}{{.component}}" \
maintainer="serverless-support@redhat.com" \
description="Red Hat OpenShift Serverless 1 {{.project}}{{.component}}" \
io.k8s.display-name="Red Hat OpenShift Serverless 1 {{.project}}{{.component}}" \
io.k8s.description="Red Hat OpenShift Serverless {{.project}}{{.component}}" \
io.openshift.tags="{{.component_dashcase}}"
io.openshift.tags="{{.component_dashcase}}" \
cpe="cpe:/a:redhat:openshift_serverless:{{.short_version}}::{{.shortRhelVersion}}"

ENTRYPOINT ["{{.app_file}}"]
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,16 @@ RUN ln -s {{.app_file}} /usr/local/bin/deploy && \
USER 65532

LABEL \
com.redhat.component="openshift-serverless-1-{{.project_dashcase}}{{.component_dashcase}}-rhel8-container" \
name="openshift-serverless-1/{{.project_dashcase}}{{.component_dashcase}}-rhel8" \
com.redhat.component="openshift-serverless-1-{{.project_dashcase}}{{.component_dashcase}}-{{.rhelVersion}}-container" \
name="openshift-serverless-1/{{.project_dashcase}}{{.component_dashcase}}-{{.rhelVersion}}" \
version=$VERSION \
summary="Red Hat OpenShift Serverless 1 {{.project}}{{.component}}" \
maintainer="serverless-support@redhat.com" \
description="Red Hat OpenShift Serverless 1 {{.project}}{{.component}}" \
io.k8s.display-name="Red Hat OpenShift Serverless 1 {{.project}}{{.component}}" \
io.k8s.description="Red Hat OpenShift Serverless {{.project}}{{.component}}" \
io.openshift.tags="{{.component_dashcase}}"
io.openshift.tags="{{.component_dashcase}}" \
cpe="cpe:/a:redhat:openshift_serverless:{{.short_version}}::{{.shortRhelVersion}}"


ENTRYPOINT ["/usr/bin/bash"]
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,15 @@ RUN mkdir -p $LOGS_DIR && \
USER 65532

LABEL \
com.redhat.component="openshift-serverless-1-{{.project_dashcase}}rhel8-container" \
name="openshift-serverless-1/svls-{{.project_dashcase}}rhel8" \
com.redhat.component="openshift-serverless-1-{{.project_dashcase}}-{{.rhelVersion}}-container" \
name="openshift-serverless-1/serverless-{{.project_dashcase}}-{{.rhelVersion}}" \
version={{.version}} \
summary="Red Hat OpenShift Serverless 1 {{.project}}" \
maintainer="serverless-support@redhat.com" \
description="Red Hat OpenShift Serverless 1 {{.project}}" \
io.k8s.display-name="Red Hat OpenShift Serverless 1 {{.project}}" \
io.k8s.description="Red Hat OpenShift Serverless {{.project}}" \
io.openshift.tags="{{.main}}"
io.openshift.tags="{{.main}}" \
cpe="cpe:/a:redhat:openshift_serverless:{{.short_version}}::{{.shortRhelVersion}}"

ENTRYPOINT /usr/bin/gather
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,15 @@ COPY LICENSE /licenses/
USER 65532

LABEL \
com.redhat.component="openshift-serverless-1-{{.project_dashcase}}{{.component_dashcase}}-rhel9-container" \
name="openshift-serverless-1/{{.project_dashcase}}{{.component_dashcase}}-rhel8" \
com.redhat.component="openshift-serverless-1-{{.project_dashcase}}{{.component_dashcase}}-{{.rhelVersion}}-container" \
name="openshift-serverless-1/{{.project_dashcase}}{{.component_dashcase}}-{{.rhelVersion}}" \
version=$VERSION \
summary="Red Hat OpenShift Serverless 1 {{.project}}{{.component}}" \
maintainer="serverless-support@redhat.com" \
description="Red Hat OpenShift Serverless 1 {{.project}}{{.component}}" \
io.k8s.display-name="Red Hat OpenShift Serverless 1 {{.project}}{{.component}}" \
io.k8s.description="Red Hat OpenShift Serverless {{.project}}{{.component}}" \
io.openshift.tags="{{.component_dashcase}}"
io.openshift.tags="{{.component_dashcase}}" \
cpe="cpe:/a:redhat:openshift_serverless:{{.short_version}}::{{.shortRhelVersion}}"

ENTRYPOINT ["{{.app_file}}"]
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,15 @@ RUN ln -s {{.app_file}} /usr/local/bin/deploy && \
USER 65532

LABEL \
com.redhat.component="openshift-serverless-1-{{.project_dashcase}}{{.component_dashcase}}-rhel9-container" \
name="openshift-serverless-1/{{.project_dashcase}}{{.component_dashcase}}-rhel8" \
com.redhat.component="openshift-serverless-1-{{.project_dashcase}}{{.component_dashcase}}-{{.rhelVersion}}-container" \
name="openshift-serverless-1/{{.project_dashcase}}{{.component_dashcase}}-{{.rhelVersion}}" \
version=$VERSION \
summary="Red Hat OpenShift Serverless 1 {{.project}}{{.component}}" \
maintainer="serverless-support@redhat.com" \
description="Red Hat OpenShift Serverless 1 {{.project}}{{.component}}" \
io.k8s.display-name="Red Hat OpenShift Serverless 1 {{.project}}{{.component}}" \
io.k8s.description="Red Hat OpenShift Serverless {{.project}}{{.component}}" \
io.openshift.tags="{{.component_dashcase}}"
io.openshift.tags="{{.component_dashcase}}" \
cpe="cpe:/a:redhat:openshift_serverless:{{.short_version}}::{{.shortRhelVersion}}"

ENTRYPOINT ["/usr/bin/bash"]
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,15 @@ RUN mkdir -p $LOGS_DIR && \
USER 65532

LABEL \
com.redhat.component="openshift-serverless-1-{{.project_dashcase}}rhel9-container" \
name="openshift-serverless-1/svls-{{.project_dashcase}}rhel8" \
com.redhat.component="openshift-serverless-1-{{.project_dashcase}}-{{.rhelVersion}}-container" \
name="openshift-serverless-1/serverless-{{.project_dashcase}}-{{.rhelVersion}}" \
version={{.version}} \
summary="Red Hat OpenShift Serverless 1 {{.project}}" \
maintainer="serverless-support@redhat.com" \
description="Red Hat OpenShift Serverless 1 {{.project}}" \
io.k8s.display-name="Red Hat OpenShift Serverless 1 {{.project}}" \
io.k8s.description="Red Hat OpenShift Serverless {{.project}}" \
io.openshift.tags="{{.main}}"
io.openshift.tags="{{.main}}" \
cpe="cpe:/a:redhat:openshift_serverless:{{.short_version}}::{{.shortRhelVersion}}"

ENTRYPOINT /usr/bin/gather
79 changes: 69 additions & 10 deletions pkg/dockerfilegen/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ import (
"strings"
"text/template"

"github.com/openshift-knative/hack/pkg/soversion"

"github.com/coreos/go-semver/semver"
"github.com/openshift-knative/hack/pkg/project"
"github.com/openshift-knative/hack/pkg/prowgen"
Expand Down Expand Up @@ -166,15 +168,31 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error
}

rhelVersion := RHEL9
if metadata.Project.Tag != "" {
var soVersion string
projectTag := metadata.Project.Tag
if projectTag == "main" || metadata.Project.Tag == "" {
projectTag = "knative-v1.17"
log.Println("Use Default version substitution for main branch")
}
if projectTag != "" && projectTag != "main" {
// Handle knative-vX.Y tags
// tag before knative-v1.17
minorVersion, err := strconv.Atoi(strings.Replace(metadata.Project.Tag, "knative-v1.", "", 1))
if err != nil {
if strings.HasPrefix(projectTag, "knative-v1.") {
minorVersion, err := strconv.Atoi(strings.Replace(projectTag, "knative-v1.", "", 1))
if err != nil {
log.Printf("Failed to parse minor version from tag %q: %v", projectTag, err)
minorVersion = 17 // fallback
}
if minorVersion < 17 {
rhelVersion = RHEL8
}
semverSoVersion := soversion.FromUpstreamVersion(strings.Replace(projectTag, "knative-v", "", 1))
soVersion = fmt.Sprintf("%v.%v", semverSoVersion.Major, semverSoVersion.Minor)
}
} else {
if metadata.Project.Version == "main" || metadata.Project.Version == "" {
metadata.Project.Version = "1.37.0" //fallback
}
// version before 1.37+
if metadata.Project.Version != "" {
semVer := semver.New(metadata.Project.Version)
Expand All @@ -183,6 +201,7 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error
rhelVersion = RHEL8
}
}
soVersion = fmt.Sprintf("%v.%v", semVer.Major, semVer.Minor)
}
}

Expand Down Expand Up @@ -255,7 +274,7 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error
projectWithSep = capitalize(projectName) + " "
projectDashCaseWithSep = projectName + "-"
}

elVersion := "el" + strings.TrimPrefix(rhelVersion, "rhel-")
d := map[string]interface{}{
"main": p,
"app_file": appFile,
Expand All @@ -267,6 +286,9 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error
"component_dashcase": dashcase(p),
"additional_instructions": additionalInstructions,
"build_env_vars": buildEnvs,
"rhelVersion": strings.ReplaceAll(rhelVersion, "-", ""),
"short_version": soVersion,
"shortRhelVersion": elVersion,
}

var dockerfileTemplate embed.FS
Expand All @@ -278,21 +300,21 @@ func generateDockerfile(params Params, mainPackagesPaths sets.Set[string]) error
rpmsLockTemplate = &RPMsLockTemplateUbi9
}
}
// var templateFile string
switch params.TemplateName {
case DefaultDockerfileTemplateName:
dockerfileTemplate = DockerfileDefaultTemplate
case FuncUtilDockerfileTemplateName:
dockerfileTemplate = DockerfileFuncUtilTemplate
if rhelVersion == RHEL8 {
rpmsLockTemplate = &RPMsLockTemplateUbi8
} else {
if rhelVersion == RHEL9 {
rpmsLockTemplate = &RPMsLockTemplateUbi9
} else {
rpmsLockTemplate = &RPMsLockTemplateUbi8
}
dockerfileTemplate = DockerfileFuncUtilTemplate
default:
return fmt.Errorf("%w: Unknown template name: %s",
ErrBadConf, params.TemplateName)
}

templateFiles := "dockerfile-templates/*.tmpl"
if rhelVersion == "rhel-9" {
templateFiles = "dockerfile-templates/rhel-9/*.tmpl"
Expand Down Expand Up @@ -405,19 +427,56 @@ func generateMustGatherDockerfile(params Params) error {
return fmt.Errorf("%w: Could not get oc binary name: %w",
ErrUnsupportedRepo, errors.WithStack(err))
}
rhelVersion := RHEL9
var soVersion string
pVersion := metadata.Project.Version
if pVersion != "" {
semVer := semver.New(pVersion)
if semVer != nil {
if semVer.Minor < 37 {
rhelVersion = RHEL8
}
}
soVersion = fmt.Sprintf("%v.%v", semVer.Major, semVer.Minor)
}
elVersion := "el" + strings.TrimPrefix(rhelVersion, "rhel-")

d := map[string]interface{}{
"main": projectName,
"oc_cli_artifacts": ocClientArtifactsImage,
"oc_binary_name": ocBinaryName,
"version": metadata.Project.Version,
"project": capitalize(projectName),
"project_dashcase": projectDashCaseWithSep,
"rhelVersion": strings.ReplaceAll(rhelVersion, "-", ""),
"short_version": soVersion,
"shortRhelVersion": elVersion,
}
// Pick proper template FS file and RPM lock file
templateFile := "dockerfile-templates/rhel-9/*.tmpl" // RHEL9 default
if rhelVersion == RHEL9 {
rpmsLockTemplate = &RPMsLockTemplateUbi9
} else {
templateFile = "dockerfile-templates/*.tmpl"
rpmsLockTemplate = &RPMsLockTemplateUbi8
}

t, err := template.ParseFS(DockerfileMustGatherTemplate, templateFile)
if err != nil {
return fmt.Errorf("%w: Parsing failed: %w",
ErrBadTemplate, errors.WithStack(err))
}

bf := new(bytes.Buffer)
if err := t.Execute(bf, d); err != nil {
return fmt.Errorf("%w: executing failed: %w",
ErrBadTemplate, errors.WithStack(err))
}

Comment on lines +455 to +475
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO, this whole part is still extra and not needed.

out := filepath.Join(params.Output, params.DockerfilesDir, filepath.Base(projectName))
if _, err = saveDockerfile(d, DockerfileMustGatherTemplate, out, ""); err != nil {
return err
}
rpmsLockTemplate = &RPMsLockTemplateUbi8
if err = writeRPMLockFile(rpmsLockTemplate, params.RootDir); err != nil {
return err
}
Expand Down
10 changes: 5 additions & 5 deletions pkg/dockerfilegen/templates.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@ package dockerfilegen

import "embed"

//go:embed dockerfile-templates/Default.dockerfile.tmpl
//go:embed dockerfile-templates/Default.dockerfile.tmpl dockerfile-templates/rhel-9/*
var DockerfileDefaultTemplate embed.FS

//go:embed dockerfile-templates/FuncUtil.dockerfile.tmpl
//go:embed dockerfile-templates/FuncUtil.dockerfile.tmpl dockerfile-templates/rhel-9/*
var DockerfileFuncUtilTemplate embed.FS

//go:embed dockerfile-templates/BuildImage.dockerfile.tmpl
//go:embed dockerfile-templates/BuildImage.dockerfile.tmpl dockerfile-templates/rhel-9/*
var DockerfileBuildImageTemplate embed.FS

//go:embed dockerfile-templates/SourceImage.dockerfile.tmpl
//go:embed dockerfile-templates/SourceImage.dockerfile.tmpl dockerfile-templates/rhel-9/*
var DockerfileSourceImageTemplate embed.FS

//go:embed dockerfile-templates/MustGather.dockerfile.tmpl
//go:embed dockerfile-templates/MustGather.dockerfile.tmpl dockerfile-templates/rhel-9/*
var DockerfileMustGatherTemplate embed.FS

//go:embed ubi8.rpms.lock.yaml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
FROM registry.ci.openshift.org/ocp/4.17:cli-artifacts as tools

# Dockerfile to bootstrap build and test in openshift-ci
FROM registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17 as builder
FROM registry.ci.openshift.org/openshift/release:rhel-9-release-golang-1.22-openshift-4.17 as builder

ARG TARGETARCH

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# DO NOT EDIT! Generated Dockerfile for cmd/discover.
ARG GO_BUILDER=registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17
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

FROM $GO_BUILDER as builder
Expand All @@ -25,14 +25,15 @@ COPY LICENSE /licenses/
USER 65532

LABEL \
com.redhat.component="openshift-serverless-1-knative-discover-rhel8-container" \
name="openshift-serverless-1/knative-discover-rhel8" \
com.redhat.component="openshift-serverless-1-knative-discover-rhel9-container" \
name="openshift-serverless-1/knative-discover-rhel9" \
version=$VERSION \
summary="Red Hat OpenShift Serverless 1 Knative Discover" \
maintainer="serverless-support@redhat.com" \
description="Red Hat OpenShift Serverless 1 Knative Discover" \
io.k8s.display-name="Red Hat OpenShift Serverless 1 Knative Discover" \
io.k8s.description="Red Hat OpenShift Serverless Knative Discover" \
io.openshift.tags="discover"
io.openshift.tags="discover" \
cpe="cpe:/a:redhat:openshift_serverless:1.37::el9"

ENTRYPOINT ["/usr/bin/discover"]
Loading