Skip to content

Commit 6c2e80d

Browse files
jukiebeckclClemens Beckrisssonzhaohuabing
authored
[release-1.8] cherry-pick for v1.8.2 (#9376)
* fix rate limit validation on K8s 1.36 (#9166) fixi: rate limit validation on K8s 1.36 Starting with K8s 1.36 the int range and maximum are validated against each other, which breaks the BTP tests. This can be fixed validating the field as uint32. Signed-off-by: Clemens Beck <mail@beckcl.dev> Co-authored-by: Clemens Beck <mail@beckcl.dev> (cherry picked from commit a21fd29) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix(validation): allow IPv6 to be specific in loadBalancerSourceRanges (#9050) * fix(validation): allow IPv6 to be specific in loadBalancerSourceRanges and loadBalancerIP Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> (cherry picked from commit 3c1d7b9) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix: allow Backend TLS to disable ALPN with an empty list (#9162) * Fixed Backend TLS to disable upstream ALPN instead of inheriting EnvoyProxy BackendTLS defaults. Signed-off-by: Huabing Zhao <zhaohuabing@gmail.com> * add test case for envoyproxy without tls Signed-off-by: Huabing Zhao <zhaohuabing@gmail.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> * address comments Signed-off-by: Huabing Zhao <zhaohuabing@gmail.com> --------- Signed-off-by: Huabing Zhao <zhaohuabing@gmail.com> Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> (cherry picked from commit 21eb101) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix(gatewayapi): sort api key auth credentials (#9042) * fix(gatewayapi): sort api key auth credentials Signed-off-by: Alexej Disterhoft <alexej.disterhoft@redcare-pharmacy.com> * docs(release-notes): add api key auth fix note Signed-off-by: Alexej Disterhoft <alexej.disterhoft@redcare-pharmacy.com> --------- Signed-off-by: Alexej Disterhoft <alexej.disterhoft@redcare-pharmacy.com> Signed-off-by: Alexej Disterhoft <alexej@disterhoft.de> Signed-off-by: zirain <zirain2009@gmail.com> Co-authored-by: Arko Dasgupta <arkodg@users.noreply.github.com> Co-authored-by: zirain <zirain2009@gmail.com> (cherry picked from commit b96a2d3) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix(status): separate listener programmed state from HTTPRoute Accepted condition (#9129) * fix(status): separate listener programmed state from HTTPRoute Accepted condition Remove the NoReadyListeners block that set Accepted: False on routes when no listeners were programmed. Route acceptance reflects binding validity; listener programmed state is already tracked by the listener's own conditions. Signed-off-by: apkatsikas <apkatsikas@gmail.com> * fix(status): separate listener programmed state from TCPRoute/UDPRoute Accepted condition Routes with a valid binding to an unprogrammed listener now correctly reach Accepted=True regardless of listener readiness. Moves accepted=true and IncrementAttachedRoutes before the IsReady check so the Accepted condition reflects binding validity only, consistent with the HTTPRoute fix and the Gateway API spec. Signed-off-by: apkatsikas <apkatsikas@gmail.com> (cherry picked from commit e9c3ac5) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix: reject ExternalName Service as a route backend (#9190) fix: reject Service as a route backend Signed-off-by: Huabing Zhao <zhaohuabing@gmail.com> Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> (cherry picked from commit ee16b3f) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix(status): fall back to service externalIPs for Gateway addresses (#9209) When the Envoy service is of type LoadBalancer but no load balancer controller assigns an ingress address (e.g. bare-metal clusters), the Gateway status had no addresses and stayed Programmed=False with reason AddressNotAssigned, even when reachable addresses were configured via spec.externalIPs (e.g. through an EnvoyProxy service patch). Use spec.externalIPs as a fallback when the load balancer ingress list is empty. Ingress addresses keep priority when present, so behavior is unchanged for clusters with a working load balancer controller. Fixes #8987 Signed-off-by: Jules Dutel <jules.dutel@numberly.com> (cherry picked from commit f2c0921) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix: don't duplicate ValidatingAdmissionPolicy in install.yaml (#9182) * Fix duplicate VAP in install.yaml Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * Add regression check and release notes Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> --------- Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> (cherry picked from commit 332081c) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix(listenerset): implement hostname conflict listener precedence (#9192) * fix(listenerset): implement hostname conflict listener precedence - In Gateway, multiple listeners with the same hostname all get marked Conflicted (no winner). In ListenerSet, a Gateway-owned listener wins over ListenerSet listeners; among ListenerSet listeners the first in processing order wins. - Conflicted ListenerSet listeners now get Accepted=False and Programmed=False with the conflict reason (HostnameConflict or ProtocolConflict), matching the Gateway API conformance expectation. - AttachedListenerSets on the Gateway status is now incremented only for ListenerSets that have at least one accepted listener, aligning with the spec definition of "successfully attached". Signed-off-by: zirain <zirain2009@gmail.com> * ListenerSet conflict Signed-off-by: zirain <zirain2009@gmail.com> * fix and improve message Signed-off-by: zirain <zirain2009@gmail.com> * better display gateway listener Signed-off-by: zirain <zirain2009@gmail.com> --------- Signed-off-by: zirain <zirain2009@gmail.com> (cherry picked from commit 9271654) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix: correct the config hot reload validation order (#9214) Co-authored-by: Nimisha Mehta <nimisha_mehta@apple.com> (cherry picked from commit 7e4492d) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * feat(helm): add CRDs dependency toggle (#8850) * feat(helm): add CRDs dependency toggle Allow skipping installation of the `crds` dependency on the gateway-helm chart by providing a conditional `crds.enabled` variable. This boolean defaults to `true` and toggles the inclusion of the dependency on the parent chart. ref: #8560 Signed-off-by: Gaston Festari <cilindrox@gmail.com> * docs: update Helm installation steps Use the `crds.enabled` variable in the examples instead of the `--skip-crds` flag. Update crds.enabled variable description. Co-authored-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> Signed-off-by: Gaston Festari <cilindrox@gmail.com> --------- Signed-off-by: Gaston Festari <cilindrox@gmail.com> Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> Co-authored-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> (cherry picked from commit 62e01ce) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix: validate API Key auth ExtractFrom (#9250) * fix: validate API Key auth ExtractFrom Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> * add test Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> * update Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> * update Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> * update Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> --------- Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> (cherry picked from commit 50b1339) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix: XRateLimitHeadersOptionDisabled constant value must match CRD enum (#9224) * fix: XRateLimitHeadersOptionDisabled constant value must match CRD enum The constant held "Disabled" but the CRD enum specifies "Off", causing xRateLimitHeaders: "Off" to silently fall through the translator switch and always emit X-RateLimit headers. Fixes #9223 Signed-off-by: gianniskt <gianniskt@gmail.com> * fix: XRateLimitHeadersOptionDisabled constant value must match CRD enum The constant held "Disabled" but the CRD enum specifies "Off", causing xRateLimitHeaders: "Off" to silently fall through the translator switch and always emit X-RateLimit headers. Fixes #9223 Signed-off-by: gianniskt <gianniskt@gmail.com> * fix: add release note for XRateLimitHeadersOptionDisabled fix Signed-off-by: gianniskt <gianniskt@gmail.com> --------- Signed-off-by: gianniskt <gianniskt@gmail.com> Signed-off-by: Ioannis Koutroumpis <gianniskt@gmail.com> (cherry picked from commit 43c9d8e) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix(ratelimit): shared global ratelimit with cost not working (#9245) * fix(ratelimit): shared global ratelimit with cost not working Signed-off-by: zirain <zirain2009@gmail.com> * fix Signed-off-by: zirain <zirain2009@gmail.com> * fix mixed shared rule Signed-off-by: zirain <zirain2009@gmail.com> * add e2e Signed-off-by: zirain <zirain2009@gmail.com> --------- Signed-off-by: zirain <zirain2009@gmail.com> (cherry picked from commit 7997791) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix(gatewayapi): http retry without backoff (#9238) * fix http retry without backoff Signed-off-by: zirain <zirain2009@gmail.com> * release notes Signed-off-by: zirain <zirain2009@gmail.com> --------- Signed-off-by: zirain <zirain2009@gmail.com> (cherry picked from commit 4872e53) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix: panic with empty deploy (#9365) Signed-off-by: zirain <zirain2009@gmail.com> (cherry picked from commit 42a0c2c) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * chore: restore current.yaml after cherry-picks The cherry-picked bug-fix commits appended their release-note entries to release-notes/current.yaml. Those notes are already finalized in release-notes/v1.8.2.yaml, so restore current.yaml to its prior state to avoid duplicating them in the next release cycle. Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * [release-1.8] bump ratelimit image to 1e50889b Bump the Envoy Ratelimit image from ff287602 to 1e50889b in source and the gateway-helm chart, and note the bump under security updates in the v1.8.2 release notes. Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * testdata Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> * fix: use int64 format for ratelimit Requests field (#9377) Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> --------- Signed-off-by: Clemens Beck <mail@beckcl.dev> Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> Signed-off-by: Huabing Zhao <zhaohuabing@gmail.com> Signed-off-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> Signed-off-by: Alexej Disterhoft <alexej.disterhoft@redcare-pharmacy.com> Signed-off-by: Alexej Disterhoft <alexej@disterhoft.de> Signed-off-by: zirain <zirain2009@gmail.com> Signed-off-by: apkatsikas <apkatsikas@gmail.com> Signed-off-by: Jules Dutel <jules.dutel@numberly.com> Signed-off-by: Gaston Festari <cilindrox@gmail.com> Signed-off-by: gianniskt <gianniskt@gmail.com> Signed-off-by: Ioannis Koutroumpis <gianniskt@gmail.com> Co-authored-by: Clemens Beck <125774647+beckcl@users.noreply.github.com> Co-authored-by: Clemens Beck <mail@beckcl.dev> Co-authored-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> Co-authored-by: Huabing (Robin) Zhao <zhaohuabing@gmail.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Alexej Disterhoft <alexej@disterhoft.de> Co-authored-by: Arko Dasgupta <arkodg@users.noreply.github.com> Co-authored-by: zirain <zirain2009@gmail.com> Co-authored-by: Andrew Katsikas <apkatsikas@gmail.com> Co-authored-by: jvlxz <jules.dutel@gmail.com> Co-authored-by: Mengjia Liang <88690648+MengjiaLiang@users.noreply.github.com> Co-authored-by: Nimisha Mehta <nimisha_mehta@apple.com> Co-authored-by: Gaston Festari <cilindrox@gmail.com> Co-authored-by: Ioannis Koutroumpis <gianniskt@gmail.com>
1 parent eb4ffbd commit 6c2e80d

160 files changed

Lines changed: 3559 additions & 523 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

api/v1alpha1/api_key_auth_types.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ type APIKeyAuth struct {
2121

2222
// ExtractFrom is where to fetch the key from the coming request.
2323
// The value from the first source that has a key will be used.
24+
//
25+
// +kubebuilder:validation:MinItems=1
2426
ExtractFrom []*ExtractFrom `json:"extractFrom"`
2527

2628
// ForwardClientIDHeader is the name of the header to forward the client identity to the backend
@@ -36,24 +38,31 @@ type APIKeyAuth struct {
3638
}
3739

3840
// ExtractFrom is where to fetch the key from the coming request.
39-
// Only one of header, param or cookie is supposed to be specified.
41+
// Only one of headers, params or cookies must be specified.
42+
// +kubebuilder:validation:XValidation:rule="(has(self.headers) ? 1 : 0) + (has(self.params) ? 1 : 0) + (has(self.cookies) ? 1 : 0) == 1",message="exactly one of headers, params, or cookies must be specified"
4043
type ExtractFrom struct {
4144
// Headers is the names of the header to fetch the key from.
4245
// If multiple headers are specified, envoy will look for the api key in the order of the list.
43-
// This field is optional, but only one of headers, params or cookies is supposed to be specified.
46+
// This field is optional, but only one of headers, params or cookies must be specified.
4447
//
4548
// +optional
49+
// +kubebuilder:validation:MinItems=1
50+
// +kubebuilder:validation:items:MinLength=1
4651
Headers []string `json:"headers,omitempty"`
4752
// Params is the names of the query parameter to fetch the key from.
4853
// If multiple params are specified, envoy will look for the api key in the order of the list.
49-
// This field is optional, but only one of headers, params or cookies is supposed to be specified.
54+
// This field is optional, but only one of headers, params or cookies must be specified.
5055
//
5156
// +optional
57+
// +kubebuilder:validation:MinItems=1
58+
// +kubebuilder:validation:items:MinLength=1
5259
Params []string `json:"params,omitempty"`
5360
// Cookies is the names of the cookie to fetch the key from.
5461
// If multiple cookies are specified, envoy will look for the api key in the order of the list.
55-
// This field is optional, but only one of headers, params or cookies is supposed to be specified.
62+
// This field is optional, but only one of headers, params or cookies must be specified.
5663
//
5764
// +optional
65+
// +kubebuilder:validation:MinItems=1
66+
// +kubebuilder:validation:items:MinLength=1
5867
Cookies []string `json:"cookies,omitempty"`
5968
}

api/v1alpha1/envoygateway_helpers.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ func (e *EnvoyGateway) GatewayNamespaceMode() bool {
110110
return e.Provider != nil &&
111111
e.Provider.Kubernetes != nil &&
112112
e.Provider.Kubernetes.Deploy != nil &&
113+
e.Provider.Kubernetes.Deploy.Type != nil &&
113114
*e.Provider.Kubernetes.Deploy.Type == KubernetesDeployModeTypeGatewayNamespace
114115
}
115116

api/v1alpha1/ratelimit_types.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ type XRateLimitHeadersOption string
8181
const (
8282
// XRateLimitHeadersOptionDisabled disables X-RateLimit headers for this rate limit rule,
8383
// regardless of the global ClientTrafficPolicy setting.
84-
XRateLimitHeadersOptionDisabled XRateLimitHeadersOption = "Disabled"
84+
XRateLimitHeadersOptionDisabled XRateLimitHeadersOption = "Off"
8585

8686
// XRateLimitHeadersOptionDraftVersion03 enables X-RateLimit headers using RFC draft version 03
8787
// for this rate limit rule, regardless of the global ClientTrafficPolicy setting.
@@ -437,6 +437,7 @@ type RateLimitValue struct {
437437
//
438438
// +kubebuilder:validation:Minimum=1
439439
// +kubebuilder:validation:Maximum=4294967295
440+
// +kubebuilder:validation:Format=int64
440441
Requests uint32 `json:"requests"`
441442
Unit RateLimitUnit `json:"unit"`
442443
}

api/v1alpha1/shared_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ const (
3434
// DefaultShutdownManagerImage is the default image used for the shutdown manager.
3535
DefaultShutdownManagerImage = "docker.io/envoyproxy/gateway-dev:latest"
3636
// DefaultRateLimitImage is the default image used by ratelimit.
37-
DefaultRateLimitImage = "docker.io/envoyproxy/ratelimit:ff287602"
37+
DefaultRateLimitImage = "docker.io/envoyproxy/ratelimit:1e50889b"
3838
// HTTPProtocol is the common-used http protocol.
3939
HTTPProtocol = "http"
4040
// GRPCProtocol is the common-used grpc protocol.

api/v1alpha1/validation/envoyproxy_validate.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ func validateService(spec *egv1a1.EnvoyProxySpec) []error {
166166
}
167167

168168
for _, serviceLoadBalancerSourceRange := range serviceLoadBalancerSourceRanges {
169-
if ip, _, err := net.ParseCIDR(serviceLoadBalancerSourceRange); err != nil || ip.To4() == nil {
169+
if _, _, err := net.ParseCIDR(serviceLoadBalancerSourceRange); err != nil {
170170
errs = append(errs, fmt.Errorf("loadBalancerSourceRange:%s is an invalid IP subnet", serviceLoadBalancerSourceRange))
171171
}
172172
}

api/v1alpha1/validation/envoyproxy_validate_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,27 @@ func TestValidateEnvoyProxy(t *testing.T) {
251251
},
252252
expected: true,
253253
},
254+
{
255+
name: "envoy service type 'LoadBalancer' with ipv6 loadBalancerSourceRanges",
256+
proxy: &egv1a1.EnvoyProxy{
257+
ObjectMeta: metav1.ObjectMeta{
258+
Namespace: "test",
259+
Name: "test",
260+
},
261+
Spec: egv1a1.EnvoyProxySpec{
262+
Provider: &egv1a1.EnvoyProxyProvider{
263+
Type: egv1a1.EnvoyProxyProviderTypeKubernetes,
264+
Kubernetes: &egv1a1.EnvoyProxyKubernetesProvider{
265+
EnvoyService: &egv1a1.KubernetesServiceSpec{
266+
Type: egv1a1.GetKubernetesServiceType(egv1a1.ServiceTypeLoadBalancer),
267+
LoadBalancerSourceRanges: []string{"2001:db8::/32"},
268+
},
269+
},
270+
},
271+
},
272+
},
273+
expected: true,
274+
},
254275
{
255276
name: "non envoy service type 'LoadBalancer' with loadBalancerSourceRanges",
256277
proxy: &egv1a1.EnvoyProxy{

charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1762,7 +1762,7 @@ spec:
17621762
description: |-
17631763
Requests is the number of requests (or cost units, when used with
17641764
cost-based rate limiting) allowed per Unit.
1765-
format: int32
1765+
format: int64
17661766
maximum: 4294967295
17671767
minimum: 1
17681768
type: integer
@@ -2146,7 +2146,7 @@ spec:
21462146
description: |-
21472147
Requests is the number of requests (or cost units, when used with
21482148
cost-based rate limiting) allowed per Unit.
2149-
format: int32
2149+
format: int64
21502150
maximum: 4294967295
21512151
minimum: 1
21522152
type: integer

charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_securitypolicies.yaml

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,33 +118,45 @@ spec:
118118
items:
119119
description: |-
120120
ExtractFrom is where to fetch the key from the coming request.
121-
Only one of header, param or cookie is supposed to be specified.
121+
Only one of headers, params or cookies must be specified.
122122
properties:
123123
cookies:
124124
description: |-
125125
Cookies is the names of the cookie to fetch the key from.
126126
If multiple cookies are specified, envoy will look for the api key in the order of the list.
127-
This field is optional, but only one of headers, params or cookies is supposed to be specified.
127+
This field is optional, but only one of headers, params or cookies must be specified.
128128
items:
129+
minLength: 1
129130
type: string
131+
minItems: 1
130132
type: array
131133
headers:
132134
description: |-
133135
Headers is the names of the header to fetch the key from.
134136
If multiple headers are specified, envoy will look for the api key in the order of the list.
135-
This field is optional, but only one of headers, params or cookies is supposed to be specified.
137+
This field is optional, but only one of headers, params or cookies must be specified.
136138
items:
139+
minLength: 1
137140
type: string
141+
minItems: 1
138142
type: array
139143
params:
140144
description: |-
141145
Params is the names of the query parameter to fetch the key from.
142146
If multiple params are specified, envoy will look for the api key in the order of the list.
143-
This field is optional, but only one of headers, params or cookies is supposed to be specified.
147+
This field is optional, but only one of headers, params or cookies must be specified.
144148
items:
149+
minLength: 1
145150
type: string
151+
minItems: 1
146152
type: array
147153
type: object
154+
x-kubernetes-validations:
155+
- message: exactly one of headers, params, or cookies must be
156+
specified
157+
rule: '(has(self.headers) ? 1 : 0) + (has(self.params) ? 1
158+
: 0) + (has(self.cookies) ? 1 : 0) == 1'
159+
minItems: 1
148160
type: array
149161
forwardClientIDHeader:
150162
description: |-

charts/gateway-helm/Chart.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ dependencies:
22
- name: crds
33
repository: ""
44
version: 0.0.0
5-
digest: sha256:aeada3fbffa2565a325406ad014001fd2685f7c0c9cfc1167da4f10c75a1bd65
6-
generated: "2026-02-17T14:34:30.962808-07:00"
5+
digest: sha256:16cbbceffe2a6946ae7cbb20b5a8313267bc77f4669caba20fffb3ff64a773a6
6+
generated: "2026-05-22T21:27:32.703929139-03:00"

charts/gateway-helm/Chart.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@ sources:
2727
dependencies:
2828
- name: crds
2929
version: "0.0.0"
30+
condition: crds.enabled

0 commit comments

Comments
 (0)