Skip to content

Commit

Permalink
Update with changes on main
Browse files Browse the repository at this point in the history
  • Loading branch information
RadekManak committed Jan 12, 2023
1 parent df582ab commit e88d98e
Show file tree
Hide file tree
Showing 13 changed files with 54 additions and 53 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ require (
sigs.k8s.io/controller-tools v0.10.0
)

replace github.com/openshift/cluster-api-actuator-pkg => github.com/radekmanak/cluster-api-actuator-pkg v0.0.0-20230112110718-502e870419be
replace github.com/openshift/cluster-api-actuator-pkg => github.com/radekmanak/cluster-api-actuator-pkg v0.0.0-20230112124705-4cf202593512

require (
4d63.com/gochecknoglobals v0.1.0 // indirect
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -593,8 +593,8 @@ github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 h1:TCg2WBOl
github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0=
github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs=
github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ=
github.com/radekmanak/cluster-api-actuator-pkg v0.0.0-20230112110718-502e870419be h1:8okrFbuJMIfiCO7UUd6ZA8ozk7H9Vts9DfQ2GDwA+KI=
github.com/radekmanak/cluster-api-actuator-pkg v0.0.0-20230112110718-502e870419be/go.mod h1:K1q2dz7zr4pTzE3EbPNuNeIiUA8LNby4+2rKoyKOoe8=
github.com/radekmanak/cluster-api-actuator-pkg v0.0.0-20230112124705-4cf202593512 h1:ZIkDRTEJyG4kTsnk5eLdp3QHjGSg0I7X/JQ2RNIX0Qk=
github.com/radekmanak/cluster-api-actuator-pkg v0.0.0-20230112124705-4cf202593512/go.mod h1:K1q2dz7zr4pTzE3EbPNuNeIiUA8LNby4+2rKoyKOoe8=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"github.com/openshift/cluster-api-actuator-pkg/pkg/testutils"
"github.com/openshift/cluster-control-plane-machine-set-operator/pkg/machineproviders/providers/openshift/machine/v1beta1/failuredomain"

"github.com/openshift/cluster-api-actuator-pkg/pkg/testutils/resourcebuilder"
corev1resourcebuilder "github.com/openshift/cluster-api-actuator-pkg/pkg/testutils/resourcebuilder/core/v1"
machinev1resourcebuilder "github.com/openshift/cluster-api-actuator-pkg/pkg/testutils/resourcebuilder/machine/v1"
machinev1beta1resourcebuilder "github.com/openshift/cluster-api-actuator-pkg/pkg/testutils/resourcebuilder/machine/v1beta1"
Expand All @@ -39,7 +40,7 @@ var _ = Describe("Failure Domain Mapping", func() {
var namespaceName string

cpmsBuilder := machinev1resourcebuilder.ControlPlaneMachineSet().WithReplicas(3)
machineBuilder := machinev1beta1resourcebuilder.Machine().AsMaster().WithLabel(machinev1beta1.MachineClusterIDLabel, "cpms-cluster-test-id")
machineBuilder := machinev1beta1resourcebuilder.Machine().AsMaster().WithLabel(machinev1beta1.MachineClusterIDLabel, resourcebuilder.TestClusterIDValue)

usEast1aSubnet := machinev1beta1.AWSResourceReference{
Filters: []machinev1beta1.Filter{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,16 +137,14 @@ var _ = Describe("MachineProvider", func() {
})

Context("GetMachineInfos", func() {
const clusterID = "cpms-cluster-test-id"

providerSpecBuilder := machinev1beta1resourcebuilder.AWSProviderSpec()
masterMachineBuilder := machinev1beta1resourcebuilder.Machine().AsMaster().WithLabel(machinev1beta1.MachineClusterIDLabel, clusterID).WithNamespace(namespaceName)
masterMachineBuilder := machinev1beta1resourcebuilder.Machine().AsMaster().WithLabel(machinev1beta1.MachineClusterIDLabel, resourcebuilder.TestClusterIDValue).WithNamespace(namespaceName)

machineGVR := machinev1beta1.GroupVersion.WithResource("machines")
nodeGVR := corev1.SchemeGroupVersion.WithResource("nodes")

masterLabels := resourcebuilder.NewMachineRoleLabels("master")
masterLabels[machinev1beta1.MachineClusterIDLabel] = clusterID
masterLabels[machinev1beta1.MachineClusterIDLabel] = resourcebuilder.TestClusterIDValue

unreadyMachineInfoBuilder := machineprovidersresourcebuilder.MachineInfo().
WithMachineGVR(machineGVR).
Expand All @@ -165,7 +163,7 @@ var _ = Describe("MachineProvider", func() {
WithNeedsUpdate(false)

masterMachineName := func(suffix string) string {
return fmt.Sprintf("%s-master-%s", clusterID, suffix)
return fmt.Sprintf("%s-master-%s", resourcebuilder.TestClusterIDValue, suffix)
}

type getMachineInfosTableInput struct {
Expand Down Expand Up @@ -204,7 +202,7 @@ var _ = Describe("MachineProvider", func() {

template := machinev1beta1resourcebuilder.OpenShiftMachineV1Beta1Template().
WithProviderSpecBuilder(providerSpec).
WithLabel(machinev1beta1.MachineClusterIDLabel, clusterID).
WithLabel(machinev1beta1.MachineClusterIDLabel, resourcebuilder.TestClusterIDValue).
BuildTemplate().OpenShiftMachineV1Beta1Machine
Expect(template).ToNot(BeNil())

Expand Down Expand Up @@ -791,11 +789,11 @@ var _ = Describe("MachineProvider", func() {
}),
Entry("when the machine names do not fit the pattern, fall back to matching on failure domains", getMachineInfosTableInput{
machines: []*machinev1beta1.Machine{
masterMachineBuilder.WithName(clusterID + "-machine-a").WithProviderSpecBuilder(providerSpecBuilder.WithAvailabilityZone("us-east-1a").WithSubnet(usEast1aSubnetbeta1)).
masterMachineBuilder.WithName(resourcebuilder.TestClusterIDValue + "-machine-a").WithProviderSpecBuilder(providerSpecBuilder.WithAvailabilityZone("us-east-1a").WithSubnet(usEast1aSubnetbeta1)).
WithPhase("Running").WithNodeRef(corev1.ObjectReference{Name: "node-1"}).Build(),
masterMachineBuilder.WithName(clusterID + "-machine-0").WithProviderSpecBuilder(providerSpecBuilder.WithAvailabilityZone("us-east-1b").WithSubnet(usEast1bSubnetbeta1)).
masterMachineBuilder.WithName(resourcebuilder.TestClusterIDValue + "-machine-0").WithProviderSpecBuilder(providerSpecBuilder.WithAvailabilityZone("us-east-1b").WithSubnet(usEast1bSubnetbeta1)).
WithPhase("Running").WithNodeRef(corev1.ObjectReference{Name: "node-0"}).Build(),
masterMachineBuilder.WithName(clusterID + "-master-c").WithProviderSpecBuilder(providerSpecBuilder.WithAvailabilityZone("us-east-1c").WithSubnet(usEast1cSubnetbeta1)).
masterMachineBuilder.WithName(resourcebuilder.TestClusterIDValue + "-master-c").WithProviderSpecBuilder(providerSpecBuilder.WithAvailabilityZone("us-east-1c").WithSubnet(usEast1cSubnetbeta1)).
WithPhase("Running").WithNodeRef(corev1.ObjectReference{Name: "node-2"}).Build(),
},
failureDomains: map[int32]failuredomain.FailureDomain{
Expand All @@ -804,15 +802,15 @@ var _ = Describe("MachineProvider", func() {
2: failuredomain.NewAWSFailureDomain(machinev1resourcebuilder.AWSFailureDomain().WithAvailabilityZone("us-east-1a").WithSubnet(usEast1aSubnet).Build()),
},
expectedMachineInfos: []machineproviders.MachineInfo{
readyMachineInfoBuilder.WithIndex(0).WithMachineName(clusterID + "-machine-0").WithNodeName("node-0").Build(),
readyMachineInfoBuilder.WithIndex(1).WithMachineName(clusterID + "-master-c").WithNodeName("node-2").Build(),
readyMachineInfoBuilder.WithIndex(2).WithMachineName(clusterID + "-machine-a").WithNodeName("node-1").Build(),
readyMachineInfoBuilder.WithIndex(0).WithMachineName(resourcebuilder.TestClusterIDValue + "-machine-0").WithNodeName("node-0").Build(),
readyMachineInfoBuilder.WithIndex(1).WithMachineName(resourcebuilder.TestClusterIDValue + "-master-c").WithNodeName("node-2").Build(),
readyMachineInfoBuilder.WithIndex(2).WithMachineName(resourcebuilder.TestClusterIDValue + "-machine-a").WithNodeName("node-1").Build(),
},
expectedLogs: []testutils.LogEntry{
{
Level: 4,
KeysAndValues: []interface{}{
"machineName", clusterID + "-machine-0",
"machineName", resourcebuilder.TestClusterIDValue + "-machine-0",
"nodeName", "node-0",
"index", int32(0),
"ready", true,
Expand All @@ -824,7 +822,7 @@ var _ = Describe("MachineProvider", func() {
{
Level: 4,
KeysAndValues: []interface{}{
"machineName", clusterID + "-master-c",
"machineName", resourcebuilder.TestClusterIDValue + "-master-c",
"nodeName", "node-2",
"index", int32(1),
"ready", true,
Expand All @@ -836,7 +834,7 @@ var _ = Describe("MachineProvider", func() {
{
Level: 4,
KeysAndValues: []interface{}{
"machineName", clusterID + "-machine-a",
"machineName", resourcebuilder.TestClusterIDValue + "-machine-a",
"nodeName", "node-1",
"index", int32(2),
"ready", true,
Expand All @@ -849,11 +847,11 @@ var _ = Describe("MachineProvider", func() {
}),
Entry("when the machine names do not fit the pattern, and the failure domains are not recognised, returns an error", getMachineInfosTableInput{
machines: []*machinev1beta1.Machine{
masterMachineBuilder.WithName(clusterID + "-machine-a").WithProviderSpecBuilder(providerSpecBuilder.WithAvailabilityZone("us-east-1a").WithSubnet(usEast1aSubnetbeta1)).
masterMachineBuilder.WithName(resourcebuilder.TestClusterIDValue + "-machine-a").WithProviderSpecBuilder(providerSpecBuilder.WithAvailabilityZone("us-east-1a").WithSubnet(usEast1aSubnetbeta1)).
WithPhase("Running").WithNodeRef(corev1.ObjectReference{Name: "node-0"}).Build(),
masterMachineBuilder.WithName(clusterID + "-machine-1").WithProviderSpecBuilder(providerSpecBuilder.WithAvailabilityZone("us-east-1f")).
masterMachineBuilder.WithName(resourcebuilder.TestClusterIDValue + "-machine-1").WithProviderSpecBuilder(providerSpecBuilder.WithAvailabilityZone("us-east-1f")).
WithPhase("Running").WithNodeRef(corev1.ObjectReference{Name: "node-1"}).Build(),
masterMachineBuilder.WithName(clusterID + "-master-c").WithProviderSpecBuilder(providerSpecBuilder.WithAvailabilityZone("us-east-1d")).
masterMachineBuilder.WithName(resourcebuilder.TestClusterIDValue + "-master-c").WithProviderSpecBuilder(providerSpecBuilder.WithAvailabilityZone("us-east-1d")).
WithPhase("Running").WithNodeRef(corev1.ObjectReference{Name: "node-2"}).Build(),
},
failureDomains: map[int32]failuredomain.FailureDomain{
Expand Down
2 changes: 1 addition & 1 deletion pkg/test/suite_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2022 Red Hat, Inc.
Copyright 2023 Red Hat, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down
19 changes: 10 additions & 9 deletions pkg/webhooks/controlplanemachineset/webhooks_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
machinev1 "github.com/openshift/api/machine/v1"
machinev1beta1 "github.com/openshift/api/machine/v1beta1"
"github.com/openshift/cluster-api-actuator-pkg/pkg/testutils"
"github.com/openshift/cluster-api-actuator-pkg/pkg/testutils/resourcebuilder"
corev1resourcebuilder "github.com/openshift/cluster-api-actuator-pkg/pkg/testutils/resourcebuilder/core/v1"
machinev1resourcebuilder "github.com/openshift/cluster-api-actuator-pkg/pkg/testutils/resourcebuilder/machine/v1"
machinev1beta1resourcebuilder "github.com/openshift/cluster-api-actuator-pkg/pkg/testutils/resourcebuilder/machine/v1beta1"
Expand Down Expand Up @@ -137,7 +138,7 @@ var _ = Describe("Webhooks", func() {
MatchLabels: map[string]string{
openshiftMachineRoleLabel: masterMachineRole,
openshiftMachineTypeLabel: masterMachineRole,
machinev1beta1.MachineClusterIDLabel: "cpms-cluster-test-id",
machinev1beta1.MachineClusterIDLabel: resourcebuilder.TestClusterIDValue,
},
}).WithMachineTemplateBuilder(
machineTemplate.WithLabels(map[string]string{
Expand Down Expand Up @@ -170,12 +171,12 @@ var _ = Describe("Webhooks", func() {
cpms := builder.WithSelector(metav1.LabelSelector{
MatchLabels: map[string]string{
openshiftMachineTypeLabel: masterMachineRole,
machinev1beta1.MachineClusterIDLabel: "cpms-cluster-test-id",
machinev1beta1.MachineClusterIDLabel: resourcebuilder.TestClusterIDValue,
},
}).WithMachineTemplateBuilder(
machineTemplate.WithLabels(map[string]string{
openshiftMachineTypeLabel: masterMachineRole,
machinev1beta1.MachineClusterIDLabel: "cpms-cluster-test-id",
machinev1beta1.MachineClusterIDLabel: resourcebuilder.TestClusterIDValue,
}),
).Build()

Expand All @@ -187,13 +188,13 @@ var _ = Describe("Webhooks", func() {
MatchLabels: map[string]string{
openshiftMachineRoleLabel: "worker",
openshiftMachineTypeLabel: masterMachineRole,
machinev1beta1.MachineClusterIDLabel: "cpms-cluster-test-id",
machinev1beta1.MachineClusterIDLabel: resourcebuilder.TestClusterIDValue,
},
}).WithMachineTemplateBuilder(
machineTemplate.WithLabels(map[string]string{
openshiftMachineRoleLabel: "worker",
openshiftMachineTypeLabel: masterMachineRole,
machinev1beta1.MachineClusterIDLabel: "cpms-cluster-test-id",
machinev1beta1.MachineClusterIDLabel: resourcebuilder.TestClusterIDValue,
}),
).Build()

Expand All @@ -204,12 +205,12 @@ var _ = Describe("Webhooks", func() {
cpms := builder.WithSelector(metav1.LabelSelector{
MatchLabels: map[string]string{
openshiftMachineRoleLabel: masterMachineRole,
machinev1beta1.MachineClusterIDLabel: "cpms-cluster-test-id",
machinev1beta1.MachineClusterIDLabel: resourcebuilder.TestClusterIDValue,
},
}).WithMachineTemplateBuilder(
machineTemplate.WithLabels(map[string]string{
openshiftMachineRoleLabel: masterMachineRole,
machinev1beta1.MachineClusterIDLabel: "cpms-cluster-test-id",
machinev1beta1.MachineClusterIDLabel: resourcebuilder.TestClusterIDValue,
}),
).Build()

Expand All @@ -221,13 +222,13 @@ var _ = Describe("Webhooks", func() {
MatchLabels: map[string]string{
openshiftMachineRoleLabel: masterMachineRole,
openshiftMachineTypeLabel: "worker",
machinev1beta1.MachineClusterIDLabel: "cpms-cluster-test-id",
machinev1beta1.MachineClusterIDLabel: resourcebuilder.TestClusterIDValue,
},
}).WithMachineTemplateBuilder(
machineTemplate.WithLabels(map[string]string{
openshiftMachineRoleLabel: masterMachineRole,
openshiftMachineTypeLabel: "worker",
machinev1beta1.MachineClusterIDLabel: "cpms-cluster-test-id",
machinev1beta1.MachineClusterIDLabel: resourcebuilder.TestClusterIDValue,
}),
).Build()

Expand Down
28 changes: 14 additions & 14 deletions test/e2e/helpers/proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ import (
"sigs.k8s.io/controller-runtime/pkg/envtest/komega"

configv1 "github.com/openshift/api/config/v1"
"github.com/openshift/cluster-control-plane-machine-set-operator/pkg/test/resourcebuilder"
appsv1resourcebuilder "github.com/openshift/cluster-api-actuator-pkg/pkg/testutils/resourcebuilder/apps/v1"
corev1resourcebuilder "github.com/openshift/cluster-api-actuator-pkg/pkg/testutils/resourcebuilder/core/v1"
"github.com/openshift/cluster-control-plane-machine-set-operator/test/e2e/framework"
)

Expand Down Expand Up @@ -79,19 +80,19 @@ func DeployProxy(testFramework framework.Framework, gomegaArgs ...interface{}) {
mitmSignerKey := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: keyBytes})
mitmSignerCert := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: certBytes})

mitmSignerSecret := resourcebuilder.Secret().WithName(mitmSignerName).WithNamespace(proxyNamespace).WithLabels(proxyLabels).
mitmSignerSecret := corev1resourcebuilder.Secret().WithName(mitmSignerName).WithNamespace(proxyNamespace).WithLabels(proxyLabels).
WithData(map[string][]byte{"tls.crt": mitmSignerCert, "tls.key": mitmSignerKey}).Build()

mitmBootstrapConfigMap := resourcebuilder.ConfigMap().WithName(mitmBootstrapName).WithNamespace(proxyNamespace).WithLabels(proxyLabels).
mitmBootstrapConfigMap := corev1resourcebuilder.ConfigMap().WithName(mitmBootstrapName).WithNamespace(proxyNamespace).WithLabels(proxyLabels).
WithData(map[string]string{"startup.sh": proxySetup}).Build()

mitmCustomPkiConfigMap := resourcebuilder.ConfigMap().WithName(mitmCustomPKIName).WithNamespace(mitmCustomPKINamespace).
mitmCustomPkiConfigMap := corev1resourcebuilder.ConfigMap().WithName(mitmCustomPKIName).WithNamespace(mitmCustomPKINamespace).
WithData(map[string]string{"ca-bundle.crt": string(mitmSignerCert)}).Build()

mitmDaemonset := resourcebuilder.DaemonSet().WithName(proxyName).WithNamespace(proxyNamespace).WithLabels(proxyLabels).
mitmDaemonset := appsv1resourcebuilder.DaemonSet().WithName(proxyName).WithNamespace(proxyNamespace).WithLabels(proxyLabels).
WithVolumes(buildDaemonSetVolumes()).WithContainers(buildDaemonSetContainers()).Build()

mitmService := resourcebuilder.Service().WithNamespace(proxyNamespace).WithName(proxyName).
mitmService := corev1resourcebuilder.Service().WithNamespace(proxyNamespace).WithName(proxyName).
WithLabels(proxyLabels).WithSelector(proxyLabels).WithPorts(buildServicePorts()).Build()

k8sClient := testFramework.GetClient()
Expand Down Expand Up @@ -135,15 +136,14 @@ func ConfigureClusterWideProxy(testFramework framework.Framework, gomegaArgs ...
proxy := &configv1.Proxy{}
Eventually(k8sClient.Get(ctx, client.ObjectKey{Name: "cluster"}, proxy)).Should(Succeed())

updateProxyArgs := append([]interface{}{komega.Update(proxy, func() {
Eventually(komega.Update(proxy, func() {
proxy.Spec.HTTPProxy = "http://" + services.Items[0].Spec.ClusterIP + ":8080"
proxy.Spec.HTTPSProxy = "http://" + services.Items[0].Spec.ClusterIP + ":8080"
proxy.Spec.NoProxy = ".org,.com,.net,quay.io,registry.redhat.io"
proxy.Spec.TrustedCA = configv1.ConfigMapNameReference{
Name: mitmCustomPKIName,
}
})}, gomegaArgs...)
Eventually(updateProxyArgs...).Should(Succeed(), "cluster wide proxy set be able to be updated")
}), gomegaArgs...).Should(Succeed(), "cluster wide proxy set be able to be updated")

deploy := &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Expand Down Expand Up @@ -223,11 +223,11 @@ func DeleteProxy(testFramework framework.Framework, gomegaArgs ...interface{}) {
k8sClient := testFramework.GetClient()
ctx := testFramework.GetContext()
proxyNamespace := testFramework.ControlPlaneMachineSetKey().Namespace
mitmSignerSecret := resourcebuilder.Secret().WithName(mitmSignerName).WithNamespace(proxyNamespace).Build()
mitmBootstrapConfigMap := resourcebuilder.ConfigMap().WithName(mitmBootstrapName).WithNamespace(proxyNamespace).Build()
mitmCustomPkiConfigMap := resourcebuilder.ConfigMap().WithName(mitmCustomPKIName).WithNamespace(mitmCustomPKINamespace).Build()
mitmDaemonset := resourcebuilder.DaemonSet().WithName(mitmDaemonsetName).WithNamespace(proxyNamespace).Build()
mitmService := resourcebuilder.Service().WithName(mitmServiceName).WithNamespace(proxyNamespace).Build()
mitmSignerSecret := corev1resourcebuilder.Secret().WithName(mitmSignerName).WithNamespace(proxyNamespace).Build()
mitmBootstrapConfigMap := corev1resourcebuilder.ConfigMap().WithName(mitmBootstrapName).WithNamespace(proxyNamespace).Build()
mitmCustomPkiConfigMap := corev1resourcebuilder.ConfigMap().WithName(mitmCustomPKIName).WithNamespace(mitmCustomPKINamespace).Build()
mitmDaemonset := appsv1resourcebuilder.DaemonSet().WithName(mitmDaemonsetName).WithNamespace(proxyNamespace).Build()
mitmService := corev1resourcebuilder.Service().WithName(mitmServiceName).WithNamespace(proxyNamespace).Build()

By("Deleting the MITM proxy Secret")
Eventually(k8sClient.Delete(ctx, mitmSignerSecret)).Should(Succeed())
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/suite_test.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2022 Red Hat, Inc.
Copyright 2023 Red Hat, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit e88d98e

Please sign in to comment.