Skip to content

NO-JIRA: add address-review-comments workflow - #8621

Merged
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
bryan-cox:test-arc-runners
May 29, 2026
Merged

NO-JIRA: add address-review-comments workflow#8621
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
bryan-cox:test-arc-runners

Conversation

@bryan-cox

@bryan-cox bryan-cox commented May 28, 2026

Copy link
Copy Markdown
Member

Summary

  • Adds an address-review-comments workflow triggered by /address-review-comments on PRs
  • Uses Claude Code with GCP WIF auth to run the utils:address-reviews ai-helpers plugin
  • Replaces the previous claude-wif-test smoke test workflow with a real tool

Changes

  • Renames claude-wif-test.yaml to address-review-comments.yaml
  • Trigger: /address-review-comments comment on a PR (MEMBER/OWNER/COLLABORATOR only)
  • Uses startsWith instead of contains to prevent accidental triggers from quoted mentions
  • Checks out the PR branch name (head.ref) instead of SHA to avoid detached HEAD
  • Removes workflow_dispatch (no PR context without a comment trigger)
  • Adds fetch-depth: 0 for full git history (rebasing, commit amending)
  • Bumps permissions to contents: write and pull-requests: write
  • Enables persist-credentials for git push (credentials scoped to job lifetime)
  • Clones ai-helpers into $GITHUB_WORKSPACE for plugin file access
  • Enables only the utils plugin (contains address-reviews command)

Test plan

  • Merge, then post /address-review-comments on a PR with review comments

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added a /address-review-comments PR comment trigger to run an "address PR review comments" action.
    • Replaced prior SBOM/grep invocation with a dedicated address-reviews command (longer review capacity).
  • Chores

    • Restricts who can trigger the command to repo members/collaborators/owners and adds concurrency control per PR.
    • Increased workflow timeout to 30 minutes, expanded job write permissions, and improved checkout/auth behavior for reliable runs.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label May 28, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@bryan-cox: This pull request explicitly references no jira issue.

Details

In response to this:

Summary

  • Changes the WIF test workflow to run address-reviews on the triggering PR instead of a smoke test
  • Bumps permissions to contents: write and pull-requests: write for pushing code and posting replies
  • Enables persist-credentials for git push capability
  • Sets GH_TOKEN for gh CLI access
  • Increases timeout to 30 minutes for verification steps

Test plan

  • Merge and post /test-wif on a PR with review comments

🤖 Generated with Claude Code

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.

@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Workflow renamed to "Address Review Comments" and retargeted to run on created issue comments starting with /address-review-comments from MEMBER/OWNER/COLLABORATOR. Job concurrency added (per-PR, cancel-in-progress), permissions for contents and pull-requests set to write, timeout increased to 30 minutes. PR ref step now always outputs head.ref and head.repo.full_name; actions/checkout uses those outputs with persist-credentials: true and fetch-depth: 0. Claude Code invocation enables only utils@ai-helpers and runs claude -p "/utils:address-reviews $PR_NUMBER" with --max-turns 100.

Sequence Diagram(s)

sequenceDiagram
  participant GitHub as GitHub
  participant Workflow as "Address Review Comments Workflow"
  participant PRMeta as "Get PR ref step"
  participant Checkout as "actions/checkout"
  participant Claude as "Claude Code (utils:address-reviews)"

  GitHub->>Workflow: issue_comment created (startsWith '/address-review-comments')
  Workflow->>Workflow: check author_association in (MEMBER, OWNER, COLLABORATOR)
  Workflow->>PRMeta: fetch PR JSON
  PRMeta-->>Workflow: outputs branch=head.ref, repo=head.repo.full_name
  Workflow->>Checkout: checkout using branch/repo (persist-credentials:true, fetch-depth:0)
  Workflow->>Claude: run claude -p "/utils:address-reviews $PR_NUMBER" --max-turns 100
Loading

Possibly related PRs

Suggested reviewers

  • csrwng
  • Nirshal
🚥 Pre-merge checks | ✅ 11
✅ Passed checks (11 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: adding a new GitHub Actions workflow for addressing review comments. It is concise, clear, and directly reflects the primary objective of the changeset.
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.
Stable And Deterministic Test Names ✅ Passed PR modifies only a GitHub Actions workflow YAML file with no Ginkgo tests; check is not applicable to workflow configuration files.
Test Structure And Quality ✅ Passed This PR modifies only a GitHub Actions workflow file (.github/workflows/address-review-comments.yaml) with no Ginkgo test code, making the test structure/quality check inapplicable.
Topology-Aware Scheduling Compatibility ✅ Passed PR only modifies GitHub Actions workflow file (.github/workflows/address-review-comments.yaml), not deployment manifests, operator code, or controllers. Check is not applicable.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed This PR modifies only the GitHub Actions workflow file and configuration files. No Ginkgo e2e tests are added or modified.
No-Weak-Crypto ✅ Passed Pull request modifies only a GitHub Actions workflow YAML file with no weak crypto algorithms, custom crypto implementations, or insecure secret comparisons.
Container-Privileges ✅ Passed PR modifies only a GitHub Actions workflow file (.github/workflows/address-review-comments.yaml) with no container manifests or Kubernetes resources containing privileged configurations.
No-Sensitive-Data-In-Logs ✅ Passed No explicit logging of sensitive data. github.token used only in curl Authorization header, never echoed to stdout. Echo/printf statements output only non-sensitive data like branch names and paths.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

@openshift-ci

openshift-ci Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: bryan-cox

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-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label May 28, 2026
@openshift-ci
openshift-ci Bot requested review from Nirshal and csrwng May 28, 2026 11:25
@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label May 28, 2026
@bryan-cox bryan-cox changed the title NO-JIRA: run address-reviews via Claude Code in WIF test workflow NO-JIRA: add address-review-comments workflow May 28, 2026
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label May 28, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

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/address-review-comments.yaml:
- Around line 35-37: The checkout step currently uses the PR head ref
(steps.pr.outputs.ref) with persist-credentials: true, which gives untrusted PR
code write access; modify the workflow to avoid checking out the untrusted
repo/ref with persisted credentials: either (A) checkout the base branch instead
and fetch the PR changes without persist-credentials, (B) move any git push or
sensitive operations into a separate job that checks out only trusted code (base
branch) and runs with persist-credentials: true, or (C) add explicit fork
detection using steps.pr.outputs.repo/actor and fail or skip the job for forked
PRs; update the checkout action usage accordingly to remove persist-credentials:
true for untrusted checkouts.
- Around line 64-68: The workflow invokes the agentic command
"/utils:address-reviews" with PR_NUMBER and uses claude with "--max-turns 100",
which exposes risk of prompt injection from untrusted PR review comments; update
the workflow to (1) fetch and filter/sanitize review comment content before
handing data to the agent (e.g., strip markdown, remove code blocks, and reject
suspicious tokens) rather than piping raw comments, (2) gate execution to
trusted author_associations only (check the PR review author_association and
only run for e.g., "OWNER","MEMBER","COLLABORATOR"), and (3) reduce interactive
power by lowering "--max-turns" and adding a human-in-the-loop checkpoint for
any write actions or high-risk suggestions produced by the claude invocation
(i.e., require manual approval before applying changes).
🪄 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: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: f259b9ab-900c-41a7-8f8f-b2748d0464ff

📥 Commits

Reviewing files that changed from the base of the PR and between 164df89 and 668c73c.

📒 Files selected for processing (1)
  • .github/workflows/address-review-comments.yaml

Comment thread .github/workflows/address-review-comments.yaml Outdated
Comment thread .github/workflows/address-review-comments.yaml
@bryan-cox

Copy link
Copy Markdown
Member Author

/area ci-tooling
/area ai

@openshift-ci openshift-ci Bot added area/ci-tooling Indicates the PR includes changes for CI or tooling area/ai Indicates the PR includes changes related to AI - Claude agents, Cursor rules, etc. and removed do-not-merge/needs-area labels May 28, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (1)
.github/workflows/address-review-comments.yaml (1)

64-73: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Untrusted review text still reaches Claude with write permissions.

The trusted author_association check only applies to the slash-command comment. /utils:address-reviews then operates on PR review comments, which can still contain attacker-controlled prompt text. With repository write access, that remains a high-risk agentic CI path.

Filter or trust-bound the review comments before they reach Claude, or add a human approval checkpoint before any write action. As per coding guidelines, "Agentic CI actions: audit for prompt injection via issue/PR title/body flowing into LLM prompts".

🤖 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/address-review-comments.yaml around lines 64 - 73, The
workflow currently pipes raw PR review comments into the Claude agent via the
"/utils:address-reviews" slash-command (invoked by claude -p
"/utils:address-reviews $PR_NUMBER") after only validating the comment
author_association, which allows untrusted review text to reach an LLM with
write-capable credentials (GH_TOKEN); modify the CI step so review text is
pre-filtered or explicitly trusted before being passed to Claude: either (a)
fetch PR reviews in the runner and validate/trust only reviews from allowed
associations or specific reviewers and sanitize/whitelist content before calling
"/utils:address-reviews", or (b) require a manual approval job
(human_in_the_loop) that gates the claude invocation; ensure the claude
invocation and the "/utils:address-reviews" input are only executed after the
trust check and do not run with GH_TOKEN write permissions unless approved.
🤖 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/address-review-comments.yaml:
- Around line 25-31: The PR step currently writes head.sha to the output key
"ref", causing actions/checkout to land on a detached HEAD; update the curl/jq
block in the job with id "pr" so it stores the branch name by using .head.ref
(not .head.sha) for the "ref" output and keep "repo" from .head.repo.full_name,
and make the same change in the duplicated block referenced around lines 38-43;
ensure the checkout step (actions/checkout) uses the "ref" output to check out
the PR branch rather than a commit SHA.
- Line 16: The job currently uses contains(github.event.comment.body,
'/address-review-comments') which can match incidental mentions; update the
condition to only trigger on an intentional slash command by using
startsWith(github.event.comment.body, '/address-review-comments') or by parsing
github.event.comment.body to extract the first token and compare equality to
'/address-review-comments' so only comments beginning with that exact command
fire; change the contains(...) expression to startsWith(...) or equivalent
parsing logic referencing github.event.comment.body in the workflow.

---

Duplicate comments:
In @.github/workflows/address-review-comments.yaml:
- Around line 64-73: The workflow currently pipes raw PR review comments into
the Claude agent via the "/utils:address-reviews" slash-command (invoked by
claude -p "/utils:address-reviews $PR_NUMBER") after only validating the comment
author_association, which allows untrusted review text to reach an LLM with
write-capable credentials (GH_TOKEN); modify the CI step so review text is
pre-filtered or explicitly trusted before being passed to Claude: either (a)
fetch PR reviews in the runner and validate/trust only reviews from allowed
associations or specific reviewers and sanitize/whitelist content before calling
"/utils:address-reviews", or (b) require a manual approval job
(human_in_the_loop) that gates the claude invocation; ensure the claude
invocation and the "/utils:address-reviews" input are only executed after the
trust check and do not run with GH_TOKEN write permissions unless approved.
🪄 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 YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: df6f5468-39e6-4de3-9fa7-025bb7890184

📥 Commits

Reviewing files that changed from the base of the PR and between 668c73c and 5feecc6.

📒 Files selected for processing (1)
  • .github/workflows/address-review-comments.yaml

Comment thread .github/workflows/address-review-comments.yaml Outdated
Comment thread .github/workflows/address-review-comments.yaml
@bryan-cox
bryan-cox force-pushed the test-arc-runners branch 2 times, most recently from 03193d5 to 517cd07 Compare May 28, 2026 11:50

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
.github/workflows/address-review-comments.yaml (1)

31-37: ⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

Avoid checking out the PR repo with persisted write credentials.

steps.pr.outputs.repo can point at an external fork, but persist-credentials: true still writes this workflow's write-scoped token into that checkout. That recreates the same trust boundary as pull_request_target: untrusted PR contents are being processed in a workspace that now holds base-repo write creds and later receives WIF auth. Please either fail fork PRs before checkout or split the write path into a separate job that never checks out the PR head with persisted credentials.

As per coding guidelines, "No pull_request_target with checkout of PR head".

🤖 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/address-review-comments.yaml around lines 31 - 37, The
workflow currently checks out the PR head using actions/checkout with
persist-credentials: true and repository: ${{ steps.pr.outputs.repo }}, which
can be an external fork and leaks write-scoped tokens; update the checkout step
(the actions/checkout invocation) to not persist credentials for untrusted forks
(set persist-credentials: false) or add logic to fail/stop when
steps.pr.outputs.repo indicates a fork before any checkout, or refactor so that
the job that uses ${{ steps.pr.outputs.repo }} only performs a read-only
checkout and any write operations run in a separate job that checks out the base
repo with persist-credentials: true; ensure the change targets the
actions/checkout usage and the persist-credentials setting referenced in the
diff.
🤖 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/address-review-comments.yaml:
- Around line 13-21: The job "address-review-comments" can run concurrently for
the same PR and race when amending/rebasing branches; add a concurrency block to
serialize runs per PR by using a PR-scoped group (e.g. group:
address-review-comments-${{ github.event.pull_request.number }}) and set
cancel-in-progress: false so new triggers are queued rather than running in
parallel; place this concurrency stanza at the "address-review-comments" job
level to ensure only one agent run operates on a given PR branch at a time.

---

Duplicate comments:
In @.github/workflows/address-review-comments.yaml:
- Around line 31-37: The workflow currently checks out the PR head using
actions/checkout with persist-credentials: true and repository: ${{
steps.pr.outputs.repo }}, which can be an external fork and leaks write-scoped
tokens; update the checkout step (the actions/checkout invocation) to not
persist credentials for untrusted forks (set persist-credentials: false) or add
logic to fail/stop when steps.pr.outputs.repo indicates a fork before any
checkout, or refactor so that the job that uses ${{ steps.pr.outputs.repo }}
only performs a read-only checkout and any write operations run in a separate
job that checks out the base repo with persist-credentials: true; ensure the
change targets the actions/checkout usage and the persist-credentials setting
referenced in the diff.
🪄 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 YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: e0a83810-fc97-4a25-bb65-ccee3dceee0b

📥 Commits

Reviewing files that changed from the base of the PR and between 5feecc6 and 517cd07.

📒 Files selected for processing (1)
  • .github/workflows/address-review-comments.yaml

Comment thread .github/workflows/address-review-comments.yaml
The container: directive requires containerMode on ARC runners which
needs anyuid SCC and a long-running process. Replace it by installing
Claude and cloning ai-helpers directly in workflow steps.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
.github/workflows/address-review-comments.yaml (1)

50-60: ⚡ Quick win

Consider pinning external dependencies for supply chain security.

Two supply chain risks worth noting:

  1. Line 52: The curl | bash pattern executes code without integrity verification. If claude.ai were compromised, malicious code would run with workflow permissions.

  2. Line 57: The ai-helpers clone uses --depth 1 on the default branch without pinning to a specific commit or tag. A compromised commit could affect all subsequent runs.

Suggested mitigations:

  • For Claude Code: verify a checksum or pin to a versioned release URL if available
  • For ai-helpers: pin to a specific commit SHA (e.g., git clone --depth 1 --branch <tag-or-sha>)

These are hardening recommendations rather than blockers, given both sources are controlled (Anthropic official domain, internal org repo).

♻️ Example: Pin ai-helpers to a specific commit
-          git clone --depth 1 https://github.com/openshift-eng/ai-helpers.git "$GITHUB_WORKSPACE/ai-helpers"
+          git clone --depth 1 --branch v1.0.0 https://github.com/openshift-eng/ai-helpers.git "$GITHUB_WORKSPACE/ai-helpers"

Or with a commit SHA:

-          git clone --depth 1 https://github.com/openshift-eng/ai-helpers.git "$GITHUB_WORKSPACE/ai-helpers"
+          git clone https://github.com/openshift-eng/ai-helpers.git "$GITHUB_WORKSPACE/ai-helpers"
+          cd "$GITHUB_WORKSPACE/ai-helpers" && git checkout <known-good-sha>

As per coding guidelines: "Pin actions by full SHA, not tag" — extending this principle to cloned repositories improves reproducibility and supply chain integrity.

🤖 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/address-review-comments.yaml around lines 50 - 60, Replace
the unsecured curl|bash install and unpinned git clone with verifiable, pinned
sources: for the Claude install step (the curl -fsSL
https://claude.ai/install.sh | bash invocation) change to fetching a specific
release or installer and validating its checksum/signature before executing; for
the ai-helpers setup (the git clone --depth 1 ...
"$GITHUB_WORKSPACE/ai-helpers") clone a specific commit SHA or tag (use --branch
<tag-or-sha> and --depth 1) so the repository is pinned and reproducible, and
update the workflow to fail if checksum/signature or the exact commit cannot be
verified.
🤖 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.

Nitpick comments:
In @.github/workflows/address-review-comments.yaml:
- Around line 50-60: Replace the unsecured curl|bash install and unpinned git
clone with verifiable, pinned sources: for the Claude install step (the curl
-fsSL https://claude.ai/install.sh | bash invocation) change to fetching a
specific release or installer and validating its checksum/signature before
executing; for the ai-helpers setup (the git clone --depth 1 ...
"$GITHUB_WORKSPACE/ai-helpers") clone a specific commit SHA or tag (use --branch
<tag-or-sha> and --depth 1) so the repository is pinned and reproducible, and
update the workflow to fail if checksum/signature or the exact commit cannot be
verified.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 68533541-5bfb-48c7-9b62-ccbfd7a7c21f

📥 Commits

Reviewing files that changed from the base of the PR and between 517cd07 and ab030b0.

📒 Files selected for processing (1)
  • .github/workflows/address-review-comments.yaml

cat /tmp/claude-output.txt
exit 1
fi
claude -p "/utils:address-reviews $PR_NUMBER" --model claude-opus-4-6 --max-turns 100

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

do we want to pin a specific effort and --allowedTools?

@bryan-cox bryan-cox May 28, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Good call. The model is already pinned via --model claude-opus-4-6. Adding --allowedTools "Bash Read Write Edit Grep Glob WebFetch" to match what we have in the Prow review-agent job in openshift/release.


AI-assisted response via Claude Code

@openshift-ci

openshift-ci Bot commented May 28, 2026

Copy link
Copy Markdown
Contributor

@bryan-cox: all tests passed!

Full PR test history. Your PR dashboard.

Details

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-sigs/prow repository. I understand the commands that are listed here.


- name: Install Claude Code
run: |
curl -fsSL https://claude.ai/install.sh | bash

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

should we pin a specific version?
have you considered https://github.com/anthropics/claude-code-action

@bryan-cox bryan-cox May 28, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Good suggestion on both counts.

Version pinning: The install script (curl | bash) always gets latest. We could pin by downloading a specific release tarball or using the claude-code-action which supports version pinning natively. Will address as a follow-up.

claude-code-action: Yes — it supports Vertex AI + WIF natively and handles installation, tool configuration, and structured outputs. It would replace our manual install + plugin setup steps. The main question is whether it supports loading ai-helpers marketplace plugins (the utils:address-reviews command). Will investigate and potentially migrate to it as a follow-up.


AI-assisted response via Claude Code

@hypershift-jira-solve-ci

Copy link
Copy Markdown
Contributor

I now have all the evidence needed. Here is the complete analysis:

Test Failure Analysis Complete

Job Information

  • Prow Job: GitHub Actions — lint / Lint and verify / Verify (reusable workflows lint-reusable.yaml, verify-reusable.yaml)
  • Build ID: Lint: 26573671359 / Verify: 26573671283
  • PR: #8621 — NO-JIRA: add address-review-comments workflow
  • Runners: arc-runner-set-r7cfx-runner-7d8vz (Lint), arc-runner-set-r7cfx-runner-6xnfh (Verify)
  • File Changed: .github/workflows/address-review-comments.yaml only (no Go code changes)

Test Failure Analysis

Error

Lint (api-lint):
  certificates/register.go:1: : loading compiled Go files from cache: reading srcfiles list: cache entry not found: bad checksum (typecheck)

Lint (main lint):
  support/forwarder/forwarder.go:12:2: could not import k8s.io/client-go/kubernetes
    (.../clientset.go:59:21: could not import k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta3
    (-: loading compiled Go files from cache: reading srcfiles list: cache entry not found: bad checksum)) (typecheck)

Verify (controller-gen):
  -: loading compiled Go files from cache: reading srcfiles list: cache entry not found: bad checksum
  Error: not all generators ran successfully
  make: *** [Makefile:252: hypershift-api] Error 1

Summary

Both failures are caused by corrupted entries in the shared Go build cache (/cache/go-build) mounted read-only on ARC runner pods via GOCACHEPROG. The PR itself only modifies a GitHub Actions workflow YAML file and touches zero Go code. The identical "bad checksum" cache corruption simultaneously affects an unrelated PR branch (fix-add-startup-probe-konnectivity-sock5-sidecar, run 26573761698), confirming this is an infrastructure-level flake, not a code defect.

Root Cause

The ARC (Actions Runner Controller) runner pods in the arc-runner-set-r7cfx set use a shared Go build cache at /cache/go-build, exposed to the Go toolchain via GOCACHEPROG (configured as gocacheprog --ro /cache/go-build --rw /tmp/go-build-cache). This is a two-tier cache: a read-only shared layer backed by a persistent volume, and a read-write ephemeral layer per job.

The shared read-only cache layer contains corrupted or stale entries with invalid checksums. When golangci-lint (in the Lint job) or controller-gen (in the Verify job) attempts to load compiled Go object files from this cache, the Go toolchain detects the checksum mismatch and fails with cache entry not found: bad checksum.

The corruption likely occurred during a cache population phase (e.g., a prior job writing to the shared cache while being terminated mid-write, a cache race between concurrent writers, or a PV sync issue). Key indicators:

  1. Same error, different files: Lint fails on certificates/register.go and k8s.io/client-go/kubernetes/typed/flowcontrol/v1beta3, while Verify fails during controller-gen processing of ./api/... — all hitting the same shared cache.
  2. Cross-PR reproduction: The identical error hits a completely unrelated branch (fix-add-startup-probe-konnectivity-sock5-sidecar) in the same time window, on the same runner pool.
  3. No Go code changes: PR NO-JIRA: add address-review-comments workflow #8621 only modifies .github/workflows/address-review-comments.yaml — there is no mechanism for a YAML-only change to cause Go compilation or type-checking failures.
Recommendations
  1. Immediate — Re-run the failed jobs: Since this is a transient cache corruption, simply re-running both jobs should succeed (a different runner pod or a fresh ephemeral cache layer may bypass the corrupted entries). Use the GitHub Actions UI "Re-run failed jobs" button.

  2. Short-term — Invalidate the shared Go build cache: The ARC runner administrators should purge or rebuild the /cache/go-build persistent volume backing the arc-runner-set-r7cfx runner set to eliminate corrupted entries.

  3. Medium-term — Add cache integrity checks: The gocacheprog setup step should verify cache health before use (e.g., go clean -cache fallback if GOCACHEPROG verification fails), or the workflow should catch bad checksum errors and automatically retry with GOCACHEPROG disabled.

  4. No code changes needed on PR NO-JIRA: add address-review-comments workflow #8621: The PR is correct as-is. The failures are entirely infrastructure-related.

Evidence
Evidence Detail
PR files changed .github/workflows/address-review-comments.yaml only — zero Go files
Lint error (api-lint) certificates/register.go:1: loading compiled Go files from cache: reading srcfiles list: cache entry not found: bad checksum (typecheck)
Lint error (main) support/forwarder/forwarder.go:12:2: could not import k8s.io/client-go/kubernetes (...bad checksum) (typecheck)
Verify error controller-gen object paths=./api/... → loading compiled Go files from cache: reading srcfiles list: cache entry not found: bad checksum
Cache config GOCACHEPROG=gocacheprog --ro /cache/go-build --rw /tmp/go-build-cache
Runner pool arc-runner-set-r7cfx (both jobs)
Cross-PR reproduction Same bad checksum error on unrelated branch fix-add-startup-probe-konnectivity-sock5-sidecar (run 26573761698), same runner pool, same time window
Make target (Lint) make lintMakefile:112: api-lint Error 1, then Makefile:120: lint Error 2
Make target (Verify) make generate updateMakefile:252: hypershift-api Error 1

@bryan-cox

Copy link
Copy Markdown
Member Author

/retest

@enxebre

enxebre commented May 29, 2026

Copy link
Copy Markdown
Member

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label May 29, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification

No second-stage tests were triggered for this PR.

This can happen when:

  • The changed files don't match any pipeline_run_if_changed patterns
  • All files match pipeline_skip_if_only_changed patterns
  • No pipeline-controlled jobs are defined for the main branch

Use /test ? to see all available tests.

@bryan-cox

Copy link
Copy Markdown
Member Author

/verified later @bryan-cox

@openshift-ci-robot openshift-ci-robot added verified-later verified Signifies that the PR passed pre-merge verification criteria labels May 29, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@bryan-cox: This PR has been marked to be verified later by @bryan-cox.

Details

In response to this:

/verified later @bryan-cox

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.

@bryan-cox

Copy link
Copy Markdown
Member Author

/retest

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. area/ai Indicates the PR includes changes related to AI - Claude agents, Cursor rules, etc. area/ci-tooling Indicates the PR includes changes for CI or tooling jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. verified Signifies that the PR passed pre-merge verification criteria verified-later

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants