From 38c8327601c4bee109a1a2b8e5dd3f06fa3dfd6f Mon Sep 17 00:00:00 2001 From: David Simansky Date: Fri, 20 Mar 2026 19:42:14 +0100 Subject: [PATCH 1/3] Use opm in tekton pipelines --- pkg/konfluxgen/fbc-builder.yaml | 59 +++++++++++-------- pkg/konfluxgen/konfluxgen.go | 16 ++++- .../kustomize-fbc-builder/kustomization.yaml | 3 + .../patch_opm_params.patch.yaml | 22 +++++++ pkg/konfluxgen/pipeline-run.template.yaml | 11 ++++ pkg/prowgen/prowgen_konflux.go | 2 + 6 files changed, 85 insertions(+), 28 deletions(-) create mode 100644 pkg/konfluxgen/kustomize/kustomize-fbc-builder/patch_opm_params.patch.yaml 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..fb61214f8 100644 --- a/pkg/prowgen/prowgen_konflux.go +++ b/pkg/prowgen/prowgen_konflux.go @@ -574,6 +574,8 @@ func generateFBCApplications(soMetadata *project.Metadata, openshiftRelease Repo " files.all.exists(x, x.matches('^.tekton/'))"+ " )", ocpVersion) }, + OpmArgs: []string{"alpha", "render-template", "basic", fmt.Sprintf("\"/olm-catalog/serverless-operator-index/v%s/catalog-template.yaml\"", ocpVersion), "--migrate-level=bundle-object-to-csv-metadata"}, + OpmOutputPath: fmt.Sprintf("/olm-catalog/serverless-operator-index/v%s/catalog/serverless-operator/catalog.yaml", ocpVersion), AdditionalComponentConfigs: []konfluxgen.TemplateConfig{ { ReleaseBuildConfiguration: cioperatorapi.ReleaseBuildConfiguration{ From f28a9b11f2797efe118f83ac2bc24acaf35faa18 Mon Sep 17 00:00:00 2001 From: David Simansky Date: Sat, 21 Mar 2026 13:21:34 +0100 Subject: [PATCH 2/3] Fix abs path --- pkg/prowgen/prowgen_konflux.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/prowgen/prowgen_konflux.go b/pkg/prowgen/prowgen_konflux.go index fb61214f8..95adee585 100644 --- a/pkg/prowgen/prowgen_konflux.go +++ b/pkg/prowgen/prowgen_konflux.go @@ -574,8 +574,8 @@ func generateFBCApplications(soMetadata *project.Metadata, openshiftRelease Repo " files.all.exists(x, x.matches('^.tekton/'))"+ " )", ocpVersion) }, - OpmArgs: []string{"alpha", "render-template", "basic", fmt.Sprintf("\"/olm-catalog/serverless-operator-index/v%s/catalog-template.yaml\"", ocpVersion), "--migrate-level=bundle-object-to-csv-metadata"}, - OpmOutputPath: fmt.Sprintf("/olm-catalog/serverless-operator-index/v%s/catalog/serverless-operator/catalog.yaml", ocpVersion), + OpmArgs: []string{"alpha", "render-template", "basic", fmt.Sprintf("\"olm-catalog/serverless-operator-index/v%s/catalog-template.yaml\"", ocpVersion), "--migrate-level=bundle-object-to-csv-metadata"}, + OpmOutputPath: fmt.Sprintf("olm-catalog/serverless-operator-index/v%s/catalog/serverless-operator/catalog.yaml", ocpVersion), AdditionalComponentConfigs: []konfluxgen.TemplateConfig{ { ReleaseBuildConfiguration: cioperatorapi.ReleaseBuildConfiguration{ From f31f254cf4a0aff47a1c2b4422b66ef7ec361278 Mon Sep 17 00:00:00 2001 From: David Simansky Date: Sat, 21 Mar 2026 14:15:32 +0100 Subject: [PATCH 3/3] Fix 4.16 format --- pkg/prowgen/prowgen_konflux.go | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/pkg/prowgen/prowgen_konflux.go b/pkg/prowgen/prowgen_konflux.go index 95adee585..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,7 +582,7 @@ func generateFBCApplications(soMetadata *project.Metadata, openshiftRelease Repo " files.all.exists(x, x.matches('^.tekton/'))"+ " )", ocpVersion) }, - OpmArgs: []string{"alpha", "render-template", "basic", fmt.Sprintf("\"olm-catalog/serverless-operator-index/v%s/catalog-template.yaml\"", ocpVersion), "--migrate-level=bundle-object-to-csv-metadata"}, + OpmArgs: opmArgs, OpmOutputPath: fmt.Sprintf("olm-catalog/serverless-operator-index/v%s/catalog/serverless-operator/catalog.yaml", ocpVersion), AdditionalComponentConfigs: []konfluxgen.TemplateConfig{ { @@ -631,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 {