feat(hypershift/gcp): add e2e-v2 GKE workflow and presubmit job#77007
feat(hypershift/gcp): add e2e-v2 GKE workflow and presubmit job#77007openshift-merge-bot[bot] merged 2 commits intoopenshift:mainfrom
Conversation
|
/pj-rehearse pull-ci-openshift-hypershift-main-e2e-v2-gke |
46fc27f to
3456bb6
Compare
|
/pj-rehearse pull-ci-openshift-hypershift-main-e2e-v2-gke |
|
/pj-rehearse pull-ci-openshift-hypershift-main-e2e-v2-gke |
|
/retest-required |
|
/pj-rehearse pull-ci-openshift-hypershift-main-e2e-v2-gke |
|
@cristianoveiga: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
b8004ec to
0387ab2
Compare
|
/pj-rehearse pull-ci-openshift-hypershift-main-e2e-v2-gke |
|
@cristianoveiga: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
0387ab2 to
639f29b
Compare
639f29b to
c9dfeec
Compare
CNTRLPLANE-2904: Add a v2 e2e CI workflow for HyperShift GCP on GKE. - hypershift-gcp-create chain: creates a GCP HostedCluster using the hypershift CLI and waits for version rollout - hypershift-gcp-destroy chain: destroys the HostedCluster CR with grace period for ExternalDNS cleanup - hypershift-gcp-gke-e2e-v2 workflow: reuses v1 pre steps with new create/destroy chains and shared hypershift-e2e-v2 test chain - e2e-v2-gke presubmit: optional job triggered on GCP file changes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
c9dfeec to
6ad023d
Compare
|
/pj-rehearse pull-ci-openshift-hypershift-main-e2e-v2-gke |
|
@cristianoveiga: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
/pj-rehearse pull-ci-openshift-hypershift-main-e2e-v2-gke |
|
@cristianoveiga: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
/cc @devguyio |
cblecker
left a comment
There was a problem hiding this comment.
A few nits on documentation accuracy, a missing file guard in the destroy chain, and some shellcheck findings. Nothing blocking — nice work on the v2 workflow structure.
| commands: |- | ||
| set -exuo pipefail | ||
|
|
||
| CLUSTER_NAME="$(cat ${SHARED_DIR}/cluster-name)" |
There was a problem hiding this comment.
nit: If hypershift create cluster gcp fails before writing ${SHARED_DIR}/cluster-name, this cat will error under set -euo pipefail and the destroy step aborts without attempting cleanup.
Since the step has best_effort: true, it won't fail the job, but it will produce a noisy error. The existing hypershift-gcp-gke-deprovision-commands.sh demonstrates a guard pattern:
if [[ ! -f "${SHARED_DIR}/cluster-name" ]]; then
echo "WARNING: cluster-name not found — create step may not have completed. Skipping destroy."
exit 0
fiAlso, shellcheck flags ${SHARED_DIR}/cluster-name as unquoted here (SC2086) — should be "${SHARED_DIR}/cluster-name".
| 2. hypershift-gcp-gke-provision: Create GCP projects, VPC, and GKE cluster | ||
| 3. hypershift-gcp-gke-prerequisites: Install CRDs and cert-manager on GKE | ||
| 4. hypershift-install: Install the HyperShift operator | ||
| 5. hypershift-gcp-control-plane-setup: Configure WIF and webhook TLS |
There was a problem hiding this comment.
nit: The hypershift-gcp-control-plane-setup step configures Workload Identity for PSC operator and ExternalDNS — there's no webhook TLS configuration in that step.
Suggestion:
5. hypershift-gcp-control-plane-setup: Configure GCP Workload Identity for PSC and ExternalDNS
There was a problem hiding this comment.
Good catch - this was outdated, indeed. Fixed.
| documentation: "Number of nodes for the hosted cluster NodePool." | ||
| - name: HYPERSHIFT_GCP_BOOT_IMAGE | ||
| default: "" | ||
| documentation: "GCP boot image for hosted cluster nodes (RHCOS image path). If empty, uses the default from the release image." |
There was a problem hiding this comment.
nit: The doc says "If empty, uses the default from the release image" but the code on line 49 falls back to a hardcoded RHCOS image path (projects/rhcos-cloud/global/images/rhcos-9-6-20250925-0-gcp-x86-64), not a dynamic default from the release image.
Suggestion to match reality:
documentation: "GCP boot image for hosted cluster nodes (RHCOS image path). If empty, falls back to a pinned default (see TODO GCP-440)."| ' | ||
|
|
||
| if [[ $? -ne 0 ]]; then | ||
| cat << EOF > ${ARTIFACT_DIR}/junit_hosted_cluster.xml |
There was a problem hiding this comment.
nit (shellcheck SC2086): ${ARTIFACT_DIR} is unquoted in the heredoc redirect here and on line 119. Same for hostedcluster/${HC_NAME} on lines 110-111.
Low risk in CI (these paths won't contain spaces), but quoting would be more correct:
cat << EOF > "${ARTIFACT_DIR}/junit_hosted_cluster.xml"|
|
||
| Reads infrastructure configuration from SHARED_DIR files created by | ||
| hypershift-gcp-gke-provision, hypershift-gcp-hosted-cluster-setup, | ||
| and hypershift-gcp-control-plane-setup. |
There was a problem hiding this comment.
nit: hypershift-gcp-control-plane-setup doesn't write any SHARED_DIR files consumed by this chain — it only annotates ServiceAccounts and restarts deployments. All the files read here (wif-*, *-sa, hc-vpc-name, hc-subnet-name, etc.) come from hypershift-gcp-hosted-cluster-setup, while gcp-region and hosted-cluster-project-id come from hypershift-gcp-gke-provision.
Suggestion:
Reads infrastructure configuration from SHARED_DIR files created by
hypershift-gcp-gke-provision and hypershift-gcp-hosted-cluster-setup.
- Add guard for missing cluster-name file in destroy chain - Fix quoting for SHARED_DIR and ARTIFACT_DIR paths (SC2086) - Fix control-plane-setup description (WIF for PSC/ExternalDNS, not webhook TLS) - Fix HYPERSHIFT_GCP_BOOT_IMAGE docs to reference pinned default and TODO GCP-440 - Remove incorrect hypershift-gcp-control-plane-setup SHARED_DIR attribution Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
/pj-rehearse pull-ci-openshift-hypershift-main-e2e-v2-gke |
|
@cristianoveiga: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
[REHEARSALNOTIFIER]
Interacting with pj-rehearseComment: Once you are satisfied with the results of the rehearsals, comment: |
|
/pj-rehearse ack |
|
@cristianoveiga: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
/lgtm |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: cblecker, cristianoveiga The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
|
@cristianoveiga: all tests passed! Full PR test history. Your PR dashboard. DetailsInstructions 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. |
…shift#77007) * feat(hypershift/gcp): add e2e-v2 GKE workflow and presubmit job CNTRLPLANE-2904: Add a v2 e2e CI workflow for HyperShift GCP on GKE. - hypershift-gcp-create chain: creates a GCP HostedCluster using the hypershift CLI and waits for version rollout - hypershift-gcp-destroy chain: destroys the HostedCluster CR with grace period for ExternalDNS cleanup - hypershift-gcp-gke-e2e-v2 workflow: reuses v1 pre steps with new create/destroy chains and shared hypershift-e2e-v2 test chain - e2e-v2-gke presubmit: optional job triggered on GCP file changes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(hypershift/gcp): address review feedback on e2e-v2 GKE workflow - Add guard for missing cluster-name file in destroy chain - Fix quoting for SHARED_DIR and ARTIFACT_DIR paths (SC2086) - Fix control-plane-setup description (WIF for PSC/ExternalDNS, not webhook TLS) - Fix HYPERSHIFT_GCP_BOOT_IMAGE docs to reference pinned default and TODO GCP-440 - Remove incorrect hypershift-gcp-control-plane-setup SHARED_DIR attribution Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…shift#77007) * feat(hypershift/gcp): add e2e-v2 GKE workflow and presubmit job CNTRLPLANE-2904: Add a v2 e2e CI workflow for HyperShift GCP on GKE. - hypershift-gcp-create chain: creates a GCP HostedCluster using the hypershift CLI and waits for version rollout - hypershift-gcp-destroy chain: destroys the HostedCluster CR with grace period for ExternalDNS cleanup - hypershift-gcp-gke-e2e-v2 workflow: reuses v1 pre steps with new create/destroy chains and shared hypershift-e2e-v2 test chain - e2e-v2-gke presubmit: optional job triggered on GCP file changes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(hypershift/gcp): address review feedback on e2e-v2 GKE workflow - Add guard for missing cluster-name file in destroy chain - Fix quoting for SHARED_DIR and ARTIFACT_DIR paths (SC2086) - Fix control-plane-setup description (WIF for PSC/ExternalDNS, not webhook TLS) - Fix HYPERSHIFT_GCP_BOOT_IMAGE docs to reference pinned default and TODO GCP-440 - Remove incorrect hypershift-gcp-control-plane-setup SHARED_DIR attribution Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Summary
CNTRLPLANE-2904: Add a v2 e2e CI workflow for HyperShift GCP on GKE.
hypershift-gcp-createchain — creates a GCP HostedCluster using thehypershift create cluster gcpCLI and waits for version rollouthypershift-gcp-destroychain — destroys the HostedCluster CR with a grace period for ExternalDNS cleanuphypershift-gcp-gke-e2e-v2workflow — reuses all v1 pre steps (GKE provisioning, prerequisites, operator install, WIF/network setup) and adds the new create/destroy chains with the sharedhypershift-e2e-v2test chaine2e-v2-gkepresubmit — optional job triggered on GCP-related file changesAlso includes the DNS zone name fix and error surfacing from #76993.
v1 vs v2 differences
e2e-gke)e2e-v2-gke)hack/ci-test-e2e.sh(v1)bin/test-e2e-v2(Ginkgo v2)Dependencies
Test plan
make updatesucceeds/pj-rehearse pull-ci-openshift-hypershift-main-e2e-v2-gke🤖 Generated with Claude Code