You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Not sure if this would be considered a bug or feature request.
Currently, Chains will not process on pipelines that contain CustomRuns. If this is not supported by design, I could not find any documentation on the subject. Ideally, this is either supported or documented.
The pipelines I am working with use CustomRuns to set github commit statuses. After implementing Tekton Chains, my pipelines without these CustomRuns are processed properly, but those with them produce the error Unable to get reconciled status of taskrun <customrun task name> within pipelinerun in the chains-controller.
Notes for consideration:
SLSA L2 requires isolated builds. So I do not think CustomRuns would satisfy this requirement due to logic typically running in the same pod. However, I think I could make the argument that in my use case, the CustomRun is not part of the "build pipeline".
SLSA L1, on the other hand, requires provenance and I think Chains should be able to provide that for all types of Runs.
I reproduced this on v0.27.4 with both Tekton and OCI storage. The failure happens before payload generation or storage: FinalizeKind collects every PipelineRun.Status.ChildReferences name, then looks up each through the TaskRun lister. A Kind: CustomRun child returns NotFound, so the reconciler exits before calling the PipelineRun signer.
The ordinary TaskRun is complete and has already been reconciled by Chains. The CustomRun is also complete, but the controller logs:
Unable to get reconciled status of taskrun example-approval within pipelinerun
I am preparing a small PR that skips only explicit Kind == "CustomRun" references in the TaskRun reconciliation loop. This keeps the existing PipelineRun.IsDone() gate, ordinary TaskRun completion/reconciliation checks, and missing TaskRun behavior. It also preserves empty-Kind references used by existing tests/older status representations.
This restores PipelineRun signing for mixed runs without adding CustomRun execution or approval details to the existing provenance format. Those details still need a separate provenance design; the fix does not claim that Chains signs or attests each CustomRun itself.
The regression tests cover CustomRun-only and mixed runs, both child orders, pending/unreconciled/missing ordinary TaskRuns, empty and unknown Kind compatibility, terminal failures, and repeated reconciliation. For acceptance, I will verify actual attestations using a valid signing key rather than relying only on chains.tekton.dev/signed=true.
Activity
yuzichen12123 commentedon Oct 8, 2026
I reproduced this on v0.27.4 with both Tekton and OCI storage. The failure happens before payload generation or storage:
FinalizeKindcollects everyPipelineRun.Status.ChildReferencesname, then looks up each through the TaskRun lister. AKind: CustomRunchild returns NotFound, so the reconciler exits before calling the PipelineRun signer.Minimal shape of the completed run:
The ordinary TaskRun is complete and has already been reconciled by Chains. The CustomRun is also complete, but the controller logs:
I am preparing a small PR that skips only explicit
Kind == "CustomRun"references in the TaskRun reconciliation loop. This keeps the existingPipelineRun.IsDone()gate, ordinary TaskRun completion/reconciliation checks, and missing TaskRun behavior. It also preserves empty-Kind references used by existing tests/older status representations.This restores PipelineRun signing for mixed runs without adding CustomRun execution or approval details to the existing provenance format. Those details still need a separate provenance design; the fix does not claim that Chains signs or attests each CustomRun itself.
The regression tests cover CustomRun-only and mixed runs, both child orders, pending/unreconciled/missing ordinary TaskRuns, empty and unknown Kind compatibility, terminal failures, and repeated reconciliation. For acceptance, I will verify actual attestations using a valid signing key rather than relying only on
chains.tekton.dev/signed=true.