Skip to content

NO-JIRA: use ai-helpers container image for Claude WIF test - #8609

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

NO-JIRA: use ai-helpers container image for Claude WIF test#8609
openshift-merge-bot[bot] merged 1 commit into
openshift:mainfrom
bryan-cox:test-arc-runners

Conversation

@bryan-cox

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

Copy link
Copy Markdown
Member

Summary

  • Use pre-built quay.io/rh_ee_brcox/hypershift:ai-helpers-arm64 container image for the Claude WIF test workflow
  • Remove the Claude Code install step — Claude is pre-installed in the image
  • Remove HOME: /tmp workaround — the container has a proper home directory

Test plan

  • Merge and trigger /test-wif on any open PR
  • WIF auth should pass (already proven working)
  • Claude should respond without needing install step

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Chores
    • CI workflow now runs tests inside a containerized environment for more reliable, consistent execution.
    • Removed an unnecessary installer step to streamline workflow startup.
    • Updated the test invocation to a deterministic echo-style prompt and ensured it authenticates using workload identity.

@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 27, 2026
@openshift-ci-robot

Copy link
Copy Markdown

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

Details

In response to this:

Summary

  • Use pre-built quay.io/rh_ee_brcox/hypershift:ai-helpers-arm64 container image for the Claude WIF test workflow
  • Remove the Claude Code install step — Claude is pre-installed in the image
  • Remove HOME: /tmp workaround — the container has a proper home directory

Test plan

  • Merge and trigger /test-wif on any open PR
  • WIF auth should pass (already proven working)
  • Claude should respond without needing install step

🤖 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 27, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The test-wif GitHub Actions job is changed to run inside the container image quay.io/rh_ee_brcox/hypershift:ai-helpers-arm64. The workflow no longer runs a separate "Install Claude Code" step; it proceeds from checkout to Workload Identity Federation (WIF) GCP authentication inside the container and then executes the Claude Code CLI test. The Claude CLI invocation now uses the prompt "/hello-world:echo HyperShift" with --max-turns 1.

Possibly related PRs

  • openshift/hypershift#8588: Adds the initial Claude Code WIF test workflow; this PR updates that workflow to use a container image instead of manual installation.
  • openshift/hypershift#8600: Modifies the same workflow steps around Claude Code setup and authentication configuration.
  • openshift/hypershift#8598: Alters the Claude Code installation step in the same workflow; this PR removes that step entirely by containerizing the job.

Suggested reviewers

  • cblecker
  • 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 clearly and concisely describes the main change: adopting a pre-built container image for the Claude WIF test workflow instead of the previous install approach.
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 GitHub Actions workflow configuration (.github/workflows/claude-wif-test.yaml), not Ginkgo tests. The check for stable test names is not applicable to workflow YAML files.
Test Structure And Quality ✅ Passed Custom check for Ginkgo test code quality is not applicable to this PR, which only modifies a GitHub Actions workflow YAML file, not Go test code.
Topology-Aware Scheduling Compatibility ✅ Passed PR modifies only GitHub Actions workflow file, not deployment manifests or operator code. Topology-aware scheduling check is not applicable to CI/CD workflows.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed This PR does not add any Ginkgo e2e tests; it only modifies a GitHub Actions workflow configuration file (.github/workflows/claude-wif-test.yaml). The custom check is not applicable.
No-Weak-Crypto ✅ Passed No weak cryptography patterns (MD5, SHA1, DES, RC4, 3DES, Blowfish, ECB), custom crypto implementations, or timing-sensitive comparisons detected in the workflow YAML changes.
Container-Privileges ✅ Passed PR modifies only .github/workflows/claude-wif-test.yaml. No privileged, hostPID, hostNetwork, hostIPC, SYS_ADMIN, or allowPrivilegeEscalation settings found in container configuration.
No-Sensitive-Data-In-Logs ✅ Passed Workflow uses proper GitHub Actions security practices: github.token not echoed, output masked via $GITHUB_OUTPUT, no API keys/passwords/PII logged, WIF eliminates credential exposure.

✏️ 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 requested review from Nirshal and cblecker May 27, 2026 18:31
@openshift-ci

openshift-ci Bot commented May 27, 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 27, 2026
ARC runner containers use dash as default shell and don't have gh CLI
installed. Use bash explicitly for the Claude installer and curl for
the GitHub API call.

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

Copy link
Copy Markdown
Member Author

/test-wif

@bryan-cox

Copy link
Copy Markdown
Member Author

/area ai

@openshift-ci openshift-ci Bot added area/ai Indicates the PR includes changes related to AI - Claude agents, Cursor rules, etc. and removed do-not-merge/needs-area labels May 27, 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: 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/claude-wif-test.yaml:
- Around line 22-23: Replace the mutable container image tag used in the WIF
test job with the provided immutable digest: update the container.image value
that currently references quay.io/rh_ee_brcox/hypershift:ai-helpers-arm64 to
quay.io/rh_ee_brcox/hypershift@sha256:3bb04d71e4ccec762db43d6ee8a0789f22638e53561a278fd5bccf1b60a88189
so the job uses a pinned, immutable image; ensure the change is applied to the
container.image field in the workflow definition where the image is declared.
🪄 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: 685cfa14-a195-442c-b210-19898ca5abbc

📥 Commits

Reviewing files that changed from the base of the PR and between 09c7701 and 4b8574b.

📒 Files selected for processing (1)
  • .github/workflows/claude-wif-test.yaml

Comment on lines +22 to +23
container:
image: quay.io/rh_ee_brcox/hypershift:ai-helpers-arm64

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.

⚠️ Potential issue | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="rh_ee_brcox/hypershift"
tag="ai-helpers-arm64"

curl -fsSL "https://quay.io/api/v1/repository/${repo}/tag/?onlyActiveTags=true&specificTag=${tag}" \
  | jq -r '.tags[] | select(.name=="'"$tag"'") | .manifest_digest'

Repository: openshift/hypershift

Length of output: 136


🏁 Script executed:

curl -fsSL "https://quay.io/api/v1/repository/rh_ee_brcox/hypershift/tag/?onlyActiveTags=true&specificTag=ai-helpers-arm64" \
| jq -r '.tags[] | select(.name=="ai-helpers-arm64") | .manifest_digest'

Repository: openshift/hypershift

Length of output: 136


🏁 Script executed:

curl -fsSL "https://quay.io/api/v1/repository/rh_ee_brcox/hypershift/tag/?onlyActiveTags=true&specificTag=ai-helpers-arm64" \
| jq -r '.tags[] | select(.name=="ai-helpers-arm64") | .manifest_digest'

Repository: openshift/hypershift

Length of output: 136


🏁 Script executed:

repo="rh_ee_brcox/hypershift"
tag="ai-helpers-arm64"

curl -fsSL "https://quay.io/api/v1/repository/${repo}/tag/?onlyActiveTags=true&specificTag=${tag}" \
  | jq -r '.tags[] | select(.name=="'"$tag"'") | .manifest_digest'

Repository: openshift/hypershift

Length of output: 136


🏁 Script executed:

repo="rh_ee_brcox/hypershift"
tag="ai-helpers-arm64"

curl -fsSL "https://quay.io/api/v1/repository/${repo}/tag/?onlyActiveTags=true&specificTag=${tag}" \
  | jq -r '.tags[] | select(.name=="'"$tag"'") | .manifest_digest'

Repository: openshift/hypershift

Length of output: 136


🏁 Script executed:

repo="rh_ee_brcox/hypershift"
tag="ai-helpers-arm64"

curl -fsSL "https://quay.io/api/v1/repository/${repo}/tag/?onlyActiveTags=true&specificTag=${tag}" \
  | jq -r '.tags[] | select(.name=="'"$tag"'") | .manifest_digest'

Repository: openshift/hypershift

Length of output: 136


🏁 Script executed:

repo="rh_ee_brcox/hypershift"
tag="ai-helpers-arm64"

curl -fsSL "https://quay.io/api/v1/repository/${repo}/tag/?onlyActiveTags=true&specificTag=${tag}" \
  | jq -r '.tags[] | select(.name=="'"$tag"'") | .manifest_digest'

Repository: openshift/hypershift

Length of output: 136


🏁 Script executed:

repo="rh_ee_brcox/hypershift"
tag="ai-helpers-arm64"

curl -fsSL "https://quay.io/api/v1/repository/${repo}/tag/?onlyActiveTags=true&specificTag=${tag}" \
  | jq -r '.tags[] | select(.name=="'"$tag"'") | .manifest_digest'

Repository: openshift/hypershift

Length of output: 136


🏁 Script executed:

repo="rh_ee_brcox/hypershift"
tag="ai-helpers-arm64"

curl -fsSL "https://quay.io/api/v1/repository/${repo}/tag/?onlyActiveTags=true&specificTag=${tag}" \
  | jq -r '.tags[] | select(.name=="'"$tag"'") | .manifest_digest'

Repository: openshift/hypershift

Length of output: 136


🏁 Script executed:

repo="rh_ee_brcox/hypershift"
tag="ai-helpers-arm64"

curl -fsSL "https://quay.io/api/v1/repository/${repo}/tag/?onlyActiveTags=true&specificTag=${tag}" \
  | jq -r '.tags[] | select(.name=="'"$tag"'") | .manifest_digest'

Repository: openshift/hypershift

Length of output: 136


🏁 Script executed:

repo="rh_ee_brcox/hypershift"
tag="ai-helpers-arm64"

curl -fsSL "https://quay.io/api/v1/repository/${repo}/tag/?onlyActiveTags=true&specificTag=${tag}" \
  | jq -r '.tags[] | select(.name=="'"$tag"'") | .manifest_digest'

Repository: openshift/hypershift

Length of output: 136


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="rh_ee_brcox/hypershift"
tag="ai-helpers-arm64"

curl -fsSL "https://quay.io/api/v1/repository/${repo}/tag/?onlyActiveTags=true&specificTag=${tag}" \
  | jq -r '.tags[] | select(.name=="'"$tag"'") | .manifest_digest'

Repository: openshift/hypershift

Length of output: 136


🏁 Script executed:

repo="rh_ee_brcox/hypershift"
tag="ai-helpers-arm64"

curl -fsSL "https://quay.io/api/v1/repository/${repo}/tag/?onlyActiveTags=true&specificTag=${tag}" \
  | jq -r '.tags[] | select(.name=="'"$tag"'") | .manifest_digest'

Repository: openshift/hypershift

Length of output: 136


Pin the WIF test job container image to an immutable digest

.github/workflows/claude-wif-test.yaml line 23 uses a mutable tag (quay.io/rh_ee_brcox/hypershift:ai-helpers-arm64), which can silently drift. Pin it to quay.io/rh_ee_brcox/hypershift@sha256:3bb04d71e4ccec762db43d6ee8a0789f22638e53561a278fd5bccf1b60a88189.

Proposed change
     container:
-      image: quay.io/rh_ee_brcox/hypershift:ai-helpers-arm64
+      image: quay.io/rh_ee_brcox/hypershift@sha256:3bb04d71e4ccec762db43d6ee8a0789f22638e53561a278fd5bccf1b60a88189 # ai-helpers-arm64
📝 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
container:
image: quay.io/rh_ee_brcox/hypershift:ai-helpers-arm64
container:
image: quay.io/rh_ee_brcox/hypershift@sha256:3bb04d71e4ccec762db43d6ee8a0789f22638e53561a278fd5bccf1b60a88189 # ai-helpers-arm64
🤖 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/claude-wif-test.yaml around lines 22 - 23, Replace the
mutable container image tag used in the WIF test job with the provided immutable
digest: update the container.image value that currently references
quay.io/rh_ee_brcox/hypershift:ai-helpers-arm64 to
quay.io/rh_ee_brcox/hypershift@sha256:3bb04d71e4ccec762db43d6ee8a0789f22638e53561a278fd5bccf1b60a88189
so the job uses a pinned, immutable image; ensure the change is applied to the
container.image field in the workflow definition where the image is declared.

@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.

♻️ Duplicate comments (1)
.github/workflows/claude-wif-test.yaml (1)

23-24: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Pin the workflow container image to an immutable digest.

Line 24 still uses a mutable image tag, which can drift silently between runs.

Proposed change
     container:
-      image: quay.io/rh_ee_brcox/hypershift:ai-helpers-arm64
+      image: quay.io/rh_ee_brcox/hypershift@sha256:<resolved-digest> # ai-helpers-arm64
#!/bin/bash
set -euo pipefail
curl -fsSL "https://quay.io/api/v1/repository/rh_ee_brcox/hypershift/tag/?onlyActiveTags=true&specificTag=ai-helpers-arm64" \
  | jq -r '.tags[] | select(.name=="ai-helpers-arm64") | .manifest_digest'
🤖 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/claude-wif-test.yaml around lines 23 - 24, Replace the
mutable image tag used in the workflow (container.image currently set to
"quay.io/rh_ee_brcox/hypershift:ai-helpers-arm64") with an immutable
digest-pinned reference
(quay.io/rh_ee_brcox/hypershift@sha256:<MANIFEST_DIGEST>); obtain the correct
<MANIFEST_DIGEST> by running the provided curl+jq command against the Quay API
and then update the container.image value to use the `@sha256` digest form so the
workflow uses an immutable image.
🤖 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.

Duplicate comments:
In @.github/workflows/claude-wif-test.yaml:
- Around line 23-24: Replace the mutable image tag used in the workflow
(container.image currently set to
"quay.io/rh_ee_brcox/hypershift:ai-helpers-arm64") with an immutable
digest-pinned reference
(quay.io/rh_ee_brcox/hypershift@sha256:<MANIFEST_DIGEST>); obtain the correct
<MANIFEST_DIGEST> by running the provided curl+jq command against the Quay API
and then update the container.image value to use the `@sha256` digest form so the
workflow uses an immutable image.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Enterprise

Run ID: 13193736-aecb-43b6-84b4-58a940abc691

📥 Commits

Reviewing files that changed from the base of the PR and between 4b8574b and 8ba9ef3.

📒 Files selected for processing (1)
  • .github/workflows/claude-wif-test.yaml

@openshift-ci

openshift-ci Bot commented May 27, 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.

@cblecker

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 27, 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 bypass

@openshift-ci-robot openshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label May 27, 2026
@openshift-ci-robot

Copy link
Copy Markdown

@bryan-cox: The verified label has been added.

Details

In response to this:

/verified bypass

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-merge-bot
openshift-merge-bot Bot merged commit 9142d96 into openshift:main May 27, 2026
18 checks passed
@bryan-cox

Copy link
Copy Markdown
Member Author

/test-wif

2 similar comments
@bryan-cox

Copy link
Copy Markdown
Member Author

/test-wif

@bryan-cox

Copy link
Copy Markdown
Member Author

/test-wif

@bryan-cox

Copy link
Copy Markdown
Member Author

/test-wif

1 similar comment
@bryan-cox

Copy link
Copy Markdown
Member Author

/test-wif

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. 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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants