Skip to content

pipeline

Pipelines

Kubernetes-native CI/CD pipeline framework for defining and running cloud‑native pipelines as declarative resources

Go Latest v1.13.0 · 5d ago Security brief →

Features

  • Declarative, k8s‑style pipeline definitions using custom resources
  • Runs on any Kubernetes cluster (any platform that supports K8s)
  • Tasks are decoupled and reusable across different clusters or runs

Recent releases

View all 26 releases →
No immediate action
v1.13.0 Breaking risk

Resolver restriction + compression + timeout fix

v1.12.0 Breaking risk
⚠ Upgrade required
  • Ensure the `tekton-events-controller` Deployment is running after upgrading to v1.12.0.
  • The `send-cloudevents-for-runs` feature flag will be removed in a future release; its default now is true.
Breaking changes
  • CloudEvents for PipelineRuns and TaskRuns are now emitted by the `tekton-events-controller` instead of their respective controllers; operators must ensure this Deployment is running.
  • The feature flag `send-cloudevents-for-runs` default changed from `false` to `true` and will be removed in a future release.
Security fixes
  • GHSA-94jr-7pqp-xhcq – fix: prevent git argument injection via revision parameter
  • fix: reject system API token with user‑controlled serverURL (CVE not listed)
  • fix: limit HTTP resolver response body size to prevent OOM DoS
Notable features
  • [TEP-0137] New `dev.tekton.event.pipelinerun.queued.v1` event emitted when a PipelineRun is created but not yet processed.
  • [TEP-0137] New `dev.tekton.event.taskrun.queued.v1` event emitted when a TaskRun is created but not yet processed.
Full changelog

Tekton Pipeline release v1.12.0 "Exotic Shorthair Elektrobots LTS"

🎉 TEP-0137 Notifications Controllers, Security Hardening & Performance 🎉

-Docs @ v1.12.0
-Examples @ v1.12.0

Installation one-liner

kubectl apply -f https://infra.tekton.dev/tekton-releases/pipeline/previous/v1.12.0/release.yaml

Attestation

The Rekor UUID for this release is 108e9186e8c5677a39f7d12f2628ed2d38cc94bc8d69e8fc8e629606157b65a2042cc796a84a81b2

Obtain the attestation:

REKOR_UUID=108e9186e8c5677a39f7d12f2628ed2d38cc94bc8d69e8fc8e629606157b65a2042cc796a84a81b2
rekor-cli get --uuid $REKOR_UUID --format json | jq -r .Attestation | jq .

Verify that all container images in the attestation are in the release file:

RELEASE_FILE=https://infra.tekton.dev/tekton-releases/pipeline/previous/v1.12.0/release.yaml
REKOR_UUID=108e9186e8c5677a39f7d12f2628ed2d38cc94bc8d69e8fc8e629606157b65a2042cc796a84a81b2

# Obtains the list of images with sha from the attestation
REKOR_ATTESTATION_IMAGES=$(rekor-cli get --uuid "$REKOR_UUID" --format json | jq -r .Attestation | jq -r '.subject[]|.name + ":v1.12.0@sha256:" + .digest.sha256')

# Download the release file
curl -L "$RELEASE_FILE" > release.yaml

# For each image in the attestation, match it to the release file
for image in $REKOR_ATTESTATION_IMAGES; do
  printf $image; grep -q $image release.yaml && echo " ===> ok" || echo " ===> no match";
done

Upgrade Notices

:rotating_light: TEP-0137: CloudEvents now sent by dedicated events controller (ACTION REQUIRED)

CloudEvents for PipelineRuns and TaskRuns are now sent by the dedicated tekton-events-controller and no longer by the PipelineRun/TaskRun controllers. Operators must ensure the tekton-events-controller Deployment is running.

New events added:

  • dev.tekton.event.pipelinerun.queued.v1 — sent when a PipelineRun is created but not yet processed
  • dev.tekton.event.taskrun.queued.v1 — sent when a TaskRun is created but not yet processed

CloudEvent delivery visibility is available via kubectl describe pipelinerun/taskrun (CloudEventSent/CloudEventFailed k8s Events).

:rotating_light: TEP-0137: send-cloudevents-for-runs feature flag deprecated

The send-cloudevents-for-runs feature flag is deprecated and will be removed in a future release. Its default has changed from false to true: CloudEvents for CustomRuns are now sent by default whenever a sink is configured in config-events.

Users relying on the flag set to false to skip events for CustomRuns should be aware of this change.

Changes

Security Fixes

  • :lock: fix: prevent git argument injection via revision parameter (GHSA-94jr-7pqp-xhcq) (#9660)
  • :lock: Security: reject system API token with user-controlled serverURL (#9659)
  • :lock: fix: limit HTTP resolver response body size to prevent OOM DoS (#9656)
  • :lock: fix: normalize VolumeMount paths before /tekton/ restriction check (#9655)
  • :lock: fix: strip resolver prefixes and use non-capturing group for pattern anchoring (#9654)
  • :lock: fix: trim whitespace from source URI before pattern matching (#9653)

Features

  • :sparkles: [TEP-0137] Move PipelineRun notifications to events controller (#9677)

CloudEvents for PipelineRuns are now sent by the dedicated tekton-events-controller and no longer by the PipelineRun controller. A new dev.tekton.event.pipelinerun.queued.v1 event is sent when a PipelineRun is created but not yet processed by the core reconciler.

  • :sparkles: [TEP-0137] Move TaskRun notifications to events controller (#9674)

CloudEvents for TaskRuns are now sent by the dedicated tekton-events-controller and no longer by the TaskRun controller. A new dev.tekton.event.taskrun.queued.v1 event is sent when a TaskRun is created but not yet processed by the core reconciler.

  • :sparkles: [TEP-0137] Deprecate send-cloudevents-for-runs feature flag (#9774)

The feature flag default changed from false to true. CloudEvents for CustomRuns are now sent by default.

  • :sparkles: fix: surface specific TaskRun failure reasons when pod fails (#9368)

TaskRun failure reasons now distinguish between different pod-level failure types: PodEvicted, InitContainerOOM, InitContainerFailed, StepOOM, StepFailed, SidecarOOM, and SidecarFailed, replacing the generic "Failed" reason.

  • :sparkles: fix: surface clear errors when completed tasks miss referenced results (#9662)

Performance

  • :zap: perf: reduce reconcile churn for completed PipelineRuns (#9919)
  • :zap: perf: remove unnecessary SetDefaults from TaskRun done path (#9921)
  • :zap: perf: use maps.Equal instead of reflect.DeepEqual for label/annotation comparison (#9776)

Bug Fixes

  • :bug: Rework the events controller cache (#9738)

Deprecation Notices

  • :rotating_light: [TEP-0137] The send-cloudevents-for-runs feature flag is deprecated and will be removed in a future release. Its default has changed from false to true (#9774).

Misc

  • :hammer: tekton: add draft release creation to release pipeline (#9420)
  • :hammer: ci: remove compromised tj-actions/changed-files dependency (#9704)
  • :hammer: ci: Automate Dependabot configuration generation (#9862)
  • :hammer: Remove aws-sdk-go-v2 ECR replace directives (#9773)
  • :hammer: Simplify TestEmit by removing table-driven test structure (#9675)
  • :hammer: test: add e2e test for TaskRun pending status (#9681)
  • :hammer: Regenerate code after k8s.io/code-generator 0.35.3 bump (#9822)

Docs

  • :book: docs: add bundle resolver configuration options default values (#9772)
  • :book: docs: update metrics.md to reflect OpenTelemetry migration (#9641)
  • :book: docs(examples): remove stale v1beta1 references from examples README (#9672)

Dependencies

  • :hammer: build(deps): bump k8s.io dependencies from 0.35.2 to 0.35.4 (#9848)
  • :hammer: build(deps): bump github.com/google/cel-go from 0.27.0 to 0.28.0 (#9824)
  • :hammer: build(deps): bump google.golang.org/grpc from 1.79.3 to 1.80.0 (#9715)
  • :hammer: build(deps): bump go.uber.org/zap from 1.27.1 to 1.28.0 (#9926)
  • :hammer: build(deps): bump go.opentelemetry.io/otel/sdk from 1.42.0 to 1.43.0 (#9757)
  • :hammer: build(deps): bump github.com/go-jose/go-jose/v3 from 3.0.4 to 3.0.5 (#9722)
  • :hammer: build(deps): bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 (#9721)
  • :hammer: build(deps): bump github.com/sigstore/sigstore from 1.10.4 to 1.10.5 (#9711)

Thanks

Thanks to these contributors who contributed to v1.12.0!

  • :heart: @Retr0-XD
  • :heart: @afrittoli
  • :heart: @app/dependabot
  • :heart: @gonmmarques
  • :heart: @infernus01
  • :heart: @ogulcanaydogan
  • :heart: @vdemeester
  • :heart: @waveywaves

Extra shout-out for awesome release notes:

  • :heart_eyes: @afrittoli
  • :heart_eyes: @vdemeester
  • :heart_eyes: @waveywaves
v1.11.1 Security relevant patches GHSA-94jr-7pqp-xhcq patches GHSA-m2cx-gpqf-qf74 patches GHSA-rx35-6rhx-7858 +1 more
Security fixes
  • CVE-2026-40161 (HIGH): Git resolver API token leak to user-controlled serverURL
  • CVE-2026-40938 (HIGH): Git resolver argument injection enabling RCE via revision parameter
  • CVE-2026-40923 (Medium): VolumeMount path restriction bypass via missing filepath normalization
Full changelog

-Docs @ v1.11.1
-Examples @ v1.11.1

Installation one-liner

kubectl apply -f https://infra.tekton.dev/tekton-releases/pipeline/previous/v1.11.1/release.yaml

Attestation

The Rekor UUID for this release is 108e9186e8c5677a51c33e77fb56b7f99fdf192905340ce9abdc60589cba2da3451c60ad738768c2

Obtain the attestation:

REKOR_UUID=108e9186e8c5677a51c33e77fb56b7f99fdf192905340ce9abdc60589cba2da3451c60ad738768c2
rekor-cli get --uuid $REKOR_UUID --format json | jq -r .Attestation | jq .

Verify that all container images in the attestation are in the release file:

RELEASE_FILE=https://infra.tekton.dev/tekton-releases/pipeline/previous/v1.11.1/release.yaml
REKOR_UUID=108e9186e8c5677a51c33e77fb56b7f99fdf192905340ce9abdc60589cba2da3451c60ad738768c2

# Obtains the list of images with sha from the attestation
REKOR_ATTESTATION_IMAGES=$(rekor-cli get --uuid "$REKOR_UUID" --format json | jq -r .Attestation | jq -r '.subject[]|.name + ":v1.11.1@sha256:" + .digest.sha256')

# Download the release file
curl -L "$RELEASE_FILE" > release.yaml

# For each image in the attestation, match it to the release file
for image in $REKOR_ATTESTATION_IMAGES; do
  printf $image; grep -q $image release.yaml && echo " ===> ok" || echo " ===> no match";
done

Changes

:warning: Security Fixes

  • GHSA-wjxp-xrpv-xpff / CVE-2026-40161 (HIGH): Git resolver API mode leaks system-configured API token to user-controlled serverURL. A user who can create TaskRuns can exfiltrate the system Git API token by pointing the resolver at an attacker-controlled server.

  • GHSA-94jr-7pqp-xhcq / CVE-2026-40938 (HIGH): Git resolver unsanitized revision parameter enables argument injection. A malicious revision value can inject arbitrary flags into the git CLI, potentially leading to remote code execution on the resolver pod.

  • GHSA-rx35-6rhx-7858 / CVE-2026-40923 (Medium): VolumeMount path restriction bypass via missing filepath normalization. Paths like /tekton/../sensitive bypass the /tekton/ prefix restriction check.

  • GHSA-rmx9-2pp3-xhcr / CVE-2026-25542 (Medium): VerificationPolicy regex pattern bypass via substring matching. Unanchored patterns allow partial matches, letting unsigned resources pass verification.

  • GHSA-m2cx-gpqf-qf74 / CVE-2026-40924 (Medium): HTTP resolver unbounded response body read enables OOM denial of service. A malicious URL returning a very large response can exhaust the resolver pod's memory. Response body is now limited to 1 MiB.

Fixes

  • :bug: Bump google.golang.org/grpc from 1.79.3 to 1.80.0
v1.9.3 Security relevant patches GHSA-94jr-7pqp-xhcq patches GHSA-wjxp-xrpv-xpff
Security fixes
  • CVE-2026-40161 (HIGH): Git resolver API token leak to user-controlled serverURL
  • CVE-2026-40938 (HIGH): Git resolver argument injection enabling RCE via revision parameter
  • CVE-2026-40923 (Medium): VolumeMount path restriction bypass via missing filepath normalization
Full changelog

-Docs @ v1.9.3
-Examples @ v1.9.3

Installation one-liner

kubectl apply -f https://infra.tekton.dev/tekton-releases/pipeline/previous/v1.9.3/release.yaml

Attestation

The Rekor UUID for this release is 108e9186e8c5677a7943c77b03fff46f83c0876773ae3dcc84e6dcb29d64ca605afb3cbc0ff77ecb

Obtain the attestation:

REKOR_UUID=108e9186e8c5677a7943c77b03fff46f83c0876773ae3dcc84e6dcb29d64ca605afb3cbc0ff77ecb
rekor-cli get --uuid $REKOR_UUID --format json | jq -r .Attestation | jq .

Verify that all container images in the attestation are in the release file:

RELEASE_FILE=https://infra.tekton.dev/tekton-releases/pipeline/previous/v1.9.3/release.yaml
REKOR_UUID=108e9186e8c5677a7943c77b03fff46f83c0876773ae3dcc84e6dcb29d64ca605afb3cbc0ff77ecb

# Obtains the list of images with sha from the attestation
REKOR_ATTESTATION_IMAGES=$(rekor-cli get --uuid "$REKOR_UUID" --format json | jq -r .Attestation | jq -r '.subject[]|.name + ":v1.9.3@sha256:" + .digest.sha256')

# Download the release file
curl -L "$RELEASE_FILE" > release.yaml

# For each image in the attestation, match it to the release file
for image in $REKOR_ATTESTATION_IMAGES; do
  printf $image; grep -q $image release.yaml && echo " ===> ok" || echo " ===> no match";
done

Changes

:warning: Security Fixes

  • GHSA-wjxp-xrpv-xpff / CVE-2026-40161 (HIGH): Git resolver API mode leaks system-configured API token to user-controlled serverURL. A user who can create TaskRuns can exfiltrate the system Git API token by pointing the resolver at an attacker-controlled server.

  • GHSA-94jr-7pqp-xhcq / CVE-2026-40938 (HIGH): Git resolver unsanitized revision parameter enables argument injection. A malicious revision value can inject arbitrary flags into the git CLI, potentially leading to remote code execution on the resolver pod.

  • GHSA-rx35-6rhx-7858 / CVE-2026-40923 (Medium): VolumeMount path restriction bypass via missing filepath normalization. Paths like /tekton/../sensitive bypass the /tekton/ prefix restriction check.

  • GHSA-rmx9-2pp3-xhcr / CVE-2026-25542 (Medium): VerificationPolicy regex pattern bypass via substring matching. Unanchored patterns allow partial matches, letting unsigned resources pass verification.

  • GHSA-m2cx-gpqf-qf74 / CVE-2026-40924 (Medium): HTTP resolver unbounded response body read enables OOM denial of service. A malicious URL returning a very large response can exhaust the resolver pod's memory. Response body is now limited to 1 MiB.

Fixes

  • :bug: Fix running_taskruns metric overcounting TaskRuns with no condition
  • :bug: Pin registry image and relax log-based cache assertion
  • :bug: Bump Go to 1.24.13 to fix CVE-2025-61728, CVE-2025-61726, CVE-2025-61729
  • :bug: Fix TextParser struct usage for prometheus/common v0.62.0 compatibility
  • :bug: Remove corrupted resolver cache entries on type error
  • :bug: Resolve resolver cache race condition with singleflight
  • :bug: Align resolver cache configstore with framework implementation
v1.6.2 Security relevant patches GHSA-94jr-7pqp-xhcq patches GHSA-wjxp-xrpv-xpff
Security fixes
  • CVE-2026-40161 (HIGH): Git resolver API token leak to user-controlled serverURL
  • CVE-2026-40938 (HIGH): Git resolver argument injection enabling RCE via revision parameter
  • CVE-2026-40923 (Medium): VolumeMount path restriction bypass via missing filepath normalization
Full changelog

-Docs @ v1.6.2
-Examples @ v1.6.2

Installation one-liner

kubectl apply -f https://infra.tekton.dev/tekton-releases/pipeline/previous/v1.6.2/release.yaml

Attestation

The Rekor UUID for this release is 108e9186e8c5677a7755d52e49ce9ea7ccaf894ffae2779afa04cf7d882635593a2c220a5c7a0a26

Obtain the attestation:

REKOR_UUID=108e9186e8c5677a7755d52e49ce9ea7ccaf894ffae2779afa04cf7d882635593a2c220a5c7a0a26
rekor-cli get --uuid $REKOR_UUID --format json | jq -r .Attestation | jq .

Verify that all container images in the attestation are in the release file:

RELEASE_FILE=https://infra.tekton.dev/tekton-releases/pipeline/previous/v1.6.2/release.yaml
REKOR_UUID=108e9186e8c5677a7755d52e49ce9ea7ccaf894ffae2779afa04cf7d882635593a2c220a5c7a0a26

# Obtains the list of images with sha from the attestation
REKOR_ATTESTATION_IMAGES=$(rekor-cli get --uuid "$REKOR_UUID" --format json | jq -r .Attestation | jq -r '.subject[]|.name + ":v1.6.2@sha256:" + .digest.sha256')

# Download the release file
curl -L "$RELEASE_FILE" > release.yaml

# For each image in the attestation, match it to the release file
for image in $REKOR_ATTESTATION_IMAGES; do
  printf $image; grep -q $image release.yaml && echo " ===> ok" || echo " ===> no match";
done

Changes

:warning: Security Fixes

  • GHSA-wjxp-xrpv-xpff / CVE-2026-40161 (HIGH): Git resolver API mode leaks system-configured API token to user-controlled serverURL. A user who can create TaskRuns can exfiltrate the system Git API token by pointing the resolver at an attacker-controlled server.

  • GHSA-94jr-7pqp-xhcq / CVE-2026-40938 (HIGH): Git resolver unsanitized revision parameter enables argument injection. A malicious revision value can inject arbitrary flags into the git CLI, potentially leading to remote code execution on the resolver pod.

  • GHSA-rx35-6rhx-7858 / CVE-2026-40923 (Medium): VolumeMount path restriction bypass via missing filepath normalization. Paths like /tekton/../sensitive bypass the /tekton/ prefix restriction check.

  • GHSA-rmx9-2pp3-xhcr / CVE-2026-25542 (Medium): VerificationPolicy regex pattern bypass via substring matching. Unanchored patterns allow partial matches, letting unsigned resources pass verification.

  • GHSA-m2cx-gpqf-qf74 / CVE-2026-40924 (Medium): HTTP resolver unbounded response body read enables OOM denial of service. A malicious URL returning a very large response can exhaust the resolver pod's memory. Response body is now limited to 1 MiB.

Fixes

  • :bug: Pin registry image and relax log-based cache assertion
  • :bug: Bump Go to 1.24.13 to fix CVE-2025-61728, CVE-2025-61726, CVE-2025-61729
  • :bug: Fix TextParser struct usage for prometheus/common v0.62.0 compatibility
  • :bug: Remove corrupted resolver cache entries on type error
  • :bug: Resolve resolver cache race condition with singleflight
  • :bug: Align resolver cache configstore with framework implementation

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

About

Stars
8,977
Forks
1,925
Languages
Go Shell Makefile

Beta — feedback welcome: [email protected]