Skip to content

CNTRLPLANE-3610: Decouple CAPI provider Go module dependencies - #8704

Open
csrwng wants to merge 1 commit into
openshift:mainfrom
csrwng:capi-decouple
Open

CNTRLPLANE-3610: Decouple CAPI provider Go module dependencies#8704
csrwng wants to merge 1 commit into
openshift:mainfrom
csrwng:capi-decouple

Conversation

@csrwng

@csrwng csrwng commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Summary

Decouples HyperShift's Go module dependency on CAPI infrastructure providers (AWS, Azure, GCP, IBM Cloud, KubeVirt, OpenStack, Agent) so that bumping K8s core dependencies no longer requires waiting for all upstream CAPI providers to release compatible versions first.

Instead of importing CAPI provider modules directly (which pulls in their full transitive dependency trees including specific K8s versions), this PR copies only the API types HyperShift needs into local pkg/capi/<provider>/ packages. Each provider gets its own Go module declaring the upstream module name, and the main go.mod uses replace directives to redirect imports to the local copies. This preserves upstream import paths throughout the codebase.

Key changes

  • AST-based copy tool (hack/copy-capi-types/main.go): strips unused functions, defaults, and validation while preserving types, constants, and deepcopy
  • Sync script (hack/capi-sync-provider.sh): re-syncs types from a specific upstream version on demand
  • Per-provider vendor modules (hack/capi-vendor/<provider>/): pin upstream versions independently, used only by the sync script
  • Go workspace (hack/workspace/go.work): enables controller-gen CRD and deepcopy generation across provider modules
  • Stamp-based Make targets: incremental sync via .synced sentinel files

Impact

  • Removes ~117K lines of vendored CAPI provider code (net -117K lines)
  • Eliminates the circular blocking between K8s bumps and CAPI provider bumps
  • CAPI provider types can be updated independently on their own schedule
  • CRD generation continues to work via the Go workspace

Supersedes #8697.

Jira: https://redhat.atlassian.net/browse/CNTRLPLANE-3610

Test plan

  • make verify passes
  • make test passes
  • make capi-sync-force round-trips cleanly (no diff)
  • CRD generation produces identical CRDs for all 7 providers
  • E2E tests pass

Summary by CodeRabbit

  • New Features

    • Expanded Cluster API provider surface: Agent provider types/templates; AWS v1beta2 APIs (clusters, machines, templates, networking, tags, defaults, validation); Azure v1beta1 APIs (clusters, managed control planes, machine pools, templates, networking, tags, defaults, validation).
  • Chores

    • Tooling and repo maintenance: provider sync workflow, stamp tracking and make targets; lint/format exclusions and dependency/module updates; new copy-and-sanitize tool, provider sync script, vendor module manifests, and tests.

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

openshift-ci-robot commented Jun 9, 2026

Copy link
Copy Markdown

@csrwng: This pull request references CNTRLPLANE-3610 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 story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Summary

Decouples HyperShift's Go module dependency on CAPI infrastructure providers (AWS, Azure, GCP, IBM Cloud, KubeVirt, OpenStack, Agent) so that bumping K8s core dependencies no longer requires waiting for all upstream CAPI providers to release compatible versions first.

Instead of importing CAPI provider modules directly (which pulls in their full transitive dependency trees including specific K8s versions), this PR copies only the API types HyperShift needs into local pkg/capi/<provider>/ packages. Each provider gets its own Go module declaring the upstream module name, and the main go.mod uses replace directives to redirect imports to the local copies. This preserves upstream import paths throughout the codebase.

Key changes

  • AST-based copy tool (hack/copy-capi-types/main.go): strips unused functions, defaults, and validation while preserving types, constants, and deepcopy
  • Sync script (hack/capi-sync-provider.sh): re-syncs types from a specific upstream version on demand
  • Per-provider vendor modules (hack/capi-vendor/<provider>/): pin upstream versions independently, used only by the sync script
  • Go workspace (hack/workspace/go.work): enables controller-gen CRD and deepcopy generation across provider modules
  • Stamp-based Make targets: incremental sync via .synced sentinel files

Impact

  • Removes ~117K lines of vendored CAPI provider code (net -117K lines)
  • Eliminates the circular blocking between K8s bumps and CAPI provider bumps
  • CAPI provider types can be updated independently on their own schedule
  • CRD generation continues to work via the Go workspace

Supersedes #8697.

Jira: https://redhat.atlassian.net/browse/CNTRLPLANE-3610

Test plan

  • make verify passes
  • make test passes
  • make capi-sync-force round-trips cleanly (no diff)
  • CRD generation produces identical CRDs for all 7 providers
  • E2E tests pass

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 added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jun 9, 2026
@openshift-ci

openshift-ci Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

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

Walkthrough

This PR adds a stamp-file based CAPI sync workflow and tooling: a Go copier (hack/copy-capi-types) with tests, a provider sync script (hack/capi-sync-provider.sh), per-provider vendored module manifests under hack/capi-vendor/, Makefile targets to run/verify capi-sync and to generate CRDs from workspace modules, go.mod replace mappings to local pkg/capi modules, .gitignore and golangci settings updates, and a large set of new/updated Cluster API provider API type files under pkg/capi/* (AWS, Azure, Agent, GCP, IBMCloud, KubeVirt, OpenStack) plus related go.mod files.

Sequence Diagram

sequenceDiagram
  participant DevMake as Makefile/update
  participant SyncScript as hack/capi-sync-provider.sh
  participant Copier as hack/copy-capi-types
  participant Vendor as hack/capi-vendor/*
  participant PkgCAPI as pkg/capi/*
  participant ControllerGen as controller-gen

  DevMake->>SyncScript: invoke capi-sync per provider
  SyncScript->>Vendor: download upstream module (go mod download)
  SyncScript->>Copier: run copier (--src upstream --dst pkg/capi/<provider>)
  Copier->>PkgCAPI: write copied/stripped Go files
  SyncScript->>ControllerGen: run controller-gen with workspace paths
  ControllerGen->>PkgCAPI: generate CRDs
  DevMake->>DevMake: touch ./pkg/capi/<provider>/.synced (stamp)
Loading

Suggested reviewers

  • sjenning
  • sdminonne
  • bryan-cox
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

@csrwng

csrwng commented Jun 9, 2026

Copy link
Copy Markdown
Contributor Author

/pipeline required

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling tests matching the pipeline_run_if_changed or not excluded by pipeline_skip_if_only_changed parameters:
/test e2e-aks
/test e2e-aws
/test e2e-aws-upgrade-hypershift-operator
/test e2e-azure-self-managed
/test e2e-azure-v2-self-managed
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws
/test e2e-v2-gke

@openshift-ci openshift-ci Bot added area/ci-tooling Indicates the PR includes changes for CI or tooling area/control-plane-operator Indicates the PR includes changes for the control plane operator - in an OCP release area/hypershift-operator Indicates the PR includes changes for the hypershift operator and API - outside an OCP release and removed do-not-merge/needs-area labels Jun 9, 2026
@openshift-ci

openshift-ci Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: csrwng

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 Jun 9, 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: 4

🤖 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 `@hack/capi-vendor/openstack/go.mod`:
- Around line 5-55: Add the OSV query result for the newly pinned direct
dependency sigs.k8s.io/cluster-api-provider-openstack v0.13.3 to the PR notes:
run an osv.dev query (or use `govulncheck`/OSV API) for module
"sigs.k8s.io/cluster-api-provider-openstack" at version "v0.13.3", capture the
JSON response (which returned an empty object {}), and paste that output into
the PR description or changelog entry so the absence of vulnerabilities is
documented alongside the go.mod change.

In `@hack/copy-capi-types/main.go`:
- Around line 167-227: The cascade loop correctly gathers all functions to
remove into funcRemoveSet but stripDecls is still called with the original
crossFileRemove slice, so newly discovered removals are never stripped; change
the final call to stripDecls to pass the fully-expanded removal set by
converting funcRemoveSet into a slice of *ast.FuncDecl (and/or build a new
removal slice variable) and use that in place of crossFileRemove when calling
stripDecls; keep existing crossNames usage for the reason field.

In `@Makefile`:
- Around line 560-565: The .synced target only depends on
hack/capi-vendor/%/go.mod and CONTROLLER_GEN, so update the rule for
$(DIR)/pkg/capi/%/.synced to also depend on the sync script and any copy/vendor
helper inputs that affect generated output (e.g.
$(DIR)/hack/capi-sync-provider.sh and
$(DIR)/hack/capi-vendor/%/vendor_imports.go and/or the copy tool binary variable
used during sync). In practice add those filenames/variables to the prerequisite
list for the $(DIR)/pkg/capi/%/.synced target so changes to
hack/capi-sync-provider.sh, vendor_imports.go, or the copy tool will invalidate
the .synced stamp and force re-running the cd/tidy/sync sequence.

In `@pkg/capi/azure/api/v1beta1/azureasomanagedmachinepooltemplate_types.go`:
- Around line 24-32: The Template field in
AzureASOManagedMachinePoolTemplateSpec is using the wrong resource type
(AzureASOManagedControlPlaneResource) causing machine-pool fields like
providerIDList to be omitted; update the Template field's type to
AzureASOManagedMachinePoolResource (i.e., change the struct field Template
AzureASOManagedControlPlaneResource to Template
AzureASOManagedMachinePoolResource) so the CRD uses the machine-pool schema, and
run codegen/CRD generation to regenerate manifests after the change.
🪄 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: 74050ac9-95dd-4433-a9ec-ccf6efc47fa4

📥 Commits

Reviewing files that changed from the base of the PR and between a6c3012 and b95c67c.

⛔ Files ignored due to path filters (128)
  • go.sum is excluded by !**/*.sum
  • hack/capi-vendor/agent/go.sum is excluded by !**/*.sum
  • hack/capi-vendor/aws/go.sum is excluded by !**/*.sum
  • hack/capi-vendor/azure/go.sum is excluded by !**/*.sum
  • hack/capi-vendor/gcp/go.sum is excluded by !**/*.sum
  • hack/capi-vendor/ibmcloud/go.sum is excluded by !**/*.sum
  • hack/capi-vendor/kubevirt/go.sum is excluded by !**/*.sum
  • hack/capi-vendor/openstack/go.sum is excluded by !**/*.sum
  • hack/workspace/go.work is excluded by !**/*.work
  • pkg/capi/agent/v1alpha1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/agent/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/aws/api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/aws/api/v1beta2/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/aws/exp/api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/aws/exp/api/v1beta2/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/azure/api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/gcp/api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/ibmcloud/api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/ibmcloud/api/v1beta2/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/kubevirt/api/v1alpha1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/openstack/api/v1alpha1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/openstack/api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/CHANGELOG.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/LICENSE.txt is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/assets.json is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/autorest.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/availabilitysets_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/build.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/capacityreservationgroups_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/capacityreservations_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/ci.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/client_factory.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/cloudserviceoperatingsystems_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/cloudserviceroleinstances_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/cloudserviceroles_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/cloudservices_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/cloudservicesupdatedomain_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/communitygalleries_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/communitygalleryimages_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/communitygalleryimageversions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/constants.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/dedicatedhostgroups_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/dedicatedhosts_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/diskaccesses_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/diskencryptionsets_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/diskrestorepoint_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/disks_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/galleries_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/galleryapplications_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/galleryapplicationversions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/galleryimages_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/galleryimageversions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/gallerysharingprofile_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/images_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/loganalytics_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/models.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/models_serde.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/operations_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/options.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/proximityplacementgroups_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/resourceskus_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/responses.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/restorepointcollections_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/restorepoints_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/sharedgalleries_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/sharedgalleryimages_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/sharedgalleryimageversions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/snapshots_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/sshpublickeys_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/time_rfc3339.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/usage_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachineextensionimages_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachineextensions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachineimages_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachineimagesedgezone_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachineruncommands_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachines_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinescalesetextensions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinescalesetrollingupgrades_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinescalesets_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinescalesetvmextensions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinescalesetvmruncommands_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinescalesetvms_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinesizes_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/.gitignore is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/.travis.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/CODE_OF_CONDUCT.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/CONTRIBUTING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/arrays.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/converter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/error.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/numerics.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/patterns.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/types.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/utils.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/validator.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/wercker.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/CHANGELOG.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/LICENSE.txt is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_AssociateAccessPolicy.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_AssociateEncryptionConfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_AssociateIdentityProviderConfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateAccessEntry.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateAddon.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateCapability.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateCluster.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateEksAnywhereSubscription.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateFargateProfile.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateNodegroup.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreatePodIdentityAssociation.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteAccessEntry.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteAddon.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteCapability.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteCluster.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteEksAnywhereSubscription.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteFargateProfile.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteNodegroup.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeletePodIdentityAssociation.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeregisterCluster.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DescribeAccessEntry.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DescribeAddon.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DescribeAddonConfiguration.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DescribeAddonVersions.go is excluded by !vendor/**, !**/vendor/**
📒 Files selected for processing (172)
  • .gitignore
  • .golangci.yml
  • Makefile
  • go.mod
  • hack/capi-sync-provider.sh
  • hack/capi-vendor/agent/go.mod
  • hack/capi-vendor/agent/vendor_imports.go
  • hack/capi-vendor/aws/go.mod
  • hack/capi-vendor/aws/vendor_imports.go
  • hack/capi-vendor/azure/go.mod
  • hack/capi-vendor/azure/vendor_imports.go
  • hack/capi-vendor/gcp/go.mod
  • hack/capi-vendor/gcp/vendor_imports.go
  • hack/capi-vendor/ibmcloud/go.mod
  • hack/capi-vendor/ibmcloud/vendor_imports.go
  • hack/capi-vendor/kubevirt/go.mod
  • hack/capi-vendor/kubevirt/vendor_imports.go
  • hack/capi-vendor/openstack/go.mod
  • hack/capi-vendor/openstack/vendor_imports.go
  • hack/copy-capi-types/main.go
  • pkg/capi/agent/go.mod
  • pkg/capi/agent/v1alpha1/agentcluster_types.go
  • pkg/capi/agent/v1alpha1/agentmachine_types.go
  • pkg/capi/agent/v1alpha1/agentmachinetemplate_types.go
  • pkg/capi/agent/v1alpha1/groupversion_info.go
  • pkg/capi/agent/v1alpha1/types.go
  • pkg/capi/agent/v1beta1/agentcluster_types.go
  • pkg/capi/agent/v1beta1/agentmachine_types.go
  • pkg/capi/agent/v1beta1/agentmachinetemplate_types.go
  • pkg/capi/agent/v1beta1/groupversion_info.go
  • pkg/capi/agent/v1beta1/types.go
  • pkg/capi/aws/api/v1beta1/awscluster_types.go
  • pkg/capi/aws/api/v1beta1/awsclustertemplate_types.go
  • pkg/capi/aws/api/v1beta1/awsidentity_types.go
  • pkg/capi/aws/api/v1beta1/awsmachine_types.go
  • pkg/capi/aws/api/v1beta1/awsmachinetemplate_types.go
  • pkg/capi/aws/api/v1beta1/bastion.go
  • pkg/capi/aws/api/v1beta1/conditions_consts.go
  • pkg/capi/aws/api/v1beta1/doc.go
  • pkg/capi/aws/api/v1beta1/groupversion_info.go
  • pkg/capi/aws/api/v1beta1/network_types.go
  • pkg/capi/aws/api/v1beta1/s3bucket.go
  • pkg/capi/aws/api/v1beta1/tags.go
  • pkg/capi/aws/api/v1beta1/types.go
  • pkg/capi/aws/api/v1beta2/awscluster_types.go
  • pkg/capi/aws/api/v1beta2/awsclustertemplate_types.go
  • pkg/capi/aws/api/v1beta2/awsidentity_types.go
  • pkg/capi/aws/api/v1beta2/awsmachine_types.go
  • pkg/capi/aws/api/v1beta2/awsmachinetemplate_types.go
  • pkg/capi/aws/api/v1beta2/bastion.go
  • pkg/capi/aws/api/v1beta2/conditions_consts.go
  • pkg/capi/aws/api/v1beta2/defaults.go
  • pkg/capi/aws/api/v1beta2/doc.go
  • pkg/capi/aws/api/v1beta2/groupversion_info.go
  • pkg/capi/aws/api/v1beta2/network_types.go
  • pkg/capi/aws/api/v1beta2/s3bucket.go
  • pkg/capi/aws/api/v1beta2/tags.go
  • pkg/capi/aws/api/v1beta2/types.go
  • pkg/capi/aws/api/v1beta2/webhooks.go
  • pkg/capi/aws/exp/api/v1beta1/awsmachinepool_types.go
  • pkg/capi/aws/exp/api/v1beta1/conditions_consts.go
  • pkg/capi/aws/exp/api/v1beta1/doc.go
  • pkg/capi/aws/exp/api/v1beta1/finalizers.go
  • pkg/capi/aws/exp/api/v1beta1/groupversion_info.go
  • pkg/capi/aws/exp/api/v1beta1/types.go
  • pkg/capi/aws/exp/api/v1beta2/awsmachinepool_types.go
  • pkg/capi/aws/exp/api/v1beta2/conditions_consts.go
  • pkg/capi/aws/exp/api/v1beta2/doc.go
  • pkg/capi/aws/exp/api/v1beta2/finalizers.go
  • pkg/capi/aws/exp/api/v1beta2/groupversion_info.go
  • pkg/capi/aws/exp/api/v1beta2/types.go
  • pkg/capi/aws/exp/api/v1beta2/validation.go
  • pkg/capi/aws/go.mod
  • pkg/capi/azure/api/v1beta1/azureasomanagedcluster_types.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedclustertemplate_types.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedcontrolplane_types.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedcontrolplanetemplate_types.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedmachinepool_types.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedmachinepooltemplate_types.go
  • pkg/capi/azure/api/v1beta1/azurecluster_default.go
  • pkg/capi/azure/api/v1beta1/azurecluster_types.go
  • pkg/capi/azure/api/v1beta1/azurecluster_validation.go
  • pkg/capi/azure/api/v1beta1/azureclusteridentity_types.go
  • pkg/capi/azure/api/v1beta1/azureclustertemplate_default.go
  • pkg/capi/azure/api/v1beta1/azureclustertemplate_types.go
  • pkg/capi/azure/api/v1beta1/azureclustertemplate_validation.go
  • pkg/capi/azure/api/v1beta1/azureimage_validation.go
  • pkg/capi/azure/api/v1beta1/azuremachine_default.go
  • pkg/capi/azure/api/v1beta1/azuremachine_types.go
  • pkg/capi/azure/api/v1beta1/azuremachine_validation.go
  • pkg/capi/azure/api/v1beta1/azuremachinetemplate_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcluster_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedclustertemplate_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcontrolplane_default.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcontrolplane_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcontrolplanetemplate_default.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcontrolplanetemplate_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedmachinepool_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedmachinepooltemplate_types.go
  • pkg/capi/azure/api/v1beta1/consts.go
  • pkg/capi/azure/api/v1beta1/doc.go
  • pkg/capi/azure/api/v1beta1/groupversion_info.go
  • pkg/capi/azure/api/v1beta1/tags.go
  • pkg/capi/azure/api/v1beta1/types.go
  • pkg/capi/azure/api/v1beta1/types_class.go
  • pkg/capi/azure/api/v1beta1/types_template.go
  • pkg/capi/azure/go.mod
  • pkg/capi/gcp/api/v1beta1/doc.go
  • pkg/capi/gcp/api/v1beta1/endpoints.go
  • pkg/capi/gcp/api/v1beta1/gcpcluster_types.go
  • pkg/capi/gcp/api/v1beta1/gcpclustertemplate_types.go
  • pkg/capi/gcp/api/v1beta1/gcpmachine_types.go
  • pkg/capi/gcp/api/v1beta1/gcpmachinetemplate_types.go
  • pkg/capi/gcp/api/v1beta1/groupversion_info.go
  • pkg/capi/gcp/api/v1beta1/labels.go
  • pkg/capi/gcp/api/v1beta1/tags.go
  • pkg/capi/gcp/api/v1beta1/types.go
  • pkg/capi/gcp/go.mod
  • pkg/capi/ibmcloud/api/v1beta1/conditions_consts.go
  • pkg/capi/ibmcloud/api/v1beta1/doc.go
  • pkg/capi/ibmcloud/api/v1beta1/groupversion_info.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmpowervscluster_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmpowervsclustertemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmpowervsimage_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmpowervsmachine_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmpowervsmachinetemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmvpccluster_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmvpcmachine_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmvpcmachinetemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta1/types.go
  • pkg/capi/ibmcloud/api/v1beta2/conditions_consts.go
  • pkg/capi/ibmcloud/api/v1beta2/doc.go
  • pkg/capi/ibmcloud/api/v1beta2/groupversion_info.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmpowervscluster_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmpowervsclustertemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmpowervsimage_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmpowervsmachine_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmpowervsmachinetemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmvpccluster_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmvpcclustertemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmvpcmachine_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmvpcmachinetemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta2/types.go
  • pkg/capi/ibmcloud/go.mod
  • pkg/capi/kubevirt/api/v1alpha1/condition_consts.go
  • pkg/capi/kubevirt/api/v1alpha1/doc.go
  • pkg/capi/kubevirt/api/v1alpha1/groupversion_info.go
  • pkg/capi/kubevirt/api/v1alpha1/kubevirtcluster_types.go
  • pkg/capi/kubevirt/api/v1alpha1/kubevirtclustertemplate_types.go
  • pkg/capi/kubevirt/api/v1alpha1/kubevirtmachine_types.go
  • pkg/capi/kubevirt/api/v1alpha1/kubevirtmachinetemplate_types.go
  • pkg/capi/kubevirt/go.mod
  • pkg/capi/openstack/api/v1alpha1/conditions_consts.go
  • pkg/capi/openstack/api/v1alpha1/doc.go
  • pkg/capi/openstack/api/v1alpha1/groupversion_info.go
  • pkg/capi/openstack/api/v1alpha1/openstackfloatingippool_types.go
  • pkg/capi/openstack/api/v1alpha1/openstackserver_types.go
  • pkg/capi/openstack/api/v1alpha1/types.go
  • pkg/capi/openstack/api/v1beta1/conditions_consts.go
  • pkg/capi/openstack/api/v1beta1/doc.go
  • pkg/capi/openstack/api/v1beta1/groupversion_info.go
  • pkg/capi/openstack/api/v1beta1/identity_types.go
  • pkg/capi/openstack/api/v1beta1/openstackcluster_types.go
  • pkg/capi/openstack/api/v1beta1/openstackclustertemplate_types.go
  • pkg/capi/openstack/api/v1beta1/openstackmachine_types.go
  • pkg/capi/openstack/api/v1beta1/openstackmachinetemplate_types.go
  • pkg/capi/openstack/api/v1beta1/types.go
  • pkg/capi/openstack/go.mod
  • pkg/capi/openstack/pkg/utils/errors/errors.go
  • pkg/capi/openstack/pkg/utils/errors/terminal.go
  • pkg/capi/openstack/pkg/utils/optional/types.go
  • support/api/capi_types.go
💤 Files with no reviewable changes (2)
  • pkg/capi/aws/api/v1beta1/tags.go
  • pkg/capi/aws/api/v1beta1/network_types.go

Comment thread hack/capi-vendor/openstack/go.mod
Comment thread hack/copy-capi-types/main.go Outdated
Comment thread Makefile Outdated
@codecov

codecov Bot commented Jun 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 43.28%. Comparing base (8c71b38) to head (5fe0f12).
⚠️ Report is 704 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #8704   +/-   ##
=======================================
  Coverage   43.28%   43.28%           
=======================================
  Files         771      771           
  Lines       95503    95503           
=======================================
  Hits        41335    41335           
  Misses      51284    51284           
  Partials     2884     2884           
Files with missing lines Coverage Δ
cmd/install/assets/crds/assets.go 36.95% <ø> (ø)
Flag Coverage Δ
cmd-support 36.67% <ø> (ø)
cpo-hostedcontrolplane 45.31% <ø> (ø)
cpo-other 45.10% <ø> (ø)
hypershift-operator 53.59% <ø> (ø)
other 31.69% <ø> (ø)

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

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

@csrwng

csrwng commented Jun 9, 2026

Copy link
Copy Markdown
Contributor Author

/pipeline required

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling tests matching the pipeline_run_if_changed or not excluded by pipeline_skip_if_only_changed parameters:
/test e2e-aks
/test e2e-aws
/test e2e-aws-upgrade-hypershift-operator
/test e2e-azure-self-managed
/test e2e-azure-v2-self-managed
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws
/test e2e-v2-gke

@bryan-cox bryan-cox left a comment

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.

Overall this is excellent work — decoupling K8s bumps from CAPI provider releases is a significant operational improvement.

Two items I'd like addressed before merge (the GenDecl cascade gap in Pass 2 and broadening callsAny); the rest are suggestions and nits.

No tests for the 750-line AST tool is a concern I'd like discussed — even a small TestProcessFile with testdata/ fixtures would dramatically reduce regression risk.

Comment thread hack/copy-capi-types/main.go Outdated
Comment thread hack/copy-capi-types/main.go Outdated
Comment thread hack/copy-capi-types/main.go Outdated
Comment thread hack/copy-capi-types/main.go Outdated
Comment thread hack/capi-sync-provider.sh Outdated
Comment thread .golangci.yml Outdated
Comment thread Makefile
Comment thread hack/capi-sync-provider.sh
@hypershift-jira-solve-ci

Copy link
Copy Markdown
Contributor

AI Test Failure Analysis

Job: pull-ci-openshift-hypershift-main-e2e-aks | Build: 2064391508127125504 | Cost: $3.581170750000001 | Failed step: hypershift-azure-run-e2e

View full analysis report


Generated by hypershift-analyze-e2e-failure post-step using Claude claude-opus-4-6

@cwbotbot

cwbotbot commented Jun 9, 2026

Copy link
Copy Markdown

Test Results

e2e-aws

e2e-aks

@hypershift-jira-solve-ci

Copy link
Copy Markdown
Contributor

AI Test Failure Analysis

Job: pull-ci-openshift-hypershift-main-e2e-aws | Build: 2064391508416532480 | Cost: $2.7530234999999994 | Failed step: hypershift-aws-run-e2e-nested

View full analysis report


Generated by hypershift-analyze-e2e-failure post-step using Claude claude-opus-4-6

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

Caution

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

⚠️ Outside diff range comments (1)
hack/copy-capi-types/main.go (1)

494-513: ⚠️ Potential issue | 🟠 Major

Include receiver/parameter/result types in referencesAny for cascade stripping

referencesAny only inspects fn.Body, so cascade stripping can miss stripped symbols referenced solely in fn.Recv, parameter types, or result types, leaving invalid generated code.

Suggested fix
 func referencesAny(fn *ast.FuncDecl, symbols map[string]bool) bool {
-	if fn.Body == nil {
-		return false
-	}
-	found := false
-	ast.Inspect(fn.Body, func(n ast.Node) bool {
-		if found {
-			return false
-		}
-		ident, ok := n.(*ast.Ident)
-		if ok && symbols[ident.Name] {
-			found = true
-		}
-		return true
-	})
-	return found
+	check := func(n ast.Node) bool {
+		found := false
+		ast.Inspect(n, func(node ast.Node) bool {
+			if found {
+				return false
+			}
+			ident, ok := node.(*ast.Ident)
+			if ok && symbols[ident.Name] {
+				found = true
+			}
+			return true
+		})
+		return found
+	}
+
+	if fn.Recv != nil {
+		for _, f := range fn.Recv.List {
+			if check(f.Type) {
+				return true
+			}
+		}
+	}
+	if fn.Type.Params != nil {
+		for _, f := range fn.Type.Params.List {
+			if check(f.Type) {
+				return true
+			}
+		}
+	}
+	if fn.Type.Results != nil {
+		for _, f := range fn.Type.Results.List {
+			if check(f.Type) {
+				return true
+			}
+		}
+	}
+	return fn.Body != nil && check(fn.Body)
 }
🤖 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 `@hack/copy-capi-types/main.go` around lines 494 - 513, The function
referencesAny currently only inspects fn.Body and therefore misses identifiers
referenced in the method receiver, parameter types, and result types; update
referencesAny to also inspect fn.Recv, fn.Type.Params and fn.Type.Results (visit
their *ast.FieldList nodes) and search for *ast.Ident the same way you do for
the body so that any identifier used in receiver or signature types sets
found=true; reuse the same ast.Inspect logic (or factor out an inspectNode
helper) to walk those AST nodes (fn.Recv, fn.Type.Params, fn.Type.Results) in
addition to fn.Body to ensure cascade stripping catches symbols referenced in
signatures.
🤖 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.

Outside diff comments:
In `@hack/copy-capi-types/main.go`:
- Around line 494-513: The function referencesAny currently only inspects
fn.Body and therefore misses identifiers referenced in the method receiver,
parameter types, and result types; update referencesAny to also inspect fn.Recv,
fn.Type.Params and fn.Type.Results (visit their *ast.FieldList nodes) and search
for *ast.Ident the same way you do for the body so that any identifier used in
receiver or signature types sets found=true; reuse the same ast.Inspect logic
(or factor out an inspectNode helper) to walk those AST nodes (fn.Recv,
fn.Type.Params, fn.Type.Results) in addition to fn.Body to ensure cascade
stripping catches symbols referenced in signatures.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Enterprise

Run ID: 0db6d833-6d48-4995-9e2e-c3ea1e482c95

📥 Commits

Reviewing files that changed from the base of the PR and between 2638ef0 and 8e17af6.

📒 Files selected for processing (4)
  • .golangci.yml
  • Makefile
  • hack/capi-sync-provider.sh
  • hack/copy-capi-types/main.go
✅ Files skipped from review due to trivial changes (1)
  • .golangci.yml

@csrwng
csrwng force-pushed the capi-decouple branch 2 times, most recently from c7eb668 to af5fced Compare June 9, 2026 19:10

@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

🧹 Nitpick comments (2)
hack/copy-capi-types/main_test.go (1)

184-208: 💤 Low value

Test helper constructs a synthetic FuncDecl for interface methods, but this may not accurately test referencesAny.

For the "no body" test case (line 149-154), the code constructs a synthetic FuncDecl from interface method signatures. However, referencesAny returns false when fn.Body == nil (line 504), so the test correctly passes. The synthetic construction is unnecessarily complex.

Simplified approach

The test could be simplified to just parse a function declaration without a body (e.g., an external function declaration):

{
    name: "When a function has no body, it should return false",
    src: `package p
func External()`, // no body
    symbols: map[string]bool{"Bar": true},
    want:    false,
},
🤖 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 `@hack/copy-capi-types/main_test.go` around lines 184 - 208, The test helper
builds a synthetic *ast.FuncDecl from interface methods which is unnecessary
because referencesAny(fn) already returns false when fn.Body == nil; instead
simplify the test by creating/using a parsed FuncDecl with no body (i.e., a real
function declaration lacking a body) rather than constructing one from interface
types. Locate the test that creates fn from file.Decls and replace that path
with a simpler case that parses "func External()" (or equivalent) so the
resulting *ast.FuncDecl has nil Body and the test exercises referencesAny
directly.
hack/capi-sync-provider.sh (1)

25-27: 💤 Low value

run_go is defined but never called.

The run_go() helper function sets proper Go environment variables but is only used inside copy_types(). The mod_cache_dir() function at line 32 duplicates the environment setup inline instead of using run_go.

Suggested consistency improvement
 mod_cache_dir() {
     local module="$1"
-    (cd "$MOD_DIR" && GO111MODULE=on GOWORK=off GOFLAGS= go mod download -json "$module") | jq -r '.Dir'
+    (cd "$MOD_DIR" && GO111MODULE=on GOWORK=off GOFLAGS= run_go mod download -json "$module") | jq -r '.Dir'
 }

Note: This would require run_go to be available in the subshell context or the function body to be restructured.

🤖 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 `@hack/capi-sync-provider.sh` around lines 25 - 27, The helper run_go() is
defined but not used in mod_cache_dir(), which duplicates its Go env setup;
update mod_cache_dir() to call run_go instead of inlining
GO111MODULE/GOWORK/GOFLAGS so the environment is centralized (either call run_go
in the same shell or export the function into the subshell with export -f run_go
before using it), and remove the duplicated env variables in mod_cache_dir() so
copy_types(), mod_cache_dir(), and any other callers all use run_go()
consistently.
🤖 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 `@hack/copy-capi-types/main.go`:
- Around line 339-341: The parse error is currently swallowed by the `if err !=
nil { continue }` check; instead, log the failure so it’s visible for debugging.
Replace the silent `continue` in the parsing loop with a call to the project
logger (or fmt/stderr) that records the filename/identifier being parsed and the
`err` value (include any position info if available), then decide to continue or
abort as appropriate; look for the parsing call that produces `err` and update
that branch to emit a clear error message referencing the file being parsed and
`err`.

---

Nitpick comments:
In `@hack/capi-sync-provider.sh`:
- Around line 25-27: The helper run_go() is defined but not used in
mod_cache_dir(), which duplicates its Go env setup; update mod_cache_dir() to
call run_go instead of inlining GO111MODULE/GOWORK/GOFLAGS so the environment is
centralized (either call run_go in the same shell or export the function into
the subshell with export -f run_go before using it), and remove the duplicated
env variables in mod_cache_dir() so copy_types(), mod_cache_dir(), and any other
callers all use run_go() consistently.

In `@hack/copy-capi-types/main_test.go`:
- Around line 184-208: The test helper builds a synthetic *ast.FuncDecl from
interface methods which is unnecessary because referencesAny(fn) already returns
false when fn.Body == nil; instead simplify the test by creating/using a parsed
FuncDecl with no body (i.e., a real function declaration lacking a body) rather
than constructing one from interface types. Locate the test that creates fn from
file.Decls and replace that path with a simpler case that parses "func
External()" (or equivalent) so the resulting *ast.FuncDecl has nil Body and the
test exercises referencesAny directly.
🪄 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: 10ea9f40-42c0-417a-9c6c-f20e0789f642

📥 Commits

Reviewing files that changed from the base of the PR and between 8e17af6 and c7eb668.

📒 Files selected for processing (5)
  • .golangci.yml
  • Makefile
  • hack/capi-sync-provider.sh
  • hack/copy-capi-types/main.go
  • hack/copy-capi-types/main_test.go
✅ Files skipped from review due to trivial changes (1)
  • .golangci.yml

Comment thread hack/copy-capi-types/main.go Outdated

@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)
hack/copy-capi-types/main.go (1)

338-341: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Parse errors in cross-file cascade are silently ignored.

If re-parsing a file fails, the error is swallowed with continue. This could mask corruption introduced during Pass 1 stripping, making debugging difficult.

Suggested fix: log the parse failure
 		file, err := parser.ParseFile(fset, r.base, content, parser.ParseComments)
 		if err != nil {
+			log.Printf("warning: failed to re-parse %s in cross-file cascade: %v", r.base, err)
 			continue
 		}
🤖 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 `@hack/copy-capi-types/main.go` around lines 338 - 341, The loop silently
continues when parser.ParseFile(fset, r.base, content, parser.ParseComments)
returns an error, which hides parse failures; update the handler for
parser.ParseFile in main.go to log the failure with context (include r.base and
the parse error) instead of silently continuing—use the existing logger or
fmt/log to emit a clear message referencing parser.ParseFile, fset, r.base and
err, and consider failing fast (returning the error) if a parse error indicates
corruption from Pass 1 rather than merely continuing.
🧹 Nitpick comments (1)
hack/capi-sync-provider.sh (1)

105-123: 💤 Low value

upstream_module silently returns empty for unknown providers.

If upstream_module is called with an unrecognized provider (e.g., due to a typo or adding a new provider without updating this function), MODULE_PATH will be empty, causing controller-gen to fail with a confusing error. The main case statement already exits on unknown providers, so this is unlikely, but adding a fallback improves debuggability.

Suggested fix
 upstream_module() {
     case "$1" in
         agent)    echo "github.com/openshift/cluster-api-provider-agent/api" ;;
         aws)      echo "sigs.k8s.io/cluster-api-provider-aws/v2" ;;
         azure)    echo "sigs.k8s.io/cluster-api-provider-azure" ;;
         gcp)      echo "sigs.k8s.io/cluster-api-provider-gcp" ;;
         ibmcloud) echo "sigs.k8s.io/cluster-api-provider-ibmcloud" ;;
         kubevirt) echo "sigs.k8s.io/cluster-api-provider-kubevirt" ;;
         openstack) echo "sigs.k8s.io/cluster-api-provider-openstack" ;;
+        *)        echo "ERROR: upstream_module: unknown provider: $1" >&2; exit 1 ;;
     esac
 }
🤖 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 `@hack/capi-sync-provider.sh` around lines 105 - 123, upstream_module currently
returns empty for unknown providers, which leads to a confusing failure when
MODULE_PATH is blank; update the upstream_module function to include a default
(*) branch that prints a clear error to stderr (including the bad provider value
from "$1") and exits non‑zero, and additionally guard the MODULE_PATH usage
before invoking controller-gen (check that MODULE_PATH is non-empty and, if not,
print an explanatory error and exit) so the script fails fast with a helpful
message; refer to upstream_module and MODULE_PATH/controller-gen invocation for
where to make these changes.
🤖 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 `@hack/copy-capi-types/main.go`:
- Around line 338-341: The loop silently continues when parser.ParseFile(fset,
r.base, content, parser.ParseComments) returns an error, which hides parse
failures; update the handler for parser.ParseFile in main.go to log the failure
with context (include r.base and the parse error) instead of silently
continuing—use the existing logger or fmt/log to emit a clear message
referencing parser.ParseFile, fset, r.base and err, and consider failing fast
(returning the error) if a parse error indicates corruption from Pass 1 rather
than merely continuing.

---

Nitpick comments:
In `@hack/capi-sync-provider.sh`:
- Around line 105-123: upstream_module currently returns empty for unknown
providers, which leads to a confusing failure when MODULE_PATH is blank; update
the upstream_module function to include a default (*) branch that prints a clear
error to stderr (including the bad provider value from "$1") and exits non‑zero,
and additionally guard the MODULE_PATH usage before invoking controller-gen
(check that MODULE_PATH is non-empty and, if not, print an explanatory error and
exit) so the script fails fast with a helpful message; refer to upstream_module
and MODULE_PATH/controller-gen invocation for where to make these changes.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Enterprise

Run ID: 153b69f1-c044-4ef1-9906-54c0382495d3

📥 Commits

Reviewing files that changed from the base of the PR and between c7eb668 and af5fced.

⛔ Files ignored due to path filters (127)
  • go.sum is excluded by !**/*.sum
  • hack/capi-vendor/agent/go.sum is excluded by !**/*.sum
  • hack/capi-vendor/aws/go.sum is excluded by !**/*.sum
  • hack/capi-vendor/azure/go.sum is excluded by !**/*.sum
  • hack/capi-vendor/gcp/go.sum is excluded by !**/*.sum
  • hack/capi-vendor/ibmcloud/go.sum is excluded by !**/*.sum
  • hack/capi-vendor/kubevirt/go.sum is excluded by !**/*.sum
  • hack/capi-vendor/openstack/go.sum is excluded by !**/*.sum
  • hack/workspace/go.work is excluded by !**/*.work
  • pkg/capi/agent/v1alpha1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/agent/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/aws/api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/aws/api/v1beta2/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/aws/exp/api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/aws/exp/api/v1beta2/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/azure/api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/gcp/api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/ibmcloud/api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/ibmcloud/api/v1beta2/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/kubevirt/api/v1alpha1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/openstack/api/v1alpha1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • pkg/capi/openstack/api/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/CHANGELOG.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/LICENSE.txt is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/assets.json is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/autorest.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/availabilitysets_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/build.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/capacityreservationgroups_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/capacityreservations_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/ci.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/client_factory.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/cloudserviceoperatingsystems_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/cloudserviceroleinstances_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/cloudserviceroles_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/cloudservices_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/cloudservicesupdatedomain_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/communitygalleries_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/communitygalleryimages_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/communitygalleryimageversions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/constants.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/dedicatedhostgroups_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/dedicatedhosts_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/diskaccesses_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/diskencryptionsets_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/diskrestorepoint_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/disks_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/galleries_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/galleryapplications_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/galleryapplicationversions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/galleryimages_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/galleryimageversions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/gallerysharingprofile_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/images_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/loganalytics_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/models.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/models_serde.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/operations_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/options.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/proximityplacementgroups_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/resourceskus_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/responses.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/restorepointcollections_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/restorepoints_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/sharedgalleries_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/sharedgalleryimages_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/sharedgalleryimageversions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/snapshots_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/sshpublickeys_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/time_rfc3339.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/usage_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachineextensionimages_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachineextensions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachineimages_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachineimagesedgezone_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachineruncommands_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachines_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinescalesetextensions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinescalesetrollingupgrades_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinescalesets_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinescalesetvmextensions_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinescalesetvmruncommands_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinescalesetvms_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5/virtualmachinesizes_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/.gitignore is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/.travis.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/CODE_OF_CONDUCT.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/CONTRIBUTING.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/LICENSE is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/README.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/arrays.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/converter.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/error.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/numerics.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/patterns.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/types.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/utils.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/validator.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/asaskevich/govalidator/v11/wercker.yml is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/CHANGELOG.md is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/LICENSE.txt is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_client.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_AssociateAccessPolicy.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_AssociateEncryptionConfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_AssociateIdentityProviderConfig.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateAccessEntry.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateAddon.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateCapability.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateCluster.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateEksAnywhereSubscription.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateFargateProfile.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreateNodegroup.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_CreatePodIdentityAssociation.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteAccessEntry.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteAddon.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteCapability.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteCluster.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteEksAnywhereSubscription.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteFargateProfile.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeleteNodegroup.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeletePodIdentityAssociation.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DeregisterCluster.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DescribeAccessEntry.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DescribeAddon.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/aws/aws-sdk-go-v2/service/eks/api_op_DescribeAddonConfiguration.go is excluded by !vendor/**, !**/vendor/**
📒 Files selected for processing (173)
  • .gitignore
  • .golangci.yml
  • Makefile
  • go.mod
  • hack/capi-sync-provider.sh
  • hack/capi-vendor/agent/go.mod
  • hack/capi-vendor/agent/vendor_imports.go
  • hack/capi-vendor/aws/go.mod
  • hack/capi-vendor/aws/vendor_imports.go
  • hack/capi-vendor/azure/go.mod
  • hack/capi-vendor/azure/vendor_imports.go
  • hack/capi-vendor/gcp/go.mod
  • hack/capi-vendor/gcp/vendor_imports.go
  • hack/capi-vendor/ibmcloud/go.mod
  • hack/capi-vendor/ibmcloud/vendor_imports.go
  • hack/capi-vendor/kubevirt/go.mod
  • hack/capi-vendor/kubevirt/vendor_imports.go
  • hack/capi-vendor/openstack/go.mod
  • hack/capi-vendor/openstack/vendor_imports.go
  • hack/copy-capi-types/main.go
  • hack/copy-capi-types/main_test.go
  • pkg/capi/agent/go.mod
  • pkg/capi/agent/v1alpha1/agentcluster_types.go
  • pkg/capi/agent/v1alpha1/agentmachine_types.go
  • pkg/capi/agent/v1alpha1/agentmachinetemplate_types.go
  • pkg/capi/agent/v1alpha1/groupversion_info.go
  • pkg/capi/agent/v1alpha1/types.go
  • pkg/capi/agent/v1beta1/agentcluster_types.go
  • pkg/capi/agent/v1beta1/agentmachine_types.go
  • pkg/capi/agent/v1beta1/agentmachinetemplate_types.go
  • pkg/capi/agent/v1beta1/groupversion_info.go
  • pkg/capi/agent/v1beta1/types.go
  • pkg/capi/aws/api/v1beta1/awscluster_types.go
  • pkg/capi/aws/api/v1beta1/awsclustertemplate_types.go
  • pkg/capi/aws/api/v1beta1/awsidentity_types.go
  • pkg/capi/aws/api/v1beta1/awsmachine_types.go
  • pkg/capi/aws/api/v1beta1/awsmachinetemplate_types.go
  • pkg/capi/aws/api/v1beta1/bastion.go
  • pkg/capi/aws/api/v1beta1/conditions_consts.go
  • pkg/capi/aws/api/v1beta1/doc.go
  • pkg/capi/aws/api/v1beta1/groupversion_info.go
  • pkg/capi/aws/api/v1beta1/network_types.go
  • pkg/capi/aws/api/v1beta1/s3bucket.go
  • pkg/capi/aws/api/v1beta1/tags.go
  • pkg/capi/aws/api/v1beta1/types.go
  • pkg/capi/aws/api/v1beta2/awscluster_types.go
  • pkg/capi/aws/api/v1beta2/awsclustertemplate_types.go
  • pkg/capi/aws/api/v1beta2/awsidentity_types.go
  • pkg/capi/aws/api/v1beta2/awsmachine_types.go
  • pkg/capi/aws/api/v1beta2/awsmachinetemplate_types.go
  • pkg/capi/aws/api/v1beta2/bastion.go
  • pkg/capi/aws/api/v1beta2/conditions_consts.go
  • pkg/capi/aws/api/v1beta2/defaults.go
  • pkg/capi/aws/api/v1beta2/doc.go
  • pkg/capi/aws/api/v1beta2/groupversion_info.go
  • pkg/capi/aws/api/v1beta2/network_types.go
  • pkg/capi/aws/api/v1beta2/s3bucket.go
  • pkg/capi/aws/api/v1beta2/tags.go
  • pkg/capi/aws/api/v1beta2/types.go
  • pkg/capi/aws/api/v1beta2/webhooks.go
  • pkg/capi/aws/exp/api/v1beta1/awsmachinepool_types.go
  • pkg/capi/aws/exp/api/v1beta1/conditions_consts.go
  • pkg/capi/aws/exp/api/v1beta1/doc.go
  • pkg/capi/aws/exp/api/v1beta1/finalizers.go
  • pkg/capi/aws/exp/api/v1beta1/groupversion_info.go
  • pkg/capi/aws/exp/api/v1beta1/types.go
  • pkg/capi/aws/exp/api/v1beta2/awsmachinepool_types.go
  • pkg/capi/aws/exp/api/v1beta2/conditions_consts.go
  • pkg/capi/aws/exp/api/v1beta2/doc.go
  • pkg/capi/aws/exp/api/v1beta2/finalizers.go
  • pkg/capi/aws/exp/api/v1beta2/groupversion_info.go
  • pkg/capi/aws/exp/api/v1beta2/types.go
  • pkg/capi/aws/exp/api/v1beta2/validation.go
  • pkg/capi/aws/go.mod
  • pkg/capi/azure/api/v1beta1/azureasomanagedcluster_types.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedclustertemplate_types.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedcontrolplane_types.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedcontrolplanetemplate_types.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedmachinepool_types.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedmachinepooltemplate_types.go
  • pkg/capi/azure/api/v1beta1/azurecluster_default.go
  • pkg/capi/azure/api/v1beta1/azurecluster_types.go
  • pkg/capi/azure/api/v1beta1/azurecluster_validation.go
  • pkg/capi/azure/api/v1beta1/azureclusteridentity_types.go
  • pkg/capi/azure/api/v1beta1/azureclustertemplate_default.go
  • pkg/capi/azure/api/v1beta1/azureclustertemplate_types.go
  • pkg/capi/azure/api/v1beta1/azureclustertemplate_validation.go
  • pkg/capi/azure/api/v1beta1/azureimage_validation.go
  • pkg/capi/azure/api/v1beta1/azuremachine_default.go
  • pkg/capi/azure/api/v1beta1/azuremachine_types.go
  • pkg/capi/azure/api/v1beta1/azuremachine_validation.go
  • pkg/capi/azure/api/v1beta1/azuremachinetemplate_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcluster_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedclustertemplate_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcontrolplane_default.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcontrolplane_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcontrolplanetemplate_default.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcontrolplanetemplate_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedmachinepool_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedmachinepooltemplate_types.go
  • pkg/capi/azure/api/v1beta1/consts.go
  • pkg/capi/azure/api/v1beta1/doc.go
  • pkg/capi/azure/api/v1beta1/groupversion_info.go
  • pkg/capi/azure/api/v1beta1/tags.go
  • pkg/capi/azure/api/v1beta1/types.go
  • pkg/capi/azure/api/v1beta1/types_class.go
  • pkg/capi/azure/api/v1beta1/types_template.go
  • pkg/capi/azure/go.mod
  • pkg/capi/gcp/api/v1beta1/doc.go
  • pkg/capi/gcp/api/v1beta1/endpoints.go
  • pkg/capi/gcp/api/v1beta1/gcpcluster_types.go
  • pkg/capi/gcp/api/v1beta1/gcpclustertemplate_types.go
  • pkg/capi/gcp/api/v1beta1/gcpmachine_types.go
  • pkg/capi/gcp/api/v1beta1/gcpmachinetemplate_types.go
  • pkg/capi/gcp/api/v1beta1/groupversion_info.go
  • pkg/capi/gcp/api/v1beta1/labels.go
  • pkg/capi/gcp/api/v1beta1/tags.go
  • pkg/capi/gcp/api/v1beta1/types.go
  • pkg/capi/gcp/go.mod
  • pkg/capi/ibmcloud/api/v1beta1/conditions_consts.go
  • pkg/capi/ibmcloud/api/v1beta1/doc.go
  • pkg/capi/ibmcloud/api/v1beta1/groupversion_info.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmpowervscluster_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmpowervsclustertemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmpowervsimage_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmpowervsmachine_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmpowervsmachinetemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmvpccluster_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmvpcmachine_types.go
  • pkg/capi/ibmcloud/api/v1beta1/ibmvpcmachinetemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta1/types.go
  • pkg/capi/ibmcloud/api/v1beta2/conditions_consts.go
  • pkg/capi/ibmcloud/api/v1beta2/doc.go
  • pkg/capi/ibmcloud/api/v1beta2/groupversion_info.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmpowervscluster_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmpowervsclustertemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmpowervsimage_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmpowervsmachine_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmpowervsmachinetemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmvpccluster_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmvpcclustertemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmvpcmachine_types.go
  • pkg/capi/ibmcloud/api/v1beta2/ibmvpcmachinetemplate_types.go
  • pkg/capi/ibmcloud/api/v1beta2/types.go
  • pkg/capi/ibmcloud/go.mod
  • pkg/capi/kubevirt/api/v1alpha1/condition_consts.go
  • pkg/capi/kubevirt/api/v1alpha1/doc.go
  • pkg/capi/kubevirt/api/v1alpha1/groupversion_info.go
  • pkg/capi/kubevirt/api/v1alpha1/kubevirtcluster_types.go
  • pkg/capi/kubevirt/api/v1alpha1/kubevirtclustertemplate_types.go
  • pkg/capi/kubevirt/api/v1alpha1/kubevirtmachine_types.go
  • pkg/capi/kubevirt/api/v1alpha1/kubevirtmachinetemplate_types.go
  • pkg/capi/kubevirt/go.mod
  • pkg/capi/openstack/api/v1alpha1/conditions_consts.go
  • pkg/capi/openstack/api/v1alpha1/doc.go
  • pkg/capi/openstack/api/v1alpha1/groupversion_info.go
  • pkg/capi/openstack/api/v1alpha1/openstackfloatingippool_types.go
  • pkg/capi/openstack/api/v1alpha1/openstackserver_types.go
  • pkg/capi/openstack/api/v1alpha1/types.go
  • pkg/capi/openstack/api/v1beta1/conditions_consts.go
  • pkg/capi/openstack/api/v1beta1/doc.go
  • pkg/capi/openstack/api/v1beta1/groupversion_info.go
  • pkg/capi/openstack/api/v1beta1/identity_types.go
  • pkg/capi/openstack/api/v1beta1/openstackcluster_types.go
  • pkg/capi/openstack/api/v1beta1/openstackclustertemplate_types.go
  • pkg/capi/openstack/api/v1beta1/openstackmachine_types.go
  • pkg/capi/openstack/api/v1beta1/openstackmachinetemplate_types.go
  • pkg/capi/openstack/api/v1beta1/types.go
  • pkg/capi/openstack/go.mod
  • pkg/capi/openstack/pkg/utils/errors/errors.go
  • pkg/capi/openstack/pkg/utils/errors/terminal.go
  • pkg/capi/openstack/pkg/utils/optional/types.go
  • support/api/capi_types.go
💤 Files with no reviewable changes (2)
  • pkg/capi/aws/api/v1beta1/network_types.go
  • pkg/capi/aws/api/v1beta1/tags.go
✅ Files skipped from review due to trivial changes (10)
  • .gitignore
  • hack/capi-vendor/agent/go.mod
  • hack/capi-vendor/azure/vendor_imports.go
  • hack/capi-vendor/aws/vendor_imports.go
  • pkg/capi/azure/api/v1beta1/groupversion_info.go
  • .golangci.yml
  • pkg/capi/agent/go.mod
  • hack/capi-vendor/openstack/vendor_imports.go
  • pkg/capi/azure/api/v1beta1/consts.go
  • pkg/capi/aws/go.mod
🚧 Files skipped from review as they are similar to previous changes (59)
  • hack/capi-vendor/gcp/go.mod
  • hack/capi-vendor/kubevirt/vendor_imports.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedclustertemplate_types.go
  • pkg/capi/azure/api/v1beta1/doc.go
  • pkg/capi/agent/v1beta1/groupversion_info.go
  • hack/capi-vendor/ibmcloud/go.mod
  • hack/capi-vendor/aws/go.mod
  • pkg/capi/aws/api/v1beta1/s3bucket.go
  • pkg/capi/agent/v1beta1/agentmachine_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcontrolplanetemplate_default.go
  • hack/capi-vendor/gcp/vendor_imports.go
  • hack/capi-vendor/agent/vendor_imports.go
  • hack/capi-vendor/openstack/go.mod
  • pkg/capi/azure/api/v1beta1/azureclustertemplate_default.go
  • pkg/capi/azure/api/v1beta1/azuremanagedclustertemplate_types.go
  • hack/capi-vendor/ibmcloud/vendor_imports.go
  • hack/capi-vendor/azure/go.mod
  • pkg/capi/aws/api/v1beta2/groupversion_info.go
  • pkg/capi/aws/api/v1beta2/s3bucket.go
  • pkg/capi/aws/api/v1beta2/awsmachinetemplate_types.go
  • hack/capi-vendor/kubevirt/go.mod
  • pkg/capi/azure/api/v1beta1/azureasomanagedmachinepooltemplate_types.go
  • pkg/capi/azure/api/v1beta1/azureclustertemplate_validation.go
  • pkg/capi/azure/api/v1beta1/azuremanagedmachinepooltemplate_types.go
  • pkg/capi/azure/api/v1beta1/azureclustertemplate_types.go
  • pkg/capi/aws/api/v1beta2/doc.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcontrolplanetemplate_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcluster_types.go
  • pkg/capi/agent/v1beta1/agentcluster_types.go
  • pkg/capi/agent/v1beta1/agentmachinetemplate_types.go
  • pkg/capi/azure/api/v1beta1/types_class.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedcontrolplane_types.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedmachinepool_types.go
  • pkg/capi/azure/api/v1beta1/types_template.go
  • pkg/capi/azure/api/v1beta1/tags.go
  • pkg/capi/aws/api/v1beta2/defaults.go
  • pkg/capi/aws/api/v1beta2/awscluster_types.go
  • pkg/capi/azure/api/v1beta1/azuremachine_default.go
  • pkg/capi/azure/api/v1beta1/types.go
  • pkg/capi/aws/api/v1beta2/awsmachine_types.go
  • pkg/capi/azure/api/v1beta1/azureclusteridentity_types.go
  • pkg/capi/azure/api/v1beta1/azureasomanagedcluster_types.go
  • pkg/capi/azure/api/v1beta1/azuremachine_validation.go
  • pkg/capi/aws/api/v1beta2/webhooks.go
  • pkg/capi/aws/api/v1beta2/awsidentity_types.go
  • pkg/capi/aws/api/v1beta2/tags.go
  • pkg/capi/aws/api/v1beta2/awsclustertemplate_types.go
  • pkg/capi/aws/api/v1beta2/types.go
  • pkg/capi/aws/api/v1beta2/bastion.go
  • go.mod
  • pkg/capi/azure/api/v1beta1/azuremanagedcontrolplane_default.go
  • pkg/capi/aws/api/v1beta2/conditions_consts.go
  • pkg/capi/azure/api/v1beta1/azuremachinetemplate_types.go
  • hack/copy-capi-types/main_test.go
  • pkg/capi/azure/api/v1beta1/azuremachine_types.go
  • pkg/capi/azure/api/v1beta1/azuremanagedcontrolplane_types.go
  • pkg/capi/aws/api/v1beta2/network_types.go
  • pkg/capi/azure/api/v1beta1/azurecluster_default.go
  • pkg/capi/azure/api/v1beta1/azurecluster_validation.go

@openshift-ci
openshift-ci Bot requested a review from jparrill June 10, 2026 20:12
Comment thread hack/capi-sync-provider.sh Outdated

@cblecker cblecker left a comment

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.

Overall this is a solid approach — AST-based stripping is the right design, the test coverage is good (76%, 66 subtests), and the CI safety net via verify-capi-sync is well thought out.

A few things I noticed that weren't covered in the earlier review rounds — mostly around error handling in the shell scripts and Makefile, plus some dead code in the import cleanup logic. Nothing blocking, but worth cleaning up.

Comment thread hack/copy-capi-types/main.go Outdated
Comment thread Makefile Outdated
Comment thread hack/capi-sync-provider.sh
Comment thread hack/copy-capi-types/main.go
Comment thread Makefile
Comment thread DEVELOPMENT.md Outdated
Comment thread hack/capi-sync-provider.sh Outdated
Comment thread hack/copy-capi-types/main.go
@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 16, 2026

@cblecker cblecker left a comment

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.

Thanks for addressing all the feedback from the last round. The approach is clean — stamp-based incremental sync, clear verify target with actionable errors, and good test coverage on the copy tool.

Left a few more comments on the cascade logic and a note about the verify-parallel interaction. The main one worth looking at is referencesAny only inspecting the function body and not the signature.

Comment thread hack/copy-capi-types/main.go Outdated
Comment thread hack/copy-capi-types/main.go
Comment thread Makefile Outdated
Comment thread hack/copy-capi-types/main.go
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 17, 2026
@csrwng

csrwng commented Jun 17, 2026

Copy link
Copy Markdown
Contributor Author

/pipeline required

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling tests matching the pipeline_run_if_changed or not excluded by pipeline_skip_if_only_changed parameters:
/test e2e-aks
/test e2e-aws
/test e2e-aws-upgrade-hypershift-operator
/test e2e-azure-v2-self-managed
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws
/test e2e-v2-gke

@hypershift-jira-solve-ci

Copy link
Copy Markdown
Contributor

AI Test Failure Analysis

Job: pull-ci-openshift-hypershift-main-e2e-aws | Build: 2067351947991584768 | Cost: $3.6754418499999986 | Failed step: hypershift-aws-run-e2e-nested

View full analysis report


Generated by hypershift-analyze-e2e-failure post-step using Claude claude-opus-4-6

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

Dropped some comments. Thanks!

Comment thread hack/copy-capi-types/main.go Outdated
Comment thread hack/copy-capi-types/main.go Outdated
Comment thread hack/copy-capi-types/main.go Outdated
Comment thread hack/copy-capi-types/main.go
Comment thread hack/copy-capi-types/main_test.go
Comment thread Makefile
Comment thread go.mod
Comment thread hack/copy-capi-types/main.go
Comment thread hack/copy-capi-types/main.go
Comment thread pkg/capi/ibmcloud/api/v1beta2/types.go
Comment thread pkg/capi/openstack/pkg/utils/errors/errors.go
Comment thread hack/capi-sync-provider.sh
Comment thread hack/copy-capi-types/main.go Outdated
Comment thread pkg/capi/aws/api/v1beta2/webhooks.go Outdated
@csrwng
csrwng force-pushed the capi-decouple branch 3 times, most recently from 56b78d7 to 6ea4c13 Compare July 1, 2026 15:39
@hypershift-jira-solve-ci

hypershift-jira-solve-ci Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

The git update-index --refresh and git diff --exit-code HEAD step detected stale files. The "needs update" messages come from git update-index --refresh, meaning these CRD files were modified by the generation step but the PR didn't commit those changes. I now have all the evidence needed.

Test Failure Analysis Complete

Job Information

Test Failure Analysis

Error

cmd/install/assets/crds/cluster-api-provider-openstack/infrastructure.cluster.x-k8s.io_openstackclusteridentities.yaml: needs update
cmd/install/assets/crds/cluster-api-provider-openstack/infrastructure.cluster.x-k8s.io_openstackclusters.yaml: needs update
cmd/install/assets/crds/cluster-api-provider-openstack/infrastructure.cluster.x-k8s.io_openstackclustertemplates.yaml: needs update
cmd/install/assets/crds/cluster-api-provider-openstack/infrastructure.cluster.x-k8s.io_openstackfloatingippools.yaml: needs update
cmd/install/assets/crds/cluster-api-provider-openstack/infrastructure.cluster.x-k8s.io_openstackmachines.yaml: needs update
cmd/install/assets/crds/cluster-api-provider-openstack/infrastructure.cluster.x-k8s.io_openstackmachinetemplates.yaml: needs update
cmd/install/assets/crds/cluster-api-provider-openstack/infrastructure.cluster.x-k8s.io_openstackservers.yaml: needs update
##[error]Process completed with exit code 1.

Summary

The verify job's "check for uncommitted changes" step (git update-index --refresh && git diff --exit-code HEAD) detected that 7 OpenStack CAPI provider CRD files under cmd/install/assets/crds/cluster-api-provider-openstack/ are stale. The PR modifies the vendored cluster-api-provider-openstack Go types (removing fields like ClusterInitialization, Conditions, the Type field from OpenStackIdentityReference, and several kubebuilder validation markers) but does not include the regenerated CRD YAML files that controller-gen produces from those types. When the CI runs make verifymake generate updatecluster-api-provider-openstack target, it regenerates the CRDs via the new capi-workspace-run.sh mechanism and they differ from what is committed.

Root Cause

The PR ("Decouple CAPI provider Go module dependencies") performs a large-scale restructuring of how CAPI provider dependencies are managed. It introduces:

  1. New per-provider Go modules under pkg/capi/<provider>/ with their own go.mod files.
  2. A new hack/capi-workspace-run.sh script that creates a temporary Go workspace to run controller-gen CRD generation across these separate modules.
  3. Modified Makefile targets — the cluster-api-provider-openstack CRD target now uses $(CAPI_CRD_GEN) (which wraps capi-workspace-run.sh) instead of directly pointing at ./vendor/sigs.k8s.io/cluster-api-provider-openstack/api/....

The PR also modifies the vendored OpenStack CAPI provider types in vendor/sigs.k8s.io/cluster-api-provider-openstack/api/. Specific changes include:

  • Removed OpenStackIdentityReference.Type field and its Enum / Default kubebuilder markers
  • Removed ClusterInitialization struct and OpenStackClusterStatus.Initialization field
  • Removed OpenStackClusterStatus.Conditions field and its GetConditions()/SetConditions() methods
  • Removed MinLength kubebuilder validators from OpenStackIdentityReference.Name and CloudName
  • Removed Deprecated doc markers from FailureReason / FailureMessage
  • Removed conversion.go and optional/conversion.go files
  • Removed openstackclusteridentity_types.go from v1alpha1

All of these type changes alter the kubebuilder markers that controller-gen reads to produce CRD YAML. However, the PR author did not commit the regenerated CRD outputs in cmd/install/assets/crds/cluster-api-provider-openstack/. When CI runs make verify, it regenerates these CRDs and detects the 7 files differ from HEAD, causing the git diff --exit-code check to fail.

Recommendations
  1. Run make generate update locally and commit the regenerated CRD files. Specifically, this should update all 7 files under cmd/install/assets/crds/cluster-api-provider-openstack/:

    • infrastructure.cluster.x-k8s.io_openstackclusteridentities.yaml
    • infrastructure.cluster.x-k8s.io_openstackclusters.yaml
    • infrastructure.cluster.x-k8s.io_openstackclustertemplates.yaml
    • infrastructure.cluster.x-k8s.io_openstackfloatingippools.yaml
    • infrastructure.cluster.x-k8s.io_openstackmachines.yaml
    • infrastructure.cluster.x-k8s.io_openstackmachinetemplates.yaml
    • infrastructure.cluster.x-k8s.io_openstackservers.yaml
  2. Verify no other provider CRDs are also stale. The PR modifies vendored types for multiple providers (AWS, Azure, GCP, IBM Cloud, KubeVirt, Agent). Only OpenStack CRDs were flagged because the verify step runs git update-index --refresh which shows all modified files, and only OpenStack showed drift. However, it is worth confirming the other providers' CRDs are already correct.

  3. Add the regenerated CRDs to the PR, push the commit, and re-run CI.

Evidence
Evidence Detail
Failing step git update-index --refresh + git diff --exit-code HEAD (post-generation check for uncommitted changes)
7 stale CRD files All under cmd/install/assets/crds/cluster-api-provider-openstack/
Vendored type changes vendor/sigs.k8s.io/cluster-api-provider-openstack/api/v1beta1/ — removed Type field, ClusterInitialization struct, Conditions field, MinLength validators, deprecated markers
CRD generation mechanism changed New CAPI_CRD_GEN = hack/capi-workspace-run.sh controller-gen replaces direct vendor path invocation
PR file count 454 files changed — includes pkg/capi/openstack/ new module, modified hack/capi-vendor/openstack/go.mod, but zero files under cmd/install/assets/crds/
CI verify flow make verifymake generate updatecluster-api-provider-openstack target → controller-gen regenerates CRDs → git diff detects uncommitted changes → exit 1

Copy CAPI infrastructure provider API types from vendored sources into
pkg/capi/<provider>/<version>/ using an AST-based tool that strips
external dependencies not needed by HyperShift. This decouples the
Go module dependency on CAPI infrastructure providers so they no longer
require simultaneous bumps during CAPI version upgrades.

All 7 providers (AWS, Azure, GCP, IBM Cloud, KubeVirt, OpenStack, Agent)
are now local. Makefile CRD generation targets, codespell, and
golangci-lint are updated to use the local paths. Generated CRDs are
identical to main.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@openshift-ci openshift-ci Bot added area/cli Indicates the PR includes changes for CLI area/platform/openstack PR/issue for OpenStack (OpenStackPlatform) platform labels Jul 1, 2026
@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jul 30, 2026
@openshift-ci

openshift-ci Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

PR needs rebase.

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.

@openshift-ci

openshift-ci Bot commented Aug 30, 2026

Copy link
Copy Markdown
Contributor

Stale PRs are closed after 21d of inactivity.

If this PR is still relevant, comment to refresh it or remove the stale label.
Mark the PR as fresh by commenting /remove-lifecycle stale.

If this PR is safe to close now please do so with /close.

/lifecycle stale

@openshift-ci openshift-ci Bot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Aug 30, 2026
@openshift-ci

openshift-ci Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

@csrwng: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/e2e-kubevirt-aws-ovn-reduced a5df4ce link true /test e2e-kubevirt-aws-ovn-reduced
ci/prow/e2e-aws a5df4ce link true /test e2e-aws
ci/prow/rosa-e2e-images 5fe0f12 link true /test rosa-e2e-images

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.

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/ci-tooling Indicates the PR includes changes for CI or tooling area/cli Indicates the PR includes changes for CLI area/control-plane-operator Indicates the PR includes changes for the control plane operator - in an OCP release area/hypershift-operator Indicates the PR includes changes for the hypershift operator and API - outside an OCP release area/platform/openstack PR/issue for OpenStack (OpenStackPlatform) platform jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants