Skip to content

CNTRLPLANE-2699: adding network policies for operator and operands#645

Open
dusk125 wants to merge 4 commits intoopenshift:mainfrom
dusk125:network-policy
Open

CNTRLPLANE-2699: adding network policies for operator and operands#645
dusk125 wants to merge 4 commits intoopenshift:mainfrom
dusk125:network-policy

Conversation

@dusk125
Copy link

@dusk125 dusk125 commented Feb 5, 2026

Adds NetworkPolicy resources for both operator and operand namespaces:

  • Operator namespace (openshift-apiserver-operator): Default-deny with allow rules for DNS, API server access, and metrics ingress
  • Operand namespace (openshift-apiserver): Default-deny with allow rules for DNS, kube-apiserver access, etcd access (port 2379), and ingress on port 8443

Summary by CodeRabbit

  • New Features
    • Added default-deny network policies for the API server and its operator to block unsolicited traffic by default.
    • Added explicit allow rules permitting only required TCP access to the API server endpoints.
    • Improved isolation between control-plane components with explicit egress/ingress rules for stricter segmentation.
    • Included annotations to support self-managed HA and single-node developer scenarios.

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Feb 5, 2026
@openshift-ci-robot
Copy link

openshift-ci-robot commented Feb 5, 2026

@dusk125: This pull request references CNTRLPLANE-2699 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:

Adds NetworkPolicy resources for both operator and operand namespaces:

  • Operator namespace (openshift-apiserver-operator): Default-deny with allow rules for DNS, API server access, and metrics ingress
  • Operand namespace (openshift-apiserver): Default-deny with allow rules for DNS, kube-apiserver access, etcd access (port 2379), and ingress on port 8443

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 Feb 5, 2026
@openshift-ci openshift-ci bot requested review from benluddy and dgrisonnet February 5, 2026 18:50
@dusk125 dusk125 changed the title WIP: CNTRLPLANE-2699: adding network policies for operator and operands CNTRLPLANE-2699: adding network policies for operator and operands Mar 4, 2026
@openshift-ci openshift-ci bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Mar 4, 2026
@coderabbitai
Copy link

coderabbitai bot commented Mar 10, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 96dd73d0-053a-435f-a80f-f8166fd0c4d9

📥 Commits

Reviewing files that changed from the base of the PR and between a705116 and fa6a64a.

📒 Files selected for processing (6)
  • bindata/v3.11.0/openshift-apiserver/networkpolicy-allow.yaml
  • bindata/v3.11.0/openshift-apiserver/networkpolicy-default-deny.yaml
  • manifests/11_networkpolicies.yaml
  • manifests/11_networkpolicies_default-deny.yaml
  • pkg/operator/starter.go
  • pkg/operator/v311_00_assets/bindata.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • manifests/11_networkpolicies.yaml

Walkthrough

Adds Kubernetes NetworkPolicy manifests (allow and default-deny) for openshift-apiserver and openshift-apiserver-operator, and registers the two new bindata asset files in the embedded assets and starter resource list.

Changes

Cohort / File(s) Summary
Bindata NetworkPolicies
bindata/v3.11.0/openshift-apiserver/networkpolicy-allow.yaml, bindata/v3.11.0/openshift-apiserver/networkpolicy-default-deny.yaml
Added NetworkPolicy YAMLs for the openshift-apiserver namespace: allow selects apiserver:"true", allows ingress TCP:8443 and all egress; default-deny selects all pods and declares Ingress/Egress with no allow rules.
Manifest NetworkPolicies
manifests/11_networkpolicies.yaml, manifests/11_networkpolicies_default-deny.yaml
Added NetworkPolicy manifests for the openshift-apiserver-operator namespace: allow-operator selects app: openshift-apiserver-operator, allows ingress TCP:8443 and all egress; default-deny enforces deny-all for Ingress and Egress. Includes release annotations.
Embedded Assets & Starter
pkg/operator/v311_00_assets/bindata.go, pkg/operator/starter.go
Registered two new embedded assets and byte slices for the added YAMLs in bindata.go and added their paths to the static resource list in starter.go.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically summarizes the main change: adding network policies for both the operator and operands, matching the primary objective of the pull request.
Stable And Deterministic Test Names ✅ Passed The custom check for stable and deterministic Ginkgo test names is not applicable to this pull request as no Ginkgo test files are modified.
Test Structure And Quality ✅ Passed The pull request does not modify any Ginkgo test files. All changes are limited to adding NetworkPolicy Kubernetes manifests and updating asset registration in non-test Go files.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Tip

Try Coding Plans. Let us write the prompt for your AI agent so you can ship faster (with fewer bugs).
Share your feedback on Discord.


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

@openshift-ci-robot
Copy link

openshift-ci-robot commented Mar 10, 2026

@dusk125: This pull request references CNTRLPLANE-2699 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:

Adds NetworkPolicy resources for both operator and operand namespaces:

  • Operator namespace (openshift-apiserver-operator): Default-deny with allow rules for DNS, API server access, and metrics ingress
  • Operand namespace (openshift-apiserver): Default-deny with allow rules for DNS, kube-apiserver access, etcd access (port 2379), and ingress on port 8443

Summary by CodeRabbit

New Features

  • Enhanced network security with default-deny policies across API server and operator namespaces to prevent unauthorized traffic
  • Implemented allow-list based traffic controls that restrict access exclusively to critical API server component endpoints
  • Established zero-trust network segmentation through explicit traffic authorization rules for improved isolation and access governance

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.

Copy link

@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: 1

🧹 Nitpick comments (1)
manifests/11_networkpolicies.yaml (1)

23-26: Scope metrics ingress more tightly.

With no from clause, every pod in the cluster can reach port 8443. If this path is only for Prometheus scraping, restricting sources to the monitoring namespace keeps the policy aligned with least privilege.

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

In `@manifests/11_networkpolicies.yaml` around lines 23 - 26, The NetworkPolicy's
ingress rule currently allows all sources to reach port 8443 (ingress -> ports
-> port: 8443); restrict it by adding a from clause that limits traffic to the
monitoring namespace (e.g., ingress -> from -> - namespaceSelector with a label
match for your monitoring namespace such as matchLabels: {name: monitoring} or
kubernetes.io/metadata.name: monitoring) so only pods in that namespace (used by
Prometheus) can scrape on port 8443.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@bindata/v3.11.0/openshift-apiserver/networkpolicy-allow.yaml`:
- Around line 27-28: The current egress entry "egress: - {}" in the
NetworkPolicy for openshift-apiserver removes egress isolation; remove that
unconditional allow and replace it with explicit egress rules limited to only
required destinations/ports (e.g., DNS to cluster DNS service on UDP/TCP 53,
kube-apiserver service on TCP 443, etcd endpoints on TCP 2379/2380) so the
companion default-deny can effectively restrict outbound traffic; update the
resource containing the "egress" key and its empty-item entry so it enumerates
only the minimal allowed to/from selectors instead of "- {}".

---

Nitpick comments:
In `@manifests/11_networkpolicies.yaml`:
- Around line 23-26: The NetworkPolicy's ingress rule currently allows all
sources to reach port 8443 (ingress -> ports -> port: 8443); restrict it by
adding a from clause that limits traffic to the monitoring namespace (e.g.,
ingress -> from -> - namespaceSelector with a label match for your monitoring
namespace such as matchLabels: {name: monitoring} or
kubernetes.io/metadata.name: monitoring) so only pods in that namespace (used by
Prometheus) can scrape on port 8443.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: a89c62b7-8295-437f-9879-7dc149b3036e

📥 Commits

Reviewing files that changed from the base of the PR and between cc1d7ad and a705116.

📒 Files selected for processing (5)
  • bindata/v3.11.0/openshift-apiserver/networkpolicy-allow.yaml
  • bindata/v3.11.0/openshift-apiserver/networkpolicy-default-deny.yaml
  • manifests/11_networkpolicies.yaml
  • manifests/11_networkpolicies_default-deny.yaml
  • pkg/operator/starter.go

Comment on lines +27 to +28
egress:
- {}
Copy link

@coderabbitai coderabbitai bot Mar 10, 2026

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

egress: - {} removes meaningful egress isolation.

This rule allows every destination and port for the selected pods, so the companion default-deny no longer constrains outbound traffic from openshift-apiserver. If the goal is to harden the operand namespace, replace the unconditional allow with only the required DNS / kube-apiserver / etcd paths.

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

In `@bindata/v3.11.0/openshift-apiserver/networkpolicy-allow.yaml` around lines 27
- 28, The current egress entry "egress: - {}" in the NetworkPolicy for
openshift-apiserver removes egress isolation; remove that unconditional allow
and replace it with explicit egress rules limited to only required
destinations/ports (e.g., DNS to cluster DNS service on UDP/TCP 53,
kube-apiserver service on TCP 443, etcd endpoints on TCP 2379/2380) so the
companion default-deny can effectively restrict outbound traffic; update the
resource containing the "egress" key and its empty-item entry so it enumerates
only the minimal allowed to/from selectors instead of "- {}".

Copy link
Author

Choose a reason for hiding this comment

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

Network policies do not allow us to select endpoints on the host network (which the api server is running on). So we would either need to generate a network policy dynamically that contain the endpoints of the kubernetes service and regenerate it when they change, or we allow any egress (since the port is changeable).

Our guidance for this feature was do to the latter.

Copy link

Choose a reason for hiding this comment

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

@dusk125, understood — since kube-apiserver and etcd run on the host network, NetworkPolicy pod/namespace selectors can't target them, making static egress restrictions impractical without a dynamic controller. Allowing all egress is the correct approach here. Thanks for the explanation!


📝 Learnings were identified and not saved (knowledge base disabled). Enable

@openshift-ci-robot
Copy link

openshift-ci-robot commented Mar 10, 2026

@dusk125: This pull request references CNTRLPLANE-2699 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:

Adds NetworkPolicy resources for both operator and operand namespaces:

  • Operator namespace (openshift-apiserver-operator): Default-deny with allow rules for DNS, API server access, and metrics ingress
  • Operand namespace (openshift-apiserver): Default-deny with allow rules for DNS, kube-apiserver access, etcd access (port 2379), and ingress on port 8443

Summary by CodeRabbit

  • New Features
  • Added default-deny network policies for the API server and its operator to block unsolicited traffic by default.
  • Added explicit allow rules permitting only required TCP access to the API server endpoints.
  • Improved isolation between control-plane components with explicit egress/ingress rules for stricter segmentation.
  • Included annotations to support self-managed HA and single-node developer scenarios.

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.

@dusk125
Copy link
Author

dusk125 commented Mar 11, 2026

/retest-required

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 11, 2026

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

@dusk125
Copy link
Author

dusk125 commented Mar 11, 2026

/payload 4.22 nightly blocking
/payload 4.22 nightly informing

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 11, 2026

@dusk125: trigger 14 job(s) of type blocking for the nightly release of OCP 4.22

  • periodic-ci-openshift-release-main-ci-4.22-e2e-aws-upgrade-ovn-single-node
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-ovn-upgrade-fips
  • periodic-ci-openshift-release-main-ci-4.22-e2e-azure-ovn-upgrade
  • periodic-ci-openshift-release-main-ci-4.22-upgrade-from-stable-4.21-e2e-gcp-ovn-rt-upgrade
  • periodic-ci-openshift-hypershift-release-4.22-periodics-e2e-aws-ovn-conformance
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-ovn-serial-1of2
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-ovn-serial-2of2
  • periodic-ci-openshift-release-main-ci-4.22-e2e-aws-ovn-techpreview
  • periodic-ci-openshift-release-main-ci-4.22-e2e-aws-ovn-techpreview-serial-1of3
  • periodic-ci-openshift-release-main-ci-4.22-e2e-aws-ovn-techpreview-serial-2of3
  • periodic-ci-openshift-release-main-ci-4.22-e2e-aws-ovn-techpreview-serial-3of3
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-ovn-upgrade-fips-no-nat-instance
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ipi-ovn-ipv4
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ipi-ovn-ipv6

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/6202c4c0-1d6f-11f1-9148-00284363ce4b-0

trigger 65 job(s) of type informing for the nightly release of OCP 4.22

  • periodic-ci-openshift-hypershift-release-4.22-periodics-e2e-azure-aks-ovn-conformance
  • periodic-ci-openshift-release-main-nightly-4.22-console-aws
  • periodic-ci-openshift-cluster-control-plane-machine-set-operator-release-4.22-periodics-e2e-aws
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-csi
  • periodic-ci-openshift-release-main-ci-4.22-e2e-aws-ovn
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-ovn-cgroupsv2
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-ovn-fips
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-ovn-single-node
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-ovn-single-node-csi
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-ovn-single-node-serial
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-ovn-single-node-techpreview
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-ovn-single-node-techpreview-serial
  • periodic-ci-openshift-release-main-nightly-4.22-upgrade-from-stable-4.21-e2e-aws-upgrade-ovn-single-node
  • periodic-ci-openshift-release-main-ci-4.22-e2e-aws-ovn-upgrade-out-of-change
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-ovn-upi
  • periodic-ci-openshift-cluster-control-plane-machine-set-operator-release-4.22-periodics-e2e-azure
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-azure-csi
  • periodic-ci-openshift-release-main-ci-4.22-e2e-azure-ovn
  • periodic-ci-openshift-release-main-ci-4.22-e2e-azure-ovn-serial
  • periodic-ci-openshift-release-main-ci-4.22-e2e-azure-ovn-techpreview
  • periodic-ci-openshift-release-main-ci-4.22-e2e-azure-ovn-techpreview-serial
  • periodic-ci-openshift-release-main-ci-4.22-e2e-azure-ovn-upgrade-out-of-change
  • periodic-ci-openshift-release-main-cnv-nightly-4.22-deploy-azure-kubevirt-ovn
  • periodic-ci-openshift-cluster-control-plane-machine-set-operator-release-4.22-periodics-e2e-gcp
  • periodic-ci-openshift-release-main-ci-4.22-e2e-gcp-ovn
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-gcp-ovn-csi
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-gcp-ovn-rt
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-gcp-ovn-serial
  • periodic-ci-openshift-release-main-ci-4.22-e2e-gcp-ovn-techpreview
  • periodic-ci-openshift-release-main-ci-4.22-e2e-gcp-ovn-techpreview-serial
  • periodic-ci-openshift-release-main-ci-4.22-upgrade-from-stable-4.21-e2e-gcp-ovn-upgrade
  • periodic-ci-openshift-release-main-ci-4.22-e2e-gcp-ovn-upgrade
  • periodic-ci-openshift-hypershift-release-4.22-periodics-e2e-azure-kubevirt-ovn
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ipi-ovn-dualstack
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ipi-ovn-dualstack-techpreview
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ipi-ovn-ipv6-techpreview
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ipi-ovn-serial-ipv4
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ipi-ovn-serial-virtualmedia-1of2
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ipi-ovn-serial-virtualmedia-2of2
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ipi-ovn-techpreview
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ipi-ovn-upgrade
  • periodic-ci-openshift-release-main-nightly-4.22-upgrade-from-stable-4.21-e2e-metal-ipi-ovn-upgrade
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ipi-serial-ovn-ipv6
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ipi-serial-ovn-dualstack
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ipi-upgrade-ovn-ipv6
  • periodic-ci-openshift-release-main-nightly-4.22-upgrade-from-stable-4.21-e2e-metal-ipi-upgrade-ovn-ipv6
  • periodic-ci-openshift-release-main-nightly-4.22-metal-ovn-single-node-recert-cluster-rename
  • periodic-ci-openshift-osde2e-main-nightly-4.22-osd-aws
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-osd-ccs-gcp
  • periodic-ci-openshift-osde2e-main-nightly-4.22-osd-gcp
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-aws-ovn-proxy
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-metal-ovn-single-node-live-iso
  • periodic-ci-openshift-eng-ocp-qe-perfscale-ci-main-aws-4.22-nightly-x86-payload-control-plane-6nodes
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-telco5g
  • periodic-ci-openshift-release-main-ci-4.22-upgrade-from-stable-4.21-e2e-aws-ovn-upgrade
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-vsphere-ovn
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-vsphere-ovn-csi
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-vsphere-ovn-serial
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-vsphere-ovn-techpreview
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-vsphere-ovn-techpreview-serial
  • periodic-ci-openshift-release-main-ci-4.22-e2e-vsphere-ovn-upgrade
  • periodic-ci-openshift-release-main-ci-4.22-upgrade-from-stable-4.21-e2e-vsphere-ovn-upgrade
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-vsphere-ovn-upi
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-vsphere-ovn-upi-serial
  • periodic-ci-openshift-release-main-nightly-4.22-e2e-vsphere-static-ovn

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/6202c4c0-1d6f-11f1-9148-00284363ce4b-1

@dusk125
Copy link
Author

dusk125 commented Mar 12, 2026

/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 Mar 12, 2026
@liouk
Copy link
Member

liouk commented Mar 17, 2026

/lgtm

Copy link
Contributor

@sanchezl sanchezl left a comment

Choose a reason for hiding this comment

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

/lgtm

@openshift-ci openshift-ci bot added the lgtm Indicates that a PR is ready to be merged. label Mar 17, 2026
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 17, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: dusk125, liouk, sanchezl

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 Mar 17, 2026
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. 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.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants