diff --git a/internal/classifypkg/classifypkg.go b/internal/classifypkg/classifypkg.go index e5ca442..65788b8 100644 --- a/internal/classifypkg/classifypkg.go +++ b/internal/classifypkg/classifypkg.go @@ -22,6 +22,7 @@ import ( "github.com/webinstall/webi-installers/internal/rawcache" "github.com/webinstall/webi-installers/internal/releases/bun" "github.com/webinstall/webi-installers/internal/releases/chromedist" + "github.com/webinstall/webi-installers/internal/releases/ffmpeg" "github.com/webinstall/webi-installers/internal/releases/fish" "github.com/webinstall/webi-installers/internal/releases/gitea" "github.com/webinstall/webi-installers/internal/releases/flutterdist" @@ -37,6 +38,7 @@ import ( "github.com/webinstall/webi-installers/internal/releases/ollama" "github.com/webinstall/webi-installers/internal/releases/pwsh" "github.com/webinstall/webi-installers/internal/releases/postgres" + "github.com/webinstall/webi-installers/internal/releases/sass" "github.com/webinstall/webi-installers/internal/releases/watchexec" "github.com/webinstall/webi-installers/internal/releases/xcaddy" "github.com/webinstall/webi-installers/internal/releases/zigdist" @@ -149,6 +151,8 @@ func TagVariants(pkg string, assets []storage.Asset) { switch pkg { case "bun": bun.TagVariants(assets) + case "ffmpeg": + ffmpeg.TagVariants(assets) case "fish": fish.TagVariants(assets) case "git": @@ -163,6 +167,8 @@ func TagVariants(pkg string, assets []storage.Asset) { ollama.TagVariants(assets) case "pwsh": pwsh.TagVariants(assets) + case "sass": + sass.TagVariants(assets) case "xcaddy": xcaddy.TagVariants(assets) } @@ -877,7 +883,9 @@ func normalizeGoArch(goarch string) string { case "386": return "x86" case "arm": - return "armv6" + // Go API uses bare "arm" — keep as-is to match production. + // The resolver handles arm compatibility (armv7→armv6 fallback). + return "arm" case "ppc64le": return "ppc64le" case "ppc64": diff --git a/internal/releases/ffmpeg/variants.go b/internal/releases/ffmpeg/variants.go new file mode 100644 index 0000000..8879204 --- /dev/null +++ b/internal/releases/ffmpeg/variants.go @@ -0,0 +1,29 @@ +// Package ffmpeg provides variant tagging for ffmpeg-static releases. +// +// ffmpeg-static publishes bare executables for Windows. The .gz files +// are gzip-compressed bare executables (not archives). Production +// classifies these as ext "exe". +package ffmpeg + +import ( + "github.com/webinstall/webi-installers/internal/storage" +) + +// TagVariants fixes Windows asset extensions for ffmpeg. +// +// Windows .gz files contain a gzipped bare executable, not a tar archive. +// Production treats these as ext "exe". Bare Windows files (no extension) +// are also executables. +func TagVariants(assets []storage.Asset) { + for i := range assets { + if assets[i].OS != "windows" { + continue + } + switch assets[i].Format { + case ".gz": + assets[i].Format = ".exe" + case "": + assets[i].Format = ".exe" + } + } +} diff --git a/internal/releases/sass/variants.go b/internal/releases/sass/variants.go new file mode 100644 index 0000000..9148a89 --- /dev/null +++ b/internal/releases/sass/variants.go @@ -0,0 +1,19 @@ +// Package sass provides variant tagging for Dart Sass releases. +// +// Dart Sass uses bare "arm" in filenames to mean ARMv7 (the Dart VM's +// minimum ARM target). The generic classifier maps bare "arm" to armv6, +// so we correct it here. +package sass + +import ( + "github.com/webinstall/webi-installers/internal/storage" +) + +// TagVariants remaps bare arm → armv7 for Dart Sass assets. +func TagVariants(assets []storage.Asset) { + for i := range assets { + if assets[i].Arch == "armv6" { + assets[i].Arch = "armv7" + } + } +}