feat(selfupgrade): when url empty, using GetTestReleaseAPIURL for test .

This commit is contained in:
sky5454 2026-03-31 03:16:23 +08:00
parent e93d7a01a7
commit 7813726ec8

View file

@ -1,24 +1,24 @@
package updater package updater
import ( import (
"archive/tar" "archive/tar"
"archive/zip" "archive/zip"
"compress/gzip" "compress/gzip"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"io" "io"
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
"path/filepath" "path/filepath"
"runtime" "runtime"
"strings" "strings"
"github.com/minio/selfupdate" "github.com/minio/selfupdate"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/sipeed/picoclaw/pkg/config" "github.com/sipeed/picoclaw/pkg/config"
) )
// DownloadAndExtractRelease downloads a release archive (or uses a direct // DownloadAndExtractRelease downloads a release archive (or uses a direct
@ -119,7 +119,24 @@ func UpdateSelfFromRelease(releaseURL, platform, arch, programName string) error
// UpdateSelf updates the running executable by fetching the latest release // UpdateSelf updates the running executable by fetching the latest release
// and applying the binary matching programName. // and applying the binary matching programName.
func UpdateSelf(programName string) error { func UpdateSelf(programName string) error {
return UpdateSelfFromRelease("", "", "", programName) // Default to test repo for now. Use GetProdReleaseAPIURL() for production.
return UpdateSelfFromRelease(GetTestReleaseAPIURL(), runtime.GOOS, runtime.GOARCH, programName)
}
// GetReleaseAPIURL returns the GitHub Releases API URL for the given repo owner.
// Example: owner="sky5454" -> https://api.github.com/repos/sky5454/picoclaw/releases/latest
func GetReleaseAPIURL(owner string) string {
return fmt.Sprintf("https://api.github.com/repos/%s/picoclaw/releases/latest", owner)
}
// GetTestReleaseAPIURL returns the test release API URL (user fork).
func GetTestReleaseAPIURL() string {
return GetReleaseAPIURL("sky5454")
}
// GetProdReleaseAPIURL returns the production release API URL (upstream).
func GetProdReleaseAPIURL() string {
return GetReleaseAPIURL("sipeed")
} }
// findAssetURL resolves the appropriate asset URL for the given release // findAssetURL resolves the appropriate asset URL for the given release
@ -132,7 +149,13 @@ func findAssetURL(releaseURL, platform, arch string) (string, error) {
apiURL := buildReleaseAPIURL(releaseURL) apiURL := buildReleaseAPIURL(releaseURL)
if apiURL == "" { if apiURL == "" {
apiURL = "https://api.github.com/repos/sipeed/picoclaw/releases/latest" // If caller provided an empty releaseURL, default to test repo.
// Otherwise fall back to production repo API URL.
if strings.TrimSpace(releaseURL) == "" {
apiURL = GetTestReleaseAPIURL()
} else {
apiURL = GetProdReleaseAPIURL()
}
} }
resp, err := http.Get(apiURL) resp, err := http.Get(apiURL)