Skip to content

OCPCLOUD-3507: Add OTE e2e tests for ClusterAPIMachineManagement feature gate#606

Open
pmeida wants to merge 1 commit into
openshift:mainfrom
pmeida:OCPCLOUD-3507
Open

OCPCLOUD-3507: Add OTE e2e tests for ClusterAPIMachineManagement feature gate#606
pmeida wants to merge 1 commit into
openshift:mainfrom
pmeida:OCPCLOUD-3507

Conversation

@pmeida

@pmeida pmeida commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds 6 non-disruptive health-check e2e tests registered with the OTE binary that validate the Cluster API stack is correctly installed and operational when the ClusterAPIMachineManagement feature gate is enabled. These tests provide the Sippy signal required for feature gate promotion.

Tests

All tests are blocking, capio/parallel → openshift/conformance/parallel:

Context Test
Operator & controller deployments capi-operator deployment available
Operator & controller deployments cluster-api ClusterOperator reporting healthy
Operator & controller deployments capi-controllers deployment available
Operator & controller deployments capi-installer deployment available
CRD & API readiness core Cluster API CRDs installed and established
Management cluster resources management cluster kubeconfig Secret present

Design notes

  • InfrastructureReady check uses WaitLong (15 min) since infra reconciliation can be slow on degraded clusters
  • Validated against a real AWS TechPreview cluster — all 6 tests pass both via bin/cluster-capi-operator-tests-ext run-suite capio/parallel and via make e2e

Dependencies

Summary by CodeRabbit

  • Tests
    • Added end-to-end coverage for Cluster API machine management, including checks for controller health, deployment availability, required CRDs, and management cluster kubeconfig availability.
  • Chores
    • Added shared constants used by the Cluster API-related test setup.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

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

openshift-ci-robot commented Jun 23, 2026

Copy link
Copy Markdown

@pmeida: This pull request references OCPCLOUD-3507 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set.

Details

In response to this:

Summary

Adds 10 non-disruptive health-check e2e tests registered with the OTE binary that validate the Cluster API stack is correctly installed and operational when the ClusterAPIMachineManagement feature gate is enabled. These tests provide the Sippy signal required for feature gate promotion per OCPSTRAT-2660.

Follows the same pattern as #599 (CRD Compatibility Checker tests).

Tests

All tests are blocking, capio/parallel → openshift/conformance/parallel:

Context Test
Operator & controller deployments capi-operator deployment available
Operator & controller deployments cluster-api ClusterOperator reporting healthy
Operator & controller deployments capi-controllers deployment available
Operator & controller deployments capi-installer deployment available
Provider images & initialization capi-installer-images ConfigMap present
CRD & API readiness core Cluster API CRDs installed and established
CRD & API readiness platform-specific infrastructure CRDs installed
Management cluster resources management Cluster object present with InfrastructureReady=True
Management cluster resources platform-specific infrastructure cluster object present
Management cluster resources management cluster kubeconfig Secret present

Design notes

  • Platform-specific tests derive the infrastructure Kind from Cluster.Spec.InfrastructureRef.GroupKind() — no hardcoded platform map, works for any platform CAPI supports without code changes
  • API version is resolved dynamically via the REST mapper to avoid version pinning across provider upgrades
  • InfrastructureReady check uses WaitLong (15 min) since infra reconciliation can be slow on degraded clusters
  • Validated against a real AWS TechPreview cluster — all 10 tests pass

Dependencies

🤖 Generated with Claude Code

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.

@coderabbitai

coderabbitai Bot commented Jun 23, 2026

Copy link
Copy Markdown

Walkthrough

A new feature-gated ordered e2e suite verifies Cluster API operator and controller deployment health, CRD establishment, and the presence of the management cluster kubeconfig Secret. New framework constants are added for Cluster API operator-related names.

Changes

Cluster API Machine Management E2E Suite

Layer / File(s) Summary
Suite gate and framework constants
e2e/cluster_api_machine_management.go, e2e/framework/framework.go
Adds an ordered Ginkgo suite gated on ClusterAPIMachineManagement and exports Cluster API framework names used by the suite.
Operator and deployment health
e2e/cluster_api_machine_management.go
Checks DeploymentAvailable=True for capi-operator, capi-controllers, and capi-installer, and validates the ClusterOperator conditions Available=True, Degraded=False, and Progressing=False.
CRD establishment checks
e2e/cluster_api_machine_management.go
Polls the core Cluster API CRDs and asserts each one reports Established=True.
Management kubeconfig Secret
e2e/cluster_api_machine_management.go
Asserts the <clusterName>-kubeconfig Secret exists in the CAPI namespace and includes a value key.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested labels

approved, verified

Suggested reviewers

  • nrb
  • racheljpg
🚥 Pre-merge checks | ✅ 13 | ❌ 2

❌ Failed checks (2 warnings)

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.
Microshift Test Compatibility ⚠️ Warning The new suite is not MicroShift-guarded and includes an untagged config.openshift.io ClusterOperator check. Add a MicroShift skip or tag, e.g. [Skipped:MicroShift] on the suite or [apigroup:config.openshift.io] on the ClusterOperator test.
✅ Passed checks (13 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: new OTE e2e tests for the ClusterAPIMachineManagement feature gate.
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 All new Ginkgo titles are static and descriptive; dynamic values like clusterName appear only in test bodies, not titles.
Test Structure And Quality ✅ Passed Each It is focused, all cluster waits have explicit timeouts, and the suite matches existing e2e patterns; it creates no resources needing cleanup.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The new Ginkgo tests only check operator/deployment/CRD/secret readiness; no node counts, scheduling, drains, or topology-based HA assumptions found.
Topology-Aware Scheduling Compatibility ✅ Passed PASS: The PR only adds e2e health-check tests and constants; no deployment manifests, operator code, or controller scheduling constraints were introduced.
Ote Binary Stdout Contract ✅ Passed No process-level stdout writes were added; the new e2e code only uses Ginkgo test blocks and stderr for the lone warning.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed New Ginkgo tests only read Kubernetes objects/deployments and contain no hardcoded IPv4, host/IP parsing, or external network calls.
No-Weak-Crypto ✅ Passed The new code only adds health-check tests and constants; no weak crypto, custom crypto, or secret/token comparisons were introduced.
Container-Privileges ✅ Passed Changed files are Go e2e tests/constants only; no container/K8s manifest fields like privileged, hostNetwork, hostPID, hostIPC, or allowPrivilegeEscalation were added.
No-Sensitive-Data-In-Logs ✅ Passed New tests add no log/printf calls; the only existing By log in framework.go logs object type/name, not secrets.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@openshift-ci openshift-ci Bot requested review from RadekManak and racheljpg June 23, 2026 09:51
@openshift-ci

openshift-ci Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

[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 radekmanak 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

@pmeida

pmeida commented Jun 23, 2026

Copy link
Copy Markdown
Contributor Author

/ok-to-test

@openshift-ci openshift-ci Bot added the ok-to-test Indicates a non-member PR verified by an org member that is safe to test. label Jun 23, 2026
@pmeida

pmeida commented Jun 23, 2026

Copy link
Copy Markdown
Contributor Author

To confirm if e2e tests go trough
/test e2e-aws-capi-techpreview

@openshift-ci

openshift-ci Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

@pmeida: trigger 0 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

@openshift-ci

openshift-ci Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

@pmeida: This PR was included in a payload test run from #606
trigger 0 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

@openshift-ci

openshift-ci Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

@pmeida: trigger 0 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

@pmeida

pmeida commented Jun 23, 2026

Copy link
Copy Markdown
Contributor Author

/payload-job-with-prs periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-single-node-techpreview-serial openshift/origin#31307

@openshift-ci

openshift-ci Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

@pmeida: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-single-node-techpreview-serial

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/7d80c200-6ef1-11f1-8a6b-01a933de5987-0

@pmeida

pmeida commented Jun 23, 2026

Copy link
Copy Markdown
Contributor Author

/payload-job-with-prs periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-single-node-techpreview openshift/origin#31307

@openshift-ci

openshift-ci Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

@pmeida: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-single-node-techpreview

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/f9d50680-6f15-11f1-876b-e0aef72228f3-0

@pmeida

pmeida commented Jun 23, 2026

Copy link
Copy Markdown
Contributor Author

/payload-job-with-prs periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-single-node-techpreview openshift/origin#31307

@openshift-ci

openshift-ci Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

@pmeida: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-nightly-5.0-e2e-aws-ovn-single-node-techpreview

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/0da6c440-6f17-11f1-88d3-1d650fa5fcee-0

@pmeida

pmeida commented Jun 23, 2026

Copy link
Copy Markdown
Contributor Author

/payload-job-with-prs periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn-techpreview openshift/origin#31307

@openshift-ci

openshift-ci Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

@pmeida: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn-techpreview

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/ccc72ee0-6f18-11f1-8b1e-eefb4a048f63-0

@pmeida

pmeida commented Jun 23, 2026

Copy link
Copy Markdown
Contributor Author

@pmeida: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn-techpreview

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/ccc72ee0-6f18-11f1-8b1e-eefb4a048f63-0

OTE run validation. Has to be done like this until we get the origin PR merged. Afterwards, we can also see OTE tests run through the e2e-aws-ovn-techpreview presubmit for this specific example

@pmeida

pmeida commented Jun 25, 2026

Copy link
Copy Markdown
Contributor Author
image

from: periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn-techpreview

All OTE tests passing ✅

Comment thread e2e/cluster_api_machine_management.go
Comment thread e2e/cluster_api_machine_management.go Outdated
Comment on lines +46 to +56
deployment := &appsv1.Deployment{}
Eventually(func(g Gomega) {
g.Expect(cl.Get(ctx, client.ObjectKey{
Name: "capi-operator",
Namespace: framework.CAPIOperatorNamespace,
}, deployment)).To(Succeed())
g.Expect(deployment.Status.Conditions).To(ContainElement(SatisfyAll(
HaveField("Type", Equal(appsv1.DeploymentAvailable)),
HaveField("Status", Equal(corev1.ConditionTrue)),
)))
}).WithTimeout(framework.WaitMedium).WithPolling(framework.RetryMedium).Should(Succeed())

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.

Please can you write these so that the test assertion is done by Eventually, not inside the closure. This means we get a much better error message if it fails. Something like:

Suggested change
deployment := &appsv1.Deployment{}
Eventually(func(g Gomega) {
g.Expect(cl.Get(ctx, client.ObjectKey{
Name: "capi-operator",
Namespace: framework.CAPIOperatorNamespace,
}, deployment)).To(Succeed())
g.Expect(deployment.Status.Conditions).To(ContainElement(SatisfyAll(
HaveField("Type", Equal(appsv1.DeploymentAvailable)),
HaveField("Status", Equal(corev1.ConditionTrue)),
)))
}).WithTimeout(framework.WaitMedium).WithPolling(framework.RetryMedium).Should(Succeed())
Eventually(func(g Gomega) *appsv1.Deployment {
// N.B. This closure can be replaced by komega.Object if you import that
deployment := &appsv1.Deployment{}
err := cl.Get(ctx, client.ObjectKey{
Name: "capi-operator",
Namespace: framework.CAPIOperatorNamespace,
}, deployment)
if err != nil {
return nil, err
}
}).WithTimeout(framework.WaitMedium).WithPolling(framework.RetryMedium).Should(
HaveField("Status.Conditions", test.HasCondition(appsv1.DeploymentAvailable)).WithStatus(corev1.ConditionTrue))
)

The repo has a Condition matcher which you should also use. I'll have used it incorrectly here, but it's something like that.

The advantage of this structure is that Gomega has the full context when it fails and can produce a better error.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I think I implemented the requested with a slight difference.

pkg/test.HaveCondition - can't import pkg/test from e2e/*.go files. The chain e2e → pkg/test → pkg/providerimages → manifests-gen causes go mod tidy to fail during make vendor because manifests-gen has a placeholder version (v0.0.0-00010101000000-000000000000) that doesn't exist in any registry.
Reference: OTE binary (go build ./openshift-tests-extension/cmd/) imports e2e/ as a regular package → any regular .go file in e2e/ is compiled into the binary → if those files import pkg/test, go mod tidy traces the chain to manifests-gen and fails. _test.go files are ignored by go build so importing there is fine.

The go work vendor path works, but make vendor runs go mod tidy per-module first and hits this wall.
I used HaveField + ContainElement + SatisfyAll which produces equivalent failure output.
The fix could be to move provider_fixtures.go (the only file in pkg/test that pulls in providerimages) to its own sub-package - all its callers are _test.go files so the impact is contained.

Happy to do that as a follow-up if that's preferred.

Comment thread e2e/cluster_api_machine_management.go Outdated
Comment thread e2e/cluster_api_machine_management.go Outdated
Comment thread e2e/cluster_api_machine_management.go Outdated
Comment on lines +112 to +121
Context("Provider images & initialization", func() {
It("should have the capi-installer-images ConfigMap present", func() {
cm := &corev1.ConfigMap{}
Expect(cl.Get(ctx, client.ObjectKey{
Name: framework.CAPIInstallerImagesConfigMapName,
Namespace: framework.CAPIOperatorNamespace,
}, cm)).To(Succeed())
Expect(cm.Data).NotTo(BeEmpty())
})
})

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.

I would prefer we did not test this in an e2e. It's an implementation detail which may change without affecting the readiness of the component. And if it was not present, all the other e2es would also fail anyway. I think this is noise.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

You are absolutely right!
I was trying to extend the tests to 10. So I proposed this in the PR waiting for possible negative feedback.

5 tests are enough to fulfil the promotion requirements.

}).WithTimeout(framework.WaitMedium).WithPolling(framework.RetryMedium).Should(Succeed())
})

It("should have the cluster-api ClusterOperator reporting healthy", func() {

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.

Do we need this? I guess it doesn't hurt, but a failure here would definitely trigger other failures. I wonder if it's redundant. @simkam thoughts?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I kept it for now. A deployment being Available and a ClusterOperator reporting healthy are two different signals. It also is the primary user-visible health indicator for the stack, so verifying the operator writes it correctly seemed worth the test.

what do you think @simkam

Comment thread e2e/cluster_api_machine_management.go Outdated
Comment on lines +143 to +161
It("should have platform-specific infrastructure CRDs installed", func() {
cluster := &clusterv1.Cluster{}
Expect(cl.Get(ctx, client.ObjectKey{Name: clusterName, Namespace: framework.CAPINamespace}, cluster)).To(Succeed())

mapping, err := cl.RESTMapper().RESTMapping(cluster.Spec.InfrastructureRef.GroupKind())
Expect(err).NotTo(HaveOccurred())

crdName := mapping.Resource.Resource + "." + mapping.Resource.Group
crd := &apiextensionsv1.CustomResourceDefinition{}

By("Fetching the infrastructure CRD " + crdName)
Expect(cl.Get(ctx, client.ObjectKey{Name: crdName}, crd)).To(Succeed())

By("Verifying the infrastructure CRD is established")
Expect(crd.Status.Conditions).To(ContainElement(SatisfyAll(
HaveField("Type", Equal(apiextensionsv1.Established)),
HaveField("Status", Equal(apiextensionsv1.ConditionTrue)),
)))
})

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.

We MUST NOT test this here. It is not controlled by this feature gate. This is controlled by multiple feature-specific gates, e.g. ClusterAPIMachineManagementAWS.

When we do test it, the tests should be specific to a platform and hard-code the expected names rather than infer them through heuristics.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

again doing an abstracted test for the same reasons as above
now removed

Comment thread e2e/cluster_api_machine_management.go Outdated
Comment thread e2e/cluster_api_machine_management.go Outdated
…ure gate

Add 10 non-disruptive health-check tests registered with the OTE binary
that validate the Cluster API stack is correctly installed and operational
when the ClusterAPIMachineManagement feature gate is enabled. Tests
provide the Sippy signal required for feature gate promotion.

Tests (all blocking, capio/parallel):
- capi-operator deployment available in openshift-cluster-api-operator
- cluster-api ClusterOperator reporting Available, not Degraded, not Progressing
- capi-controllers deployment available in openshift-cluster-api
- capi-installer deployment available in openshift-cluster-api-operator
- capi-installer-images ConfigMap present in openshift-cluster-api-operator
- Core CAPI CRDs (clusters, machines, machinesets) installed and established
- Platform-specific infrastructure CRDs installed (derived from Cluster.Spec.InfrastructureRef)
- Management Cluster object present with InfrastructureReady=True
- Platform-specific infrastructure cluster object present (AWSCluster etc.)
- Management cluster kubeconfig Secret present

Platform-specific tests derive the infra Kind from the live Cluster object's
InfrastructureRef rather than a hardcoded platform map, so no code changes are
needed when new platforms are added.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
@pmeida

pmeida commented Jun 25, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-capi-techpreview

@pmeida

pmeida commented Jun 25, 2026

Copy link
Copy Markdown
Contributor Author

/payload-job-with-prs periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn-techpreview openshift/origin#31307

@openshift-ci

openshift-ci Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

@pmeida: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-release-main-ci-5.0-e2e-aws-ovn-techpreview

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/d19fcd00-70ad-11f1-9de7-ebc4da7c8a95-0

@pmeida

pmeida commented Jun 25, 2026

Copy link
Copy Markdown
Contributor Author

ci/prow/e2e-aws-capi-techpreview flake addressed in #610
A retest will most probably fix it so I will not mark as a dependency of this

@pmeida

pmeida commented Jun 26, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-capi-techpreview

@pmeida

pmeida commented Jun 26, 2026

Copy link
Copy Markdown
Contributor Author

new flake addressed in #611
submitting another retest, if failing with same issue I'll add a dependency to both the above

@pmeida

pmeida commented Jun 26, 2026

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-capi-techpreview

@openshift-ci

openshift-ci Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

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

@pmeida pmeida requested a review from mdbooth June 26, 2026 14:46
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. ok-to-test Indicates a non-member PR verified by an org member that is safe to test.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants