Skip to content

Add enterprise-contract pipeline definition to cli/pipelines#3435

Open
jsmid1 wants to merge 1 commit into
conforma:mainfrom
jsmid1:EC-1942
Open

Add enterprise-contract pipeline definition to cli/pipelines#3435
jsmid1 wants to merge 1 commit into
conforma:mainfrom
jsmid1:EC-1942

Conversation

@jsmid1

@jsmid1 jsmid1 commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Move the enterprise-contract integration pipeline source of truth from build-definitions to cli/pipelines/, consistent with how task definitions are already maintained in cli/tasks/. This enables publishing to conforma/tekton-catalog alongside existing tasks.

Ref: https://issues.redhat.com/browse/EC-1942

@jsmid1
jsmid1 requested a review from simonbaird July 23, 2026 13:08
@qodo-for-conforma

Copy link
Copy Markdown

PR Summary by Qodo

Add Enterprise Contract Tekton pipeline to cli catalog

✨ Enhancement ⚙️ Configuration changes 🕐 20-40 Minutes

Grey Divider

AI Description

• Add a new Tekton Pipeline definition for running Enterprise Contract verification.
• Parameterize policy, trust, and signature verification inputs for flexible cluster setups.
• Resolve tasks from the conforma/tekton-task bundle to enable catalog publishing.
Diagram

graph TD
  A(["PipelineRun"]) --> B["Pipeline: enterprise-contract"] --> C["Task: collect-keyless-params"] --> D["Task: verify-enterprise-contract"] --> E["Bundle: conforma/tekton-task"]
  D --> F{{"External services"}}
  subgraph Legend
    direction LR
    _run(["PipelineRun"]) ~~~ _pipe["Pipeline"] ~~~ _task["Task"] ~~~ _ext{{"External"}}
  end
Loading
High-Level Assessment

Keeping the pipeline definition co-located with other catalog artifacts (tasks/pipelines) is the most maintainable approach for publishing to conforma/tekton-catalog. Alternatives like generating the pipeline from templates or referencing an externally-owned pipeline would reduce duplication but add indirection and make local review/versioning harder.

Files changed (1) +156 / -0

Other (1) +156 / -0
enterprise-contract.yamlIntroduce enterprise-contract Tekton Pipeline definition (v0.1) +156/-0

Introduce enterprise-contract Tekton Pipeline definition (v0.1)

• Adds a new Tekton Pipeline that runs enterprise contract verification for snapshot component images. The pipeline collects keyless verification parameters first, then invokes verify-enterprise-contract with policy, trust, signature, and evaluation-time parameters and exposes TEST_OUTPUT as a pipeline result.

pipelines/enterprise-contract/0.1/enterprise-contract.yaml

@fullsend-ai-review

fullsend-ai-review Bot commented Jul 23, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 1:09 PM UTC · Completed 1:27 PM UTC
Commit: 87c4a29 · View workflow run →

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@jsmid1, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 43 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fe4bb47f-c34e-4840-9cab-7dae1326fd8b

📥 Commits

Reviewing files that changed from the base of the PR and between eb985b2 and 47e886d.

📒 Files selected for processing (1)
  • pipelines/enterprise-contract/0.1/enterprise-contract.yaml
📝 Walkthrough

Walkthrough

Changes

Enterprise contract pipeline

Layer / File(s) Summary
Pipeline definition and verification flow
pipelines/enterprise-contract/0.1/enterprise-contract.yaml
Adds the enterprise-contract Tekton Pipeline with verification parameters, keyless parameter collection followed by enterprise contract verification, a four-hour timeout, and the TEST_OUTPUT result.

Estimated code review effort: 2 (Simple) | ~10 minutes

Suggested reviewers: simonbaird

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: adding the enterprise-contract pipeline definition under cli/pipelines.
Description check ✅ Passed The description covers what changed, why it changed, and includes a related ticket reference.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@qodo-for-conforma

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (3) 📘 Rule violations (0) 📜 Skill insights (0)

Context used
⚠️ Tickets: not configured — ticket URL found in PR but could not be fetched — check ticket provider credentials
✅ Compliance rules (platform): 27 rules

Grey Divider


Remediation recommended

1. Stale v2 task comment 🐞 Bug ⚙ Maintainability
Description
The pipeline header comment says it runs verify-enterprise-contract-v2, but the Pipeline actually
resolves and runs verify-enterprise-contract, which can mislead maintainers and cause incorrect
updates/debugging.
Code

pipelines/enterprise-contract/0.1/enterprise-contract.yaml[R1-4]

+# The purpose of this pipeline is to execute the verify-enterprise-contract-v2 task for container
+# images that are built but not automatically released in order to provide early feedback to users.
+# When auto release is enabled, the task is executed by the release pipeline immediately after the
+# container images are built, thus it is not necessary to execute the task via this pipeline.
Relevance

⭐⭐ Medium

Trivial to fix, but repo history shows mixed appetite for comment-only “staleness” cleanup.

PR-#3357
PR-#2571

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The new pipeline explicitly claims it runs the v2 task in its header, but the actual bundle-resolved
task name is verify-enterprise-contract, which matches the task defined in this repo.

pipelines/enterprise-contract/0.1/enterprise-contract.yaml[1-4]
pipelines/enterprise-contract/0.1/enterprise-contract.yaml[147-155]
tasks/verify-enterprise-contract/0.1/verify-enterprise-contract.yaml[18-22]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The pipeline header comment references `verify-enterprise-contract-v2`, but the pipeline taskRef resolves `verify-enterprise-contract`.

### Issue Context
This is a documentation mismatch that can confuse future maintenance (e.g., someone searching for “v2” or trying to bump the wrong task).

### Fix Focus Areas
- pipelines/enterprise-contract/0.1/enterprise-contract.yaml[1-4]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Informational

2. Misleading param descriptions 🐞 Bug ⚙ Maintainability
Description
Pipeline param documentation diverges from the underlying verify-enterprise-contract task (e.g.,
POLICY_CONFIGURATION is described as an EnterpriseContractConfiguration object, while the task
describes an EnterpriseContractPolicy resource), increasing the risk of misconfiguration by pipeline
consumers.
Code

pipelines/enterprise-contract/0.1/enterprise-contract.yaml[R26-33]

+    - name: POLICY_CONFIGURATION
+      type: string
+      description: |
+        Name of the policy configuration (EnterpriseContractConfiguration
+        object) to use. `namespace/name` or `name` syntax supported. If
+        namespace is omitted the namespace where the task runs is used.
+      default: enterprise-contract-service/default
+    - name: SSL_CERT_DIR
Relevance

⭐⭐⭐ High

Repo has precedent for aligning Tekton param/docs text with actual behavior to reduce consumer
confusion.

PR-#3158

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The Pipeline describes POLICY_CONFIGURATION differently than the task’s own parameter documentation,
even though the pipeline passes the value straight through to the task; similarly, the Pipeline
describes SINGLE_COMPONENT_CUSTOM_RESOURCE as a PipelineRun ID while the task documents it as a
Kubernetes resource name including kind.

pipelines/enterprise-contract/0.1/enterprise-contract.yaml[26-33]
pipelines/enterprise-contract/0.1/enterprise-contract.yaml[70-73]
tasks/verify-enterprise-contract/0.1/verify-enterprise-contract.yaml[49-57]
tasks/verify-enterprise-contract/0.1/verify-enterprise-contract.yaml[198-210]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The Pipeline’s parameter descriptions are not consistent with the task it invokes, which can mislead users configuring the Pipeline.

### Issue Context
`POLICY_CONFIGURATION` is passed directly into the `verify-enterprise-contract` task, so the Pipeline should document the same semantics/value format as the task.

### Fix Focus Areas
- pipelines/enterprise-contract/0.1/enterprise-contract.yaml[26-33]
- pipelines/enterprise-contract/0.1/enterprise-contract.yaml[70-73]
- tasks/verify-enterprise-contract/0.1/verify-enterprise-contract.yaml[49-57]
- tasks/verify-enterprise-contract/0.1/verify-enterprise-contract.yaml[198-210]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Missing pipeline catalog metadata 🐞 Bug ⚙ Maintainability
Description
The enterprise-contract Pipeline lacks the standard Tekton metadata used on tasks in this repo
(e.g., app.kubernetes.io/version and tekton.dev/displayName/tags/minVersion), reducing
discoverability and consistency for publishing/consuming it as a versioned catalog artifact.
Code

pipelines/enterprise-contract/0.1/enterprise-contract.yaml[R7-10]

+metadata:
+  name: enterprise-contract
+  labels:
+    build.appstudio.redhat.com/pipeline: "enterprise-contract"
Relevance

⭐⭐ Medium

No clear repo precedent for required Pipeline catalog annotations/labels; could be intentional
minimal metadata.

PR-#3153
PR-#3148

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The new Pipeline metadata only includes a single label, while tasks in this repo consistently
include Tekton display/tags/minVersion annotations and an app version label, suggesting a repo
convention for catalog artifacts that the pipeline currently doesn’t follow.

pipelines/enterprise-contract/0.1/enterprise-contract.yaml[7-10]
tasks/verify-enterprise-contract/0.1/verify-enterprise-contract.yaml[20-28]
tasks/collect-keyless-params/0.1/collect-keyless-params.yaml[20-27]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The pipeline is stored under a versioned directory (`pipelines/.../0.1/`) but its `metadata` does not include the common catalog metadata (version label and Tekton display/tags/minVersion annotations) that the repo’s tasks include.

### Issue Context
Tasks in `tasks/*/0.1/*.yaml` consistently set these fields; adding the same style to the pipeline improves consistency and downstream catalog UX.

### Fix Focus Areas
- pipelines/enterprise-contract/0.1/enterprise-contract.yaml[7-10]
- tasks/verify-enterprise-contract/0.1/verify-enterprise-contract.yaml[20-28]
- tasks/collect-keyless-params/0.1/collect-keyless-params.yaml[20-27]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

Comment on lines +1 to +4
# The purpose of this pipeline is to execute the verify-enterprise-contract-v2 task for container
# images that are built but not automatically released in order to provide early feedback to users.
# When auto release is enabled, the task is executed by the release pipeline immediately after the
# container images are built, thus it is not necessary to execute the task via this pipeline.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remediation recommended

1. Stale v2 task comment 🐞 Bug ⚙ Maintainability

The pipeline header comment says it runs verify-enterprise-contract-v2, but the Pipeline actually
resolves and runs verify-enterprise-contract, which can mislead maintainers and cause incorrect
updates/debugging.
Agent Prompt
### Issue description
The pipeline header comment references `verify-enterprise-contract-v2`, but the pipeline taskRef resolves `verify-enterprise-contract`.

### Issue Context
This is a documentation mismatch that can confuse future maintenance (e.g., someone searching for “v2” or trying to bump the wrong task).

### Fix Focus Areas
- pipelines/enterprise-contract/0.1/enterprise-contract.yaml[1-4]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +7 to +10
metadata:
name: enterprise-contract
labels:
build.appstudio.redhat.com/pipeline: "enterprise-contract"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Informational

2. Missing pipeline catalog metadata 🐞 Bug ⚙ Maintainability

The enterprise-contract Pipeline lacks the standard Tekton metadata used on tasks in this repo
(e.g., app.kubernetes.io/version and tekton.dev/displayName/tags/minVersion), reducing
discoverability and consistency for publishing/consuming it as a versioned catalog artifact.
Agent Prompt
### Issue description
The pipeline is stored under a versioned directory (`pipelines/.../0.1/`) but its `metadata` does not include the common catalog metadata (version label and Tekton display/tags/minVersion annotations) that the repo’s tasks include.

### Issue Context
Tasks in `tasks/*/0.1/*.yaml` consistently set these fields; adding the same style to the pipeline improves consistency and downstream catalog UX.

### Fix Focus Areas
- pipelines/enterprise-contract/0.1/enterprise-contract.yaml[7-10]
- tasks/verify-enterprise-contract/0.1/verify-enterprise-contract.yaml[20-28]
- tasks/collect-keyless-params/0.1/collect-keyless-params.yaml[20-27]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment on lines +26 to +33
- name: POLICY_CONFIGURATION
type: string
description: |
Name of the policy configuration (EnterpriseContractConfiguration
object) to use. `namespace/name` or `name` syntax supported. If
namespace is omitted the namespace where the task runs is used.
default: enterprise-contract-service/default
- name: SSL_CERT_DIR

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Informational

3. Misleading param descriptions 🐞 Bug ⚙ Maintainability

Pipeline param documentation diverges from the underlying verify-enterprise-contract task (e.g.,
POLICY_CONFIGURATION is described as an EnterpriseContractConfiguration object, while the task
describes an EnterpriseContractPolicy resource), increasing the risk of misconfiguration by pipeline
consumers.
Agent Prompt
### Issue description
The Pipeline’s parameter descriptions are not consistent with the task it invokes, which can mislead users configuring the Pipeline.

### Issue Context
`POLICY_CONFIGURATION` is passed directly into the `verify-enterprise-contract` task, so the Pipeline should document the same semantics/value format as the task.

### Fix Focus Areas
- pipelines/enterprise-contract/0.1/enterprise-contract.yaml[26-33]
- pipelines/enterprise-contract/0.1/enterprise-contract.yaml[70-73]
- tasks/verify-enterprise-contract/0.1/verify-enterprise-contract.yaml[49-57]
- tasks/verify-enterprise-contract/0.1/verify-enterprise-contract.yaml[198-210]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pipelines/enterprise-contract/0.1/enterprise-contract.yaml`:
- Around line 1-8: Add the repository-standard license header at the very
beginning of the enterprise-contract Pipeline YAML, before the existing purpose
comments and apiVersion declaration. Match the exact header convention used by
neighboring files under pipelines/ and tasks/.
- Around line 92-131: Update the verify task parameters to pass the
collect-keyless-params buildIdentityRegexp result as
CERTIFICATE_IDENTITY_REGEXP. Keep the existing CERTIFICATE_IDENTITY mapping to
tektonChainsIdentity unchanged, so verify receives both exact and regex-based
keyless identity configuration.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 288f9467-ccdf-4bb2-8b79-6ba6845ff769

📥 Commits

Reviewing files that changed from the base of the PR and between 4ea11df and eb985b2.

📒 Files selected for processing (1)
  • pipelines/enterprise-contract/0.1/enterprise-contract.yaml

Comment thread pipelines/enterprise-contract/0.1/enterprise-contract.yaml
Comment on lines +92 to +131
- name: collect-keyless-params
taskRef:
resolver: bundles
params:
- name: bundle
value: quay.io/conforma/tekton-task:konflux
- name: name
value: collect-keyless-params
- name: kind
value: task
- name: verify
runAfter:
- collect-keyless-params
params:
- name: POLICY_CONFIGURATION
value: "$(params.POLICY_CONFIGURATION)"
- name: IMAGES
value: "$(params.SNAPSHOT)"
- name: SSL_CERT_DIR
value: "$(params.SSL_CERT_DIR)"
- name: STRICT
value: "$(params.STRICT)"

- name: PUBLIC_KEY
# PUBLIC_KEY will be ignored if any of the CERTIFICATE_* params are present
value: "$(params.PUBLIC_KEY)"
- name: IGNORE_REKOR
# Set this true because Chains in default Konflux does not create Rekor entries
# when signing things. It will be ignored if any of the CERTIFICATE_* params
# because keyless verification does require Rekor.
value: "true"

- name: CERTIFICATE_OIDC_ISSUER
value: "$(tasks.collect-keyless-params.results.defaultOIDCIssuer)"
- name: CERTIFICATE_IDENTITY
value: "$(tasks.collect-keyless-params.results.tektonChainsIdentity)"
- name: TUF_MIRROR
value: "$(tasks.collect-keyless-params.results.tufUrl)"
- name: REKOR_HOST
value: "$(tasks.collect-keyless-params.results.rekorUrl)"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
rg -n 'CERTIFICATE_IDENTITY_REGEXP|buildIdentityRegexp' -g '*.yaml'

Repository: conforma/cli

Length of output: 150


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== file existence and relevant snippets =="
if [ -f pipelines/enterprise-contract/0.1/enterprise-contract.yaml ]; then
  nl -ba pipelines/enterprise-contract/0.1/enterprise-contract.yaml | sed -n '1,180p'
else
  echo "missing pipelines/enterprise-contract/0.1/enterprise-contract.yaml"
fi

echo
echo "== tracked yaml files mentioning relevant params/results =="
rg -n 'collect-keyless-params|buildIdentityRegexp|CERTIFICATE_IDENTITY_REGEXP|tektonChainsIdentity|defaultOIDCIssuer' -g '*.yaml' || true

echo
echo "== repository-wide occurrences =="
rg -n 'collect-keyless-params|buildIdentityRegexp|CERTIFICATE_IDENTITY_REGEXP|tektonChainsIdentity|defaultOIDCIssuer' || true

Repository: conforma/cli

Length of output: 233


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "== file existence =="
test -f pipelines/enterprise-contract/0.1/enterprise-contract.yaml && echo "present" || echo "missing"
test -d pipelines/enterprise-contract/0.1 && echo "dir present" || echo "dir missing"
find pipelines -maxdepth 3 -type f 2>/dev/null || true

echo
echo "== relevant snippets using cat -n =="
if [ -f pipelines/enterprise-contract/0.1/enterprise-contract.yaml ]; then
  cat -n pipelines/enterprise-contract/0.1/enterprise-contract.yaml | sed -n '1,180p'
fi

echo
echo "== tracked yaml files mentioning relevant params/results =="
rg -n 'collect-keyless-params|buildIdentityRegexp|CERTIFICATE_IDENTITY_REGEXP|tektonChainsIdentity|defaultOIDCIssuer' -g '*.yaml' . || true

echo
echo "== repository-wide occurrences =="
rg -n 'collect-keyless-params|buildIdentityRegexp|CERTIFICATE_IDENTITY_REGEXP|tektonChainsIdentity|defaultOIDCIssuer' . || true

Repository: conforma/cli

Length of output: 25892


Wire collect-keyless-params.buildIdentityRegexp into verify.

collect-keyless-params reads and emits buildIdentityRegexp, and verify-enterprise-contract supports CERTIFICATE_IDENTITY_REGEXP for regex-based keyless identity matching, but this pipeline only passes tektonChainsIdentity as CERTIFICATE_IDENTITY. Clusters/configs that rely on the regex identity are using an exact match instead.

Proposed fix
         - name: CERTIFICATE_IDENTITY
           value: "$(tasks.collect-keyless-params.results.tektonChainsIdentity)"
+        - name: CERTIFICATE_IDENTITY_REGEXP
+          value: "$(tasks.collect-keyless-params.results.buildIdentityRegexp)"
         - name: TUF_MIRROR
           value: "$(tasks.collect-keyless-params.results.tufUrl)"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- name: collect-keyless-params
taskRef:
resolver: bundles
params:
- name: bundle
value: quay.io/conforma/tekton-task:konflux
- name: name
value: collect-keyless-params
- name: kind
value: task
- name: verify
runAfter:
- collect-keyless-params
params:
- name: POLICY_CONFIGURATION
value: "$(params.POLICY_CONFIGURATION)"
- name: IMAGES
value: "$(params.SNAPSHOT)"
- name: SSL_CERT_DIR
value: "$(params.SSL_CERT_DIR)"
- name: STRICT
value: "$(params.STRICT)"
- name: PUBLIC_KEY
# PUBLIC_KEY will be ignored if any of the CERTIFICATE_* params are present
value: "$(params.PUBLIC_KEY)"
- name: IGNORE_REKOR
# Set this true because Chains in default Konflux does not create Rekor entries
# when signing things. It will be ignored if any of the CERTIFICATE_* params
# because keyless verification does require Rekor.
value: "true"
- name: CERTIFICATE_OIDC_ISSUER
value: "$(tasks.collect-keyless-params.results.defaultOIDCIssuer)"
- name: CERTIFICATE_IDENTITY
value: "$(tasks.collect-keyless-params.results.tektonChainsIdentity)"
- name: TUF_MIRROR
value: "$(tasks.collect-keyless-params.results.tufUrl)"
- name: REKOR_HOST
value: "$(tasks.collect-keyless-params.results.rekorUrl)"
- name: collect-keyless-params
taskRef:
resolver: bundles
params:
- name: bundle
value: quay.io/conforma/tekton-task:konflux
- name: name
value: collect-keyless-params
- name: kind
value: task
- name: verify
runAfter:
- collect-keyless-params
params:
- name: POLICY_CONFIGURATION
value: "$(params.POLICY_CONFIGURATION)"
- name: IMAGES
value: "$(params.SNAPSHOT)"
- name: SSL_CERT_DIR
value: "$(params.SSL_CERT_DIR)"
- name: STRICT
value: "$(params.STRICT)"
- name: PUBLIC_KEY
# PUBLIC_KEY will be ignored if any of the CERTIFICATE_* params are present
value: "$(params.PUBLIC_KEY)"
- name: IGNORE_REKOR
# Set this true because Chains in default Konflux does not create Rekor entries
# when signing things. It will be ignored if any of the CERTIFICATE_* params
# because keyless verification does require Rekor.
value: "true"
- name: CERTIFICATE_OIDC_ISSUER
value: "$(tasks.collect-keyless-params.results.defaultOIDCIssuer)"
- name: CERTIFICATE_IDENTITY
value: "$(tasks.collect-keyless-params.results.tektonChainsIdentity)"
- name: CERTIFICATE_IDENTITY_REGEXP
value: "$(tasks.collect-keyless-params.results.buildIdentityRegexp)"
- name: TUF_MIRROR
value: "$(tasks.collect-keyless-params.results.tufUrl)"
- name: REKOR_HOST
value: "$(tasks.collect-keyless-params.results.rekorUrl)"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pipelines/enterprise-contract/0.1/enterprise-contract.yaml` around lines 92 -
131, Update the verify task parameters to pass the collect-keyless-params
buildIdentityRegexp result as CERTIFICATE_IDENTITY_REGEXP. Keep the existing
CERTIFICATE_IDENTITY mapping to tektonChainsIdentity unchanged, so verify
receives both exact and regex-based keyless identity configuration.

@codecov

codecov Bot commented Jul 23, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Flag Coverage Δ
acceptance 54.26% <ø> (ø)
generative 16.80% <ø> (ø)
integration 27.97% <ø> (ø)
unit 71.75% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@fullsend-ai-review

fullsend-ai-review Bot commented Jul 23, 2026

Copy link
Copy Markdown

Review

Findings

High

  • [scope-coherence] Makefile:250 — The tekton-lint target only globs tasks/*/*/*.yaml. The new pipelines/ directory will not be linted by CI. The .tektonlintrc.yaml already has pipeline-specific rules enabled (no-pipeline-missing-parameters, no-pipeline-missing-task, no-pipeline-task-cycle) but they will never fire on pipeline definitions outside the tasks/ glob. This means the new pipeline YAML will ship without the same lint guarantees that tasks have.
    Remediation: Extend the tekton-lint Makefile target to also glob pipelines/*/*/*.yaml.

Low

  • [stale-reference] pipelines/enterprise-contract/0.1/enterprise-contract.yaml:18 — The comment states "execute the verify-enterprise-contract-v2 task" but the pipeline's taskRef references verify-enterprise-contract (without -v2). No task named verify-enterprise-contract-v2 exists in the repository.
    Remediation: Change the comment to reference verify-enterprise-contract.

  • [api-contract] pipelines/enterprise-contract/0.1/enterprise-contract.yaml:44 — The POLICY_CONFIGURATION description refers to "EnterpriseContractConfiguration object" but the correct type name is EnterpriseContractPolicy, used consistently throughout the codebase and in the downstream task's own description.
    Remediation: Change EnterpriseContractConfiguration to EnterpriseContractPolicy.

  • [document-format] pipelines/enterprise-contract/0.1/enterprise-contract.yaml:1 — Missing YAML document separator (---) at the top of the file. All existing Tekton resource files in tasks/ start with --- before the copyright header.
    Remediation: Add --- as the first line of the file.

  • [metadata-consistency] pipelines/enterprise-contract/0.1/enterprise-contract.yaml:25 — The pipeline metadata lacks annotations (tekton.dev/displayName, tekton.dev/pipelines.minVersion, tekton.dev/tags) and the app.kubernetes.io/version label that all task definitions in this repo include.

  • [architecture-documentation] AGENTS.md — AGENTS.md documents the project structure and mentions tekton-lint for tasks but does not mention the new pipelines/ directory.


Labels: PR adds a Tekton Pipeline definition for CI verification workflows

Previous run

Review

Findings

Medium

  • [license-header] pipelines/enterprise-contract/0.1/enterprise-contract.yaml:1 — The new pipeline file is missing the standard Apache-2.0 license header. Every existing YAML definition in tasks/ starts with the Copyright The Conforma Contributors / Apache-2.0 / SPDX-License-Identifier block. The Makefile's addlicense check covers all tracked files and pipelines/ is not in the ignore list, so CI will flag this.
    Remediation: Add the standard Apache-2.0 license header at the top of the file, before the purpose comment, matching the format in tasks/*.yaml.

  • [incomplete-integration] pipelines/enterprise-contract/0.1/enterprise-contract.yaml — The Makefile's tekton-lint target only globs tasks/*/*/*.yaml. The new pipelines/ directory follows the same versioned path convention but is not picked up by tekton-lint, creating a gap in CI validation coverage.
    Remediation: Update the Makefile tekton-lint target to also glob pipelines/*/*/*.yaml, or raise this as a follow-up issue.

Low

  • [stale-reference] pipelines/enterprise-contract/0.1/enterprise-contract.yaml:1 — The header comment says "verify-enterprise-contract-v2 task" but the actual task referenced is verify-enterprise-contract (no v2 suffix). No v2 variant exists in the repository.
    Remediation: Change the comment to say "verify-enterprise-contract task".

  • [api-contract] pipelines/enterprise-contract/0.1/enterprise-contract.yaml:30 — The POLICY_CONFIGURATION description refers to "EnterpriseContractConfiguration object", but the underlying task uses "EnterpriseContractPolicy resource".
    Remediation: Align the description with the task's terminology.

  • [api-contract] pipelines/enterprise-contract/0.1/enterprise-contract.yaml:12 — The pipeline does not expose SINGLE_COMPONENT_CUSTOM_RESOURCE_NS. When SINGLE_COMPONENT=true, the task uses its default (empty string). Not a functional failure, but an incomplete interface for the single-component flow.
    Remediation: Add the parameter for completeness, or document the reliance on the task's default.

  • [metadata-annotations] pipelines/enterprise-contract/0.1/enterprise-contract.yaml:7 — Missing tekton.dev/displayName, tekton.dev/pipelines.minVersion, and tekton.dev/tags annotations present on all existing task definitions.
    Remediation: Add annotations matching the pattern in tasks/*.yaml.

  • [metadata-labels] pipelines/enterprise-contract/0.1/enterprise-contract.yaml:9 — Missing app.kubernetes.io/version: "0.1" label included on all existing task definitions.
    Remediation: Add app.kubernetes.io/version: "0.1" to the labels block.

  • [pattern-inconsistency] pipelines/enterprise-contract/0.1/enterprise-contract.yaml:31POLICY_CONFIGURATION default is unquoted; the existing convention quotes string defaults.
    Remediation: Change to default: "enterprise-contract-service/default".

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review fullsend-ai-review Bot added the requires-manual-review Review requires human judgment label Jul 23, 2026
Move the enterprise-contract integration pipeline source of truth from
build-definitions to cli/pipelines/, consistent with how task definitions
are already maintained in cli/tasks/. This enables publishing to
conforma/tekton-catalog alongside existing tasks.

Ref: https://issues.redhat.com/browse/EC-1942
@fullsend-ai-review

fullsend-ai-review Bot commented Jul 23, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 1:31 PM UTC · Completed 1:48 PM UTC
Commit: 87c4a29 · View workflow run →

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See the review comment for full details.

# SPDX-License-Identifier: Apache-2.0

# The purpose of this pipeline is to execute the verify-enterprise-contract-v2 task for container
# images that are built but not automatically released in order to provide early feedback to users.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] stale-reference

The comment states 'execute the verify-enterprise-contract-v2 task' but the pipeline's taskRef references 'verify-enterprise-contract' (without '-v2'). No task named 'verify-enterprise-contract-v2' exists in the repository.

Suggested fix: Change the comment to reference 'verify-enterprise-contract' instead of 'verify-enterprise-contract-v2'.

Each "containerImage" in the "components" array is validated.
- name: POLICY_CONFIGURATION
type: string
description: |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] api-contract

The POLICY_CONFIGURATION description refers to 'EnterpriseContractConfiguration object' but the correct type name is 'EnterpriseContractPolicy', used consistently throughout the codebase and in the downstream task's own description.

Suggested fix: Change 'EnterpriseContractConfiguration' to 'EnterpriseContractPolicy'.

@@ -0,0 +1,172 @@
# Copyright The Conforma Contributors

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] document-format

Missing YAML document separator ('---') at the top of the file. All existing Tekton resource files in tasks/ start with '---' before the copyright header.

Suggested fix: Add '---' as the first line of the file, before the copyright comment.

kind: Pipeline
metadata:
name: enterprise-contract
labels:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] metadata-consistency

The pipeline metadata lacks annotations (tekton.dev/displayName, tekton.dev/pipelines.minVersion, tekton.dev/tags) and the app.kubernetes.io/version label that all task definitions in this repo include.

@fullsend-ai-review fullsend-ai-review Bot added ci and removed requires-manual-review Review requires human judgment labels Jul 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant