兼容包名

This commit is contained in:
ryan
2026-06-12 15:32:47 +08:00
parent 752101612e
commit 3228574a8c
2 changed files with 66 additions and 5 deletions
+26 -4
View File
@@ -133,7 +133,22 @@ func expectedAssetName(tag string) string {
return fmt.Sprintf("wavelet_%s_%s_%s.%s", tag, runtime.GOOS, runtime.GOARCH, extension)
}
func selectLatestRelease(releases []githubRelease) (githubRelease, releaseAsset, error) {
func expectedAssetNames(repository, tag string) []string {
names := []string{expectedAssetName(tag)}
if parts := strings.Split(repository, "/"); len(parts) == repositoryParts {
repoName := parts[1]
if repoName != "wavelet" {
extension := "tar.gz"
if runtime.GOOS == windowsOS {
extension = "zip"
}
names = append(names, fmt.Sprintf("%s_%s_%s_%s.%s", repoName, tag, runtime.GOOS, runtime.GOARCH, extension))
}
}
return names
}
func selectLatestRelease(repository string, releases []githubRelease) (githubRelease, releaseAsset, error) {
var selected githubRelease
var selectedAsset releaseAsset
selectedVersion := ""
@@ -143,9 +158,16 @@ func selectLatestRelease(releases []githubRelease) (githubRelease, releaseAsset,
if release.Draft || version == "" {
continue
}
expectedName := expectedAssetName(release.TagName)
expectedNames := expectedAssetNames(repository, release.TagName)
for _, asset := range release.Assets {
if asset.Name != expectedName || asset.BrowserDownloadURL == "" || asset.State != "uploaded" {
matched := false
for _, name := range expectedNames {
if asset.Name == name {
matched = true
break
}
}
if !matched || asset.BrowserDownloadURL == "" || asset.State != "uploaded" {
continue
}
if selectedVersion == "" || semver.Compare(version, selectedVersion) > 0 {
@@ -194,7 +216,7 @@ func (m *manager) fetchRelease(ctx context.Context, repository string) (githubRe
return githubRelease{}, releaseAsset{}, fmt.Errorf("%s: %w", errReleaseResponseInvalid, err)
}
release, asset, err := selectLatestRelease(releases)
release, asset, err := selectLatestRelease(repository, releases)
if err != nil {
return githubRelease{}, releaseAsset{}, err
}
+40 -1
View File
@@ -67,7 +67,7 @@ func TestSelectLatestRelease(t *testing.T) {
},
}
release, asset, err := selectLatestRelease(releases)
release, asset, err := selectLatestRelease("Rain-kl/Wavelet", releases)
if err != nil {
t.Fatalf("selectLatestRelease() error = %v", err)
}
@@ -79,6 +79,45 @@ func TestSelectLatestRelease(t *testing.T) {
}
}
func TestSelectLatestReleaseWithCustomRepo(t *testing.T) {
extension := "tar.gz"
if runtime.GOOS == "windows" {
extension = "zip"
}
releases := []githubRelease{
{
TagName: "v1.0.0",
Published: time.Date(2026, time.June, 1, 0, 0, 0, 0, time.UTC),
Assets: []releaseAsset{{
Name: "wavelet_v1.0.0_" + runtime.GOOS + "_" + runtime.GOARCH + "." + extension,
BrowserDownloadURL: "https://example.com/v1",
State: "uploaded",
}},
},
{
TagName: "v2.0.0",
Published: time.Date(2026, time.June, 2, 0, 0, 0, 0, time.UTC),
Assets: []releaseAsset{{
Name: "PixezSync_v2.0.0_" + runtime.GOOS + "_" + runtime.GOARCH + "." + extension,
BrowserDownloadURL: "https://example.com/v2",
State: "uploaded",
}},
},
}
release, asset, err := selectLatestRelease("Rain-kl/PixezSync", releases)
if err != nil {
t.Fatalf("selectLatestRelease() error = %v", err)
}
if release.TagName != "v2.0.0" {
t.Errorf("selectLatestRelease() tag = %q, want %q", release.TagName, "v2.0.0")
}
expectedName := "PixezSync_v2.0.0_" + runtime.GOOS + "_" + runtime.GOARCH + "." + extension
if asset.Name != expectedName {
t.Errorf("selectLatestRelease() asset = %q, want %q", asset.Name, expectedName)
}
}
func TestExpectedAssetName(t *testing.T) {
extension := "tar.gz"
if runtime.GOOS == "windows" {