mirror of
https://github.com/apricote/hcloud-upload-image.git
synced 2026-01-13 13:21:01 +00:00
fix(cli): completion requires HCLOUD_TOKEN (#19)
The current setup of the CLI requires the user to set HCLOUD_TOKEN for every single invocation of the binary. Even if we just want to autocomplete some arguments or even generate the completion scripts in CI. This fixes the bug by only initializing the hcloud-go client in the "cleanup" and "upload" subcommands.
This commit is contained in:
parent
f7dc501b2f
commit
bb2ca48200
4 changed files with 17 additions and 6 deletions
|
|
@ -23,7 +23,11 @@ $ hcloud ssh-key list -l apricote.de/created-by=hcloud-upload-image
|
|||
|
||||
This command does not handle any parallel executions of hcloud-upload-image
|
||||
and will remove in-use resources if called at the same time.`,
|
||||
|
||||
GroupID: "primary",
|
||||
|
||||
PreRun: initClient,
|
||||
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
ctx := cmd.Context()
|
||||
logger := contextlogger.From(ctx)
|
||||
|
|
|
|||
15
cmd/root.go
15
cmd/root.go
|
|
@ -1,7 +1,6 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"os"
|
||||
"time"
|
||||
|
|
@ -46,8 +45,6 @@ var rootCmd = &cobra.Command{
|
|||
logger := slog.Default()
|
||||
ctx = contextlogger.New(ctx, logger)
|
||||
cmd.SetContext(ctx)
|
||||
|
||||
client = newClient(ctx)
|
||||
},
|
||||
}
|
||||
|
||||
|
|
@ -71,7 +68,15 @@ func initLogger() *slog.Logger {
|
|||
|
||||
}
|
||||
|
||||
func newClient(ctx context.Context) *hcloudimages.Client {
|
||||
func initClient(cmd *cobra.Command, _ []string) {
|
||||
if client != nil {
|
||||
// Only init if not set.
|
||||
// Theoretically this is not safe against data races and should use [sync.Once], but :shrug:
|
||||
return
|
||||
}
|
||||
|
||||
ctx := cmd.Context()
|
||||
|
||||
logger := contextlogger.From(ctx)
|
||||
// Build hcloud-go client
|
||||
if os.Getenv("HCLOUD_TOKEN") == "" {
|
||||
|
|
@ -89,7 +94,7 @@ func newClient(ctx context.Context) *hcloudimages.Client {
|
|||
opts = append(opts, hcloud.WithDebugWriter(os.Stderr))
|
||||
}
|
||||
|
||||
return hcloudimages.NewClient(hcloud.NewClient(opts...))
|
||||
client = hcloudimages.NewClient(hcloud.NewClient(opts...))
|
||||
}
|
||||
|
||||
func Execute() {
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@ This does cost a bit of money for the server.`,
|
|||
|
||||
GroupID: "primary",
|
||||
|
||||
PreRun: initClient,
|
||||
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
ctx := cmd.Context()
|
||||
logger := contextlogger.From(ctx)
|
||||
|
|
|
|||
2
go.mod
2
go.mod
|
|
@ -3,7 +3,7 @@ module github.com/apricote/hcloud-upload-image
|
|||
go 1.22.2
|
||||
|
||||
require (
|
||||
github.com/apricote/hcloud-upload-image/hcloudimages v0.0.0
|
||||
github.com/apricote/hcloud-upload-image/hcloudimages v0.2.0
|
||||
github.com/hetznercloud/hcloud-go/v2 v2.8.0
|
||||
github.com/spf13/cobra v1.8.0
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue