diff --git a/pkg/konfluxgen/fbc-builder.yaml b/pkg/konfluxgen/fbc-builder.yaml index b0a559b67..c2c5a3510 100644 --- a/pkg/konfluxgen/fbc-builder.yaml +++ b/pkg/konfluxgen/fbc-builder.yaml @@ -30,6 +30,14 @@ spec: description: Additional image tags name: additional-tags type: array + - default: [] + description: Array of opm command arguments + name: opm-args + type: array + - default: "" + description: OPM output path + name: opm-output-path + type: string - description: Source Repository URL name: git-url type: string @@ -115,6 +123,32 @@ spec: - name: kind value: task resolver: bundles + - name: run-opm-command + params: + - name: OPM_ARGS + value: + - $(params.opm-args[*]) + - name: OPM_OUTPUT_PATH + value: $(params.opm-output-path) + - name: SOURCE_ARTIFACT + value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) + - name: ociStorage + value: $(params.output-image).opm + - name: ociArtifactExpiresAfter + value: $(params.image-expires-after) + - name: IDMS_PATH + value: "" + runAfter: + - clone-repository + taskRef: + params: + - name: name + value: run-opm-command-oci-ta + - name: bundle + value: quay.io/konflux-ci/tekton-catalog/task-run-opm-command-oci-ta:0.1@sha256:c79858b867713e44927438f6193c49004bf40bfd9248682f20c5a83ea2a9d2f1 + - name: kind + value: task + resolver: bundles - name: init params: - name: enable-cache-proxy @@ -152,31 +186,6 @@ spec: workspaces: - name: basic-auth workspace: git-auth - - name: run-opm-command - params: - - name: SOURCE_ARTIFACT - value: $(tasks.clone-repository.results.SOURCE_ARTIFACT) - - name: ociStorage - value: $(params.output-image).opm - - name: ociArtifactExpiresAfter - value: $(params.image-expires-after) - - name: OPM_ARGS - value: [] - - name: OPM_OUTPUT_PATH - value: "" - - name: IDMS_PATH - value: "" - runAfter: - - clone-repository - taskRef: - params: - - name: name - value: run-opm-command-oci-ta - - name: bundle - value: quay.io/konflux-ci/tekton-catalog/task-run-opm-command-oci-ta:0.1@sha256:c79858b867713e44927438f6193c49004bf40bfd9248682f20c5a83ea2a9d2f1 - - name: kind - value: task - resolver: bundles - name: prefetch-dependencies params: - name: input diff --git a/pkg/konfluxgen/konfluxgen.go b/pkg/konfluxgen/konfluxgen.go index 2c8d0d398..63c335c9b 100644 --- a/pkg/konfluxgen/konfluxgen.go +++ b/pkg/konfluxgen/konfluxgen.go @@ -100,9 +100,11 @@ type Config struct { Excludes []string ExcludesImages []string - FBCImages []string - JavaImages []string - BundleImage string + FBCImages []string + OpmArgs []string + OpmOutputPath string + JavaImages []string + BundleImage string ResourcesOutputPathSkipRemove bool ResourcesOutputPath string @@ -383,6 +385,11 @@ func Generate(cfg Config) error { PipelineRunAnnotations: cfg.PipelineRunAnnotationsFunc(c.ReleaseBuildConfiguration, ib), } + if pipeline == FBCBuild { + r.OpmArgs = cfg.OpmArgs + r.OpmOutputPath = cfg.OpmOutputPath + } + // TODO REVIEW: Remove special case once all hermetic builds are moved to docker-java-build pipeline With actual hermetic builds if cfg.IsHermetic(c.ReleaseBuildConfiguration, ib) && pipeline != "docker-java-build" { r.Hermetic = "true" @@ -686,6 +693,9 @@ type DockerfileApplicationConfig struct { DockerfilePath string + OpmArgs []string + OpmOutputPath string + PipelineRunAnnotations map[string]string } diff --git a/pkg/konfluxgen/kustomize/kustomize-fbc-builder/kustomization.yaml b/pkg/konfluxgen/kustomize/kustomize-fbc-builder/kustomization.yaml index 76bd69075..a4f1de9e4 100644 --- a/pkg/konfluxgen/kustomize/kustomize-fbc-builder/kustomization.yaml +++ b/pkg/konfluxgen/kustomize/kustomize-fbc-builder/kustomization.yaml @@ -7,6 +7,9 @@ patches: - path: ../patch_additional_tags.patch.yaml target: kind: Pipeline + - path: patch_opm_params.patch.yaml + target: + kind: Pipeline - path: ../patch_source_image.patch.yaml target: kind: Pipeline diff --git a/pkg/konfluxgen/kustomize/kustomize-fbc-builder/patch_opm_params.patch.yaml b/pkg/konfluxgen/kustomize/kustomize-fbc-builder/patch_opm_params.patch.yaml new file mode 100644 index 000000000..55c40c60c --- /dev/null +++ b/pkg/konfluxgen/kustomize/kustomize-fbc-builder/patch_opm_params.patch.yaml @@ -0,0 +1,22 @@ +apiVersion: tekton.dev/v1 +kind: Pipeline +metadata: + name: fbc-builder +spec: + params: + - name: opm-args + description: Array of opm command arguments + type: array + default: [] + - name: opm-output-path + description: OPM output path + type: string + default: "" + tasks: + - name: run-opm-command + params: + - name: OPM_ARGS + value: + - $(params.opm-args[*]) + - name: OPM_OUTPUT_PATH + value: $(params.opm-output-path) diff --git a/pkg/konfluxgen/pipeline-run.template.yaml b/pkg/konfluxgen/pipeline-run.template.yaml index 657cba251..238d8df1f 100644 --- a/pkg/konfluxgen/pipeline-run.template.yaml +++ b/pkg/konfluxgen/pipeline-run.template.yaml @@ -74,6 +74,17 @@ spec: - name: prefetch-input-dev-package-managers value: '{{{ .PrefetchDeps.DevPackageManagers }}}' {{{- end }}} + {{{- if gt (len .OpmArgs) 0 }}} + - name: opm-args + value: + {{{- range $arg := .OpmArgs }}} + - {{{ $arg }}} + {{{- end }}} + {{{- end }}} + {{{- if .OpmOutputPath }}} + - name: opm-output-path + value: {{{ .OpmOutputPath }}} + {{{- end }}} {{{- if or (eq .Pipeline "docker-build") (eq .Pipeline "docker-java-build") (eq .Pipeline "bundle-build")}}} taskRunSpecs: - pipelineTaskName: sast-shell-check diff --git a/pkg/prowgen/prowgen_konflux.go b/pkg/prowgen/prowgen_konflux.go index 0e0ed3bc1..3cc9fa807 100644 --- a/pkg/prowgen/prowgen_konflux.go +++ b/pkg/prowgen/prowgen_konflux.go @@ -552,12 +552,20 @@ func generateFBCApplications(soMetadata *project.Metadata, openshiftRelease Repo for _, ocpVersion := range soMetadata.Requirements.OcpVersion.List { - opmImage, err := getOPMImage(ocpVersion) + ocpMinorVersion, err := extractMinor(ocpVersion) + if err != nil { + return fmt.Errorf("failed to get OCP minor version %q: %w", ocpVersion, err) + } + opmImage, err := getOPMImage(ocpMinorVersion) if err != nil { return fmt.Errorf("failed to get OPM image ref for OCP %q: %w", ocpVersion, err) } buildArgs := append(buildArgs, fmt.Sprintf("OPM_IMAGE=%s", opmImage)) - + opmArgs := []string{"alpha", "render-template", "basic", + fmt.Sprintf("\"olm-catalog/serverless-operator-index/v%s/catalog-template.yaml\"", ocpVersion)} + if ocpMinorVersion >= 17 { // OCP 4.17+ OLM fix format flag + opmArgs = append(opmArgs, "--migrate-level=bundle-object-to-csv-metadata") + } fbcAppName := konfluxgen.FBCAppName(release, ocpVersion) c := konfluxgen.Config{ @@ -574,6 +582,8 @@ func generateFBCApplications(soMetadata *project.Metadata, openshiftRelease Repo " files.all.exists(x, x.matches('^.tekton/'))"+ " )", ocpVersion) }, + OpmArgs: opmArgs, + OpmOutputPath: fmt.Sprintf("olm-catalog/serverless-operator-index/v%s/catalog/serverless-operator/catalog.yaml", ocpVersion), AdditionalComponentConfigs: []konfluxgen.TemplateConfig{ { ReleaseBuildConfiguration: cioperatorapi.ReleaseBuildConfiguration{ @@ -629,17 +639,20 @@ func generateFBCApplications(soMetadata *project.Metadata, openshiftRelease Repo return nil } -func getOPMImage(v string) (string, error) { +func extractMinor(v string) (int, error) { parts := strings.SplitN(v, ".", 2) if len(parts) != 2 { - return "", fmt.Errorf("invalid OCP version: %s", v) + return 0, fmt.Errorf("invalid OCP version: %s", v) } minor, err := strconv.Atoi(parts[1]) if err != nil { - return "", fmt.Errorf("could not convert OCP minor to int (%q): %w", v, err) + return 0, fmt.Errorf("could not convert OCP minor to int (%q): %w", v, err) } + return minor, nil +} +func getOPMImage(minor int) (string, error) { if minor <= 14 { return fmt.Sprintf("registry.redhat.io/openshift4/ose-operator-registry:v4.%d", minor), nil } else {