From d62cbb1be05cb74308986ceee1815bb1b68b22cf Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Mon, 18 May 2026 00:18:00 -0600 Subject: [PATCH] fix(webicached): conf-driven variant exclusion; fix sttr darwin universal - TagVariants now applies confVariants from releases.conf as case-folded substring matches before package-specific logic, removing the need to hardcode simple variant names in Go - gitea: variants = gogit (excludes Windows gogit builds) - lsd: variants = msvc (moved from Go to conf) - pwsh: variants = fxdependent fxdependentWinDesktop appimage - bun: variants = profile (moved from Go to conf) - sttr: darwin_all tagged as universal2 so arm64 and amd64 Mac users are served; pkg.tar.zst excluded (Arch Linux package format) - add .claude/ to .gitignore --- .gitignore | 1 + gitea/releases.conf | 1 + internal/classify/classify.go | 10 +++------- internal/classifypkg/classifypkg.go | 23 +++++++++++++++-------- internal/releases/bun/variants.go | 3 --- internal/releases/lsd/variants.go | 13 +++---------- internal/releases/pwsh/variants.go | 9 +-------- internal/releases/sttr/variants.go | 27 ++++++--------------------- lsd/releases.conf | 1 + pwsh/releases.conf | 2 +- scripts/deploy-webicached.sh | 9 ++++++++- sttr/releases.conf | 2 ++ 12 files changed, 42 insertions(+), 59 deletions(-) diff --git a/.gitignore b/.gitignore index 5f5aa3b..7a2f0e2 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,4 @@ desktop.ini LIVE_cache /webid bin/ +.claude/ diff --git a/gitea/releases.conf b/gitea/releases.conf index b32b16c..3ad5b04 100644 --- a/gitea/releases.conf +++ b/gitea/releases.conf @@ -1,2 +1,3 @@ github_releases = go-gitea/gitea exclude = -src- -docs- +variants = gogit diff --git a/internal/classify/classify.go b/internal/classify/classify.go index 094fbb5..9fd5150 100644 --- a/internal/classify/classify.go +++ b/internal/classify/classify.go @@ -12,6 +12,7 @@ package classify import ( "path" "regexp" + "slices" "strings" "github.com/webinstall/webi-installers/internal/buildmeta" @@ -268,16 +269,11 @@ func IsMetaAsset(name string) bool { return true } } - for _, exact := range []string{ + return slices.Contains([]string{ "install.sh", "install.ps1", "compat.json", "b3sums", "dist-manifest.json", - } { - if lower == exact { - return true - } - } - return false + }, lower) } diff --git a/internal/classifypkg/classifypkg.go b/internal/classifypkg/classifypkg.go index 42a7c6c..1af3beb 100644 --- a/internal/classifypkg/classifypkg.go +++ b/internal/classifypkg/classifypkg.go @@ -25,7 +25,6 @@ import ( "github.com/webinstall/webi-installers/internal/releases/chromedist" "github.com/webinstall/webi-installers/internal/releases/cmake" "github.com/webinstall/webi-installers/internal/releases/fish" - "github.com/webinstall/webi-installers/internal/releases/gitea" "github.com/webinstall/webi-installers/internal/releases/flutterdist" "github.com/webinstall/webi-installers/internal/releases/git" "github.com/webinstall/webi-installers/internal/releases/golang" @@ -41,7 +40,7 @@ import ( "github.com/webinstall/webi-installers/internal/releases/postgres" "github.com/webinstall/webi-installers/internal/releases/sass" "github.com/webinstall/webi-installers/internal/releases/servicemandist" - "github.com/webinstall/webi-installers/internal/releases/sttr" + sttrdist "github.com/webinstall/webi-installers/internal/releases/sttr" "github.com/webinstall/webi-installers/internal/releases/uuidv7" "github.com/webinstall/webi-installers/internal/releases/watchexec" "github.com/webinstall/webi-installers/internal/releases/xcaddy" @@ -98,7 +97,7 @@ func Package(pkg string, conf *installerconf.Conf, d *rawcache.Dir, gitTagDir *r assets = append(assets, gitAssets...) } - TagVariants(pkg, assets) + TagVariants(pkg, conf.Variants, assets) assets = expandUniversal(assets) NormalizeVersions(pkg, assets) processGitTagHEAD(assets) @@ -194,9 +193,19 @@ func NormalizeVersions(pkg string, assets []storage.Asset) { } } -// TagVariants applies package-specific variant tags to classified assets. -// Each case delegates to a per-installer package under internal/releases/. -func TagVariants(pkg string, assets []storage.Asset) { +// TagVariants applies variant tags to classified assets. +// conf variants (from releases.conf) are applied first: each variant is +// matched as a case-folded substring of the filename. Package-specific +// logic runs after for cases that require more than a substring check. +func TagVariants(pkg string, confVariants []string, assets []storage.Asset) { + for i := range assets { + lower := strings.ToLower(assets[i].Filename) + for _, v := range confVariants { + if strings.Contains(lower, strings.ToLower(v)) { + assets[i].Variants = append(assets[i].Variants, v) + } + } + } switch pkg { case "atomicparsley": atomicparsleydist.TagVariants(assets) @@ -210,8 +219,6 @@ func TagVariants(pkg string, assets []storage.Asset) { flutterdist.TagVariants(assets) case "git": gitdist.TagVariants(assets) - case "gitea": - gitea.TagVariants(assets) case "lsd": lsddist.TagVariants(assets) case "node": diff --git a/internal/releases/bun/variants.go b/internal/releases/bun/variants.go index b3b7a9a..213d14a 100644 --- a/internal/releases/bun/variants.go +++ b/internal/releases/bun/variants.go @@ -21,9 +21,6 @@ import ( func TagVariants(assets []storage.Asset) { for i := range assets { lower := strings.ToLower(assets[i].Filename) - if strings.Contains(lower, "-profile") { - assets[i].Variants = append(assets[i].Variants, "profile") - } if assets[i].Arch == "x86_64" { if strings.Contains(lower, "-baseline") { // Baseline is plain x86_64 — strip the suffix from diff --git a/internal/releases/lsd/variants.go b/internal/releases/lsd/variants.go index f825d2a..a6cd6c6 100644 --- a/internal/releases/lsd/variants.go +++ b/internal/releases/lsd/variants.go @@ -1,14 +1,10 @@ // Package lsd provides variant tagging for lsd (LSDeluxe) releases. // -// lsd publishes .deb packages and windows-msvc builds alongside -// the standard archives. +// lsd publishes .deb packages alongside the standard archives. +// msvc builds are excluded via releases.conf variants. package lsddist -import ( - "strings" - - "github.com/webinstall/webi-installers/internal/storage" -) +import "github.com/webinstall/webi-installers/internal/storage" // TagVariants tags lsd-specific build variants. func TagVariants(assets []storage.Asset) { @@ -16,8 +12,5 @@ func TagVariants(assets []storage.Asset) { if assets[i].Format == ".deb" { assets[i].Variants = append(assets[i].Variants, "deb") } - if strings.Contains(strings.ToLower(assets[i].Filename), "-msvc") { - assets[i].Variants = append(assets[i].Variants, "msvc") - } } } diff --git a/internal/releases/pwsh/variants.go b/internal/releases/pwsh/variants.go index b5ca0d5..6aef632 100644 --- a/internal/releases/pwsh/variants.go +++ b/internal/releases/pwsh/variants.go @@ -23,15 +23,8 @@ var winVersionRe = regexp.MustCompile(`(?i)-win(?:7|8|81|10|2008|2012|2016)`) func TagVariants(assets []storage.Asset) { for i := range assets { lower := strings.ToLower(assets[i].Filename) - switch { - case strings.Contains(lower, "-fxdependentwindesktop"): - assets[i].Variants = append(assets[i].Variants, "fxdependentWinDesktop") - case strings.Contains(lower, "-fxdependent"): - assets[i].Variants = append(assets[i].Variants, "fxdependent") - case winVersionRe.MatchString(lower): + if winVersionRe.MatchString(lower) { assets[i].Variants = append(assets[i].Variants, "win-version-specific") - case strings.HasSuffix(lower, ".appimage"): - assets[i].Variants = append(assets[i].Variants, "appimage") } } } diff --git a/internal/releases/sttr/variants.go b/internal/releases/sttr/variants.go index 3a13370..4cf8ba1 100644 --- a/internal/releases/sttr/variants.go +++ b/internal/releases/sttr/variants.go @@ -1,14 +1,8 @@ // Package sttr provides variant tagging for sttr releases. // -// sttr ships a darwin_all (universal macOS) archive alongside per-arch builds. -// These universal archives have no arch in the filename — Go classifies them as -// os="darwin", arch="" which the Node builds-cacher rejects with FORMAT CHANGE -// (Node's classifier extracts a different arch from "all"). Production Node -// also stores these as os="", arch="" (unroutable). -// -// .sbom.json files are software bill-of-materials metadata — not installable -// archives. They pass through the format filter (ext="") but should not be -// served. +// sttr_Darwin_all.tar.gz is the only macOS release — a universal binary +// with no arch token. Mark it universal2 so expandUniversal serves it +// to both arm64 and amd64 Mac users. package sttrdist import ( @@ -17,20 +11,11 @@ import ( "github.com/webinstall/webi-installers/internal/storage" ) -// TagVariants tags sttr-specific build variants for exclusion from legacy export. +// TagVariants tags sttr-specific build variants. func TagVariants(assets []storage.Asset) { for i := range assets { - lower := strings.ToLower(assets[i].Filename) - // darwin_all / Darwin_all: universal macOS archive with no arch info. - // Node's classifier extracts a different result → FORMAT CHANGE. - // Production LIVE_cache has these as os="", arch="" (unroutable). - if strings.Contains(lower, "darwin_all") { - assets[i].Variants = append(assets[i].Variants, "universal-all") - continue - } - // .sbom.json: software bill-of-materials, not an installable archive. - if strings.HasSuffix(lower, ".sbom.json") { - assets[i].Variants = append(assets[i].Variants, "metadata") + if strings.Contains(strings.ToLower(assets[i].Filename), "darwin_all") { + assets[i].Arch = "universal2" } } } diff --git a/lsd/releases.conf b/lsd/releases.conf index b7c647f..bc4e2b8 100644 --- a/lsd/releases.conf +++ b/lsd/releases.conf @@ -1 +1,2 @@ github_releases = lsd-rs/lsd +variants = msvc diff --git a/pwsh/releases.conf b/pwsh/releases.conf index 622cd29..a3a7659 100644 --- a/pwsh/releases.conf +++ b/pwsh/releases.conf @@ -1,2 +1,2 @@ github_releases = powershell/powershell -variants = fxdependent fxdependentWinDesktop +variants = fxdependent fxdependentWinDesktop appimage diff --git a/scripts/deploy-webicached.sh b/scripts/deploy-webicached.sh index e32cf81..83663f7 100755 --- a/scripts/deploy-webicached.sh +++ b/scripts/deploy-webicached.sh @@ -18,8 +18,15 @@ case "${g_host}" in esac fn_build() { - b_version="$(git describe --tags --always 2> /dev/null || echo '0.0.0-dev')" + b_tag="$(git describe --tags --abbrev=0 --match 'cmd/webicached/*' 2> /dev/null || echo 'cmd/webicached/v0.0.0')" + b_tag_ver="$(printf '%s' "${b_tag}" | sed 's:^cmd/webicached/::')" + b_count="$(git log --oneline "${b_tag}..HEAD" -- cmd/ internal/ 2> /dev/null | wc -l | tr -d ' \t')" b_commit="$(git rev-parse --short HEAD)" + if test "${b_count}" -gt 0; then + b_version="${b_tag_ver}-${b_count}-g${b_commit}" + else + b_version="${b_tag_ver}" + fi b_date="$(date -u +%Y-%m-%dT%H:%M:%SZ)" b_ldflags="-X main.version=${b_version} -X main.commit=${b_commit} -X main.date=${b_date}" diff --git a/sttr/releases.conf b/sttr/releases.conf index 866d466..8750b96 100644 --- a/sttr/releases.conf +++ b/sttr/releases.conf @@ -1 +1,3 @@ github_releases = abhimanyu003/sttr +exclude = .sbom.json +variants = .pkg.tar.