Skip to content

CNTRLPLANE-3160: Drop AutoNodeKarpenter feature gate and promote EC2NodeClass to v1#8166

Merged
enxebre merged 5 commits into
openshift:mainfrom
enxebre:drop-karpenter-feature-gate
Apr 30, 2026
Merged

CNTRLPLANE-3160: Drop AutoNodeKarpenter feature gate and promote EC2NodeClass to v1#8166
enxebre merged 5 commits into
openshift:mainfrom
enxebre:drop-karpenter-feature-gate

Conversation

@enxebre

@enxebre enxebre commented Apr 6, 2026

Copy link
Copy Markdown
Member

What this PR does / why we need it:

Promotes the AutoNode/Karpenter feature to stable/GA by:

  1. Dropping the AutoNodeKarpenter feature gate — the autoNode field on HostedCluster and HostedControlPlane is no longer gated behind TechPreviewNoUpgrade
  2. Promoting OpenshiftEC2NodeClass API from v1beta1 to v1 — signals API stability
  3. Adding envtest validation test suites for both HostedCluster autoNode CEL rules and OpenshiftEC2NodeClass v1 CEL rules
  4. Removing the TECH_PREVIEW_NO_UPGRADE skip from the karpenter e2e test

No runtime/controller code changes — all controllers use IsKarpenterEnabled() which checks spec values, not the feature gate.

Which issue(s) this PR fixes:

Fixes https://issues.redhat.com/browse/CNTRLPLANE-3160

Special notes for your reviewer:

  • The karpenter envtest tests are self-contained under karpenter-operator/controllers/karpenter/assets/ with their own zz_generated.crd-manifests/ and tests/ directories. The only integration point is adding a second path to LoadTestSuiteSpecs in test/envtest/suite_test.go.
  • The hypershift install path (cmd/install/install.go) is unaffected — the karpenter CRD is not placed in the hypershift-operator install assets.
  • The v1beta1 → v1 migration has no struct changes, only the API version label changes. The karpenter-operator controls the CRD lifecycle so there is no multi-version concern.

Checklist:

  • Subject and description added to both, commit and PR.
  • Relevant issues have been referenced.
  • This change includes docs.
  • This change includes unit tests.

🤖 Generated with Claude Code via /jira:solve [CNTRLPLANE-3160](https://redhat.atlassian.net/browse/CNTRLPLANE-3160)

Summary by CodeRabbit

  • New Features

    • Karpenter API graduates to stable v1.
    • Added comprehensive validation tests for OpenShift EC2 node classes.
    • New documentation describing control plane agent and component reconciliation frameworks.
  • Chores

    • Switched references to stable Karpenter v1 across components and tests.
    • Normalized AutoNode configuration shape across APIs and tooling.
    • CI change-detection updated to include additional Karpenter test assets.
    • Makefile CRD output processing improved.
  • Bug Fixes

    • Cleared/updated AutoNodeKarpenter entries in feature-gate configurations.

@openshift-ci-robot

Copy link
Copy Markdown

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 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 Apr 6, 2026
@openshift-ci

openshift-ci Bot commented Apr 6, 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

@openshift-ci-robot

openshift-ci-robot commented Apr 6, 2026

Copy link
Copy Markdown

@enxebre: This pull request references CNTRLPLANE-3160 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 epic to target the "4.22.0" version, but no target version was set.

Details

In response to this:

What this PR does / why we need it:

Promotes the AutoNode/Karpenter feature to stable/GA by:

  1. Dropping the AutoNodeKarpenter feature gate — the autoNode field on HostedCluster and HostedControlPlane is no longer gated behind TechPreviewNoUpgrade
  2. Promoting OpenshiftEC2NodeClass API from v1beta1 to v1 — signals API stability
  3. Adding envtest validation test suites for both HostedCluster autoNode CEL rules and OpenshiftEC2NodeClass v1 CEL rules
  4. Removing the TECH_PREVIEW_NO_UPGRADE skip from the karpenter e2e test

No runtime/controller code changes — all controllers use IsKarpenterEnabled() which checks spec values, not the feature gate.

Which issue(s) this PR fixes:

Fixes https://issues.redhat.com/browse/CNTRLPLANE-3160

Special notes for your reviewer:

  • The karpenter envtest tests are self-contained under karpenter-operator/controllers/karpenter/assets/ with their own zz_generated.crd-manifests/ and tests/ directories. The only integration point is adding a second path to LoadTestSuiteSpecs in test/envtest/suite_test.go.
  • The hypershift install path (cmd/install/install.go) is unaffected — the karpenter CRD is not placed in the hypershift-operator install assets.
  • The v1beta1 → v1 migration has no struct changes, only the API version label changes. The karpenter-operator controls the CRD lifecycle so there is no multi-version concern.

Checklist:

  • Subject and description added to both, commit and PR.
  • Relevant issues have been referenced.
  • This change includes docs.
  • This change includes unit tests.

🤖 Generated with Claude Code via /jira:solve [CNTRLPLANE-3160](https://redhat.atlassian.net/browse/CNTRLPLANE-3160)

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-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Apr 6, 2026
@coderabbitai

coderabbitai Bot commented Apr 6, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

The PR graduates AutoNode/Karpenter by removing feature-gate markers and migrating Karpenter API types from v1beta1 to v1. Several API fields (AutoNode, KarpenterConfig, KarpenterAWSConfig) change from pointer types to value types with ,omitzero tags, and callsites/tests are updated accordingly. A new OpenshiftEC2NodeClass validation testsuite is added and envtest loading is extended to include Karpenter assets. CI change-detection regexes are expanded to include the new karpenter tests assets path. IsKarpenterEnabled now accepts a value AutoNode.

Sequence Diagram(s)

sequenceDiagram
  participant Dev as Developer
  participant GH as GitHub Actions
  participant Loader as Test Suite Loader
  participant CI as Test Runner
  participant CP as Control Plane Controllers
  participant Karp as Karpenter API/CRDs

  Dev->>GH: push changes (API types, tests, workflows, assets)
  GH->>GH: detect changes (includes karpenter assets path)
  GH->>CI: trigger envtest job
  CI->>Loader: load HyperShift CRDs + Karpenter assets
  CI->>CP: run controller/unit/integration tests against updated v1 API
  CP->>Karp: reconcile OpenshiftEC2NodeClass (v1 types)
  Karp-->>CP: status/conditions updated
  CI-->>Dev: test results/artifacts
Loading
🚥 Pre-merge checks | ✅ 11 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 13.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (11 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title accurately and specifically summarizes the main changes: dropping the AutoNodeKarpenter feature gate and promoting EC2NodeClass to v1, which aligns with the core objectives and changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed The PR does not add or modify any Ginkgo-style test names containing dynamic information. All test modifications use standard Go testing conventions with static, deterministic test function names, and the new YAML test suite file contains only static, descriptive test case names.
Test Structure And Quality ✅ Passed Tests follow repository patterns with table-driven structure, proper setup/cleanup via fake clients, descriptive test case names, and mostly good assertion messages. PR changes are minimal and appropriate, only updating struct initialization and imports to match API changes.
Microshift Test Compatibility ✅ Passed This PR does not introduce any new Ginkgo e2e tests. Modifications to test/e2e/karpenter_test.go update existing TestKarpenter function using standard Go testing rather than Ginkgo syntax. Changes to test/envtest/suite_test.go modify test suite loading logic without adding new test cases. The newly added validation test suite is a YAML manifest file, not a Go test file.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The pull request does not add new Ginkgo e2e tests; it only updates existing test fixtures to reflect API changes and removes CI gating logic.
Topology-Aware Scheduling Compatibility ✅ Passed PR contains only API-focused changes (dropping AutoNodeKarpenter gate, promoting OpenshiftEC2NodeClass, updating imports, modifying tests) with no scheduling constraints assuming standard HA topology.
Ote Binary Stdout Contract ✅ Passed Modified test files properly configure logging to prevent OTE Binary Stdout Contract violations by redirecting output away from stdout.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed PR modifies existing e2e tests but adds no new Ginkgo test functions; custom check applies only to new tests.

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

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

Review rate limit: 9/10 reviews remaining, refill in 6 minutes.

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

@openshift-ci

openshift-ci Bot commented Apr 6, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: enxebre

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 approved Indicates a PR has been approved by an approver from all required OWNERS files. area/api Indicates the PR includes changes for the API 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/documentation Indicates the PR includes changes for documentation area/hypershift-operator Indicates the PR includes changes for the hypershift operator and API - outside an OCP release area/karpenter-operator Indicates the PR includes changes related to the Karpenter operator area/platform/aws PR/issue for AWS (AWSPlatform) platform area/testing Indicates the PR includes changes for e2e testing and removed do-not-merge/needs-area labels Apr 6, 2026
@enxebre

enxebre commented Apr 6, 2026

Copy link
Copy Markdown
Member Author

/label tide/merge-method-squash

@openshift-ci openshift-ci Bot added the tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges. label Apr 6, 2026
@enxebre enxebre force-pushed the drop-karpenter-feature-gate branch from 9b013f2 to ca02ee4 Compare April 6, 2026 15:37
@codecov

codecov Bot commented Apr 6, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 0% with 5 lines in your changes missing coverage. Please review.
✅ Project coverage is 36.42%. Comparing base (5eaee74) to head (366f255).
⚠️ Report is 11 commits behind head on main.

Files with missing lines Patch % Lines
cmd/cluster/aws/create.go 0.00% 3 Missing ⚠️
support/karpenter/karpenter.go 0.00% 2 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##             main    #8166   +/-   ##
=======================================
  Coverage   36.42%   36.42%           
=======================================
  Files         765      765           
  Lines       93302    93300    -2     
=======================================
  Hits        33981    33981           
+ Misses      56606    56604    -2     
  Partials     2715     2715           
Files with missing lines Coverage Δ
cmd/cluster/core/dump.go 4.27% <ø> (ø)
...lers/hostedcontrolplane/v2/karpenter/deployment.go 100.00% <ø> (ø)
...trollers/hostedcluster/hostedcluster_controller.go 43.23% <ø> (ø)
...ator/controllers/karpenter/karpenter_controller.go 26.21% <ø> (ø)
.../karpenterignition/karpenterignition_controller.go 62.66% <ø> (ø)
.../controllers/nodeclass/ec2_nodeclass_controller.go 53.64% <ø> (ø)
...r-operator/controllers/nodeclass/karpenter_util.go 82.35% <ø> (ø)
support/api/scheme.go 89.65% <ø> (ø)
support/karpenter/karpenter.go 68.00% <0.00%> (+5.03%) ⬆️
cmd/cluster/aws/create.go 41.59% <0.00%> (ø)
Flag Coverage Δ
cmd-support 30.37% <0.00%> (+<0.01%) ⬆️
cpo-hostedcontrolplane 37.08% <ø> (ø)
cpo-other 35.69% <ø> (ø)
hypershift-operator 47.88% <ø> (ø)
other 27.76% <ø> (ø)

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.

@enxebre

enxebre commented Apr 6, 2026

Copy link
Copy Markdown
Member Author

/test e2e-aws

@cwbotbot

cwbotbot commented Apr 6, 2026

Copy link
Copy Markdown

Test Results

e2e-aws

@enxebre

enxebre commented Apr 6, 2026

Copy link
Copy Markdown
Member Author

/test e2e-aws

1 similar comment
@enxebre

enxebre commented Apr 7, 2026

Copy link
Copy Markdown
Member Author

/test e2e-aws

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

Copy link
Copy Markdown
Contributor

Tests from second stage were triggered manually. Pipeline can be controlled only manually, until HEAD changes. Use command to trigger second stage.

Remove the AutoNodeKarpenter feature gate to promote the autoNode field
to stable/GA. The autoNode field on HostedCluster and HostedControlPlane
spec/status is no longer gated behind TechPreviewNoUpgrade.

Updates CLI and test code to use value types instead of pointers for the
now-ungated AutoNode, KarpenterConfig, and KarpenterAWSConfig structs.
Removes the TECH_PREVIEW_NO_UPGRADE skip from the karpenter e2e test,
and uses the platform discriminator field for AWS checks.

Ref: CNTRLPLANE-3160
@enxebre enxebre force-pushed the drop-karpenter-feature-gate branch from 440d027 to 0784b7c Compare April 30, 2026 07:58
@openshift-ci openshift-ci Bot removed the lgtm Indicates that a PR is ready to be merged. label Apr 30, 2026
enxebre added 4 commits April 30, 2026 10:18
Replace api/karpenter/v1beta1/ with api/karpenter/v1/ to signal API
stability as part of the AutoNode GA promotion. The types, structs, and
validation markers are unchanged - only the API version is bumped.

All source files importing api/karpenter/v1beta1 are updated to
api/karpenter/v1. The CRD will now have v1 as the served and storage
version. Since the karpenter-operator controls the CRD lifecycle (not
the hypershift install), there is no multi-version serving concern.

Also fixes a godoc comment on the Conditions field and removes the
now-stale v1beta1 lint suppression from .golangci.yml.

Ref: CNTRLPLANE-3160
Add two new envtest test suites:

- stable.hostedclusters.karpenter.testsuite.yaml: 6 tests covering
  HostedCluster autoNode CEL validation (provisioner union, platform
  union, enum validation, roleARN validation)

- stable.openshiftec2nodeclasses.testsuite.yaml: 18 tests covering
  OpenshiftEC2NodeClass v1 CEL validation (subnet/SG selectors, tags,
  block device mappings, version, capacity reservations, metadata)

The karpenter EC2NodeClass tests are self-contained under
karpenter-operator/controllers/karpenter/assets/ with their own
zz_generated.crd-manifests/ directory. The Makefile karpenter-api
target copies the CRD there, and suite_test.go loads both asset dirs.

Ref: CNTRLPLANE-3160
Regenerate all auto-generated artifacts after dropping the
AutoNodeKarpenter feature gate and promoting OpenshiftEC2NodeClass
to v1:

- CRD manifests: autoNode fields merged into AAA_ungated.yaml,
  AutoNodeKarpenter.yaml deleted
- Featuregate payload manifests updated
- Client code regenerated for karpenter v1
- Vendor directory synced
- API docs regenerated

Ref: CNTRLPLANE-3160
Add karpenter-operator/controllers/karpenter/assets/tests/ to the
path filters so that changes to the karpenter envtest suites trigger
the envtest workflows.

Ref: CNTRLPLANE-3160
@enxebre enxebre force-pushed the drop-karpenter-feature-gate branch from 0784b7c to 366f255 Compare April 30, 2026 08:19
@JoelSpeed

Copy link
Copy Markdown
Contributor

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Apr 30, 2026
@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-4-22
/test e2e-aws-4-22
/test e2e-aks
/test e2e-aws
/test e2e-aws-upgrade-hypershift-operator
/test e2e-azure-self-managed
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws

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

🧹 Nitpick comments (1)
karpenter-operator/controllers/karpenter/assets/tests/openshiftec2nodeclasses.karpenter.hypershift.openshift.io/stable.openshiftec2nodeclasses.testsuite.yaml (1)

29-39: ⚡ Quick win

Harden regex validation assertions with full expected messages

On Line [38], Line [86], and Line [219], expectedError only checks a prefix (subnet-, sg-, cr-). Using the full validator message makes these tests less permissive and better at catching message/regression drift.

Proposed tightening
-    expectedError: "id must match the pattern subnet-"
+    expectedError: "id must match the pattern subnet-[0-9a-z]+"
...
-    expectedError: "id must match the pattern sg-"
+    expectedError: "id must match the pattern sg-[0-9a-z]+"
...
-    expectedError: "id must match the pattern cr-"
+    expectedError: "id must match the pattern cr-[0-9a-z]+"

Also applies to: 76-87, 207-220

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@karpenter-operator/controllers/karpenter/assets/tests/openshiftec2nodeclasses.karpenter.hypershift.openshift.io/stable.openshiftec2nodeclasses.testsuite.yaml`
around lines 29 - 39, Update the test cases (e.g., test named "When subnet id
has invalid format it should fail" and the other cases around the same blocks)
to assert the full validation error strings instead of loose prefixes: replace
expectedError values that currently contain only "subnet-", "sg-", or "cr-" with
the complete validator messages returned by the OpenshiftEC2NodeClass validation
(the exact full regex-mismatch messages for subnetSelectorTerms.id,
securityGroupSelectorTerms.id, and any capacity request id fields). Ensure you
update all occurrences referenced in the file (the blocks around the subnet,
security group, and capacity request tests) so the assertions match the exact
validator output.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In
`@karpenter-operator/controllers/karpenter/assets/tests/openshiftec2nodeclasses.karpenter.hypershift.openshift.io/stable.openshiftec2nodeclasses.testsuite.yaml`:
- Around line 29-39: Update the test cases (e.g., test named "When subnet id has
invalid format it should fail" and the other cases around the same blocks) to
assert the full validation error strings instead of loose prefixes: replace
expectedError values that currently contain only "subnet-", "sg-", or "cr-" with
the complete validator messages returned by the OpenshiftEC2NodeClass validation
(the exact full regex-mismatch messages for subnetSelectorTerms.id,
securityGroupSelectorTerms.id, and any capacity request id fields). Ensure you
update all occurrences referenced in the file (the blocks around the subnet,
security group, and capacity request tests) so the assertions match the exact
validator output.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Enterprise

Run ID: 85cd5e6c-6ae1-4985-8864-9363ebd7d7d2

📥 Commits

Reviewing files that changed from the base of the PR and between 0784b7c and 366f255.

⛔ Files ignored due to path filters (83)
  • api/hypershift/v1beta1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/zz_generated*
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/AutoNodeKarpenter.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ClusterUpdateAcceptRisks.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ClusterVersionOperatorConfiguration.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ExternalOIDC.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ExternalOIDCWithUIDAndExtraClaimMappings.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ExternalOIDCWithUpstreamParity.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/GCPPlatform.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/HCPEtcdBackup.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/ImageStreamImportMode.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/KMSEncryptionProvider.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/OpenStack.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedclusters.hypershift.openshift.io/TLSAdherence.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/AutoNodeKarpenter.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ClusterUpdateAcceptRisks.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ClusterVersionOperatorConfiguration.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ExternalOIDC.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ExternalOIDCWithUIDAndExtraClaimMappings.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ExternalOIDCWithUpstreamParity.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/GCPPlatform.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/HCPEtcdBackup.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/HyperShiftOnlyDynamicResourceAllocation.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/ImageStreamImportMode.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/KMSEncryptionProvider.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/OpenStack.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/hostedcontrolplanes.hypershift.openshift.io/TLSAdherence.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • api/karpenter/v1/zz_generated.deepcopy.go is excluded by !**/zz_generated*.go, !**/zz_generated*
  • client/applyconfiguration/karpenter/v1/blockdevice.go is excluded by !client/**
  • client/applyconfiguration/karpenter/v1/blockdevicemapping.go is excluded by !client/**
  • client/applyconfiguration/karpenter/v1/capacityreservation.go is excluded by !client/**
  • client/applyconfiguration/karpenter/v1/capacityreservationselectorterm.go is excluded by !client/**
  • client/applyconfiguration/karpenter/v1/metadataoptions.go is excluded by !client/**
  • client/applyconfiguration/karpenter/v1/openshiftec2nodeclass.go is excluded by !client/**
  • client/applyconfiguration/karpenter/v1/openshiftec2nodeclassspec.go is excluded by !client/**
  • client/applyconfiguration/karpenter/v1/openshiftec2nodeclassstatus.go is excluded by !client/**
  • client/applyconfiguration/karpenter/v1/securitygroup.go is excluded by !client/**
  • client/applyconfiguration/karpenter/v1/securitygroupselectorterm.go is excluded by !client/**
  • client/applyconfiguration/karpenter/v1/subnet.go is excluded by !client/**
  • client/applyconfiguration/karpenter/v1/subnetselectorterm.go is excluded by !client/**
  • client/applyconfiguration/utils.go is excluded by !client/**
  • client/clientset/clientset/clientset.go is excluded by !client/**
  • client/clientset/clientset/fake/clientset_generated.go is excluded by !client/**
  • client/clientset/clientset/fake/register.go is excluded by !client/**
  • client/clientset/clientset/scheme/register.go is excluded by !client/**
  • client/clientset/clientset/typed/karpenter/v1/doc.go is excluded by !client/**
  • client/clientset/clientset/typed/karpenter/v1/fake/doc.go is excluded by !client/**
  • client/clientset/clientset/typed/karpenter/v1/fake/fake_karpenter_client.go is excluded by !client/**
  • client/clientset/clientset/typed/karpenter/v1/fake/fake_openshiftec2nodeclass.go is excluded by !client/**
  • client/clientset/clientset/typed/karpenter/v1/generated_expansion.go is excluded by !client/**
  • client/clientset/clientset/typed/karpenter/v1/karpenter_client.go is excluded by !client/**
  • client/clientset/clientset/typed/karpenter/v1/openshiftec2nodeclass.go is excluded by !client/**
  • client/clientset/clientset/typed/karpenter/v1beta1/fake/fake_openshiftec2nodeclass.go is excluded by !client/**
  • client/clientset/clientset/typed/karpenter/v1beta1/openshiftec2nodeclass.go is excluded by !client/**
  • client/informers/externalversions/generic.go is excluded by !client/**
  • client/informers/externalversions/karpenter/interface.go is excluded by !client/**
  • client/informers/externalversions/karpenter/v1/interface.go is excluded by !client/**
  • client/informers/externalversions/karpenter/v1/openshiftec2nodeclass.go is excluded by !client/**
  • client/listers/karpenter/v1/expansion_generated.go is excluded by !client/**
  • client/listers/karpenter/v1/openshiftec2nodeclass.go is excluded by !client/**
  • cmd/install/assets/crds/hypershift-operator/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml is excluded by !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/payload-manifests/featuregates/featureGate-Hypershift-TechPreviewNoUpgrade.yaml is excluded by !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml is excluded by !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/payload-manifests/featuregates/featureGate-SelfManagedHA-TechPreviewNoUpgrade.yaml is excluded by !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/tests/hostedclusters.hypershift.openshift.io/stable.hostedclusters.karpenter.testsuite.yaml is excluded by !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedclusters-Hypershift-Default.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • cmd/install/assets/crds/hypershift-operator/zz_generated.crd-manifests/hostedcontrolplanes-Hypershift-Default.crd.yaml is excluded by !**/zz_generated.crd-manifests/**, !cmd/install/assets/**/*.yaml
  • docs/content/reference/aggregated-docs.md is excluded by !docs/content/reference/aggregated-docs.md
  • docs/content/reference/api.md is excluded by !docs/content/reference/api.md
  • karpenter-operator/controllers/karpenter/assets/karpenter.hypershift.openshift.io_openshiftec2nodeclasses.yaml is excluded by !karpenter-operator/controllers/karpenter/assets/*.yaml
  • karpenter-operator/controllers/karpenter/assets/zz_generated.crd-manifests/openshiftec2nodeclasses.crd.yaml is excluded by !**/zz_generated.crd-manifests/**
  • vendor/github.com/openshift/hypershift/api/hypershift/v1beta1/hosted_controlplane.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/hypershift/api/hypershift/v1beta1/hostedcluster_types.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/hypershift/api/hypershift/v1beta1/zz_generated.deepcopy.go is excluded by !vendor/**, !**/vendor/**, !**/zz_generated*.go, !**/zz_generated*
  • vendor/github.com/openshift/hypershift/api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests.yaml is excluded by !vendor/**, !**/vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/hypershift/api/karpenter/v1/doc.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/hypershift/api/karpenter/v1/karpenter_types.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/hypershift/api/karpenter/v1/register.go is excluded by !vendor/**, !**/vendor/**
  • vendor/github.com/openshift/hypershift/api/karpenter/v1/zz_generated.deepcopy.go is excluded by !vendor/**, !**/vendor/**, !**/zz_generated*.go, !**/zz_generated*
  • vendor/modules.txt is excluded by !vendor/**, !**/vendor/**
📒 Files selected for processing (24)
  • .github/workflows/envtest-kube.yaml
  • .github/workflows/envtest-ocp.yaml
  • Makefile
  • api/.golangci.yml
  • api/karpenter/v1/doc.go
  • api/karpenter/v1/karpenter_types.go
  • api/karpenter/v1/register.go
  • cmd/cluster/core/dump.go
  • control-plane-operator/AGENTS.md
  • control-plane-operator/controllers/hostedcontrolplane/v2/karpenter/component_test.go
  • control-plane-operator/controllers/hostedcontrolplane/v2/karpenter/deployment.go
  • hypershift-operator/controllers/hostedcluster/hostedcluster_controller.go
  • karpenter-operator/controllers/karpenter/assets/tests/openshiftec2nodeclasses.karpenter.hypershift.openshift.io/stable.openshiftec2nodeclasses.testsuite.yaml
  • karpenter-operator/controllers/karpenter/karpenter_controller.go
  • karpenter-operator/controllers/karpenterignition/karpenterignition_controller.go
  • karpenter-operator/controllers/karpenterignition/karpenterignition_controller_test.go
  • karpenter-operator/controllers/nodeclass/ec2_nodeclass_controller.go
  • karpenter-operator/controllers/nodeclass/ec2_nodeclass_controller_test.go
  • karpenter-operator/controllers/nodeclass/karpenter_util.go
  • support/api/scheme.go
  • support/controlplane-component/AGENTS.md
  • support/karpenter/karpenter.go
  • test/e2e/util/eventually.go
  • test/envtest/suite_test.go
💤 Files with no reviewable changes (1)
  • api/.golangci.yml
✅ Files skipped from review due to trivial changes (10)
  • cmd/cluster/core/dump.go
  • control-plane-operator/controllers/hostedcontrolplane/v2/karpenter/deployment.go
  • .github/workflows/envtest-kube.yaml
  • karpenter-operator/controllers/nodeclass/ec2_nodeclass_controller.go
  • hypershift-operator/controllers/hostedcluster/hostedcluster_controller.go
  • api/karpenter/v1/doc.go
  • api/karpenter/v1/karpenter_types.go
  • karpenter-operator/controllers/karpenter/karpenter_controller.go
  • control-plane-operator/AGENTS.md
  • support/controlplane-component/AGENTS.md
🚧 Files skipped from review as they are similar to previous changes (7)
  • .github/workflows/envtest-ocp.yaml
  • test/envtest/suite_test.go
  • karpenter-operator/controllers/nodeclass/ec2_nodeclass_controller_test.go
  • api/karpenter/v1/register.go
  • karpenter-operator/controllers/karpenterignition/karpenterignition_controller.go
  • control-plane-operator/controllers/hostedcontrolplane/v2/karpenter/component_test.go
  • karpenter-operator/controllers/karpenterignition/karpenterignition_controller_test.go

@enxebre

enxebre commented Apr 30, 2026

Copy link
Copy Markdown
Member 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-4-22
/test e2e-aws-4-22
/test e2e-aks
/test e2e-aws
/test e2e-aws-upgrade-hypershift-operator
/test e2e-azure-self-managed
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws

@hypershift-jira-solve-ci

Copy link
Copy Markdown

AI Test Failure Analysis

Job: pull-ci-openshift-hypershift-main-e2e-azure-self-managed | Build: 2049766774999617536 | Cost: $3.4562014999999997 | Failed step: hypershift-azure-run-e2e-self-managed

View full analysis report


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

@enxebre

enxebre commented Apr 30, 2026

Copy link
Copy Markdown
Member Author

/test e2e-aws-4-22

@enxebre

enxebre commented Apr 30, 2026

Copy link
Copy Markdown
Member Author

/verified by e2e @enxebre

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

Copy link
Copy Markdown

@enxebre: This PR has been marked as verified by e2e @enxebre.

Details

In response to this:

/verified by e2e @enxebre

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 commented Apr 30, 2026

Copy link
Copy Markdown
Contributor

@enxebre: all tests passed!

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@hypershift-jira-solve-ci

hypershift-jira-solve-ci Bot commented Apr 30, 2026

Copy link
Copy Markdown

Test Failure Analysis Complete

Job Information

Test Failure Analysis

Error

0.00% of diff hit (target 36.42%)

Files with missing lines:
  cmd/cluster/aws/create.go        — 0.00% patch, 3 lines missing
  support/karpenter/karpenter.go   — 0.00% patch, 2 lines missing

Summary

This is a false-positive coverage gate failure on a pure refactoring change. The PR converts Karpenter-related API types from pointer to value semantics (*hyperv1.AutoNodehyperv1.AutoNode, etc.) and migrates the API version from v1beta1 to v1. No new logic was introduced — only type signatures changed. However, Codecov treats rewritten lines as "new" and requires them to meet the project's baseline coverage of 36.42%. Since neither cmd/cluster/aws/create.go (a CLI handler) nor support/karpenter/karpenter.go (IsKarpenterEnabled) are exercised by the unit tests that upload coverage, all 5 modified lines show 0% patch coverage. The codecov/project check passes because overall project coverage remains unchanged at 36.42%.

Root Cause

The 5 uncovered lines are purely mechanical type-signature changes with no new logic:

cmd/cluster/aws/create.go (3 lines): The ApplyPlatformSpecifics function changed pointer allocations to value literals:

  • cluster.Spec.AutoNode = hyperv1.AutoNode{ (was &hyperv1.AutoNode{)
  • Karpenter: hyperv1.KarpenterConfig{ (was &hyperv1.KarpenterConfig{)
  • AWS: hyperv1.KarpenterAWSConfig{ (was &hyperv1.KarpenterAWSConfig{)

This code path is in a CLI command handler (CreateOptions.ApplyPlatformSpecifics) that is not exercised by the unit test suite.

support/karpenter/karpenter.go (2 lines): The IsKarpenterEnabled function simplified its return statement by removing nil checks (no longer needed with value types):

  • return autoNode.Provisioner.Name == hyperv1.ProvisionerKarpenter &&
  • autoNode.Provisioner.Karpenter.Platform == hyperv1.AWSPlatform

The repo's codecov.yml defines no explicit coverage.status.patch section. Codecov's default behavior uses target: auto, which sets the patch target to the base commit's overall coverage (36.42%), with zero tolerance. Since 0 of 5 new executable lines are hit by the coverage-reporting test suite, the patch check fails.

Recommendations
  1. This failure is safe to override. The change is a pure refactor (pointer-to-value conversion, API version bump). No new logic was introduced, no previously-covered lines lost coverage, and the codecov/project check passes. A maintainer can merge with the codecov/patch failure.

  2. If coverage is desired, add unit tests for IsKarpenterEnabled() in support/karpenter/karpenter_test.go — this would cover 2 of the 5 lines and is a small, useful addition. The remaining 3 lines in the CLI handler (cmd/cluster/aws/create.go) are harder to unit-test and are low-value to cover.

  3. Long-term, consider adding a coverage.status.patch section to codecov.yml with an explicit target or informational: true to prevent pure-refactoring PRs from being blocked:

    coverage:
      status:
        patch:
          default:
            target: 0%    # or informational: true
Evidence
Evidence Detail
Codecov bot comment "Patch coverage is 0% with 5 lines in your changes missing coverage"
Project coverage 36.42% — unchanged from base commit 5eaee74 (no regression)
File: cmd/cluster/aws/create.go 3 lines — pointer-to-value refactor in ApplyPlatformSpecifics, overall file coverage 41.59% (unchanged)
File: support/karpenter/karpenter.go 2 lines — simplified IsKarpenterEnabled return, overall file coverage 68.00% (+5.03% improvement from removing dead nil-check branches)
Codecov config (codecov.yml) No coverage.status.patch section defined — uses default target: auto (36.42%)
codecov/project check ✅ Passes — overall coverage is not regressed
Nature of change Pure refactor: *TypeType, v1beta1v1, removed nil checks — zero new logic

@enxebre enxebre merged commit a9b5118 into openshift:main Apr 30, 2026
51 of 53 checks passed
@hypershift-jira-solve-ci

hypershift-jira-solve-ci Bot commented Apr 30, 2026

Copy link
Copy Markdown

Now I have the complete analysis. Let me produce the final report:

Test Failure Analysis Complete

Job Information

  • Check: codecov/patch
  • PR: #8166CNTRLPLANE-3160: Drop AutoNodeKarpenter feature gate and promote EC2NodeClass to v1
  • Author: enxebre
  • Head SHA: 366f2553180647762e4c806fb26362eb7a2e05e0
  • State: MERGED (the PR was merged despite this failure)

Failure Analysis

Error

codecov/patch — 0.0% patch coverage (0 hits, 5 misses, 0 partials)

Summary

The codecov/patch check measures the percentage of newly added or modified executable lines that are covered by unit tests. This PR changed executable code in two files that are not in the Codecov ignore list, and none of those 5 lines are exercised by any unit test. The default Codecov threshold requires patch coverage above 0%, so the check failed.

The codecov/project check (overall repo coverage) passed — the project-wide coverage remained at 36.42%, unchanged from the base branch. Only the patch-level (diff-only) check failed.

Evidence

5 uncovered executable lines across 2 files:

File 1: support/karpenter/karpenter.go — 2 uncovered lines

The IsKarpenterEnabled function signature changed from pointer to value receiver (*hyperv1.AutoNodehyperv1.AutoNode) and the nil-checks were removed:

// BEFORE (4 lines):
func IsKarpenterEnabled(autoNode *hyperv1.AutoNode) bool {
    return autoNode != nil &&
        autoNode.Provisioner.Name == hyperv1.ProvisionerKarpenter &&
        autoNode.Provisioner.Karpenter != nil &&
        autoNode.Provisioner.Karpenter.Platform == hyperv1.AWSPlatform
}

// AFTER (2 new executable lines, 0% covered):
func IsKarpenterEnabled(autoNode hyperv1.AutoNode) bool {               // line 1
    return autoNode.Provisioner.Name == hyperv1.ProvisionerKarpenter &&  // line 2
        autoNode.Provisioner.Karpenter.Platform == hyperv1.AWSPlatform
}

A test file support/karpenter/karpenter_test.go exists but tests only GetHCP, SupportedArchitectures, and ArchToAMILabelKeyIsKarpenterEnabled has no unit test.

File 2: cmd/cluster/aws/create.go — 3 uncovered lines

In ApplyPlatformSpecifics, the struct literal changed from pointer types to value types:

// BEFORE (pointers):
cluster.Spec.AutoNode = &hyperv1.AutoNode{
    ...Karpenter: &hyperv1.KarpenterConfig{
        ...AWS: &hyperv1.KarpenterAWSConfig{

// AFTER (3 new executable lines, 0% covered):
cluster.Spec.AutoNode = hyperv1.AutoNode{            // line 3
    ...Karpenter: hyperv1.KarpenterConfig{            // line 4
        ...AWS: hyperv1.KarpenterAWSConfig{           // line 5

A test file cmd/cluster/aws/create_test.go exists but does not cover the ApplyPlatformSpecifics method or the Karpenter/AutoNode code path.

Root Cause

The failure is caused by missing unit test coverage for 5 newly modified executable lines. Specifically:

  1. support/karpenter/karpenter.go:IsKarpenterEnabled — Function was refactored (pointer → value, removed nil guards) but has no unit test at all. This is the most impactful gap: the function is called from multiple controllers and its behavior change (no longer nil-safe) should be validated.

  2. cmd/cluster/aws/create.go:ApplyPlatformSpecifics — The AutoNode struct initialization was updated from pointer to value types. The ApplyPlatformSpecifics method is not covered by create_test.go.

Codecov Configuration Context

From codecov.yml:

  • No explicit patch threshold is configured → Codecov uses the default, which fails at 0% patch coverage
  • Ignored directories: test/**, hack/**, client/**, vendor/**, docs/** — so the generated client code (client/clientset/.../openshiftec2nodeclass.go) is correctly excluded
  • All other changed files in this PR are either import-only changes (not counted as executable), YAML/type definitions, or test files (ignored) — only these 2 files have uncovered executable code in the patch

Recommendations

  1. Add a unit test for IsKarpenterEnabled in support/karpenter/karpenter_test.go:

    func TestIsKarpenterEnabled(t *testing.T) {
        tests := []struct {
            name     string
            autoNode hyperv1.AutoNode
            expected bool
        }{
            {
                name: "Karpenter enabled on AWS",
                autoNode: hyperv1.AutoNode{
                    Provisioner: hyperv1.ProvisionerConfig{
                        Name: hyperv1.ProvisionerKarpenter,
                        Karpenter: hyperv1.KarpenterConfig{
                            Platform: hyperv1.AWSPlatform,
                        },
                    },
                },
                expected: true,
            },
            {
                name:     "Zero-value AutoNode",
                autoNode: hyperv1.AutoNode{},
                expected: false,
            },
        }
        // ...
    }
  2. Alternatively, if coverage of cmd/cluster/aws/create.go:ApplyPlatformSpecifics is not practical (it requires infrastructure setup), the IsKarpenterEnabled test alone would bring patch coverage to 2/5 = 40%, likely enough to pass the default threshold.

  3. This failure is non-blocking — the PR was already merged. However, the missing test for IsKarpenterEnabled is a genuine gap: the function's contract changed from nil-safe (pointer) to non-nil-safe (value), and callers should be validated against the new behavior.


Artifacts


enxebre pushed a commit that referenced this pull request May 6, 2026
The api-lint Makefile target uses --new-from-rev=${PULL_BASE_SHA} to
only report issues on lines changed by the PR. When PULL_BASE_SHA is
not set, the Makefile defaults to origin/main.

For PRs targeting release branches, this causes the linter to diff
against main instead of the target branch, flagging pre-existing
divergences as new issues. This broke all release-4.22 PRs after
PR #8166 changed AutoNode/Karpenter fields on main.

Set PULL_BASE_SHA to the PR's actual base commit SHA, matching the
pattern already used by the gitlint workflow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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/api Indicates the PR includes changes for the API 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/documentation Indicates the PR includes changes for documentation area/hypershift-operator Indicates the PR includes changes for the hypershift operator and API - outside an OCP release area/karpenter-operator Indicates the PR includes changes related to the Karpenter operator area/platform/aws PR/issue for AWS (AWSPlatform) platform area/testing Indicates the PR includes changes for e2e testing jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges. verified Signifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants