Skip to content

OSAC-2185: Gate chart publish on image build success - #81

Merged
openshift-merge-bot[bot] merged 5 commits into
osac-project:mainfrom
minmzzhang:OSAC-2185-gate-chart-publish-on-image-build
Jul 20, 2026
Merged

OSAC-2185: Gate chart publish on image build success#81
openshift-merge-bot[bot] merged 5 commits into
osac-project:mainfrom
minmzzhang:OSAC-2185-gate-chart-publish-on-image-build

Conversation

@minmzzhang

@minmzzhang minmzzhang commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Summary

publish-charts.yaml and publish-image.yaml currently trigger independently off the same v* tag push, with no dependency between them — a chart can be marked "published" even if the matching container image never got built. This exact class of gap caused the OSAC-2174 production incident in a sibling repo (chart referenced an image that was never built, resulting in ImagePullBackOff).

This PR changes publish-charts.yaml to trigger via workflow_run on Publish container image completing, gated by a new guard job:

  • Skips (neutral, not a false green) if the completion isn't from a tag push (e.g. PR builds, pushes to main).
  • Fails loudly (red) if the image build for the tag did not succeed.
  • Only lets the chart-publish job proceed if the image build for that same tag succeeded.

The publish-ui-chart job now needs: guard, pins its checkout to needs.guard.outputs.sha, and uses needs.guard.outputs.tag instead of $(git describe --tags) / $GITHUB_REF_NAME (which don't reliably resolve to the tag under a workflow_run event) in both the chart-packaging script and the "Create GitHub Release" step.

Testing

Live end-to-end verified on a personal fork, not just static analysis:

  • Pushed a v* test tag → image build ran → succeeded → publish-charts triggered afterward (not in parallel) → chart published → GitHub Release created. Full run: green.
  • Confirmed the negative path: a push to main (non-tag) completing the image workflow correctly results in publish-charts being skipped, not a false green.
  • Validated with actionlint (0 errors) on the final workflow file.

Acceptance criteria (OSAC-2185)

  • Chart publish cannot succeed (or create a GitHub Release) unless the matching image was confirmed to exist for that tag.
  • A simulated image-build failure on a tag push causes publish-charts to fail loudly rather than complete green.

Jira: https://redhat.atlassian.net/browse/OSAC-2185

Summary by CodeRabbit

  • Bug Fixes
    • Improved chart and release publishing by ensuring it only runs after the related container image workflow completes successfully.
    • Added validation for release tags to confirm they match an expected semver pattern and come from successful runs.
    • Chart publishing now uses the exact image tag/commit that passed validation.
    • Added a verification step to confirm the release tag still points to the expected commit before creating or updating the GitHub Release.

Trigger publish-charts.yaml via workflow_run on the sibling image workflow
completing instead of independently on push:tags:v*. A new guard job
checks the image build concluded successfully for the same tag before
any chart publishing proceeds, and fails loudly if it did not.

Assisted-by: Cursor <noreply@cursor.com>
@openshift-ci-robot

openshift-ci-robot commented Jul 14, 2026

Copy link
Copy Markdown

@minmzzhang: This pull request references OSAC-2185 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the bug to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Summary

publish-charts.yaml and publish-image.yaml currently trigger independently off the same v* tag push, with no dependency between them — a chart can be marked "published" even if the matching container image never got built. This exact class of gap caused the OSAC-2174 production incident in a sibling repo (chart referenced an image that was never built, resulting in ImagePullBackOff).

This PR changes publish-charts.yaml to trigger via workflow_run on Publish container image completing, gated by a new guard job:

  • Skips (neutral, not a false green) if the completion isn't from a tag push (e.g. PR builds, pushes to main).
  • Fails loudly (red) if the image build for the tag did not succeed.
  • Only lets the chart-publish job proceed if the image build for that same tag succeeded.

The publish-ui-chart job now needs: guard, pins its checkout to needs.guard.outputs.sha, and uses needs.guard.outputs.tag instead of $(git describe --tags) / $GITHUB_REF_NAME (which don't reliably resolve to the tag under a workflow_run event) in both the chart-packaging script and the "Create GitHub Release" step.

Testing

Live end-to-end verified on a personal fork, not just static analysis:

  • Pushed a v* test tag → image build ran → succeeded → publish-charts triggered afterward (not in parallel) → chart published → GitHub Release created. Full run: green.
  • Confirmed the negative path: a push to main (non-tag) completing the image workflow correctly results in publish-charts being skipped, not a false green.
  • Validated with actionlint (0 errors) on the final workflow file.

Acceptance criteria (OSAC-2185)

  • Chart publish cannot succeed (or create a GitHub Release) unless the matching image was confirmed to exist for that tag.
  • A simulated image-build failure on a tag push causes publish-charts to fail loudly rather than complete green.

Jira: https://redhat.atlassian.net/browse/OSAC-2185

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 openshift-eng/jira-lifecycle-plugin repository.

@openshift-ci
openshift-ci Bot requested review from larsks and omer-vishlitzky July 14, 2026 17:48
@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

The chart publishing workflow now runs after successful container image publication, validates the upstream version tag and commit, checks out that commit, uses its tag for chart versioning, verifies tag stability, and creates or edits the matching GitHub Release.

Changes

Chart publishing workflow

Layer / File(s) Summary
Workflow guard and chart publication
.github/workflows/publish-charts.yaml
The workflow validates the upstream event and semver-like tag, passes the upstream tag and SHA to chart publication, checks out that SHA, and derives chart metadata from the tag.
Tag verification and release update
.github/scripts/verify-tag-matches-sha.sh, .github/workflows/publish-charts.yaml
The release path confirms that the tag still references the guarded commit, then creates or edits the GitHub Release using that tag.

Estimated code review effort: 3 (Moderate) | ~15–30 minutes

Sequence Diagram(s)

sequenceDiagram
  participant ImageWorkflow
  participant Guard
  participant ChartPublisher
  participant GitHubAPI
  participant GitHubRelease
  ImageWorkflow->>Guard: workflow_run completion, head_branch, head_sha
  Guard->>ChartPublisher: validated tag and commit SHA
  ChartPublisher->>GitHubAPI: verify tag resolves to guarded SHA
  ChartPublisher->>GitHubRelease: create or edit release for TAG
Loading

Suggested reviewers: larsks, omer-vishlitzky

🚥 Pre-merge checks | ✅ 10 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Ai-Attribution ⚠️ Warning PR commits use Assisted-by trailers, but one commit also has Co-authored-by: Cursor, which violates the AI attribution rule. Replace the AI-tool Co-Authored-By line with Assisted-by or Generated-by and keep AI attribution consistent across the PR.
✅ Passed checks (10 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: chart publishing is now gated on successful image build completion.
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.
No-Hardcoded-Secrets ✅ Passed No hardcoded secrets, embedded creds, or secret-like literals found; only runtime secret references like secrets.GITHUB_TOKEN are used.
No-Weak-Crypto ✅ Passed No weak crypto primitives, custom crypto, or secret/token comparisons found; only git tag/commit SHA metadata and equality checks.
No-Injection-Vectors ✅ Passed No listed injection sinks appear; shell vars are quoted and TAG is semver-validated before use, and the jq filter is constant.
Container-Privileges ✅ Passed Touched files are a workflow and shell script only; no privileged/root/hostNetwork/hostIPC/SYS_ADMIN/allowPrivilegeEscalation settings were found.
No-Sensitive-Data-In-Logs ✅ Passed No added logging prints tokens/passwords/API keys or PII; only tag and commit SHA/status messages are echoed.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@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: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
.github/workflows/publish-charts.yaml (1)

57-64: 🔒 Security & Privacy | 🔵 Trivial

Chart artifact is pushed without a signature.

The OCI-packaged chart is pushed to the registry with no Sigstore/cosign signing step, so consumers can't verify provenance. Consider signing the packaged chart (or the resulting OCI artifact) with cosign before/after helm push.

As per path instructions, "Sign artifacts with Sigstore/cosign."

🤖 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 @.github/workflows/publish-charts.yaml around lines 57 - 64, Add a
Sigstore/cosign signing step for the packaged chart artifact in the workflow
around helm package and helm push. Sign the chart or resulting OCI artifact
using the existing chart_file and registry references, ensuring signing occurs
before consumers can retrieve the pushed artifact and preserving the current
packaging and push flow.

Source: Path instructions

🤖 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 @.github/workflows/publish-charts.yaml:
- Around line 20-26: Update the affected workflow steps, including “Check image
build result” and the steps using github.actor, secrets.GITHUB_TOKEN, and
github.repository, to pass these GitHub expressions through step-level env
variables. Reference only the corresponding shell variables inside each run
script, preserving the existing validation, logging, and publish behavior while
eliminating direct template interpolation in shell commands.
- Around line 13-18: Harden the release guard that sets outputs in the workflow
by validating that workflow_run.head_branch is a semver-style tag rather than
merely starting with “v”, or document the required coupling to
publish-image.yaml if retaining the current check. Ensure branch names beginning
with “v” cannot trigger chart publication unless they match the intended tag
format.
- Around line 36-40: Update the actions/checkout step in the publish workflow to
pin uses to its complete immutable commit SHA instead of the mutable v4 tag, and
retain the corresponding version in an inline comment.
- Around line 10-19: Add an explicit empty permissions declaration to the guard
job in the publish workflow, alongside its existing name, runs-on, and if
configuration. Keep the guard job’s outputs and steps unchanged, ensuring it
runs without any unnecessary GITHUB_TOKEN permissions.

---

Outside diff comments:
In @.github/workflows/publish-charts.yaml:
- Around line 57-64: Add a Sigstore/cosign signing step for the packaged chart
artifact in the workflow around helm package and helm push. Sign the chart or
resulting OCI artifact using the existing chart_file and registry references,
ensuring signing occurs before consumers can retrieve the pushed artifact and
preserving the current packaging and push flow.
🪄 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: Repository: osac-project/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 3f339e31-029e-46e4-9b75-9cf1a095802d

📥 Commits

Reviewing files that changed from the base of the PR and between 7e72da7 and 64518b2.

📒 Files selected for processing (1)
  • .github/workflows/publish-charts.yaml

Comment thread .github/workflows/publish-charts.yaml
Comment thread .github/workflows/publish-charts.yaml
Comment thread .github/workflows/publish-charts.yaml Outdated
Comment thread .github/workflows/publish-charts.yaml Outdated
- Scope guard job to permissions: {} (was inheriting default token scope)
- Pass workflow_run.head_branch/conclusion through env instead of direct
  ${{ }} interpolation in shell (script-injection hardening)
- Validate the tag against a proper semver grammar in guard, not just
  startsWith(..., 'v')
- Pin actions/checkout to a full SHA (v4.2.2) instead of the mutable v4 tag
- Verify the tag still resolves to the guarded commit immediately before
  creating the GitHub Release, guarding against a force-push/retag race

Note: not adding Sigstore/cosign chart signing here - that's a separate,
larger effort beyond this ticket's scope, flagged for a follow-up if desired.

Assisted-by: Cursor <noreply@cursor.com>
@minmzzhang

minmzzhang commented Jul 14, 2026

Copy link
Copy Markdown
Contributor Author

Pushed a follow-up commit addressing the CodeRabbit review:

  • guard job now runs with permissions: {} (was inheriting default token scope)
  • workflow_run.head_branch/conclusion are now passed through env: instead of being spliced directly into the shell script (script/template-injection hardening)
  • The tag is now validated against a proper semver grammar in guard, not just startsWith(..., 'v')
  • persist-credentials: false and a SHA-pinned actions/checkout on the touched checkout step(s)
  • Added a step that re-verifies the tag still resolves to the guarded commit immediately before creating the GitHub Release, to guard against a force-push/retag race between the image build and the release

Intentionally not doing in this PR: Sigstore/cosign signing of the published chart artifacts. That's a separate, larger effort (registry/verification infra, signing key strategy) that's outside OSAC-2185's scope (gating chart publish on image build success). Happy to track it as its own follow-up ticket if wanted.

@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: 5

🤖 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 @.github/workflows/publish-charts.yaml:
- Around line 27-28: Update the semver_re validation used by the publish
workflow so HEAD_BRANCH follows strict SemVer numeric rules, rejecting leading
zeros in major, minor, patch, and numeric prerelease identifiers while
preserving valid tags with the v prefix and supported prerelease/build metadata.
- Around line 27-28: Update the semver_re validation in the publish workflow to
reject release tags containing +build metadata, while preserving valid
v-prefixed semantic versions and prerelease suffixes. Ensure chart publishing
accepts only tags whose resulting image references are compatible with the image
workflow.
- Around line 76-80: Update the publish workflow’s chart publication steps to
perform keyless Sigstore/cosign signing of the OCI chart after it is pushed to
GHCR, and add the minimal required OIDC and package permissions without granting
broader access. Ensure the signing step references the exact published chart
digest or tag and preserves the existing guarded-commit verification flow.
- Around line 76-86: Move the tag verification step using CURRENT_SHA and
GUARDED_SHA before the helm push and release creation steps, and invoke gh
release create with --verify-tag so it refuses to recreate a missing tag.
Preserve the existing mismatch failure behavior and ensure both chart publishing
and release creation use the verified immutable tag.
- Around line 82-84: Update the tag verification logic around CURRENT_SHA to
dereference annotated tags and resolve refs/tags/${TAG} to the underlying commit
SHA before comparing with GUARDED_SHA. Preserve the existing mismatch error and
release refusal behavior once both values represent commit SHAs.
🪄 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: Repository: osac-project/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: fbca7bfc-1334-4a36-ab5d-3cc13f12b7c0

📥 Commits

Reviewing files that changed from the base of the PR and between 64518b2 and 4a4dc70.

📒 Files selected for processing (1)
  • .github/workflows/publish-charts.yaml

Comment thread .github/workflows/publish-charts.yaml Outdated
Comment thread .github/workflows/publish-charts.yaml
Comment thread .github/workflows/publish-charts.yaml Outdated
Comment thread .github/workflows/publish-charts.yaml Outdated
- Extract the tag-vs-guarded-commit verification into a shared
  .github/scripts/verify-tag-matches-sha.sh instead of duplicating the
  bash logic at each checkpoint
- Dereference annotated tags before comparing SHAs (the ref lookup
  returns the tag-object SHA, not the commit SHA, for annotated tags)
- Add --verify-tag to gh release create as an extra safety net
- Reject SemVer tags with leading zeros (e.g. v01.2.3, v1.2.3-01)

The early (post-checkout) and late (pre-release) verification checkpoints
were already both present from the previous round; this just removes the
duplicated bash between them.

Assisted-by: Cursor <noreply@cursor.com>
@minmzzhang

Copy link
Copy Markdown
Contributor Author

Pushed a follow-up commit addressing round 2 of the CodeRabbit review:

  • Extracted the tag-vs-guarded-commit verification into a shared .github/scripts/verify-tag-matches-sha.sh instead of duplicating the bash logic at each checkpoint (also flagged as a concern independently - thanks for catching that)
  • The script now dereferences annotated tags before comparing SHAs (the ref lookup returns the tag-object SHA, not the commit SHA, for annotated tags)
  • The verification now runs both right after checkout (before packaging/pushing the chart) and again immediately before creating the release, closing the gap where a moved tag would only be caught after an artifact was already uploaded
  • Added --verify-tag to gh release create as an extra safety net
  • Fixed the SemVer regex to reject leading zeros (e.g. v01.2.3, v1.2.3-01)

One finding I did not apply: the claim that git/refs/tags/... is "the wrong endpoint and will fail" - I tested both git/refs/tags/... and git/ref/tags/... directly against the live GitHub API and they return identical results, so this doesn't hold up. Kept the original endpoint.

@minmzzhang
minmzzhang force-pushed the OSAC-2185-gate-chart-publish-on-image-build branch from 992c05c to c0f34b3 Compare July 15, 2026 01:19

@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 @.github/workflows/publish-charts.yaml:
- Line 27: The semver validation regex in the publish workflow still permits
+build metadata that Docker tags cannot use. Update the semver_re validation
used for app_version to reject build-metadata suffixes while preserving valid
v-prefixed semantic versions and existing prerelease validation.
- Around line 60-67: Update the publish chart workflow’s run blocks, including
the step identified by id “run,” to remove direct GitHub expression
interpolation from shell commands. Pass github.actor, secrets.GITHUB_TOKEN, and
github.repository through step environment variables, then reference those
variables inside the shell; reuse the existing REPO environment variable for
repository-slug usages around the chart publishing commands.
🪄 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: Repository: osac-project/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: d134ee1c-a252-41d0-8348-500a5f385048

📥 Commits

Reviewing files that changed from the base of the PR and between 992c05c and c0f34b3.

📒 Files selected for processing (2)
  • .github/scripts/verify-tag-matches-sha.sh
  • .github/workflows/publish-charts.yaml

Comment thread .github/workflows/publish-charts.yaml Outdated
Comment thread .github/workflows/publish-charts.yaml
- Reject SemVer tags with build metadata (+...) - Docker/OCI tags cannot
  contain '+', so a tag like v1.2.3+build.1 would pass the old regex but
  produce an unusable image reference downstream
- Route github.actor/secrets.GITHUB_TOKEN/github.repository through env
  in the chart-packaging step instead of splicing them directly into the
  run: shell (script-injection hardening, missed in this step during the
  earlier rounds even though it was applied elsewhere)
- Same for the repo slug in the Create GitHub Release step

Assisted-by: Cursor <noreply@cursor.com>
@minmzzhang

Copy link
Copy Markdown
Contributor Author

Pushed a follow-up commit addressing round 3 of the CodeRabbit review:

  • Removed the +build metadata group from the SemVer regex - Docker/OCI tags can't contain +, so a tag like v1.2.3+build.1 would have passed validation but produced an unusable image reference downstream (app_image uses this value verbatim as a tag)
  • Routed github.actor/secrets.GITHUB_TOKEN/github.repository through env: in the chart-packaging step and the repo slug in Create GitHub Release, instead of splicing them directly into the shell

@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: 1

🤖 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 @.github/workflows/publish-charts.yaml:
- Around line 100-107: Update the release flow around gh release create and gh
release edit so the tag is protected from force-moves or its SHA is revalidated
immediately before publishing. Ensure the release can only be created or edited
for the commit matching GUARDED_SHA, preserving the existing guarded-tag
workflow.
🪄 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: Repository: osac-project/coderabbit/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: e549a005-d8d0-4c7d-a3aa-935197825767

📥 Commits

Reviewing files that changed from the base of the PR and between c0f34b3 and c0c5e30.

📒 Files selected for processing (1)
  • .github/workflows/publish-charts.yaml

Comment thread .github/workflows/publish-charts.yaml
- In the shared verify-tag-matches-sha.sh: capture the gh api response in
  a variable before parsing with read (a failing API call under set -e
  was previously masked by read's own exit status, falling through to a
  generic tag-mismatch error instead of surfacing the real failure)
- Switch to the officially documented singular git/ref/{ref} endpoint for
  retrieval instead of the plural git/refs/{ref} form (only documented
  for PATCH/DELETE) - both return identical data today, but only the
  documented one is guaranteed to keep doing so

Assisted-by: Cursor <noreply@cursor.com>
@minmzzhang

Copy link
Copy Markdown
Contributor Author

Pushed a follow-up commit fixing two issues in the shared verify-tag-matches-sha.sh:

  • Captured the gh api response in a variable before parsing with read - a failed API call under set -e was previously masked by read's own exit status, falling through to a generic tag-mismatch error instead of surfacing the real failure
  • Switched to the officially documented singular git/ref/{ref} endpoint for retrieval - confirmed against GitHub's actual REST API docs that the plural git/refs/{ref} form is only documented for PATCH/DELETE, not GET (both happen to return identical data today, but only the documented form is guaranteed to keep doing so)

@rccrdpccl

Copy link
Copy Markdown
Contributor

/lgtm
/approve

as discussed offline with @minmzzhang we should extract common parts to a common workflow later

@rawagner

Copy link
Copy Markdown
Contributor

/lgtm

@rawagner

Copy link
Copy Markdown
Contributor

/approve

@openshift-ci

openshift-ci Bot commented Jul 20, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: minmzzhang, rawagner, rccrdpccl

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-merge-bot
openshift-merge-bot Bot merged commit 32b75b6 into osac-project:main Jul 20, 2026
5 checks passed
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.

4 participants