Skip to content

OCPEDGE-2492: feat: promote pacemaker to v1 in prep for tnf#2792

Open
eggfoobar wants to merge 3 commits intoopenshift:masterfrom
eggfoobar:promote-pacemaker-crd-to-v1
Open

OCPEDGE-2492: feat: promote pacemaker to v1 in prep for tnf#2792
eggfoobar wants to merge 3 commits intoopenshift:masterfrom
eggfoobar:promote-pacemaker-crd-to-v1

Conversation

@eggfoobar
Copy link
Copy Markdown
Contributor

the pacemaker api is used by two node fencing to communicate status information from the underlying fencing tooling and is a required part of two node fencing, with two node fencing moving to GA the pacemaker api is moving to v1 to provide support

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

openshift-ci-robot commented Apr 2, 2026

@eggfoobar: This pull request references OCPEDGE-2492 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 "4.22.0" version, but no target version was set.

Details

In response to this:

the pacemaker api is used by two node fencing to communicate status information from the underlying fencing tooling and is a required part of two node fencing, with two node fencing moving to GA the pacemaker api is moving to v1 to provide support

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
Copy link
Copy Markdown
Contributor

openshift-ci bot commented Apr 2, 2026

Hello @eggfoobar! Some important instructions when contributing to openshift/api:
API design plays an important part in the user experience of OpenShift and as such API PRs are subject to a high level of scrutiny to ensure they follow our best practices. If you haven't already done so, please review the OpenShift API Conventions and ensure that your proposed changes are compliant. Following these conventions will help expedite the api review process for your PR.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 2, 2026

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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 5c432649-90e6-4fc8-9bcf-95dd29e6601d

📥 Commits

Reviewing files that changed from the base of the PR and between e9e6359 and 492ac67.

⛔ Files ignored due to path filters (5)
  • etcd/v1/zz_generated.crd-manifests/0000_25_etcd_01_pacemakerclusters.crd.yaml is excluded by !**/zz_generated.crd-manifests/*
  • etcd/v1/zz_generated.featuregated-crd-manifests/pacemakerclusters.etcd.openshift.io/DualReplica.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • etcd/v1alpha1/zz_generated.crd-manifests/0000_25_etcd_01_pacemakerclusters.crd.yaml is excluded by !**/zz_generated.crd-manifests/*
  • etcd/v1alpha1/zz_generated.featuregated-crd-manifests/pacemakerclusters.etcd.openshift.io/DualReplica.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • openapi/generated_openapi/zz_generated.openapi.go is excluded by !openapi/**
📒 Files selected for processing (5)
  • etcd/v1/types_pacemakercluster.go
  • etcd/v1/zz_generated.swagger_doc_generated.go
  • etcd/v1alpha1/types_pacemakercluster.go
  • etcd/v1alpha1/zz_generated.swagger_doc_generated.go
  • payload-manifests/crds/0000_25_etcd_01_pacemakerclusters.crd.yaml
✅ Files skipped from review due to trivial changes (2)
  • etcd/v1alpha1/zz_generated.swagger_doc_generated.go
  • etcd/v1/zz_generated.swagger_doc_generated.go

📝 Walkthrough

Walkthrough

Adds a new etcd.openshift.io/v1 API: package docs and registration, type definitions for a cluster-scoped PacemakerCluster with extensive status types, constants, and kubebuilder validation markers, autogenerated deepcopy and Swagger docs, and a feature-gated CRD manifest. Adds conformance/behavior test YAMLs (including DualReplica) and a Makefile test target that runs tests with Ginkgo focus etcd.openshift.io/v1. Updates top-level install to register both v1 and v1alpha1, adjusts v1alpha1 fencing-agent minItems from 1→0, and adds a golangci-lint exclusion.

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

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.11.4)

Error: build linters: unable to load custom analyzer "kubeapilinter": tools/_output/bin/kube-api-linter.so, plugin: not implemented
The command is terminated due to an error: build linters: unable to load custom analyzer "kubeapilinter": tools/_output/bin/kube-api-linter.so, plugin: not implemented


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

@openshift-ci openshift-ci bot added the size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. label Apr 2, 2026
@openshift-ci openshift-ci bot requested review from JoelSpeed and everettraven April 2, 2026 14:04
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci bot commented Apr 2, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign deads2k for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found 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

@qodo-code-review
Copy link
Copy Markdown

Review Summary by Qodo

Promote PacemakerCluster API to v1 for Two Node OpenShift with Fencing GA

✨ Enhancement

Grey Divider

Walkthroughs

Description
• Promotes PacemakerCluster API from alpha to v1 in preparation for Two Node OpenShift with Fencing
  GA release
• Introduces comprehensive PacemakerCluster v1 CRD with cluster-level, node-level, and
  resource-level health monitoring capabilities
• Implements singleton cluster-scoped resource named "cluster" with status subresource for tracking
  pacemaker cluster health
• Adds validation for node addresses (IPv4/IPv6 canonical form), fencing methods (Redfish/IPMI), and
  resource names (Kubelet/Etcd)
• Generates complete OpenAPI schemas, Swagger documentation, and deep copy implementations for all
  v1 types
• Registers PacemakerCluster v1 API group with scheme builder and feature gate (DualReplica)
• Includes comprehensive test suite validating cluster creation, status updates, and validation
  rules
Diagram
flowchart LR
  A["PacemakerCluster v1 Types"] --> B["OpenAPI Schemas"]
  A --> C["Swagger Documentation"]
  A --> D["Deep Copy Methods"]
  A --> E["CRD Manifest"]
  E --> F["Feature Gate Registration"]
  E --> G["Validation Rules"]
  H["Test Suite"] --> I["Cluster Creation Tests"]
  H --> J["Status Update Tests"]
  H --> K["Validation Tests"]
Loading

Grey Divider

File Changes

1. etcd/v1/types_pacemakercluster.go ✨ Enhancement +736/-0

Promote PacemakerCluster API to v1 with comprehensive health monitoring

• Introduces comprehensive PacemakerCluster v1 API types for monitoring pacemaker cluster health in
 Two Node OpenShift with Fencing deployments
• Defines cluster-level, node-level, and resource-level condition types with detailed constants for
 health tracking
• Implements PacemakerCluster CRD with status subresource supporting singleton cluster-scoped
 resource named "cluster"
• Includes validation for node addresses (IPv4/IPv6 canonical form), fencing methods (Redfish/IPMI),
 and resource names (Kubelet/Etcd)

etcd/v1/types_pacemakercluster.go


2. openapi/generated_openapi/zz_generated.openapi.go Code generation +404/-0

Generate OpenAPI schemas for PacemakerCluster v1 types

• Registers seven new OpenAPI schema definitions for etcd v1 PacemakerCluster types
• Adds schema functions for PacemakerCluster, PacemakerClusterStatus,
 PacemakerClusterNodeStatus, PacemakerClusterResourceStatus,
 PacemakerClusterFencingAgentStatus, and PacemakerNodeAddress
• Generates comprehensive OpenAPI documentation with validation rules, enum values, and field
 descriptions

openapi/generated_openapi/zz_generated.openapi.go


3. etcd/v1/zz_generated.swagger_doc_generated.go Code generation +89/-0

Generate Swagger documentation for PacemakerCluster v1

• Auto-generates Swagger documentation maps for all PacemakerCluster v1 types
• Provides human-readable descriptions for each type and field via SwaggerDoc() methods
• Includes documentation for cluster conditions, node status, resources, and fencing agents

etcd/v1/zz_generated.swagger_doc_generated.go


View more (9)
4. etcd/v1/zz_generated.deepcopy.go Code generation +210/-0

Generate deep copy implementations for PacemakerCluster v1

• Auto-generates deep copy methods for all PacemakerCluster v1 types
• Implements DeepCopyInto(), DeepCopy(), and DeepCopyObject() methods for proper object
 cloning
• Handles nested slices and complex types like conditions and node addresses

etcd/v1/zz_generated.deepcopy.go


5. etcd/v1/register.go ✨ Enhancement +39/-0

Register PacemakerCluster v1 API group and types

• Registers PacemakerCluster v1 API group with scheme builder
• Defines group name as "etcd.openshift.io" and version as "v1"
• Adds PacemakerCluster and PacemakerClusterList to the scheme

etcd/v1/register.go


6. etcd/v1/doc.go ⚙️ Configuration changes +6/-0

Configure code generation for etcd v1 package

• Adds package-level code generation directives for etcd v1 API group
• Enables deep copy generation, defaulter generation, OpenAPI generation, and feature-gated schema
 generation
• Specifies group name as "etcd.openshift.io"

etcd/v1/doc.go


7. etcd/v1/zz_generated.crd-manifests/doc.go Code generation +1/-0

Add CRD manifests package declaration

• Creates package declaration for generated CRD manifests

etcd/v1/zz_generated.crd-manifests/doc.go


8. etcd/v1/zz_generated.crd-manifests/0000_25_etcd_01_pacemakerclusters.crd.yaml Code generation +632/-0

Generate PacemakerCluster v1 CustomResourceDefinition manifest

• Generates complete CustomResourceDefinition manifest for PacemakerCluster v1
• Defines cluster-scoped singleton resource with comprehensive validation rules and constraints
• Includes OpenAPI v3 schema with detailed property descriptions, min/max items, and CEL validation
 rules
• Specifies status subresource and feature gate requirement (DualReplica)

etcd/v1/zz_generated.crd-manifests/0000_25_etcd_01_pacemakerclusters.crd.yaml


9. etcd/v1/zz_generated.featuregated-crd-manifests.yaml ⚙️ Configuration changes +23/-0

Register PacemakerCluster CRD feature gate metadata

• Registers PacemakerCluster CRD metadata for feature-gated deployment
• Specifies DualReplica feature gate requirement and operational metadata
• Defines CRD placement in release manifests (0000_25_etcd_01)

etcd/v1/zz_generated.featuregated-crd-manifests.yaml


10. etcd/v1/Makefile 🧪 Tests +3/-0

Add Makefile for etcd v1 testing

• Adds test target for etcd v1 API group testing
• Runs ginkgo tests with focus filter for "etcd.openshift.io/v1"

etcd/v1/Makefile


11. etcd/v1/tests/pacemakerclusters.etcd.openshift.io/DualReplica.yaml 🧪 Tests +1934/-0

PacemakerCluster CRD test suite for DualReplica feature

• Added comprehensive test suite for PacemakerCluster CRD with DualReplica feature gate
• Includes creation tests validating minimal cluster creation and name enforcement
• Covers update tests for full healthy cluster status with fencing agents and node conditions
• Implements validation tests for required conditions, IP address formats, and IPv6 support

etcd/v1/tests/pacemakerclusters.etcd.openshift.io/DualReplica.yaml


12. etcd/v1/zz_generated.featuregated-crd-manifests/pacemakerclusters.etcd.openshift.io/DualReplica.yaml ✨ Enhancement +632/-0

PacemakerCluster v1 CRD manifest with comprehensive validation

• Generated CustomResourceDefinition manifest for PacemakerCluster v1 API with DualReplica feature
 gate
• Defines cluster-scoped singleton resource with comprehensive status schema including conditions,
 nodes, and fencing agents
• Implements validation rules for required condition types, IP address canonicalization, and
 resource constraints
• Includes detailed OpenAPI v3 schema with descriptions for all properties and validation
 constraints

etcd/v1/zz_generated.featuregated-crd-manifests/pacemakerclusters.etcd.openshift.io/DualReplica.yaml


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

Code Review by Qodo

Grey Divider

Looking for bugs?

Check back in a few minutes. An AI review agent is analyzing this pull request.

Grey Divider

Qodo Logo

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@etcd/v1/Makefile`:
- Around line 2-3: The Makefile test target uses an unescaped regex for
GINKGO_EXTRA_ARGS which treats dots as wildcards and lacks boundaries, so update
the GINKGO_EXTRA_ARGS value used in the test target to a properly anchored and
escaped regex (e.g., anchor start/end and escape dots) so it only matches the
exact etcd.openshift.io/v1 suite; modify the test target that sets
GINKGO_EXTRA_ARGS to use a focus like "^etcd\.openshift\.io/v1$" (ensure
quoting/escaping is correct for the Makefile/shell).

In `@etcd/v1/register.go`:
- Around line 12-14: etcd.Install currently only calls v1alpha1.Install so the
v1 types (including PacemakerCluster) aren’t registered; update the group-wide
installer symbol etcd.Install to also invoke v1.Install (in addition to
v1alpha1.Install) so the v1 schemeBuilder.AddToScheme export is wired into the
group registration and PacemakerCluster is registered when etcd.Install is
called.

In `@etcd/v1/tests/pacemakerclusters.etcd.openshift.io/DualReplica.yaml`:
- Line 4: The YAML uses the wrong key name "featureGate" so the test harness
(tests/types.go which unmarshals featureGates []string) ignores the DualReplica
gate; update the document (DualReplica.yaml) to use the plural key
"featureGates" with the DualReplica value so the suite picks up the feature flag
(replace the "featureGate: DualReplica" entry with "featureGates: [DualReplica]"
or equivalent YAML list form).
🪄 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), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 7fc9bc3d-1be9-4acd-9343-e9566cd00110

📥 Commits

Reviewing files that changed from the base of the PR and between ad9eb11 and eaf046f.

⛔ Files ignored due to path filters (4)
  • etcd/v1/zz_generated.crd-manifests/0000_25_etcd_01_pacemakerclusters.crd.yaml is excluded by !**/zz_generated.crd-manifests/*
  • etcd/v1/zz_generated.crd-manifests/doc.go is excluded by !**/zz_generated.crd-manifests/*
  • etcd/v1/zz_generated.featuregated-crd-manifests/pacemakerclusters.etcd.openshift.io/DualReplica.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • openapi/generated_openapi/zz_generated.openapi.go is excluded by !openapi/**
📒 Files selected for processing (8)
  • etcd/v1/Makefile
  • etcd/v1/doc.go
  • etcd/v1/register.go
  • etcd/v1/tests/pacemakerclusters.etcd.openshift.io/DualReplica.yaml
  • etcd/v1/types_pacemakercluster.go
  • etcd/v1/zz_generated.deepcopy.go
  • etcd/v1/zz_generated.featuregated-crd-manifests.yaml
  • etcd/v1/zz_generated.swagger_doc_generated.go

the pacemaker api is used by two node fencing to communicate status information from the underlying fencing tooling and is a required part of two node fencing, with two node fencing moving to GA the pacemaker api is moving to v1 to provide support

fix test featureGates label for v1 and v1alpha1

Signed-off-by: ehila <ehila@redhat.com>
@eggfoobar eggfoobar force-pushed the promote-pacemaker-crd-to-v1 branch from eaf046f to 3f0cd07 Compare April 2, 2026 14:38
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (1)
etcd/v1/Makefile (1)

3-3: ⚠️ Potential issue | 🟠 Major

Scope the Ginkgo focus to the exact v1 suites.

Line 3's pattern is still a regex substring of [pacemakerclusters.etcd.openshift.io/v1alpha1], so this target will keep running v1alpha1 suites too.

Possible fix
-	make -C ../../tests test GINKGO_EXTRA_ARGS=--focus="etcd.openshift.io/v1"
+	make -C ../../tests test GINKGO_EXTRA_ARGS='--focus=etcd\.openshift\.io/v1\]'
#!/bin/bash
set -euo pipefail

sed -n '1,5p' etcd/v1/Makefile
sed -n '480,494p' tests/generator.go

python - <<'PY'
import re

# Expected for a v1-only focus: first case True, second case False.
focus = re.compile(r'etcd.openshift.io/v1')
cases = [
    "[pacemakerclusters.etcd.openshift.io/v1] suite",
    "[pacemakerclusters.etcd.openshift.io/v1alpha1] suite",
]

for case in cases:
    print(f"{case} -> {bool(focus.search(case))}")
PY
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@etcd/v1/Makefile` at line 3, Replace the loose focus pattern in the etcd v1
Make target so Ginkgo only runs exact v1 suites: update the GINKGO_EXTRA_ARGS
value in the etcd/v1 Makefile (the line invoking make -C ../../tests test with
GINKGO_EXTRA_ARGS) to use an anchored/explicit regex that matches the bracketed
suite name "[etcd.openshift.io/v1]" (e.g., escape the brackets or add
word-boundary anchors) instead of the substring "etcd.openshift.io/v1" so
v1alpha1 suites are excluded.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@etcd/v1/types_pacemakercluster.go`:
- Around line 607-620: The status field FencingAgents (type
PacemakerClusterFencingAgentStatus) must allow an empty list to represent nodes
with zero discovered fencing agents; remove the strict requirement by deleting
the +kubebuilder:validation:MinItems=1 annotation (and also remove the +required
marker if present) from the FencingAgents declaration so the field can be
omitted/empty (keep the MaxItems=8 and json:"fencingAgents,omitempty" as-is).
- Around line 527-536: Change the Nodes field from a pointer-to-slice to a plain
slice to remove the extra JSON null state: update the Nodes field declaration
from *[]PacemakerClusterNodeStatus to []PacemakerClusterNodeStatus in the
PacemakerClusterStatus type (field name: Nodes, element type:
PacemakerClusterNodeStatus) and keep the existing json tag and kubebuilder
markers as appropriate; after changing the type, regenerate the autogenerated
files (deepcopy, clientset/listers/informers or run
controller-gen/code-generator used in this repo) so zz_generated.deepcopy.go and
other generated artifacts reflect the non-pointer slice.

---

Duplicate comments:
In `@etcd/v1/Makefile`:
- Line 3: Replace the loose focus pattern in the etcd v1 Make target so Ginkgo
only runs exact v1 suites: update the GINKGO_EXTRA_ARGS value in the etcd/v1
Makefile (the line invoking make -C ../../tests test with GINKGO_EXTRA_ARGS) to
use an anchored/explicit regex that matches the bracketed suite name
"[etcd.openshift.io/v1]" (e.g., escape the brackets or add word-boundary
anchors) instead of the substring "etcd.openshift.io/v1" so v1alpha1 suites are
excluded.
🪄 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), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 6672b48a-b5a6-439f-a33b-4bf04d9aabaf

📥 Commits

Reviewing files that changed from the base of the PR and between eaf046f and 3f0cd07.

⛔ Files ignored due to path filters (4)
  • etcd/v1/zz_generated.crd-manifests/0000_25_etcd_01_pacemakerclusters.crd.yaml is excluded by !**/zz_generated.crd-manifests/*
  • etcd/v1/zz_generated.crd-manifests/doc.go is excluded by !**/zz_generated.crd-manifests/*
  • etcd/v1/zz_generated.featuregated-crd-manifests/pacemakerclusters.etcd.openshift.io/DualReplica.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
  • openapi/generated_openapi/zz_generated.openapi.go is excluded by !openapi/**
📒 Files selected for processing (10)
  • etcd/install.go
  • etcd/v1/Makefile
  • etcd/v1/doc.go
  • etcd/v1/register.go
  • etcd/v1/tests/pacemakerclusters.etcd.openshift.io/DualReplica.yaml
  • etcd/v1/types_pacemakercluster.go
  • etcd/v1/zz_generated.deepcopy.go
  • etcd/v1/zz_generated.featuregated-crd-manifests.yaml
  • etcd/v1/zz_generated.swagger_doc_generated.go
  • etcd/v1alpha1/tests/pacemakerclusters.etcd.openshift.io/DualReplica.yaml
✅ Files skipped from review due to trivial changes (3)
  • etcd/v1/doc.go
  • etcd/v1/zz_generated.featuregated-crd-manifests.yaml
  • etcd/v1/zz_generated.swagger_doc_generated.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • etcd/v1/tests/pacemakerclusters.etcd.openshift.io/DualReplica.yaml

Signed-off-by: ehila <ehila@redhat.com>
@eggfoobar eggfoobar force-pushed the promote-pacemaker-crd-to-v1 branch from 8843db1 to e9e6359 Compare April 2, 2026 16:42
lowered the validation:MinItem for FencingAgents down to 0 to allow situations when a status update needs to be made but no agent data can be recorded

Signed-off-by: ehila <ehila@redhat.com>
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci bot commented Apr 2, 2026

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

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

Labels

jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants