package cli import ( "context" "errors" "flag" "fmt" "strings" "github.com/openclaw/crawlkit/releasecheck" "github.com/openclaw/gitcrawl/internal/config") const gitcrawlUpgradeHint = "brew upgrade openclaw/tap/gitcrawl" func gitcrawlReleaseCheckOptions(force bool) releasecheck.Options { cfg := config.Default() return releasecheck.Options{ AppName: "gitcrawl", Owner: "openclaw", Repo: "gitcrawl", CurrentVersion: version, CacheDir: cfg.CacheDir, Force: force, }} func (a *App) maybeNotifyRelease(ctx context.Context, args []string) { _, _ = releasecheck.Notify(ctx, releasecheck.NotifyOptions{ Options: gitcrawlReleaseCheckOptions(false), Stderr: a.Stderr, InstallHint: gitcrawlUpgradeHint, Args: args, JSONOutput: a.format == FormatJSON, IsTerminal: releasecheck.StderrIsTerminal(), })} func releaseNotificationAllowed(args []string) bool { if len(args) == 0 || args[0] != "fill-pr-details" { return true } for _, arg := range args[1:] { name, ok := flagName(arg) if !ok { continue } name, _, _ = strings.Cut(name, "=") if name == "reserve-rate-limit" { return false } } return true} func (a *App) runCheckUpdate(ctx context.Context, args []string) error { fs := flag.NewFlagSet("check-update", flag.ContinueOnError) fs.SetOutput(a.Stderr) jsonOut := fs.Bool("json", false, "write JSON output") force := fs.Bool("force", false, "force a fresh release check") if err := fs.Parse(args); err != nil { return usageErr(err) } if fs.NArg() != 0 { return usageErr(fmt.Errorf("check-update takes flags only")) } result, err := releasecheck.Check(ctx, gitcrawlReleaseCheckOptions(*force)) if err != nil && !errors.Is(err, releasecheck.ErrSkipped) { return err } if *jsonOut || a.format == FormatJSON { if *jsonOut { a.format = FormatJSON } return a.writeOutput("check-update", result, false) } _, err = fmt.Fprint(a.Stdout, releasecheck.StatusText("gitcrawl", gitcrawlUpgradeHint, result)) return err}
package cli
import (
"context"
"errors"
"flag"
"fmt"
"strings"
"github.com/openclaw/crawlkit/releasecheck"
"github.com/openclaw/gitcrawl/internal/config"
)
const gitcrawlUpgradeHint = "brew upgrade openclaw/tap/gitcrawl"
func gitcrawlReleaseCheckOptions(force bool) releasecheck.Options {
cfg := config.Default()
return releasecheck.Options{
AppName: "gitcrawl",
Owner: "openclaw",
Repo: "gitcrawl",
CurrentVersion: version,
CacheDir: cfg.CacheDir,
Force: force,
}
}
func (a *App) maybeNotifyRelease(ctx context.Context, args []string) {
_, _ = releasecheck.Notify(ctx, releasecheck.NotifyOptions{
Options: gitcrawlReleaseCheckOptions(false),
Stderr: a.Stderr,
InstallHint: gitcrawlUpgradeHint,
Args: args,
JSONOutput: a.format == FormatJSON,
IsTerminal: releasecheck.StderrIsTerminal(),
})
}
func releaseNotificationAllowed(args []string) bool {
if len(args) == 0 || args[0] != "fill-pr-details" {
return true
}
for _, arg := range args[1:] {
name, ok := flagName(arg)
if !ok {
continue
}
name, _, _ = strings.Cut(name, "=")
if name == "reserve-rate-limit" {
return false
}
}
return true
}
func (a *App) runCheckUpdate(ctx context.Context, args []string) error {
fs := flag.NewFlagSet("check-update", flag.ContinueOnError)
fs.SetOutput(a.Stderr)
jsonOut := fs.Bool("json", false, "write JSON output")
force := fs.Bool("force", false, "force a fresh release check")
if err := fs.Parse(args); err != nil {
return usageErr(err)
}
if fs.NArg() != 0 {
return usageErr(fmt.Errorf("check-update takes flags only"))
}
result, err := releasecheck.Check(ctx, gitcrawlReleaseCheckOptions(*force))
if err != nil && !errors.Is(err, releasecheck.ErrSkipped) {
return err
}
if *jsonOut || a.format == FormatJSON {
if *jsonOut {
a.format = FormatJSON
}
return a.writeOutput("check-update", result, false)
}
_, err = fmt.Fprint(a.Stdout, releasecheck.StatusText("gitcrawl", gitcrawlUpgradeHint, result))
return err
}