fix source archive filenames and download URLs

Use Owner-Repo-Tag naming (e.g. BeyondCodeBootcamp-aliasman-v1.1.2.tar.gz)
and direct codeload.github.com URLs instead of api.github.com tarball_url.

This matches the Node.js behavior for source-only packages (aliasman,
duckdns.sh, serviceman) where the extracted directory name matters for
install script globbing (mv ./*aliasman*/ ...).

Remaining diff: Node.js follows the redirect to get the git short hash
suffix (-0-g{hash}) from Content-Disposition. Go uses the tag name
directly. Both resolve to the same archive content.
This commit is contained in:
AJ ONeal
2026-03-10 11:44:12 -06:00
parent d22be16a69
commit 47f0f7bbb6

View File

@@ -506,28 +506,42 @@ func classifyGitHub(pkg string, conf *installerconf.Conf, d *rawcache.Dir) ([]st
// Source archives for packages with no binary assets.
// These are installable on any POSIX system (shell scripts, etc.).
//
// GitHub's tarball/zipball URLs (api.github.com/repos/.../tarball/TAG)
// redirect to codeload.github.com which serves the archive with a
// Content-Disposition filename like: Owner-Repo-ShortHash.tar.gz
// The extracted directory uses the same name, which install scripts
// depend on for globbing (e.g. mv ./*aliasman*/ ...).
//
// We construct the codeload URL directly (deterministic) and use
// Owner-Repo-Tag as the filename. The actual extracted directory
// will be Owner-Repo-ShortHash but the download URL resolves the same.
if len(rel.Assets) == 0 {
owner, repo := conf.Owner, conf.Repo
tag := rel.TagName
if rel.TarballURL != "" {
dlURL := fmt.Sprintf("https://codeload.github.com/%s/%s/legacy.tar.gz/refs/tags/%s", owner, repo, tag)
assets = append(assets, storage.Asset{
Filename: rel.TagName + ".tar.gz",
Filename: owner + "-" + repo + "-" + tag + ".tar.gz",
Version: version,
Channel: channel,
OS: "posix_2017",
Arch: "*",
Format: ".tar.gz",
Download: rel.TarballURL,
Download: dlURL,
Date: date,
})
}
if rel.ZipballURL != "" {
dlURL := fmt.Sprintf("https://codeload.github.com/%s/%s/legacy.zip/refs/tags/%s", owner, repo, tag)
assets = append(assets, storage.Asset{
Filename: rel.TagName + ".zip",
Filename: owner + "-" + repo + "-" + tag + ".zip",
Version: version,
Channel: channel,
OS: "posix_2017",
Arch: "*",
Format: ".zip",
Download: rel.ZipballURL,
Download: dlURL,
Date: date,
})
}