From 1f30fe764cf745dd46978c6ea0c04a48d7546ff7 Mon Sep 17 00:00:00 2001 From: Prucek Date: Wed, 27 May 2026 13:40:22 +0200 Subject: [PATCH] prowgen: add disable_sparse_checkout --- pkg/api/types.go | 3 ++ pkg/prowgen/jobbase.go | 5 +- pkg/prowgen/jobbase_test.go | 16 ++++++ ...h_images_and_sparse_checkout_disabled.yaml | 4 ++ ...h_images_and_sparse_checkout_disabled.yaml | 50 +++++++++++++++++++ .../zz_generated.ci_operator_reference.go | 3 ++ 6 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 pkg/prowgen/testdata/zz_fixture_TestProwJobBaseBuilder_job_with_images_and_sparse_checkout_disabled.yaml create mode 100644 pkg/prowgen/testdata/zz_fixture_TestProwJobBaseBuilder_private_job_with_images_and_sparse_checkout_disabled.yaml diff --git a/pkg/api/types.go b/pkg/api/types.go index b54694fbf18..1af626139c2 100644 --- a/pkg/api/types.go +++ b/pkg/api/types.go @@ -53,6 +53,9 @@ type ProwgenOverrides struct { // Expose declares that jobs should not be hidden from view in deck if they // are private. This field has no effect if private is not set. Expose bool `json:"expose,omitempty"` + // DisableSparseCheckout disables the sparse checkout optimization for the + // repository clone done by Prow's clonerefs. + DisableSparseCheckout bool `json:"disable_sparse_checkout,omitempty"` } // ReleaseBuildConfiguration describes how release diff --git a/pkg/prowgen/jobbase.go b/pkg/prowgen/jobbase.go index 749a5ae93f5..a56b40bedbf 100644 --- a/pkg/prowgen/jobbase.go +++ b/pkg/prowgen/jobbase.go @@ -97,7 +97,10 @@ func NewProwJobBaseBuilder(configSpec *cioperatorapi.ReleaseBuildConfiguration, if shouldSkipCloning { b.base.UtilityConfig.DecorationConfig.SkipCloning = ptr.To(true) } else { - b.base.UtilityConfig.DecorationConfig.SparseCheckoutFiles = sparseFiles + disableSparseCheckout := configSpec.Prowgen != nil && configSpec.Prowgen.DisableSparseCheckout + if !disableSparseCheckout { + b.base.UtilityConfig.DecorationConfig.SparseCheckoutFiles = sparseFiles + } if private { b.base.UtilityConfig.DecorationConfig.OauthTokenSecret = &prowv1.OauthTokenSecret{Key: cioperatorapi.OauthTokenSecretKey, Name: cioperatorapi.OauthTokenSecretName} } diff --git a/pkg/prowgen/jobbase_test.go b/pkg/prowgen/jobbase_test.go index a72ad9e6282..e8d5be899e7 100644 --- a/pkg/prowgen/jobbase_test.go +++ b/pkg/prowgen/jobbase_test.go @@ -121,6 +121,22 @@ func TestProwJobBaseBuilder(t *testing.T) { prefix: "default", podSpecBuilder: newFakePodSpecBuilder(), }, + { + name: "job with images and sparse checkout disabled", + info: defaultInfo, + images: ciop.ImageConfiguration{Items: []ciop.ProjectDirectoryImageBuildStepConfiguration{{From: "base", To: "image"}}}, + prowgenOverrides: &ciop.ProwgenOverrides{DisableSparseCheckout: true}, + prefix: "default", + podSpecBuilder: newFakePodSpecBuilder(), + }, + { + name: "private job with images and sparse checkout disabled", + info: &ciop.Metadata{Org: "vorg", Repo: "vrepo", Branch: "vbranch"}, + images: ciop.ImageConfiguration{Items: []ciop.ProjectDirectoryImageBuildStepConfiguration{{From: "base", To: "image"}}}, + prowgenOverrides: &ciop.ProwgenOverrides{Private: true, DisableSparseCheckout: true}, + prefix: "default", + podSpecBuilder: NewCiOperatorPodSpecGenerator(), + }, { name: "default job without further configuration, including podspec", info: defaultInfo, diff --git a/pkg/prowgen/testdata/zz_fixture_TestProwJobBaseBuilder_job_with_images_and_sparse_checkout_disabled.yaml b/pkg/prowgen/testdata/zz_fixture_TestProwJobBaseBuilder_job_with_images_and_sparse_checkout_disabled.yaml new file mode 100644 index 00000000000..896341a9bc7 --- /dev/null +++ b/pkg/prowgen/testdata/zz_fixture_TestProwJobBaseBuilder_job_with_images_and_sparse_checkout_disabled.yaml @@ -0,0 +1,4 @@ +agent: kubernetes +decorate: true +decoration_config: {} +name: default-ci-org-repo-branch- diff --git a/pkg/prowgen/testdata/zz_fixture_TestProwJobBaseBuilder_private_job_with_images_and_sparse_checkout_disabled.yaml b/pkg/prowgen/testdata/zz_fixture_TestProwJobBaseBuilder_private_job_with_images_and_sparse_checkout_disabled.yaml new file mode 100644 index 00000000000..a3d0eb91515 --- /dev/null +++ b/pkg/prowgen/testdata/zz_fixture_TestProwJobBaseBuilder_private_job_with_images_and_sparse_checkout_disabled.yaml @@ -0,0 +1,50 @@ +agent: kubernetes +decorate: true +decoration_config: + oauth_token_secret: + key: oauth + name: github-credentials-openshift-ci-robot-private-git-cloner +hidden: true +name: default-ci-vorg-vrepo-vbranch- +spec: + containers: + - args: + - --gcs-upload-secret=/secrets/gcs/service-account.json + - --image-import-pull-secret=/etc/pull-secret/.dockerconfigjson + - --oauth-token-path=/usr/local/github-credentials/oauth + - --report-credentials-file=/etc/report/credentials + command: + - ci-operator + image: quay-proxy.ci.openshift.org/openshift/ci:ci_ci-operator_latest + imagePullPolicy: Always + name: "" + resources: + requests: + cpu: 10m + volumeMounts: + - mountPath: /secrets/gcs + name: gcs-credentials + readOnly: true + - mountPath: /usr/local/github-credentials + name: github-credentials-openshift-ci-robot-private-git-cloner + readOnly: true + - mountPath: /secrets/manifest-tool + name: manifest-tool-local-pusher + readOnly: true + - mountPath: /etc/pull-secret + name: pull-secret + readOnly: true + - mountPath: /etc/report + name: result-aggregator + readOnly: true + serviceAccountName: ci-operator + volumes: + - name: manifest-tool-local-pusher + secret: + secretName: manifest-tool-local-pusher + - name: pull-secret + secret: + secretName: registry-pull-credentials + - name: result-aggregator + secret: + secretName: result-aggregator diff --git a/pkg/webreg/zz_generated.ci_operator_reference.go b/pkg/webreg/zz_generated.ci_operator_reference.go index 6f711f2a6bc..ec460d34491 100644 --- a/pkg/webreg/zz_generated.ci_operator_reference.go +++ b/pkg/webreg/zz_generated.ci_operator_reference.go @@ -351,6 +351,9 @@ const ciOperatorReferenceYaml = "# The list of base images describe\n" + " tag_by_commit: true\n" + "prowgen:\n" + " disable_rehearsals: true\n" + + " # DisableSparseCheckout disables the sparse checkout optimization for the\n" + + " # repository clone done by Prow's clonerefs.\n" + + " disable_sparse_checkout: true\n" + " enable_secrets_store_csi_driver: true\n" + " # Expose declares that jobs should not be hidden from view in deck if they\n" + " # are private. This field has no effect if private is not set.\n" +