Repository navigation
Standardize OCI image labels across Tekton release images #3435
Description
Feature request
Standardize OCI image labels across Tekton release images that are produced with ko resolve.
tektoncd/pipeline#9965 adds explicit OCI image labels to the Pipeline release ko resolve invocations so images do not inherit misleading labels from base images such as ghcr.io/tektoncd/plumbing/tini-git.
If Pipeline release images set these labels explicitly, the rest of the Tekton component release images should do the same for consistency and future-proofing. Otherwise component images may inherit org.opencontainers.image.* metadata from their base images, which can make published image metadata point at the wrong project.
For each component release path, set project-specific values for at least:
--image-label=org.opencontainers.image.source=https://github.com/tektoncd/<repo> \
--image-label=org.opencontainers.image.url=https://github.com/tektoncd/<repo> \
--image-label=org.opencontainers.image.title=<repo-or-component-name> \
--image-label=org.opencontainers.image.description=<human-readable Tekton component description> \Use the repo's existing $(params.package) / ${GITHUB_REPO} variables where available.
Related background:
- Avoid emojis in container image manifests and improve some labels #2831 reports inherited
plumbing/tini-gitlabels, including an emoji inorg.opencontainers.image.description, on Pipeline resolver images. - fix: override OCI labels in ko publish task pipeline#9965 fixes this in Pipeline by setting
source,url,title, anddescriptionintekton/publish.yaml. - feat: add apko-based static base image for Tekton Go binaries #3434 / feat: add static base image build for Tekton Go binaries #3221 discuss a shared
plumbing/static-baseimage; if downstream repos adopt a labeled shared base image, explicit component labels will become even more important.
Use case
Users and downstream registries should see Tekton component metadata on Tekton component images, not metadata inherited from a base image project.
For example, Pipeline resolver images inherited labels from ghcr.io/tektoncd/plumbing/tini-git, so metadata such as org.opencontainers.image.title, org.opencontainers.image.url, and org.opencontainers.image.description pointed to tektoncd/plumbing instead of tektoncd/pipeline. This can confuse users, scanners, mirrors, and registry UIs. It can also cause compatibility issues when inherited metadata contains values that downstream registries reject.
Repos / files to audit and update
Skip the pipeline-ghsa-* repos.
Known release/build paths with ko resolve to check:
-
tektoncd/pipeline-
tekton/publish.yaml - Covered by
tektoncd/pipeline#9965
-
-
tektoncd/chains-
release/publish.yaml
-
-
tektoncd/operator-
tekton/build-publish-images-manifests.yaml
-
-
tektoncd/results-
tekton/publish.yaml -
release/release.sh
-
-
tektoncd/pruner-
tekton/publish.yaml -
hack/build.sh
-
-
tektoncd/triggers-
tekton/publish.yaml
-
-
tektoncd/dashboard-
scripts/installer
-
-
tektoncd/pipelines-as-code-
hack/generate-releaseyaml.sh
-
-
tektoncd/plumbing-
tekton/catalog/tasks/publish.yaml - any image build paths that publish shared base/tooling images
-
Notes from a quick scan
The current most visible inherited-label cases are:
tektoncd/pipeline:cmd/resolversusesghcr.io/tektoncd/plumbing/tini-git, whose labels point totektoncd/plumbing; fixed bytektoncd/pipeline#9965.tektoncd/pruner:.ko.yamlusescgr.dev/chainguard/static:latest, which currently has OCI labels for Chainguard/static; release/build paths should override more than justsource.
Other repos may not currently inherit incorrect labels from their present base images, but setting the component labels explicitly everywhere keeps release metadata consistent and avoids future regressions when base images change.
Acceptance criteria
- Active Tekton component release images publish project-specific OCI labels for
source,url,title, anddescription. - Release and local build scripts that use
ko resolveset the same component-level metadata consistently. pipeline-ghsa-*repos are not included in this cleanup.- Existing release generation checks continue to pass in each repo.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsIn Progress
Activity
vdemeester commentedon Jul 30, 2026
Marking this as a good candidate for community contribution — the scope is well-defined (audit each repo's
ko resolveinvocations, add 4 standard labels), each repo can be done independently, and no cluster access is needed./good-first-issue
tekton-robot commentedon Jul 30, 2026
@vdemeester:
This request has been marked as suitable for new contributors.
Please ensure the request meets the requirements listed here.
If this request no longer meets these requirements, the label can be removed
by commenting with the
/remove-good-first-issuecommand.Details
In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.
TheDevCodingKen commentedon Jul 31, 2026
I'd love to take this on! /assign @TheDevCodingKen
TheDevCodingKen commentedon Sep 11, 2026
I can't seem to assign myself to this issue. But, I'll submit a PR for each of the remaining repos mentioned.
vdemeester commentedon Sep 14, 2026
/assign @TheDevCodingKen
enarha commentedon Oct 12, 2026
@waveywaves @vdemeester Why do image.source and image.url point to the same thing, the source repo? For image.source that makes sense. Not sure about image.url, shouldn't it point to the repo where the image is pushed?
aThorp96 commentedon Oct 12, 2026
Here's the spec for these annotations: https://specs.opencontainers.org/image-spec/annotations/
I agree with Emil here. From the spec:
I think the repo URL could be interpreted to be both "where to get the source code" and "where to find more info on the image", but it doesn't seem to me like the best use of the fields to include the same URL in there twice.
What do you think about
--image-label=org.opencontainers.image.source=https://github.com/tektoncd/<repo>/tree/$(params.versionTag)or"--image-label=org.opencontainers.image.source=https://github.com/tektoncd/<repo>/tree/$(git rev-parse --short HEAD)", and either leavingorg.opencontainers.image.urlas-is or setting it tohttps://github.com/tektoncd/<repo>/releases/tags/$(params.versionTag)?enarha commentedon Oct 13, 2026
Exactly my point. If
image.urlwas standalone, indeed it's open to interpretation. But if it comes together withimage.sourcewhich is straightforward, then IMOimage.urlshould not repeat that.Including specific commit is even better. My only concern is that those variables will be available in the workflow, but I see we also use a shell script
release.shlike here: https://github.com/tektoncd/results/pull/1499/changes and in that case those variables won't be available. Thegit rev-parsewill work though. Reimage.url, IMO we should try to set it, the best way we can (the most accurate we can). Avoiding the default values is the requirement here, isn't it?