diff --git a/cmd.go b/cmd.go index dce04a5..6f7be55 100644 --- a/cmd.go +++ b/cmd.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "runtime" + "strings" "forge.lthn.ai/core/cli/pkg/cli" "github.com/spf13/cobra" @@ -47,7 +48,7 @@ Examples: updateCmd.PersistentFlags().StringVar(&updateChannel, "channel", "stable", "Release channel: stable, beta, alpha, or dev") updateCmd.PersistentFlags().BoolVar(&updateForce, "force", false, "Force update even if already on latest version") - updateCmd.Flags().BoolVar(&updateCheck, "check", false, "Only check for updates, don't apply") + updateCmd.Flags().BoolVar(&updateCheck, "check", false, "Only check for updates, do not apply") updateCmd.Flags().IntVar(&updateWatchPID, "watch-pid", 0, "Internal: watch for parent PID to die then restart") _ = updateCmd.Flags().MarkHidden("watch-pid") @@ -55,7 +56,9 @@ Examples: Use: "check", Short: "Check for available updates", RunE: func(cmd *cobra.Command, args []string) error { + previousCheck := updateCheck updateCheck = true + defer func() { updateCheck = previousCheck }() return runUpdate(cmd, args) }, }) @@ -70,24 +73,25 @@ func runUpdate(cmd *cobra.Command, args []string) error { } currentVersion := cli.AppVersion + normalizedChannel := strings.TrimSpace(strings.ToLower(updateChannel)) cli.Print("%s %s\n", cli.DimStyle.Render("Current version:"), cli.ValueStyle.Render(currentVersion)) cli.Print("%s %s/%s\n", cli.DimStyle.Render("Platform:"), runtime.GOOS, runtime.GOARCH) - cli.Print("%s %s\n\n", cli.DimStyle.Render("Channel:"), updateChannel) + cli.Print("%s %s\n\n", cli.DimStyle.Render("Channel:"), normalizedChannel) // Handle dev channel specially - it's a prerelease tag, not a semver channel - if updateChannel == "dev" { + if normalizedChannel == "dev" { return handleDevUpdate(currentVersion) } // Check for newer version - release, updateAvailable, err := CheckForNewerVersion(repoOwner, repoName, updateChannel, true) + release, updateAvailable, err := CheckForNewerVersion(repoOwner, repoName, normalizedChannel, true) if err != nil { return cli.Wrap(err, "failed to check for updates") } if release == nil { - cli.Print("%s No releases found in %s channel\n", cli.WarningStyle.Render("!"), updateChannel) + cli.Print("%s No releases found in %s channel\n", cli.WarningStyle.Render("!"), normalizedChannel) return nil } @@ -140,7 +144,7 @@ func handleDevUpdate(currentVersion string) error { client := NewGithubClient() // Fetch the dev release directly by tag - release, err := client.GetLatestRelease(context.TODO(), repoOwner, repoName, "beta") + release, err := client.GetLatestRelease(context.Background(), repoOwner, repoName, "beta") if err != nil { // Try fetching the "dev" tag directly return handleDevTagUpdate(currentVersion) diff --git a/docs/configuration.md b/docs/configuration.md index e531834..29ad2f8 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -26,9 +26,7 @@ The `CheckOnStartup` field can take one of the following values: If you are using the example CLI provided in `cmd/updater`, the following flags are available: -* `--check-update`: Check for new updates without applying them. -* `--do-update`: Perform an update if available. -* `--channel`: Set the update channel (e.g., stable, beta, alpha). If not set, it's determined from the current version tag. -* `--force-semver-prefix`: Force 'v' prefix on semver tags (default `true`). -* `--release-url-format`: A URL format for release assets. -* `--pull-request`: Update to a specific pull request (integer ID). +* `--check`: Check for new updates without applying them. +* `--channel`: Set the update channel (e.g., stable, beta, alpha). Defaults to `stable`. +* `--force`: Force update even when already on latest. +* `--watch-pid`: Internal flag used during restart after update. diff --git a/updater.go b/updater.go index 8435d29..59a82d7 100644 --- a/updater.go +++ b/updater.go @@ -42,10 +42,7 @@ var DoUpdate = func(url string) error { return coreerr.E("DoUpdate", "failed to download update", err) } defer func(Body io.ReadCloser) { - err := Body.Close() - if err != nil { - fmt.Printf("failed to close response body: %v\n", err) - } + _ = Body.Close() }(resp.Body) if resp.StatusCode != http.StatusOK { @@ -59,8 +56,6 @@ var DoUpdate = func(url string) error { } return coreerr.E("DoUpdate", "update failed", err) } - - fmt.Println("Update applied successfully.") return nil }