ref: simplify variant taggers to plain functions with switch dispatch

Drop VariantTagger interface and map-based lookup. Each per-installer
package now exports a plain TagVariants function. webicached dispatches
via a switch on package name, consistent with fetchRaw and
classifyPackage.
This commit is contained in:
AJ ONeal
2026-03-10 13:54:03 -06:00
parent 9cb9ffc4c6
commit 6687cad126
11 changed files with 35 additions and 69 deletions

1
.gitignore vendored
View File

@@ -9,6 +9,7 @@ install-*.ps1
/fetchraw
/inspect
/uaparse
/webicached
/zigtest
/distributables.csv

View File

@@ -1460,23 +1460,26 @@ func isMetaAsset(name string) bool {
return false
}
// variantTaggers maps package names to their variant tagger.
// Each tagger lives in its own package under internal/releases/.
var variantTaggers = map[string]storage.VariantTagger{
"bun": bun.Tagger,
"fish": fish.Tagger,
"git": git.Tagger,
"lsd": lsd.Tagger,
"node": node.Tagger,
"ollama": ollama.Tagger,
"pwsh": pwsh.Tagger,
"xcaddy": xcaddy.Tagger,
}
// tagVariants applies package-specific variant tags to classified assets.
// Each case delegates to a per-installer package under internal/releases/.
func tagVariants(pkg string, _ *installerconf.Conf, assets []storage.Asset) {
if t, ok := variantTaggers[pkg]; ok {
t.TagVariants(assets)
switch pkg {
case "bun":
bun.TagVariants(assets)
case "fish":
fish.TagVariants(assets)
case "git":
git.TagVariants(assets)
case "lsd":
lsd.TagVariants(assets)
case "node":
node.TagVariants(assets)
case "ollama":
ollama.TagVariants(assets)
case "pwsh":
pwsh.TagVariants(assets)
case "xcaddy":
xcaddy.TagVariants(assets)
}
}

View File

@@ -11,12 +11,8 @@ import (
"github.com/webinstall/webi-installers/internal/storage"
)
// Tagger implements storage.VariantTagger for Bun.
var Tagger storage.VariantTagger = tagger{}
type tagger struct{}
func (tagger) TagVariants(assets []storage.Asset) {
// TagVariants tags bun-specific build variants and remaps arch fields.
func TagVariants(assets []storage.Asset) {
for i := range assets {
lower := strings.ToLower(assets[i].Filename)
if strings.Contains(lower, "-profile") {

View File

@@ -5,12 +5,8 @@ package fish
import "github.com/webinstall/webi-installers/internal/storage"
// Tagger implements storage.VariantTagger for fish.
var Tagger storage.VariantTagger = tagger{}
type tagger struct{}
func (tagger) TagVariants(assets []storage.Asset) {
// TagVariants tags fish-specific build variants.
func TagVariants(assets []storage.Asset) {
for i := range assets {
if assets[i].Format == ".pkg" {
assets[i].Variants = append(assets[i].Variants, "installer")

View File

@@ -11,12 +11,8 @@ import (
"github.com/webinstall/webi-installers/internal/storage"
)
// Tagger implements storage.VariantTagger for Git.
var Tagger storage.VariantTagger = tagger{}
type tagger struct{}
func (tagger) TagVariants(assets []storage.Asset) {
// TagVariants tags git-specific build variants.
func TagVariants(assets []storage.Asset) {
for i := range assets {
lower := strings.ToLower(assets[i].Filename)
if assets[i].Format == ".exe" {

View File

@@ -10,12 +10,8 @@ import (
"github.com/webinstall/webi-installers/internal/storage"
)
// Tagger implements storage.VariantTagger for lsd.
var Tagger storage.VariantTagger = tagger{}
type tagger struct{}
func (tagger) TagVariants(assets []storage.Asset) {
// TagVariants tags lsd-specific build variants.
func TagVariants(assets []storage.Asset) {
for i := range assets {
if assets[i].Format == ".deb" {
assets[i].Variants = append(assets[i].Variants, "deb")

View File

@@ -2,13 +2,9 @@ package node
import "github.com/webinstall/webi-installers/internal/storage"
// Tagger implements storage.VariantTagger for Node.js.
// TagVariants tags node-specific build variants.
// Only .msi files are installers; .exe is the bare binary.
var Tagger storage.VariantTagger = tagger{}
type tagger struct{}
func (tagger) TagVariants(assets []storage.Asset) {
func TagVariants(assets []storage.Asset) {
for i := range assets {
if assets[i].Format == ".msi" {
assets[i].Variants = append(assets[i].Variants, "installer")

View File

@@ -10,12 +10,8 @@ import (
"github.com/webinstall/webi-installers/internal/storage"
)
// Tagger implements storage.VariantTagger for Ollama.
var Tagger storage.VariantTagger = tagger{}
type tagger struct{}
func (tagger) TagVariants(assets []storage.Asset) {
// TagVariants tags ollama-specific build variants.
func TagVariants(assets []storage.Asset) {
for i := range assets {
lower := strings.ToLower(assets[i].Filename)
for _, v := range []string{"rocm", "jetpack5", "jetpack6"} {

View File

@@ -10,12 +10,8 @@ import (
"github.com/webinstall/webi-installers/internal/storage"
)
// Tagger implements storage.VariantTagger for PowerShell.
var Tagger storage.VariantTagger = tagger{}
type tagger struct{}
func (tagger) TagVariants(assets []storage.Asset) {
// TagVariants tags pwsh-specific build variants.
func TagVariants(assets []storage.Asset) {
for i := range assets {
lower := strings.ToLower(assets[i].Filename)
if strings.Contains(lower, "-fxdependentwindesktop") {

View File

@@ -5,12 +5,8 @@ package xcaddy
import "github.com/webinstall/webi-installers/internal/storage"
// Tagger implements storage.VariantTagger for xcaddy.
var Tagger storage.VariantTagger = tagger{}
type tagger struct{}
func (tagger) TagVariants(assets []storage.Asset) {
// TagVariants tags xcaddy-specific build variants.
func TagVariants(assets []storage.Asset) {
for i := range assets {
if assets[i].Format == ".deb" {
assets[i].Variants = append(assets[i].Variants, "deb")

View File

@@ -51,12 +51,6 @@ type Store interface {
BeginRefresh(ctx context.Context, pkg string) (RefreshTx, error)
}
// VariantTagger applies package-specific variant tags to classified assets.
// Implementations live in per-installer packages (e.g. internal/releases/bun).
type VariantTagger interface {
TagVariants(assets []Asset)
}
// RefreshTx is a write transaction for replacing a package's assets.
type RefreshTx interface {
// Put stages assets to be written. May be called multiple times