Skip to content

test: guard 3rd-party image-override pull-secret contract in integration deploys#6450

Closed
eamonnmoloney wants to merge 1 commit into
mainfrom
guard/integration-workflow-image-pullsecret-contract
Closed

test: guard 3rd-party image-override pull-secret contract in integration deploys#6450
eamonnmoloney wants to merge 1 commit into
mainfrom
guard/integration-workflow-image-pullsecret-contract

Conversation

@eamonnmoloney

Copy link
Copy Markdown
Contributor

Which problem does the PR fix?

This repo's reusable integration-test workflow (test-integration-template.yaml / test-integration-runner.yaml) is invoked by 3rd-party callers (camunda/camunda, camunda/connectors, camunda/identity, the web-modeler repo, …) that override component images to registry.camunda.cloud builds. A change here can silently break those callers — most recently connectors hit ImagePullBackOff because its overridden image had no matching pull secret.

There was no guard preventing this class of breakage from shipping before a downstream repo consumed the chart.

What's in this PR?

A general deploy-behaviour contract guard (not specific to the connectors bug):

The contract. Helm resolves a component's pull secrets as "component-level image.pullSecrets if set, else global.image.pullSecrets" — component-level replaces global, it is not merged (templates/common/_helpers.tpl: camundaPlatform.imagePullSecrets / subChartImagePullSecrets). So every component a caller can repoint to the private registry (the top-level keys of base-image-tags.yaml) must resolve a pull-secret set containing registry-camunda-cloud.

Fix. Add registry-camunda-cloud to global.image.pullSecrets in each active version's chart-full-setup/values/base.yaml, so every current and future caller-overridable component is covered by default.

Guard. TestThirdPartyImageOverrideHasPullSecret (in scripts/deploy-camunda/matrix/, run by make go.test) walks every active chart version, reads the caller-overridable component set from base-image-tags.yaml, replays the Helm pull-secret resolution against the merged chart-full-setup values, and fails if any component would not get registry-camunda-cloud. It is driven by chart-versions.yaml + base-image-tags.yaml, so new versions and newly-overridable components are covered automatically. Accompanying unit tests pin the resolution/merge logic.

Docs. The contract is documented in .github/AGENTS.md (Layered Values System section).

Verified locally: go test ./matrix/ (full matrix suite incl. the new guard) passes; gofmt clean; Apache header present. The guard was confirmed to fail when the secret is removed (resolution unit test covers the missing-secret case).

This generalizes the connectors-specific fix in #6449 — with global.image.pullSecrets covering all components, no per-component entry is required, though existing explicit ones (webModeler, connectors) remain valid.

Checklist

Before opening the PR:

  • In the repo's root dir, run make go.update-golden-only.
  • There is no other open pull request for the same update/change.
  • Tests for charts are added (if needed).
  • In-repo documentation are updated (if needed).

After opening the PR:

  • Did you sign our CLA (Contributor License Agreement)? It will show once you open the PR.
  • Did all checks/tests pass in the PR?

@github-actions github-actions Bot added version/8.7 Camunda applications/cycle version version/8.8 Camunda applications/cycle version version/8.9 Camunda applications/cycle version version/8.10 Camunda applications/cycle version tool/script labels Jun 25, 2026
…ion deploys

The reusable integration-test workflow is called by downstream repos
(camunda/camunda, camunda/connectors, camunda/identity, the web-modeler repo)
which override component images to registry.camunda.cloud builds. Such an image
is only pullable if the component resolves an imagePullSecret containing
registry-camunda-cloud. Helm resolves component pull secrets as "component-level
image.pullSecrets if set, else global.image.pullSecrets" (component-level
replaces global, it is not merged), so any caller-overridable component without
that secret hits ImagePullBackOff — as connectors recently did.

- Add registry-camunda-cloud to global.image.pullSecrets in each active
  version's chart-full-setup/values/base.yaml so every caller-overridable
  component is covered by default.
- Add TestThirdPartyImageOverrideHasPullSecret (matrix package, run by
  make go.test): for each active version, assert every component in
  base-image-tags.yaml resolves a pull-secret set containing
  registry-camunda-cloud. Driven by chart-versions.yaml + base-image-tags.yaml
  so new versions and newly-overridable components are covered automatically.
- Document the contract in .github/AGENTS.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@eamonnmoloney eamonnmoloney force-pushed the guard/integration-workflow-image-pullsecret-contract branch from 04dd3c3 to 7c83d6f Compare June 25, 2026 10:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

tool/script version/8.7 Camunda applications/cycle version version/8.8 Camunda applications/cycle version version/8.9 Camunda applications/cycle version version/8.10 Camunda applications/cycle version

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant