From cf17e84db5133ad22470b0ff8f24a23e62770654 Mon Sep 17 00:00:00 2001 From: lukasmetzner Date: Wed, 16 Jul 2025 10:12:26 +0200 Subject: [PATCH 01/11] docs: experimental features --- README.md | 26 ++++++++++++++++++++++++++ hcloud/exp/actionutil/actions.go | 2 ++ hcloud/exp/ctxutil/ctxutil.go | 4 ++++ hcloud/exp/doc.go | 2 +- hcloud/exp/kit/envutil/env.go | 2 ++ hcloud/exp/kit/randutil/id.go | 2 ++ hcloud/exp/kit/sshutil/ssh_key.go | 6 ++++++ hcloud/exp/labelutil/selector.go | 2 ++ hcloud/exp/mockutil/http.go | 8 ++++++++ 9 files changed, 53 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3dae9185..f31e09c1 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,32 @@ func main() { } ``` +## Experimental Features + +Experimental features may undergo breaking changes even in minor releases. These features are marked accordingly in their docstrings. Do not use them in production. + +### Contributors + +To mark a feature as experimental, add the following static comment above the relevant declaration: + +```go +// Experimental: Breaking changes may occur within minor releases. +``` + +Additionally, include a link to the corresponding changelog entry that announces the experimental status of the feature. + +For example: + +```go +// String returns a pointer to the passed string s. +// +// Experimental: Breaking changes may occur within minor releases. +// See https://docs.hetzner.cloud/changelog#slug +// +// Deprecated: Use [Ptr] instead. +func String(s string) *string { return Ptr(s) } +``` + ## Upgrading ### Support diff --git a/hcloud/exp/actionutil/actions.go b/hcloud/exp/actionutil/actions.go index f20109d3..8c20c478 100644 --- a/hcloud/exp/actionutil/actions.go +++ b/hcloud/exp/actionutil/actions.go @@ -3,6 +3,8 @@ package actionutil import "github.com/hetznercloud/hcloud-go/v2/hcloud" // AppendNext return the action and the next actions in a new slice. +// +// Experimental: Breaking changes may occur within minor releases. func AppendNext(action *hcloud.Action, nextActions []*hcloud.Action) []*hcloud.Action { all := make([]*hcloud.Action, 0, 1+len(nextActions)) all = append(all, action) diff --git a/hcloud/exp/ctxutil/ctxutil.go b/hcloud/exp/ctxutil/ctxutil.go index de0ce95f..28588643 100644 --- a/hcloud/exp/ctxutil/ctxutil.go +++ b/hcloud/exp/ctxutil/ctxutil.go @@ -12,6 +12,8 @@ type key struct{} var opPathKey = key{} // SetOpPath processes the operation path and save it in the context before returning it. +// +// Experimental: Breaking changes may occur within minor releases. func SetOpPath(ctx context.Context, path string) context.Context { path, _, _ = strings.Cut(path, "?") path = strings.ReplaceAll(path, "%d", "-") @@ -21,6 +23,8 @@ func SetOpPath(ctx context.Context, path string) context.Context { } // OpPath returns the operation path from the context. +// +// Experimental: Breaking changes may occur within minor releases. func OpPath(ctx context.Context) string { result, ok := ctx.Value(opPathKey).(string) if !ok { diff --git a/hcloud/exp/doc.go b/hcloud/exp/doc.go index 96506ae2..d0e08209 100644 --- a/hcloud/exp/doc.go +++ b/hcloud/exp/doc.go @@ -1,4 +1,4 @@ // Package exp is a namespace that holds experimental features for the `hcloud-go` library. // -// Breaking changes may occur without notice. Do not use in production! +// Experimental: Breaking changes may occur without notice. package exp diff --git a/hcloud/exp/kit/envutil/env.go b/hcloud/exp/kit/envutil/env.go index 7e6aa6ee..890a9485 100644 --- a/hcloud/exp/kit/envutil/env.go +++ b/hcloud/exp/kit/envutil/env.go @@ -14,6 +14,8 @@ import ( // For both cases, the returned value may be empty. // // The value from the environment takes precedence over the value from the file. +// +// Experimental: Breaking changes may occur within minor releases. func LookupEnvWithFile(key string) (string, error) { // Check if the value is set in the environment (e.g. HCLOUD_TOKEN) value, ok := os.LookupEnv(key) diff --git a/hcloud/exp/kit/randutil/id.go b/hcloud/exp/kit/randutil/id.go index 75dab5f4..0f6cdb10 100644 --- a/hcloud/exp/kit/randutil/id.go +++ b/hcloud/exp/kit/randutil/id.go @@ -8,6 +8,8 @@ import ( // GenerateID returns a hex encoded random string with a len of 8 chars similar to // "2873fce7". +// +// Experimental: Breaking changes may occur within minor releases. func GenerateID() string { b := make([]byte, 4) _, err := rand.Read(b) diff --git a/hcloud/exp/kit/sshutil/ssh_key.go b/hcloud/exp/kit/sshutil/ssh_key.go index 4465d5c7..dc2d1c4c 100644 --- a/hcloud/exp/kit/sshutil/ssh_key.go +++ b/hcloud/exp/kit/sshutil/ssh_key.go @@ -11,6 +11,8 @@ import ( // GenerateKeyPair generates a new ed25519 ssh key pair, and returns the private key and // the public key respectively. +// +// Experimental: Breaking changes may occur within minor releases. func GenerateKeyPair() ([]byte, []byte, error) { pub, priv, err := ed25519.GenerateKey(nil) if err != nil { @@ -54,6 +56,8 @@ type privateKeyWithPublicKey interface { } // GeneratePublicKey generate a public key from the provided private key. +// +// Experimental: Breaking changes may occur within minor releases. func GeneratePublicKey(privBytes []byte) ([]byte, error) { priv, err := ssh.ParseRawPrivateKey(privBytes) if err != nil { @@ -74,6 +78,8 @@ func GeneratePublicKey(privBytes []byte) ([]byte, error) { } // GetPublicKeyFingerprint generate the finger print for the provided public key. +// +// Experimental: Breaking changes may occur within minor releases. func GetPublicKeyFingerprint(pubBytes []byte) (string, error) { pub, _, _, _, err := ssh.ParseAuthorizedKey(pubBytes) if err != nil { diff --git a/hcloud/exp/labelutil/selector.go b/hcloud/exp/labelutil/selector.go index 0d9d5006..91956941 100644 --- a/hcloud/exp/labelutil/selector.go +++ b/hcloud/exp/labelutil/selector.go @@ -10,6 +10,8 @@ import ( // resources have all specified labels set. // // The selector string can be used to filter resources when listing, for example with [hcloud.ServerClient.AllWithOpts()]. +// +// Experimental: Breaking changes may occur within minor releases. func Selector(labels map[string]string) string { selectors := make([]string, 0, len(labels)) diff --git a/hcloud/exp/mockutil/http.go b/hcloud/exp/mockutil/http.go index 26ff4874..e3c807ee 100644 --- a/hcloud/exp/mockutil/http.go +++ b/hcloud/exp/mockutil/http.go @@ -28,6 +28,8 @@ type Request struct { } // Handler is using a [Server] to mock http requests provided by the user. +// +// Experimental: Breaking changes may occur within minor releases. func Handler(t *testing.T, requests []Request) http.HandlerFunc { t.Helper() @@ -38,6 +40,8 @@ func Handler(t *testing.T, requests []Request) http.HandlerFunc { } // NewServer returns a new mock server that closes itself at the end of the test. +// +// Experimental: Breaking changes may occur within minor releases. func NewServer(t *testing.T, requests []Request) *Server { t.Helper() @@ -56,6 +60,8 @@ func NewServer(t *testing.T, requests []Request) *Server { // iterated over. // // A Server must be created using the [NewServer] function. +// +// Experimental: Breaking changes may occur within minor releases. type Server struct { *httptest.Server @@ -66,6 +72,8 @@ type Server struct { } // Expect adds requests to the list of requests expected by the [Server]. +// +// Experimental: Breaking changes may occur within minor releases. func (m *Server) Expect(requests []Request) { m.requests = append(m.requests, requests...) } From 386e18f4351013581ae1e5ee1f11d82b14d20b3d Mon Sep 17 00:00:00 2001 From: lukasmetzner Date: Wed, 16 Jul 2025 10:28:20 +0200 Subject: [PATCH 02/11] docs: revise README.md --- README.md | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f31e09c1..76c32fba 100644 --- a/README.md +++ b/README.md @@ -52,19 +52,32 @@ func main() { ## Experimental Features -Experimental features may undergo breaking changes even in minor releases. These features are marked accordingly in their docstrings. Do not use them in production. +**Breaking changes may occur without notice.** +**Do not use them in production.** -### Contributors - -To mark a feature as experimental, add the following static comment above the relevant declaration: +They are marked with: ```go // Experimental: Breaking changes may occur within minor releases. ``` -Additionally, include a link to the corresponding changelog entry that announces the experimental status of the feature. +### For Contributors + +When adding an experimental feature: + +1. Add the marker comment above the declaration: + + ```go + // Experimental: Breaking changes may occur within minor releases. + ``` + +2. Include a link to the changelog entry: + + ```go + // See https://docs.hetzner.cloud/changelog#slug + ``` -For example: +Example: ```go // String returns a pointer to the passed string s. From 9fd8bdbb7103bf4c6967c18defd72784a4c2eb47 Mon Sep 17 00:00:00 2001 From: lukasmetzner Date: Wed, 16 Jul 2025 13:43:07 +0200 Subject: [PATCH 03/11] docs: breaking changes within minor releases --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 76c32fba..f9b55874 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ func main() { ## Experimental Features -**Breaking changes may occur without notice.** +**Breaking changes may occur within minor releases.** **Do not use them in production.** They are marked with: From e443779d84aeffc18156e7832b4c2d058c5ef71b Mon Sep 17 00:00:00 2001 From: lukasmetzner Date: Wed, 16 Jul 2025 13:45:24 +0200 Subject: [PATCH 04/11] docs: mention announcement in release notes --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f9b55874..1c8832a7 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ func main() { **Breaking changes may occur within minor releases.** **Do not use them in production.** -They are marked with: +They are announced in the release notes and marked with: ```go // Experimental: Breaking changes may occur within minor releases. @@ -77,6 +77,8 @@ When adding an experimental feature: // See https://docs.hetzner.cloud/changelog#slug ``` +3. Add an announcement to the release notes + Example: ```go From 3a9fde812fa607c90e7bad96b0eb366390e5430e Mon Sep 17 00:00:00 2001 From: Lukas Metzner Date: Thu, 17 Jul 2025 10:06:31 +0200 Subject: [PATCH 05/11] Update hcloud/exp/doc.go Co-authored-by: Jonas L. --- hcloud/exp/doc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hcloud/exp/doc.go b/hcloud/exp/doc.go index d0e08209..3a06620b 100644 --- a/hcloud/exp/doc.go +++ b/hcloud/exp/doc.go @@ -1,4 +1,4 @@ // Package exp is a namespace that holds experimental features for the `hcloud-go` library. // -// Experimental: Breaking changes may occur without notice. +// Experimental: Breaking changes may occur within minor releases. package exp From 012e82a127f25d49b0f3041bc559436245297e06 Mon Sep 17 00:00:00 2001 From: Lukas Metzner Date: Thu, 17 Jul 2025 10:07:09 +0200 Subject: [PATCH 06/11] Update README.md Co-authored-by: Jonas L. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c8832a7..edb05a9b 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ func main() { They are announced in the release notes and marked with: ```go -// Experimental: Breaking changes may occur within minor releases. +// Experimental: $PRODUCT is experimental, breaking changes may occur within minor releases. See https://docs.hetzner.cloud/changelog#$SLUG for more details. ``` ### For Contributors From 26ecc4e4c42bdb2a9b1c00c01a260fc4feeab394 Mon Sep 17 00:00:00 2001 From: lukasmetzner Date: Thu, 17 Jul 2025 10:14:20 +0200 Subject: [PATCH 07/11] docs: review feedback --- README.md | 75 ++++++++++++++++--------------- hcloud/exp/actionutil/actions.go | 2 +- hcloud/exp/ctxutil/ctxutil.go | 4 +- hcloud/exp/kit/envutil/env.go | 2 +- hcloud/exp/kit/randutil/id.go | 2 +- hcloud/exp/kit/sshutil/ssh_key.go | 6 +-- hcloud/exp/labelutil/selector.go | 2 +- hcloud/exp/mockutil/http.go | 8 ++-- 8 files changed, 53 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index edb05a9b..43b036fd 100644 --- a/README.md +++ b/README.md @@ -50,45 +50,18 @@ func main() { } ``` -## Experimental Features +## Experimental features -**Breaking changes may occur within minor releases.** -**Do not use them in production.** +Experimental features are published as part of our regular releases (e.g. a product +public beta). During an experimental phase, breaking changes on those features may occur +within minor releases. -They are announced in the release notes and marked with: +While experimental features will be announced in the release notes, you can also find +whether a struct or function is experimental in its docstring: ```go -// Experimental: $PRODUCT is experimental, breaking changes may occur within minor releases. See https://docs.hetzner.cloud/changelog#$SLUG for more details. -``` - -### For Contributors - -When adding an experimental feature: - -1. Add the marker comment above the declaration: - - ```go - // Experimental: Breaking changes may occur within minor releases. - ``` - -2. Include a link to the changelog entry: - - ```go - // See https://docs.hetzner.cloud/changelog#slug - ``` - -3. Add an announcement to the release notes - -Example: - -```go -// String returns a pointer to the passed string s. -// -// Experimental: Breaking changes may occur within minor releases. -// See https://docs.hetzner.cloud/changelog#slug -// -// Deprecated: Use [Ptr] instead. -func String(s string) *string { return Ptr(s) } +// Experimental: $PRODUCT is experimental, breaking changes may occur within minor releases. +// See https://docs.hetzner.cloud/changelog#$SLUG for more details. ``` ## Upgrading @@ -124,6 +97,38 @@ This matches the official [Go Release Policy](https://go.dev/doc/devel/release#p When the minimum required Go version is changed, it is announced in the release notes for that version. +## Development + +### Experimental Features + +When adding an experimental feature: + +1. Add the marker comment above the declaration: + + ```go + // Experimental: $PRODUCT is experimental, breaking changes may occur within minor releases. + ``` + +2. Include a link to the changelog entry: + + ```go + // See https://docs.hetzner.cloud/changelog#slug + ``` + +3. Add an announcement to the release notes + +Example: + +```go +// String returns a pointer to the passed string s. +// +// Experimental: Breaking changes may occur within minor releases. +// See https://docs.hetzner.cloud/changelog#slug +// +// Deprecated: Use [Ptr] instead. +func String(s string) *string { return Ptr(s) } +``` + ## License MIT license diff --git a/hcloud/exp/actionutil/actions.go b/hcloud/exp/actionutil/actions.go index 8c20c478..8423a93a 100644 --- a/hcloud/exp/actionutil/actions.go +++ b/hcloud/exp/actionutil/actions.go @@ -4,7 +4,7 @@ import "github.com/hetznercloud/hcloud-go/v2/hcloud" // AppendNext return the action and the next actions in a new slice. // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. func AppendNext(action *hcloud.Action, nextActions []*hcloud.Action) []*hcloud.Action { all := make([]*hcloud.Action, 0, 1+len(nextActions)) all = append(all, action) diff --git a/hcloud/exp/ctxutil/ctxutil.go b/hcloud/exp/ctxutil/ctxutil.go index 28588643..d9bc2d26 100644 --- a/hcloud/exp/ctxutil/ctxutil.go +++ b/hcloud/exp/ctxutil/ctxutil.go @@ -13,7 +13,7 @@ var opPathKey = key{} // SetOpPath processes the operation path and save it in the context before returning it. // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. func SetOpPath(ctx context.Context, path string) context.Context { path, _, _ = strings.Cut(path, "?") path = strings.ReplaceAll(path, "%d", "-") @@ -24,7 +24,7 @@ func SetOpPath(ctx context.Context, path string) context.Context { // OpPath returns the operation path from the context. // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. func OpPath(ctx context.Context) string { result, ok := ctx.Value(opPathKey).(string) if !ok { diff --git a/hcloud/exp/kit/envutil/env.go b/hcloud/exp/kit/envutil/env.go index 890a9485..05ea76de 100644 --- a/hcloud/exp/kit/envutil/env.go +++ b/hcloud/exp/kit/envutil/env.go @@ -15,7 +15,7 @@ import ( // // The value from the environment takes precedence over the value from the file. // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. func LookupEnvWithFile(key string) (string, error) { // Check if the value is set in the environment (e.g. HCLOUD_TOKEN) value, ok := os.LookupEnv(key) diff --git a/hcloud/exp/kit/randutil/id.go b/hcloud/exp/kit/randutil/id.go index 0f6cdb10..b568dc94 100644 --- a/hcloud/exp/kit/randutil/id.go +++ b/hcloud/exp/kit/randutil/id.go @@ -9,7 +9,7 @@ import ( // GenerateID returns a hex encoded random string with a len of 8 chars similar to // "2873fce7". // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. func GenerateID() string { b := make([]byte, 4) _, err := rand.Read(b) diff --git a/hcloud/exp/kit/sshutil/ssh_key.go b/hcloud/exp/kit/sshutil/ssh_key.go index dc2d1c4c..c6834841 100644 --- a/hcloud/exp/kit/sshutil/ssh_key.go +++ b/hcloud/exp/kit/sshutil/ssh_key.go @@ -12,7 +12,7 @@ import ( // GenerateKeyPair generates a new ed25519 ssh key pair, and returns the private key and // the public key respectively. // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. func GenerateKeyPair() ([]byte, []byte, error) { pub, priv, err := ed25519.GenerateKey(nil) if err != nil { @@ -57,7 +57,7 @@ type privateKeyWithPublicKey interface { // GeneratePublicKey generate a public key from the provided private key. // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. func GeneratePublicKey(privBytes []byte) ([]byte, error) { priv, err := ssh.ParseRawPrivateKey(privBytes) if err != nil { @@ -79,7 +79,7 @@ func GeneratePublicKey(privBytes []byte) ([]byte, error) { // GetPublicKeyFingerprint generate the finger print for the provided public key. // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. func GetPublicKeyFingerprint(pubBytes []byte) (string, error) { pub, _, _, _, err := ssh.ParseAuthorizedKey(pubBytes) if err != nil { diff --git a/hcloud/exp/labelutil/selector.go b/hcloud/exp/labelutil/selector.go index 91956941..303b64a5 100644 --- a/hcloud/exp/labelutil/selector.go +++ b/hcloud/exp/labelutil/selector.go @@ -11,7 +11,7 @@ import ( // // The selector string can be used to filter resources when listing, for example with [hcloud.ServerClient.AllWithOpts()]. // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. func Selector(labels map[string]string) string { selectors := make([]string, 0, len(labels)) diff --git a/hcloud/exp/mockutil/http.go b/hcloud/exp/mockutil/http.go index e3c807ee..26a26baf 100644 --- a/hcloud/exp/mockutil/http.go +++ b/hcloud/exp/mockutil/http.go @@ -29,7 +29,7 @@ type Request struct { // Handler is using a [Server] to mock http requests provided by the user. // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. func Handler(t *testing.T, requests []Request) http.HandlerFunc { t.Helper() @@ -41,7 +41,7 @@ func Handler(t *testing.T, requests []Request) http.HandlerFunc { // NewServer returns a new mock server that closes itself at the end of the test. // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. func NewServer(t *testing.T, requests []Request) *Server { t.Helper() @@ -61,7 +61,7 @@ func NewServer(t *testing.T, requests []Request) *Server { // // A Server must be created using the [NewServer] function. // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. type Server struct { *httptest.Server @@ -73,7 +73,7 @@ type Server struct { // Expect adds requests to the list of requests expected by the [Server]. // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. func (m *Server) Expect(requests []Request) { m.requests = append(m.requests, requests...) } From 11a5b770bcbec8a7e59ecb2366bc8970ded922f9 Mon Sep 17 00:00:00 2001 From: lukasmetzner Date: Thu, 17 Jul 2025 12:11:40 +0200 Subject: [PATCH 08/11] fix: python namings --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 43b036fd..7c668997 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ public beta). During an experimental phase, breaking changes on those features m within minor releases. While experimental features will be announced in the release notes, you can also find -whether a struct or function is experimental in its docstring: +whether a struct or function is experimental in its Go code comment: ```go // Experimental: $PRODUCT is experimental, breaking changes may occur within minor releases. From bbfcdba67a11d77ca2f4886862590d0018f38a24 Mon Sep 17 00:00:00 2001 From: jo Date: Mon, 21 Jul 2025 10:13:05 +0200 Subject: [PATCH 09/11] docs: remove deprecation notice in example --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 7c668997..affeb560 100644 --- a/README.md +++ b/README.md @@ -124,8 +124,6 @@ Example: // // Experimental: Breaking changes may occur within minor releases. // See https://docs.hetzner.cloud/changelog#slug -// -// Deprecated: Use [Ptr] instead. func String(s string) *string { return Ptr(s) } ``` From 2cb2b44e664f5b84233081f8f70fe0184f73730f Mon Sep 17 00:00:00 2001 From: jo Date: Mon, 21 Jul 2025 10:44:59 +0200 Subject: [PATCH 10/11] update docs --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index affeb560..f454c3dd 100644 --- a/README.md +++ b/README.md @@ -112,18 +112,18 @@ When adding an experimental feature: 2. Include a link to the changelog entry: ```go - // See https://docs.hetzner.cloud/changelog#slug + // See https://docs.hetzner.cloud/changelog#slug for more details. ``` -3. Add an announcement to the release notes +3. Add an announcement to the release notes. Example: ```go // String returns a pointer to the passed string s. // -// Experimental: Breaking changes may occur within minor releases. -// See https://docs.hetzner.cloud/changelog#slug +// Experimental: Product is experimental, breaking changes may occur within minor releases. +// See https://docs.hetzner.cloud/changelog#slug for more details. func String(s string) *string { return Ptr(s) } ``` From ef3309a27fe2a08954de2618a90bf193062dccaf Mon Sep 17 00:00:00 2001 From: jo Date: Mon, 21 Jul 2025 10:52:03 +0200 Subject: [PATCH 11/11] update exp package docs --- hcloud/exp/doc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hcloud/exp/doc.go b/hcloud/exp/doc.go index 3a06620b..2999aae1 100644 --- a/hcloud/exp/doc.go +++ b/hcloud/exp/doc.go @@ -1,4 +1,4 @@ // Package exp is a namespace that holds experimental features for the `hcloud-go` library. // -// Experimental: Breaking changes may occur within minor releases. +// Experimental: `exp` package is experimental, breaking changes may occur within minor releases. package exp