Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package hcloud-cli for openSUSE:Factory checked in at 2026-04-26 21:12:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/hcloud-cli (Old) and /work/SRC/openSUSE:Factory/.hcloud-cli.new.11940 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "hcloud-cli" Sun Apr 26 21:12:09 2026 rev:18 rq:1349349 version:1.63.0 Changes: -------- --- /work/SRC/openSUSE:Factory/hcloud-cli/hcloud-cli.changes 2026-04-09 16:24:28.417842245 +0200 +++ /work/SRC/openSUSE:Factory/.hcloud-cli.new.11940/hcloud-cli.changes 2026-04-26 21:14:56.118298528 +0200 @@ -1,0 +2,34 @@ +Sun Apr 26 08:29:42 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 1.63.0: + * Available and recommended Server Types have been moved + - The Server Types list in hcloud datacenter describe is + deprecated and will not be displayed anymore after + 2026-10-01. The two commands below should be used for this + purpose instead. + - hcloud server-type describe now shows an Available and + Recommended value for each location. + - hcloud server-type list now has additional columns + location_available and location_recommended. + See the changelog for more details. + https://docs.hetzner.cloud/changelog#2026-04-01-datacenter-deprecations + * Features + - datacenter, server-type: move available and recommended to + server_type (#1384) + * Dependencies + - chore(main): release v1.63.0 (#1391) + - feat(datacenter, server-type): move available and recommended + to server_type (#1384) + - deps: update module github.com/hetznercloud/hcloud-go/v2 to + v2.38.0 (#1390) + - deps: update dependency jdx/mise to v2026.4.19 (#1386) + - deps: update golang.org/x/exp digest to 746e56f (#1385) + - deps: update dependency github:goreleaser/goreleaser to + v2.15.4 (#1387) + - deps: update module github.com/jedib0t/go-pretty/v6 to + v6.7.10 (#1388) + - deps: update dependency jdx/mise to v2026.4.7 (#1363) + - deps: update golang.org/x/ (#1383) + - deps: update dependency go to v1.26.2 (#1382) + +------------------------------------------------------------------- Old: ---- hcloud-cli-1.62.2.obscpio New: ---- hcloud-cli-1.63.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ hcloud-cli.spec ++++++ --- /var/tmp/diff_new_pack.7HvBKp/_old 2026-04-26 21:14:56.778325401 +0200 +++ /var/tmp/diff_new_pack.7HvBKp/_new 2026-04-26 21:14:56.782325564 +0200 @@ -19,7 +19,7 @@ %define executable_name hcloud Name: hcloud-cli -Version: 1.62.2 +Version: 1.63.0 Release: 0 Summary: A command-line interface for Hetzner Cloud License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.7HvBKp/_old 2026-04-26 21:14:56.814326867 +0200 +++ /var/tmp/diff_new_pack.7HvBKp/_new 2026-04-26 21:14:56.818327029 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/hetznercloud/cli</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v1.62.2</param> + <param name="revision">v1.63.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.7HvBKp/_old 2026-04-26 21:14:56.846328169 +0200 +++ /var/tmp/diff_new_pack.7HvBKp/_new 2026-04-26 21:14:56.850328333 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/hetznercloud/cli</param> - <param name="changesrevision">4b2b4e089e3b6d09f68469bec3ead54b08991bf7</param></service></servicedata> + <param name="changesrevision">5504434e319291743f9f700e5f45930b47f1c42d</param></service></servicedata> (No newline at EOF) ++++++ hcloud-cli-1.62.2.obscpio -> hcloud-cli-1.63.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/.golangci.yml new/hcloud-cli-1.63.0/.golangci.yml --- old/hcloud-cli-1.62.2/.golangci.yml 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/.golangci.yml 2026-04-24 16:10:52.000000000 +0200 @@ -65,7 +65,7 @@ text: var-naming - linters: - staticcheck - text: Datacenter is deprecated + text: (Datacenter|ServerTypes) is deprecated formatters: enable: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/CHANGELOG.md new/hcloud-cli-1.63.0/CHANGELOG.md --- old/hcloud-cli-1.62.2/CHANGELOG.md 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/CHANGELOG.md 2026-04-24 16:10:52.000000000 +0200 @@ -1,5 +1,19 @@ # Changelog +## [v1.63.0](https://github.com/hetznercloud/cli/releases/tag/v1.63.0) + +### Available and recommended Server Types have been moved + +- The Server Types list in `hcloud datacenter describe` is deprecated and will not be displayed anymore after 2026-10-01. The two commands below should be used for this purpose instead. +- `hcloud server-type describe` now shows an `Available` and `Recommended` value for each location. +- `hcloud server-type list` now has additional columns `location_available` and `location_recommended`. + +See the [changelog](https://docs.hetzner.cloud/changelog#2026-04-01-datacenter-deprecations) for more details. + +### Features + +- **datacenter, server-type**: move available and recommended to server_type (#1384) + ## [v1.62.2](https://github.com/hetznercloud/cli/releases/tag/v1.62.2) ### Bug Fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/docs/reference/manual/hcloud_server-type_list.md new/hcloud-cli-1.63.0/docs/reference/manual/hcloud_server-type_list.md --- old/hcloud-cli-1.62.2/docs/reference/manual/hcloud_server-type_list.md 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/docs/reference/manual/hcloud_server-type_list.md 2026-04-24 16:10:52.000000000 +0200 @@ -21,6 +21,8 @@ - id - included_traffic - location + - location_available + - location_recommended - memory - name - storage_type diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/go.mod new/hcloud-cli-1.63.0/go.mod --- old/hcloud-cli-1.62.2/go.mod 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/go.mod 2026-04-24 16:10:52.000000000 +0200 @@ -2,7 +2,7 @@ go 1.25.0 -toolchain go1.26.1 +toolchain go1.26.2 require ( github.com/BurntSushi/toml v1.6.0 @@ -12,8 +12,8 @@ github.com/fatih/structs v1.1.0 github.com/goccy/go-yaml v1.19.2 github.com/guptarohit/asciigraph v0.9.0 - github.com/hetznercloud/hcloud-go/v2 v2.37.0 - github.com/jedib0t/go-pretty/v6 v6.7.9 + github.com/hetznercloud/hcloud-go/v2 v2.38.0 + github.com/jedib0t/go-pretty/v6 v6.7.10 github.com/spf13/cast v1.10.0 github.com/spf13/cobra v1.10.2 github.com/spf13/pflag v1.0.10 @@ -21,11 +21,11 @@ github.com/stretchr/testify v1.11.1 github.com/swaggest/assertjson v1.10.0 go.uber.org/mock v0.6.0 - golang.org/x/crypto v0.49.0 - golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 - golang.org/x/net v0.52.0 - golang.org/x/term v0.41.0 - golang.org/x/text v0.35.0 + golang.org/x/crypto v0.50.0 + golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f + golang.org/x/net v0.53.0 + golang.org/x/term v0.42.0 + golang.org/x/text v0.36.0 ) require ( @@ -59,7 +59,7 @@ github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect go.yaml.in/yaml/v2 v2.4.2 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/sys v0.42.0 // indirect + golang.org/x/sys v0.43.0 // indirect google.golang.org/protobuf v1.36.8 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/go.sum new/hcloud-cli-1.63.0/go.sum --- old/hcloud-cli-1.62.2/go.sum 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/go.sum 2026-04-24 16:10:52.000000000 +0200 @@ -37,14 +37,14 @@ github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/guptarohit/asciigraph v0.9.0 h1:MvCSRRVkT2XvU1IO6n92o7l7zqx1DiFaoszOUZQztbY= github.com/guptarohit/asciigraph v0.9.0/go.mod h1:dYl5wwK4gNsnFf9Zp+l06rFiDZ5YtXM6x7SRWZ3KGag= -github.com/hetznercloud/hcloud-go/v2 v2.37.0 h1:PMnuOA8pL8aHLLPp6nnnCTo2Xk2tqu4dAfYsC3bWdT0= -github.com/hetznercloud/hcloud-go/v2 v2.37.0/go.mod h1:zaDOCKmpnI86ftoCpUpaiYaw9Wew1ib1AcXTh96deYI= +github.com/hetznercloud/hcloud-go/v2 v2.38.0 h1:bJL4O5Zd8iF+vDRzeAbmsMcxKhn/sf/HUtu2jl/bFl0= +github.com/hetznercloud/hcloud-go/v2 v2.38.0/go.mod h1:BHmbGdh59t0CazoUEFvbdp6PyV+gwnF0fl9D4Bdgqq0= github.com/iancoleman/orderedmap v0.3.0 h1:5cbR2grmZR/DiVt+VJopEhtVs9YGInGIxAoMJn+Ichc= github.com/iancoleman/orderedmap v0.3.0/go.mod h1:XuLcCUkdL5owUCQeF2Ue9uuw1EptkJDkXXS7VoV7XGE= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jedib0t/go-pretty/v6 v6.7.9 h1:frarzQWmkZd97syT81+TH8INKPpzoxQnk+Mk5EIHSrM= -github.com/jedib0t/go-pretty/v6 v6.7.9/go.mod h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU= +github.com/jedib0t/go-pretty/v6 v6.7.10 h1:B/2qW2Bkv2L6n14PP8o1kx75kWzHOQ3YTluWzg9icac= +github.com/jedib0t/go-pretty/v6 v6.7.10/go.mod h1:YwC5CE4fJ1HFUDeivSV1r//AmANFHyqczZk+U6BDALU= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -119,19 +119,19 @@ go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= -golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= +golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM= +golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU= -golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= -golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= -golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= +golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/internal/cmd/datacenter/describe.go new/hcloud-cli-1.63.0/internal/cmd/datacenter/describe.go --- old/hcloud-cli-1.62.2/internal/cmd/datacenter/describe.go 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/internal/cmd/datacenter/describe.go 2026-04-24 16:10:52.000000000 +0200 @@ -49,6 +49,11 @@ fmt.Fprintf(&sb, "Location:\n") fmt.Fprint(&sb, util.PrefixLines(location.DescribeLocation(datacenter.Location), " ")) + // datacenter.ServerTypes will not be populated anymore after 2026-10-01. + if dst := datacenter.ServerTypes; dst.Available == nil && dst.Supported == nil && dst.AvailableForMigration == nil { + return sb.String() + } + type ServerTypeStatus struct { ID int64 Available bool diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/internal/cmd/datacenter/describe_test.go new/hcloud-cli-1.63.0/internal/cmd/datacenter/describe_test.go --- old/hcloud-cli-1.62.2/internal/cmd/datacenter/describe_test.go 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/internal/cmd/datacenter/describe_test.go 2026-04-24 16:10:52.000000000 +0200 @@ -43,9 +43,6 @@ City: Latitude: 0.000000 Longitude: 0.000000 - -Server Types: - No Server Types ` require.NoError(t, err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/internal/cmd/datacenter/list_test.go new/hcloud-cli-1.63.0/internal/cmd/datacenter/list_test.go --- old/hcloud-cli-1.62.2/internal/cmd/datacenter/list_test.go 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/internal/cmd/datacenter/list_test.go 2026-04-24 16:10:52.000000000 +0200 @@ -95,11 +95,6 @@ "latitude": 0, "longitude": 0, "network_zone": "" - }, - "server_types": { - "supported": null, - "available_for_migration": null, - "available": null } } ]`, out) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/internal/cmd/primaryip/testdata/create_response.json new/hcloud-cli-1.63.0/internal/cmd/primaryip/testdata/create_response.json --- old/hcloud-cli-1.62.2/internal/cmd/primaryip/testdata/create_response.json 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/internal/cmd/primaryip/testdata/create_response.json 2026-04-24 16:10:52.000000000 +0200 @@ -28,12 +28,7 @@ "name": "fsn1", "network_zone": "" }, - "name": "fsn1-dc14", - "server_types": { - "available": null, - "available_for_migration": null, - "supported": null - } + "name": "fsn1-dc14" }, "dns_ptr": [], "id": 1, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/internal/cmd/server/create_test.go new/hcloud-cli-1.63.0/internal/cmd/server/create_test.go --- old/hcloud-cli-1.62.2/internal/cmd/server/create_test.go 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/internal/cmd/server/create_test.go 2026-04-24 16:10:52.000000000 +0200 @@ -157,12 +157,16 @@ ID: 1, Name: "fsn1", }, + Available: true, + Recommended: true, }, { Location: &hcloud.Location{ ID: 2, Name: "nbg1", }, + Available: true, + Recommended: false, }, }, }, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/internal/cmd/server/testdata/create_response.json new/hcloud-cli-1.63.0/internal/cmd/server/testdata/create_response.json --- old/hcloud-cli-1.62.2/internal/cmd/server/testdata/create_response.json 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/internal/cmd/server/testdata/create_response.json 2026-04-24 16:10:52.000000000 +0200 @@ -26,12 +26,7 @@ "name": "fsn1", "network_zone": "" }, - "name": "fsn1-dc14", - "server_types": { - "available": null, - "available_for_migration": null, - "supported": null - } + "name": "fsn1-dc14" }, "id": 1234, "image": { @@ -111,8 +106,8 @@ "prices": null, "storage_type": "local", "locations": [ - { "id": 1, "name": "fsn1", "deprecation": null }, - { "id": 2, "name": "nbg1", "deprecation": null } + { "id": 1, "name": "fsn1", "deprecation": null, "available": true, "recommended": true }, + { "id": 2, "name": "nbg1", "deprecation": null, "available": true, "recommended": false } ] }, "status": "running", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/internal/cmd/servertype/describe.go new/hcloud-cli-1.63.0/internal/cmd/servertype/describe.go --- old/hcloud-cli-1.62.2/internal/cmd/servertype/describe.go 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/internal/cmd/servertype/describe.go 2026-04-24 16:10:52.000000000 +0200 @@ -65,6 +65,8 @@ for _, info := range locations { fmt.Fprintf(&sb, " - Location:\t%s\n", info.Location.Name) + fmt.Fprintf(&sb, " Available:\t%s\n", util.YesNo(info.Available)) + fmt.Fprintf(&sb, " Recommended:\t%s\n", util.YesNo(info.Recommended)) if deprecationText := util.DescribeDeprecation(info); deprecationText != "" { fmt.Fprint(&sb, util.PrefixLines(deprecationText, " ")) @@ -97,8 +99,7 @@ } type locationInfo struct { - Location *hcloud.Location - hcloud.DeprecatableResource + *hcloud.ServerTypeLocation Pricing hcloud.ServerTypeLocationPricing } @@ -106,7 +107,7 @@ locations := make([]locationInfo, 0, len(serverType.Locations)) for _, location := range serverType.Locations { - info := locationInfo{Location: location.Location, DeprecatableResource: location.DeprecatableResource} + info := locationInfo{ServerTypeLocation: &location} for _, pricing := range pricings { // Pricing endpoint only sets the location name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/internal/cmd/servertype/describe_test.go new/hcloud-cli-1.63.0/internal/cmd/servertype/describe_test.go --- old/hcloud-cli-1.62.2/internal/cmd/servertype/describe_test.go 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/internal/cmd/servertype/describe_test.go 2026-04-24 16:10:52.000000000 +0200 @@ -44,6 +44,8 @@ { Location: &hcloud.Location{Name: "fsn1"}, DeprecatableResource: deprecation, + Available: true, + Recommended: false, }, }, }, nil, nil) @@ -112,7 +114,9 @@ Storage Type: local Locations: - - Location: fsn1 + - Location: fsn1 + Available: yes + Recommended: no Deprecation: Announced: %s (%s) Unavailable After: %s (%s) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/internal/cmd/servertype/list.go new/hcloud-cli-1.63.0/internal/cmd/servertype/list.go --- old/hcloud-cli-1.62.2/internal/cmd/servertype/list.go 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/internal/cmd/servertype/list.go 2026-04-24 16:10:52.000000000 +0200 @@ -2,7 +2,6 @@ import ( "fmt" - "slices" "strings" "time" @@ -13,7 +12,6 @@ "github.com/hetznercloud/cli/internal/hcapi2" "github.com/hetznercloud/cli/internal/state" "github.com/hetznercloud/hcloud-go/v2/hcloud" - "github.com/hetznercloud/hcloud-go/v2/hcloud/exp/kit/sliceutil" "github.com/hetznercloud/hcloud-go/v2/hcloud/schema" ) @@ -36,16 +34,20 @@ AddAllowedFields(&hcloud.ServerType{}). AddFieldFn("location", func(serverType *hcloud.ServerType) string { now := time.Now() - return strings.Join( - sliceutil.Transform( - slices.DeleteFunc( - slices.Clone(serverType.Locations), - func(l hcloud.ServerTypeLocation) bool { return l.IsDeprecated() && l.UnavailableAfter().Before(now) }, - ), - func(l hcloud.ServerTypeLocation) string { return l.Location.Name }, - ), - ",", - ) + return listLocationNames(serverType, func(l hcloud.ServerTypeLocation) bool { + return l.IsDeprecated() && l.UnavailableAfter().Before(now) + }) + }). + AddFieldFn("location_available", func(serverType *hcloud.ServerType) string { + now := time.Now() + return listLocationNames(serverType, func(l hcloud.ServerTypeLocation) bool { + return (l.IsDeprecated() && l.UnavailableAfter().Before(now)) || !l.Available + }) + }). + AddFieldFn("location_recommended", func(serverType *hcloud.ServerType) string { + return listLocationNames(serverType, func(l hcloud.ServerTypeLocation) bool { + return !l.Recommended + }) }). AddFieldAlias("storagetype", "storage type"). AddFieldFn("memory", func(serverType *hcloud.ServerType) string { @@ -79,3 +81,13 @@ Schema: hcloud.SchemaFromServerType, } + +func listLocationNames(serverType *hcloud.ServerType, del func(hcloud.ServerTypeLocation) bool) string { + var locationNames []string + for _, l := range serverType.Locations { + if !del(l) { + locationNames = append(locationNames, l.Location.Name) + } + } + return strings.Join(locationNames, ", ") +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/internal/cmd/servertype/list_test.go new/hcloud-cli-1.63.0/internal/cmd/servertype/list_test.go --- old/hcloud-cli-1.62.2/internal/cmd/servertype/list_test.go 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/internal/cmd/servertype/list_test.go 2026-04-24 16:10:52.000000000 +0200 @@ -46,17 +46,18 @@ Disk: 80, StorageType: hcloud.StorageTypeLocal, Locations: []hcloud.ServerTypeLocation{ - {Location: &hcloud.Location{ID: 1, Name: "fsn1"}, DeprecatableResource: serverTypeDeprecation}, - {Location: &hcloud.Location{ID: 2, Name: "nbg1"}}, - {Location: &hcloud.Location{ID: 3, Name: "hel1"}}, + {Location: &hcloud.Location{ID: 1, Name: "fsn1"}, Available: false, Recommended: false, + DeprecatableResource: serverTypeDeprecation}, + {Location: &hcloud.Location{ID: 2, Name: "nbg1"}, Available: true, Recommended: false}, + {Location: &hcloud.Location{ID: 3, Name: "hel1"}, Available: true, Recommended: true}, }, }, }, nil) - out, errOut, err := fx.Run(cmd, []string{}) + out, errOut, err := fx.Run(cmd, []string{"-o=columns=id,name,cores,cpu_type,architecture,memory,disk,location,location_available,location_recommended"}) - expOut := `ID NAME CORES CPU TYPE ARCHITECTURE MEMORY DISK LOCATION -123 test 2 shared arm 8.0 GB 80 GB nbg1,hel1 + expOut := `ID NAME CORES CPU TYPE ARCHITECTURE MEMORY DISK LOCATION LOCATION AVAILABLE LOCATION RECOMMENDED +123 test 2 shared arm 8.0 GB 80 GB nbg1, hel1 nbg1, hel1 hel1 ` require.NoError(t, err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/internal/version/version.go new/hcloud-cli-1.63.0/internal/version/version.go --- old/hcloud-cli-1.62.2/internal/version/version.go 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/internal/version/version.go 2026-04-24 16:10:52.000000000 +0200 @@ -4,7 +4,7 @@ var ( // version is a semver version (https://semver.org). - version = "1.62.2" // x-releaser-pleaser-version + version = "1.63.0" // x-releaser-pleaser-version // versionPrerelease is a semver version pre-release identifier (https://semver.org). // diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/hcloud-cli-1.62.2/mise.toml new/hcloud-cli-1.63.0/mise.toml --- old/hcloud-cli-1.62.2/mise.toml 2026-04-07 19:36:15.000000000 +0200 +++ new/hcloud-cli-1.63.0/mise.toml 2026-04-24 16:10:52.000000000 +0200 @@ -1,7 +1,7 @@ [tools] -go = "1.26.1" +go = "1.26.2" "go:go.uber.org/mock/mockgen" = "v0.6.0" "github:golangci/golangci-lint" = "2.11.4" -"github:goreleaser/goreleaser" = "v2.15.2" +"github:goreleaser/goreleaser" = "v2.15.4" "github:anchore/quill" = "v0.7.1" "github:jstemmer/go-junit-report" = "v2.1.0" ++++++ hcloud-cli.obsinfo ++++++ --- /var/tmp/diff_new_pack.7HvBKp/_old 2026-04-26 21:14:57.406350970 +0200 +++ /var/tmp/diff_new_pack.7HvBKp/_new 2026-04-26 21:14:57.410351134 +0200 @@ -1,5 +1,5 @@ name: hcloud-cli -version: 1.62.2 -mtime: 1775583375 -commit: 4b2b4e089e3b6d09f68469bec3ead54b08991bf7 +version: 1.63.0 +mtime: 1777039852 +commit: 5504434e319291743f9f700e5f45930b47f1c42d ++++++ vendor.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/datacenter.go new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/datacenter.go --- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/datacenter.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/datacenter.go 2026-04-24 16:10:52.000000000 +0200 @@ -16,10 +16,16 @@ Name string Description string Location *Location + + // Deprecated: [Datacenter.ServerTypes] is deprecated and will not be returned after 2026-10-01. + // Use [ServerType.Locations] instead. ServerTypes DatacenterServerTypes } // DatacenterServerTypes represents the server types available and supported in a datacenter. +// +// Deprecated: [DatacenterServerTypes] is deprecated and will not be returned after 2026-10-01. +// Use [ServerType.Locations] instead. type DatacenterServerTypes struct { Supported []*ServerType AvailableForMigration []*ServerType diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/hcloud.go new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/hcloud.go --- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/hcloud.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/hcloud.go 2026-04-24 16:10:52.000000000 +0200 @@ -80,4 +80,4 @@ package hcloud // Version is the library's version following Semantic Versioning. -const Version = "2.37.0" // x-releaser-pleaser-version +const Version = "2.38.0" // x-releaser-pleaser-version diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/datacenter.go new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/datacenter.go --- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/datacenter.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/datacenter.go 2026-04-24 16:10:52.000000000 +0200 @@ -2,14 +2,20 @@ // Datacenter defines the schema of a datacenter. type Datacenter struct { - ID int64 `json:"id"` - Name string `json:"name"` - Description string `json:"description"` - Location Location `json:"location"` - ServerTypes DatacenterServerTypes `json:"server_types"` + ID int64 `json:"id"` + Name string `json:"name"` + Description string `json:"description"` + Location Location `json:"location"` + + // Deprecated: [Datacenter.ServerTypes] is deprecated and will not be returned after 2026-10-01. + // Use [ServerType.Locations] instead. + ServerTypes *DatacenterServerTypes `json:"server_types,omitempty"` } // DatacenterServerTypes defines the schema of the server types available in a datacenter. +// +// Deprecated: [DatacenterServerTypes] is deprecated and will not be returned after 2026-10-01. +// Use [ServerType.Locations] instead. type DatacenterServerTypes struct { Supported []int64 `json:"supported"` AvailableForMigration []int64 `json:"available_for_migration"` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/server_type.go new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/server_type.go --- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/server_type.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema/server_type.go 2026-04-24 16:10:52.000000000 +0200 @@ -29,8 +29,10 @@ } type ServerTypeLocation struct { - ID int64 `json:"id"` - Name string `json:"name"` + ID int64 `json:"id"` + Name string `json:"name"` + Recommended bool `json:"recommended"` + Available bool `json:"available"` DeprecatableResource } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema.go new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema.go --- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema.go 2026-04-24 16:10:52.000000000 +0200 @@ -99,6 +99,10 @@ return c.SchemaFromDatacenter(d) } +func schemaFromDatacenterServerTypes(dst DatacenterServerTypes) schema.DatacenterServerTypes { + return c.schemaFromDatacenterServerTypes(dst) +} + // ServerFromSchema converts a schema.Server to a Server. func ServerFromSchema(s schema.Server) *Server { return c.ServerFromSchema(s) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema_gen.go new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema_gen.go --- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema_gen.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/schema_gen.go 2026-04-24 16:10:52.000000000 +0200 @@ -84,6 +84,7 @@ // goverter:extend int64SlicePtrFromCertificatePtrSlice // goverter:extend stringSlicePtrFromStringSlice // goverter:extend locationFromServerTypeLocationSchema +// goverter:extend schemaPtrFromDatacenterServerTypes type converter interface { // goverter:map Error.Code ErrorCode @@ -136,6 +137,8 @@ SchemaFromDatacenter(*Datacenter) schema.Datacenter + schemaFromDatacenterServerTypes(DatacenterServerTypes) schema.DatacenterServerTypes + ServerFromSchema(schema.Server) *Server // goverter:map OutgoingTraffic | mapZeroUint64ToNil @@ -1124,3 +1127,12 @@ return Ptr(time.Weekday(*i)) } + +// hcloud.DatacenterServerTypes is not nullable but *schema.DatacenterServerTypes is. +// We treat the zero value as nil. +func schemaPtrFromDatacenterServerTypes(dst DatacenterServerTypes) *schema.DatacenterServerTypes { + if dst.Available == nil && dst.AvailableForMigration == nil && dst.Supported == nil { + return nil + } + return Ptr(schemaFromDatacenterServerTypes(dst)) +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/server_type.go new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/server_type.go --- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/server_type.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/server_type.go 2026-04-24 16:10:52.000000000 +0200 @@ -58,7 +58,9 @@ ) type ServerTypeLocation struct { - Location *Location + Location *Location + Available bool + Recommended bool DeprecatableResource } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zz_schema.go new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zz_schema.go --- old/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zz_schema.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/github.com/hetznercloud/hcloud-go/v2/hcloud/zz_schema.go 2026-04-24 16:10:52.000000000 +0200 @@ -78,7 +78,7 @@ hcloudDatacenter.Name = source.Name hcloudDatacenter.Description = source.Description hcloudDatacenter.Location = c.LocationFromSchema(source.Location) - hcloudDatacenter.ServerTypes = c.schemaDatacenterServerTypesToHcloudDatacenterServerTypes(source.ServerTypes) + hcloudDatacenter.ServerTypes = c.pSchemaDatacenterServerTypesToHcloudDatacenterServerTypes(source.ServerTypes) return &hcloudDatacenter } func (c *converterImpl) DeprecationFromSchema(source *schema.DeprecationInfo) *DeprecationInfo { @@ -515,7 +515,7 @@ schemaDatacenter.Name = (*source).Name schemaDatacenter.Description = (*source).Description schemaDatacenter.Location = c.SchemaFromLocation((*source).Location) - schemaDatacenter.ServerTypes = c.hcloudDatacenterServerTypesToSchemaDatacenterServerTypes((*source).ServerTypes) + schemaDatacenter.ServerTypes = schemaPtrFromDatacenterServerTypes((*source).ServerTypes) } return schemaDatacenter } @@ -1788,28 +1788,6 @@ schemaCertificateUsedByRef.Type = string(source.Type) return schemaCertificateUsedByRef } -func (c *converterImpl) hcloudDatacenterServerTypesToSchemaDatacenterServerTypes(source DatacenterServerTypes) schema.DatacenterServerTypes { - var schemaDatacenterServerTypes schema.DatacenterServerTypes - if source.Supported != nil { - schemaDatacenterServerTypes.Supported = make([]int64, len(source.Supported)) - for i := 0; i < len(source.Supported); i++ { - schemaDatacenterServerTypes.Supported[i] = int64FromServerType(source.Supported[i]) - } - } - if source.AvailableForMigration != nil { - schemaDatacenterServerTypes.AvailableForMigration = make([]int64, len(source.AvailableForMigration)) - for j := 0; j < len(source.AvailableForMigration); j++ { - schemaDatacenterServerTypes.AvailableForMigration[j] = int64FromServerType(source.AvailableForMigration[j]) - } - } - if source.Available != nil { - schemaDatacenterServerTypes.Available = make([]int64, len(source.Available)) - for k := 0; k < len(source.Available); k++ { - schemaDatacenterServerTypes.Available[k] = int64FromServerType(source.Available[k]) - } - } - return schemaDatacenterServerTypes -} func (c *converterImpl) hcloudDeprecatableResourceToSchemaDeprecatableResource(source DeprecatableResource) schema.DeprecatableResource { var schemaDeprecatableResource schema.DeprecatableResource schemaDeprecatableResource.Deprecation = c.SchemaFromDeprecation(source.Deprecation) @@ -2143,7 +2121,7 @@ schemaDatacenter.Name = (*source).Name schemaDatacenter.Description = (*source).Description schemaDatacenter.Location = c.SchemaFromLocation((*source).Location) - schemaDatacenter.ServerTypes = c.hcloudDatacenterServerTypesToSchemaDatacenterServerTypes((*source).ServerTypes) + schemaDatacenter.ServerTypes = schemaPtrFromDatacenterServerTypes((*source).ServerTypes) pSchemaDatacenter = &schemaDatacenter } return pSchemaDatacenter @@ -2573,6 +2551,30 @@ } return pHcloudCertificateStatus } +func (c *converterImpl) pSchemaDatacenterServerTypesToHcloudDatacenterServerTypes(source *schema.DatacenterServerTypes) DatacenterServerTypes { + var hcloudDatacenterServerTypes DatacenterServerTypes + if source != nil { + if (*source).Supported != nil { + hcloudDatacenterServerTypes.Supported = make([]*ServerType, len((*source).Supported)) + for i := 0; i < len((*source).Supported); i++ { + hcloudDatacenterServerTypes.Supported[i] = serverTypeFromInt64((*source).Supported[i]) + } + } + if (*source).AvailableForMigration != nil { + hcloudDatacenterServerTypes.AvailableForMigration = make([]*ServerType, len((*source).AvailableForMigration)) + for j := 0; j < len((*source).AvailableForMigration); j++ { + hcloudDatacenterServerTypes.AvailableForMigration[j] = serverTypeFromInt64((*source).AvailableForMigration[j]) + } + } + if (*source).Available != nil { + hcloudDatacenterServerTypes.Available = make([]*ServerType, len((*source).Available)) + for k := 0; k < len((*source).Available); k++ { + hcloudDatacenterServerTypes.Available[k] = serverTypeFromInt64((*source).Available[k]) + } + } + } + return hcloudDatacenterServerTypes +} func (c *converterImpl) pSchemaDatacenterToPHcloudDatacenter(source *schema.Datacenter) *Datacenter { var pHcloudDatacenter *Datacenter if source != nil { @@ -2581,7 +2583,7 @@ hcloudDatacenter.Name = (*source).Name hcloudDatacenter.Description = (*source).Description hcloudDatacenter.Location = c.LocationFromSchema((*source).Location) - hcloudDatacenter.ServerTypes = c.schemaDatacenterServerTypesToHcloudDatacenterServerTypes((*source).ServerTypes) + hcloudDatacenter.ServerTypes = c.pSchemaDatacenterServerTypesToHcloudDatacenterServerTypes((*source).ServerTypes) pHcloudDatacenter = &hcloudDatacenter } return pHcloudDatacenter @@ -2759,28 +2761,6 @@ hcloudCertificateUsedByRef.Type = CertificateUsedByRefType(source.Type) return hcloudCertificateUsedByRef } -func (c *converterImpl) schemaDatacenterServerTypesToHcloudDatacenterServerTypes(source schema.DatacenterServerTypes) DatacenterServerTypes { - var hcloudDatacenterServerTypes DatacenterServerTypes - if source.Supported != nil { - hcloudDatacenterServerTypes.Supported = make([]*ServerType, len(source.Supported)) - for i := 0; i < len(source.Supported); i++ { - hcloudDatacenterServerTypes.Supported[i] = serverTypeFromInt64(source.Supported[i]) - } - } - if source.AvailableForMigration != nil { - hcloudDatacenterServerTypes.AvailableForMigration = make([]*ServerType, len(source.AvailableForMigration)) - for j := 0; j < len(source.AvailableForMigration); j++ { - hcloudDatacenterServerTypes.AvailableForMigration[j] = serverTypeFromInt64(source.AvailableForMigration[j]) - } - } - if source.Available != nil { - hcloudDatacenterServerTypes.Available = make([]*ServerType, len(source.Available)) - for k := 0; k < len(source.Available); k++ { - hcloudDatacenterServerTypes.Available[k] = serverTypeFromInt64(source.Available[k]) - } - } - return hcloudDatacenterServerTypes -} func (c *converterImpl) schemaDeprecatableResourceToHcloudDeprecatableResource(source schema.DeprecatableResource) DeprecatableResource { var hcloudDeprecatableResource DeprecatableResource hcloudDeprecatableResource.Deprecation = c.DeprecationFromSchema(source.Deprecation) @@ -2824,6 +2804,28 @@ hcloudFloatingIPProtection.Delete = source.Delete return hcloudFloatingIPProtection } +func (c *converterImpl) schemaFromDatacenterServerTypes(source DatacenterServerTypes) schema.DatacenterServerTypes { + var schemaDatacenterServerTypes schema.DatacenterServerTypes + if source.Supported != nil { + schemaDatacenterServerTypes.Supported = make([]int64, len(source.Supported)) + for i := 0; i < len(source.Supported); i++ { + schemaDatacenterServerTypes.Supported[i] = int64FromServerType(source.Supported[i]) + } + } + if source.AvailableForMigration != nil { + schemaDatacenterServerTypes.AvailableForMigration = make([]int64, len(source.AvailableForMigration)) + for j := 0; j < len(source.AvailableForMigration); j++ { + schemaDatacenterServerTypes.AvailableForMigration[j] = int64FromServerType(source.AvailableForMigration[j]) + } + } + if source.Available != nil { + schemaDatacenterServerTypes.Available = make([]int64, len(source.Available)) + for k := 0; k < len(source.Available); k++ { + schemaDatacenterServerTypes.Available[k] = int64FromServerType(source.Available[k]) + } + } + return schemaDatacenterServerTypes +} func (c *converterImpl) schemaFromFloatingIPPricing(source FloatingIPPricing) schema.PricingFloatingIP { var schemaPricingFloatingIP schema.PricingFloatingIP schemaPricingFloatingIP.PriceMonthly = c.hcloudPriceToSchemaPrice(source.Monthly) @@ -2910,6 +2912,8 @@ if pString != nil { schemaServerTypeLocation.Name = *pString } + schemaServerTypeLocation.Recommended = source.Recommended + schemaServerTypeLocation.Available = source.Available schemaServerTypeLocation.DeprecatableResource = c.hcloudDeprecatableResourceToSchemaDeprecatableResource(source.DeprecatableResource) return schemaServerTypeLocation } @@ -3102,6 +3106,8 @@ func (c *converterImpl) serverTypeLocationFromSchema(source schema.ServerTypeLocation) ServerTypeLocation { var hcloudServerTypeLocation ServerTypeLocation hcloudServerTypeLocation.Location = locationFromServerTypeLocationSchema(source) + hcloudServerTypeLocation.Available = source.Available + hcloudServerTypeLocation.Recommended = source.Recommended hcloudServerTypeLocation.DeprecatableResource = c.schemaDeprecatableResourceToHcloudDeprecatableResource(source.DeprecatableResource) return hcloudServerTypeLocation } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/jedib0t/go-pretty/v6/text/align.go new/vendor/github.com/jedib0t/go-pretty/v6/text/align.go --- old/vendor/github.com/jedib0t/go-pretty/v6/text/align.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/github.com/jedib0t/go-pretty/v6/text/align.go 2026-04-24 16:10:52.000000000 +0200 @@ -127,6 +127,13 @@ // get the number of spaces to insert into the text numSpacesNeeded := maxLength - textLength + strings.Count(text, " ") + if numSpacesNeeded < 0 { + // textLength (display-width) exceeds maxLength; this can happen + // when the cell contains wide Unicode characters (e.g. CJK) whose + // display width is greater than their rune count. Return the text + // as-is; truncation is the caller's responsibility. + return text + } numSpacesNeededBetweenWords := 0 if len(words) > 1 { numSpacesNeededBetweenWords = numSpacesNeeded / (len(words) - 1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/crypto/ssh/cipher.go new/vendor/golang.org/x/crypto/ssh/cipher.go --- old/vendor/golang.org/x/crypto/ssh/cipher.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/golang.org/x/crypto/ssh/cipher.go 2026-04-24 16:10:52.000000000 +0200 @@ -586,7 +586,7 @@ // Length of encrypted portion of the packet (header, payload, padding). // Enforce minimum padding and packet size. - encLength := maxUInt32(prefixLen+len(packet)+cbcMinPaddingSize, cbcMinPaddingSize) + encLength := maxUInt32(prefixLen+len(packet)+cbcMinPaddingSize, cbcMinPacketSize) // Enforce block size. encLength = (encLength + effectiveBlockSize - 1) / effectiveBlockSize * effectiveBlockSize diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/crypto/ssh/client_auth.go new/vendor/golang.org/x/crypto/ssh/client_auth.go --- old/vendor/golang.org/x/crypto/ssh/client_auth.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/golang.org/x/crypto/ssh/client_auth.go 2026-04-24 16:10:52.000000000 +0200 @@ -274,10 +274,14 @@ } // Filter algorithms based on those supported by MultiAlgorithmSigner. + // Iterate over the signer's algorithms first to preserve its preference order. + supportedKeyAlgos := algorithmsForKeyFormat(keyFormat) var keyAlgos []string - for _, algo := range algorithmsForKeyFormat(keyFormat) { - if slices.Contains(as.Algorithms(), underlyingAlgo(algo)) { - keyAlgos = append(keyAlgos, algo) + for _, signerAlgo := range as.Algorithms() { + if idx := slices.IndexFunc(supportedKeyAlgos, func(algo string) bool { + return underlyingAlgo(algo) == signerAlgo + }); idx >= 0 { + keyAlgos = append(keyAlgos, supportedKeyAlgos[idx]) } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64_other.go new/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64_other.go --- old/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64_other.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/golang.org/x/sys/cpu/cpu_darwin_arm64_other.go 2026-04-24 16:10:52.000000000 +0200 @@ -6,6 +6,8 @@ package cpu +import "runtime" + func doinit() { setMinimalFeatures() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go new/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go --- old/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go 2026-04-24 16:10:52.000000000 +0200 @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !darwin && !linux && !netbsd && !openbsd && !windows && arm64 +//go:build !darwin && !linux && !netbsd && !openbsd && arm64 package cpu diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go new/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go --- old/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go 1970-01-01 01:00:00.000000000 +0100 @@ -1,42 +0,0 @@ -// Copyright 2026 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package cpu - -import ( - "golang.org/x/sys/windows" -) - -func doinit() { - // set HasASIMD and HasFP to true as per - // https://learn.microsoft.com/en-us/cpp/build/arm64-windows-abi-conventions?view=msvc-170#base-requirements - // - // The ARM64 version of Windows always presupposes that it's running on an ARMv8 or later architecture. - // Both floating-point and NEON support are presumed to be present in hardware. - // - ARM64.HasASIMD = true - ARM64.HasFP = true - - if windows.IsProcessorFeaturePresent(windows.PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE) { - ARM64.HasAES = true - ARM64.HasPMULL = true - ARM64.HasSHA1 = true - ARM64.HasSHA2 = true - } - ARM64.HasSHA3 = windows.IsProcessorFeaturePresent(windows.PF_ARM_SHA3_INSTRUCTIONS_AVAILABLE) - ARM64.HasCRC32 = windows.IsProcessorFeaturePresent(windows.PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE) - ARM64.HasSHA512 = windows.IsProcessorFeaturePresent(windows.PF_ARM_SHA512_INSTRUCTIONS_AVAILABLE) - ARM64.HasATOMICS = windows.IsProcessorFeaturePresent(windows.PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE) - if windows.IsProcessorFeaturePresent(windows.PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE) { - ARM64.HasASIMDDP = true - ARM64.HasASIMDRDM = true - } - if windows.IsProcessorFeaturePresent(windows.PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE) { - ARM64.HasLRCPC = true - ARM64.HasSM3 = true - } - ARM64.HasSVE = windows.IsProcessorFeaturePresent(windows.PF_ARM_SVE_INSTRUCTIONS_AVAILABLE) - ARM64.HasSVE2 = windows.IsProcessorFeaturePresent(windows.PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE) - ARM64.HasJSCVT = windows.IsProcessorFeaturePresent(windows.PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE) -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/windows/dll_windows.go new/vendor/golang.org/x/sys/windows/dll_windows.go --- old/vendor/golang.org/x/sys/windows/dll_windows.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/golang.org/x/sys/windows/dll_windows.go 2026-04-24 16:10:52.000000000 +0200 @@ -163,42 +163,7 @@ // (according to the semantics of the specific function being called) before consulting // the error. The error will be guaranteed to contain windows.Errno. func (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) { - switch len(a) { - case 0: - return syscall.Syscall(p.Addr(), uintptr(len(a)), 0, 0, 0) - case 1: - return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], 0, 0) - case 2: - return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], 0) - case 3: - return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], a[2]) - case 4: - return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], 0, 0) - case 5: - return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], 0) - case 6: - return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5]) - case 7: - return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], 0, 0) - case 8: - return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 0) - case 9: - return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]) - case 10: - return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], 0, 0) - case 11: - return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], 0) - case 12: - return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11]) - case 13: - return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], 0, 0) - case 14: - return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], 0) - case 15: - return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14]) - default: - panic("Call " + p.Name + " with too many arguments " + itoa(len(a)) + ".") - } + return syscall.SyscallN(p.Addr(), a...) } // A LazyDLL implements access to a single DLL. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/sys/windows/security_windows.go new/vendor/golang.org/x/sys/windows/security_windows.go --- old/vendor/golang.org/x/sys/windows/security_windows.go 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/golang.org/x/sys/windows/security_windows.go 2026-04-24 16:10:52.000000000 +0200 @@ -1438,13 +1438,17 @@ } // GetNamedSecurityInfo queries the security information for a given named object and returns the self-relative security -// descriptor result on the Go heap. +// descriptor result on the Go heap. The security descriptor might be nil, even when err is nil, if the object exists +// but has no security descriptor. func GetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION) (sd *SECURITY_DESCRIPTOR, err error) { var winHeapSD *SECURITY_DESCRIPTOR err = getNamedSecurityInfo(objectName, objectType, securityInformation, nil, nil, nil, nil, &winHeapSD) if err != nil { return } + if winHeapSD == nil { + return nil, nil + } defer LocalFree(Handle(unsafe.Pointer(winHeapSD))) return winHeapSD.copySelfRelativeSecurityDescriptor(), nil } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt --- old/vendor/modules.txt 2026-04-07 19:36:15.000000000 +0200 +++ new/vendor/modules.txt 2026-04-24 16:10:52.000000000 +0200 @@ -55,7 +55,7 @@ # github.com/guptarohit/asciigraph v0.9.0 ## explicit; go 1.11 github.com/guptarohit/asciigraph -# github.com/hetznercloud/hcloud-go/v2 v2.37.0 +# github.com/hetznercloud/hcloud-go/v2 v2.38.0 ## explicit; go 1.25.0 github.com/hetznercloud/hcloud-go/v2/hcloud github.com/hetznercloud/hcloud-go/v2/hcloud/exp/actionutil @@ -73,7 +73,7 @@ # github.com/inconshreveable/mousetrap v1.1.0 ## explicit; go 1.18 github.com/inconshreveable/mousetrap -# github.com/jedib0t/go-pretty/v6 v6.7.9 +# github.com/jedib0t/go-pretty/v6 v6.7.10 ## explicit; go 1.18 github.com/jedib0t/go-pretty/v6/table github.com/jedib0t/go-pretty/v6/text @@ -184,7 +184,7 @@ # go.yaml.in/yaml/v3 v3.0.4 ## explicit; go 1.16 go.yaml.in/yaml/v3 -# golang.org/x/crypto v0.49.0 +# golang.org/x/crypto v0.50.0 ## explicit; go 1.25.0 golang.org/x/crypto/blowfish golang.org/x/crypto/chacha20 @@ -193,23 +193,23 @@ golang.org/x/crypto/internal/poly1305 golang.org/x/crypto/ssh golang.org/x/crypto/ssh/internal/bcrypt_pbkdf -# golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 +# golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f ## explicit; go 1.25.0 golang.org/x/exp/maps -# golang.org/x/net v0.52.0 +# golang.org/x/net v0.53.0 ## explicit; go 1.25.0 golang.org/x/net/http/httpguts golang.org/x/net/idna -# golang.org/x/sys v0.42.0 +# golang.org/x/sys v0.43.0 ## explicit; go 1.25.0 golang.org/x/sys/cpu golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows -# golang.org/x/term v0.41.0 +# golang.org/x/term v0.42.0 ## explicit; go 1.25.0 golang.org/x/term -# golang.org/x/text v0.35.0 +# golang.org/x/text v0.36.0 ## explicit; go 1.25.0 golang.org/x/text/cases golang.org/x/text/encoding
