Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package okteto for openSUSE:Factory checked in at 2026-03-09 16:20:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/okteto (Old) and /work/SRC/openSUSE:Factory/.okteto.new.8177 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "okteto" Mon Mar 9 16:20:44 2026 rev:115 rq:1337619 version:3.17.1 Changes: -------- --- /work/SRC/openSUSE:Factory/okteto/okteto.changes 2026-03-05 17:33:16.491744512 +0100 +++ /work/SRC/openSUSE:Factory/.okteto.new.8177/okteto.changes 2026-03-09 16:24:48.578292582 +0100 @@ -1,0 +2,7 @@ +Thu Mar 05 11:58:02 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 3.17.1: + * fix: handle missing Gateway API CRDs gracefully in compose + endpoints (#4934) (#4935) + +------------------------------------------------------------------- Old: ---- okteto-3.17.0.obscpio New: ---- okteto-3.17.1.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ okteto.spec ++++++ --- /var/tmp/diff_new_pack.lIFtau/_old 2026-03-09 16:24:49.718339371 +0100 +++ /var/tmp/diff_new_pack.lIFtau/_new 2026-03-09 16:24:49.718339371 +0100 @@ -17,7 +17,7 @@ Name: okteto -Version: 3.17.0 +Version: 3.17.1 Release: 0 Summary: Develop your applications directly in your Kubernetes Cluster License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.lIFtau/_old 2026-03-09 16:24:49.750340684 +0100 +++ /var/tmp/diff_new_pack.lIFtau/_new 2026-03-09 16:24:49.754340848 +0100 @@ -3,8 +3,8 @@ <param name="url">https://github.com/okteto/okteto</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">3.17.0</param> - <param name="match-tag">3.17.0</param> + <param name="revision">3.17.1</param> + <param name="match-tag">3.17.1</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">enable</param> </service> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.lIFtau/_old 2026-03-09 16:24:49.774341670 +0100 +++ /var/tmp/diff_new_pack.lIFtau/_new 2026-03-09 16:24:49.778341834 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/okteto/okteto</param> - <param name="changesrevision">0aa6be9edb4292b528539145cbc8ed862e11761d</param></service></servicedata> + <param name="changesrevision">f21e6df21765e5e1b61e6dd36418ebeadf8269a8</param></service></servicedata> (No newline at EOF) ++++++ okteto-3.17.0.obscpio -> okteto-3.17.1.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/okteto-3.17.0/cmd/deploy/deploy.go new/okteto-3.17.1/cmd/deploy/deploy.go --- old/okteto-3.17.0/cmd/deploy/deploy.go 2026-03-04 13:54:49.000000000 +0100 +++ new/okteto-3.17.1/cmd/deploy/deploy.go 2026-03-05 11:52:22.000000000 +0100 @@ -864,6 +864,13 @@ var endpointDeployer stack.EndpointDeployer if useHTTPRoute { + available, err := httproutes.IsAvailable(ctx, cfg) + if err != nil { + return err + } + if !available { + return fmt.Errorf("Gateway API (HTTPRoute) is not installed in this cluster. Set OKTETO_COMPOSE_ENDPOINTS_TYPE=ingress or install the Gateway API CRDs") + } // Create HTTPRoute deployer httpRouteClient, err := httproutes.NewHTTPRouteClient(cfg) if err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/okteto-3.17.0/pkg/cmd/stack/deploy.go new/okteto-3.17.1/pkg/cmd/stack/deploy.go --- old/okteto-3.17.0/pkg/cmd/stack/deploy.go 2026-03-04 13:54:49.000000000 +0100 +++ new/okteto-3.17.1/pkg/cmd/stack/deploy.go 2026-03-05 11:52:22.000000000 +0100 @@ -136,7 +136,13 @@ return true, metadata, nil } - return true, metadata, nil + if metadata.GatewayName != "" && metadata.GatewayNamespace != "" { + oktetoLog.Infof("Using HTTPRoute for endpoints with the configured gateway %s/%s (auto-detected from cluster context)", metadata.GatewayNamespace, metadata.GatewayName) + return true, metadata, nil + } + + oktetoLog.Infof("Using Ingress for endpoints (no gateway configured in cluster context)") + return false, types.ClusterMetadata{}, nil } func (sd *Stack) RunDeploy(ctx context.Context, s *model.Stack, options *DeployOptions) error { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/okteto-3.17.0/pkg/cmd/stack/deploy_test.go new/okteto-3.17.1/pkg/cmd/stack/deploy_test.go --- old/okteto-3.17.0/pkg/cmd/stack/deploy_test.go 2026-03-04 13:54:49.000000000 +0100 +++ new/okteto-3.17.1/pkg/cmd/stack/deploy_test.go 2026-03-05 11:52:22.000000000 +0100 @@ -970,14 +970,14 @@ { name: "no gateway configured", gateway: nil, - expectedUseRoute: true, + expectedUseRoute: false, expectedMetadata: types.ClusterMetadata{}, }, { name: "gateway without namespace", gateway: &okteto.GatewayMetadata{Name: "test-gateway"}, - expectedUseRoute: true, - expectedMetadata: types.ClusterMetadata{GatewayName: "test-gateway"}, + expectedUseRoute: false, + expectedMetadata: types.ClusterMetadata{}, }, { name: "default gateway type forces ingress", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/okteto-3.17.0/pkg/cmd/stack/destroy.go new/okteto-3.17.1/pkg/cmd/stack/destroy.go --- old/okteto-3.17.0/pkg/cmd/stack/destroy.go 2026-03-04 13:54:49.000000000 +0100 +++ new/okteto-3.17.1/pkg/cmd/stack/destroy.go 2026-03-05 11:52:22.000000000 +0100 @@ -178,6 +178,14 @@ } func destroyHTTPRoutes(ctx context.Context, s *model.Stack, config *rest.Config, destroyAll bool) error { + available, err := httproutes.IsAvailable(ctx, config) + if err != nil { + return err + } + if !available { + return nil + } + hrClient, err := httproutes.NewHTTPRouteClient(config) if err != nil { return fmt.Errorf("error creating httproute client: %w", err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/okteto-3.17.0/pkg/k8s/httproutes/crud.go new/okteto-3.17.1/pkg/k8s/httproutes/crud.go --- old/okteto-3.17.0/pkg/k8s/httproutes/crud.go 2026-03-04 13:54:49.000000000 +0100 +++ new/okteto-3.17.1/pkg/k8s/httproutes/crud.go 2026-03-05 11:52:22.000000000 +0100 @@ -19,7 +19,9 @@ oktetoErrors "github.com/okteto/okteto/pkg/errors" oktetoLog "github.com/okteto/okteto/pkg/log" + k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/discovery" "k8s.io/client-go/rest" gatewayv1 "sigs.k8s.io/gateway-api/apis/v1" gatewayclientset "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned" @@ -63,6 +65,9 @@ result := []metav1.Object{} httpRouteList, err := c.gatewayClient.GatewayV1().HTTPRoutes(namespace).List(ctx, metav1.ListOptions{LabelSelector: labels}) if err != nil { + if k8serrors.IsNotFound(err) { + return result, nil + } return nil, err } @@ -111,6 +116,9 @@ result := make([]string, 0) httpRouteList, err := c.gatewayClient.GatewayV1().HTTPRoutes(namespace).List(ctx, metav1.ListOptions{LabelSelector: labels}) if err != nil { + if k8serrors.IsNotFound(err) { + return result, nil + } return nil, err } @@ -137,3 +145,19 @@ return result, nil } + +// IsAvailable checks whether the Gateway API CRDs are installed in the cluster +func IsAvailable(ctx context.Context, config *rest.Config) (bool, error) { + discoveryClient, err := discovery.NewDiscoveryClientForConfig(config) + if err != nil { + return false, fmt.Errorf("error creating discovery client: %w", err) + } + _, err = discoveryClient.ServerResourcesForGroupVersion("gateway.networking.k8s.io/v1") + if err != nil { + if k8serrors.IsNotFound(err) { + return false, nil + } + return false, fmt.Errorf("error checking gateway api availability: %w", err) + } + return true, nil +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/okteto-3.17.0/pkg/k8s/httproutes/crud_test.go new/okteto-3.17.1/pkg/k8s/httproutes/crud_test.go --- old/okteto-3.17.0/pkg/k8s/httproutes/crud_test.go 2026-03-04 13:54:49.000000000 +0100 +++ new/okteto-3.17.1/pkg/k8s/httproutes/crud_test.go 2026-03-05 11:52:22.000000000 +0100 @@ -19,8 +19,10 @@ "testing" "github.com/stretchr/testify/require" + k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" k8sTesting "k8s.io/client-go/testing" gatewayv1 "sigs.k8s.io/gateway-api/apis/v1" gatewayfake "sigs.k8s.io/gateway-api/pkg/client/clientset/versioned/fake" @@ -116,6 +118,19 @@ require.Len(t, hrList, 1) } +func TestListCRDNotInstalled(t *testing.T) { + ctx := context.Background() + clientset := gatewayfake.NewSimpleClientset() + clientset.PrependReactor("list", "httproutes", func(_ k8sTesting.Action) (bool, runtime.Object, error) { + return true, nil, k8serrors.NewNotFound(schema.GroupResource{Group: "gateway.networking.k8s.io", Resource: "httproutes"}, "") + }) + hrClient := Client{gatewayClient: clientset} + + hrList, err := hrClient.List(ctx, "test", "") + require.NoError(t, err) + require.Empty(t, hrList) +} + func TestDestroy(t *testing.T) { var tests = []struct { httpRoute *gatewayv1.HTTPRoute ++++++ okteto.obsinfo ++++++ --- /var/tmp/diff_new_pack.lIFtau/_old 2026-03-09 16:24:50.822384683 +0100 +++ /var/tmp/diff_new_pack.lIFtau/_new 2026-03-09 16:24:50.830385011 +0100 @@ -1,5 +1,5 @@ name: okteto -version: 3.17.0 -mtime: 1772628889 -commit: 0aa6be9edb4292b528539145cbc8ed862e11761d +version: 3.17.1 +mtime: 1772707942 +commit: f21e6df21765e5e1b61e6dd36418ebeadf8269a8 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/okteto/vendor.tar.gz /work/SRC/openSUSE:Factory/.okteto.new.8177/vendor.tar.gz differ: char 133, line 1
