mirror of
https://github.com/webinstall/webi-installers.git
synced 2026-05-18 14:46:37 +00:00
Rewrites the Node.js release classification pipeline in Go. webicached fetches upstream releases (GitHub, Gitea, GitLab, HashiCorp, custom sources), classifies assets by OS/arch/variant, and writes legacy-format JSON caches compatible with the existing webinstall.dev API. Git-clone packages emit git_tag and git_commit_hash from real repo clones — no fabricated refs.
218 lines
6.0 KiB
Go
218 lines
6.0 KiB
Go
package installerconf_test
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/webinstall/webi-installers/internal/installerconf"
|
|
)
|
|
|
|
func TestGitHubReleases(t *testing.T) {
|
|
c := confFromString(t, `
|
|
github_releases = sharkdp/bat
|
|
`)
|
|
assertEqual(t, "Source", c.Source, "github")
|
|
assertEqual(t, "Owner", c.Owner, "sharkdp")
|
|
assertEqual(t, "Repo", c.Repo, "bat")
|
|
assertEqual(t, "BaseURL", c.BaseURL, "https://github.com")
|
|
assertEqual(t, "TagPrefix", c.TagPrefix, "")
|
|
if len(c.VersionPrefixes) != 0 {
|
|
t.Errorf("VersionPrefixes = %v, want empty", c.VersionPrefixes)
|
|
}
|
|
if len(c.Exclude) != 0 {
|
|
t.Errorf("Exclude = %v, want empty", c.Exclude)
|
|
}
|
|
}
|
|
|
|
func TestGitHubReleasesFullURL(t *testing.T) {
|
|
c := confFromString(t, `
|
|
github_releases = https://github.com/sharkdp/bat
|
|
`)
|
|
assertEqual(t, "Source", c.Source, "github")
|
|
assertEqual(t, "BaseURL", c.BaseURL, "https://github.com")
|
|
assertEqual(t, "Owner", c.Owner, "sharkdp")
|
|
assertEqual(t, "Repo", c.Repo, "bat")
|
|
}
|
|
|
|
func TestGitHubSources(t *testing.T) {
|
|
c := confFromString(t, `
|
|
github_sources = BeyondCodeBootcamp/aliasman
|
|
git_url = https://github.com/BeyondCodeBootcamp/aliasman.git
|
|
`)
|
|
assertEqual(t, "Source", c.Source, "githubsource")
|
|
assertEqual(t, "Owner", c.Owner, "BeyondCodeBootcamp")
|
|
assertEqual(t, "Repo", c.Repo, "aliasman")
|
|
assertEqual(t, "GitURL", c.GitURL, "https://github.com/BeyondCodeBootcamp/aliasman.git")
|
|
}
|
|
|
|
func TestGitHubSourcesFullURL(t *testing.T) {
|
|
c := confFromString(t, `
|
|
github_sources = https://github.com/BeyondCodeBootcamp/aliasman
|
|
git_url = https://github.com/BeyondCodeBootcamp/aliasman.git
|
|
`)
|
|
assertEqual(t, "Source", c.Source, "githubsource")
|
|
assertEqual(t, "BaseURL", c.BaseURL, "https://github.com")
|
|
assertEqual(t, "Owner", c.Owner, "BeyondCodeBootcamp")
|
|
assertEqual(t, "Repo", c.Repo, "aliasman")
|
|
}
|
|
|
|
func TestVersionPrefixes(t *testing.T) {
|
|
c := confFromString(t, `
|
|
github_releases = jqlang/jq
|
|
version_prefixes = jq- cli-
|
|
`)
|
|
if len(c.VersionPrefixes) != 2 {
|
|
t.Fatalf("VersionPrefixes has %d items, want 2: %v", len(c.VersionPrefixes), c.VersionPrefixes)
|
|
}
|
|
assertEqual(t, "VersionPrefixes[0]", c.VersionPrefixes[0], "jq-")
|
|
assertEqual(t, "VersionPrefixes[1]", c.VersionPrefixes[1], "cli-")
|
|
}
|
|
|
|
func TestExclude(t *testing.T) {
|
|
c := confFromString(t, `
|
|
github_releases = gohugoio/hugo
|
|
exclude = _extended_ Linux-64bit
|
|
`)
|
|
if len(c.Exclude) != 2 {
|
|
t.Fatalf("Exclude has %d items, want 2: %v", len(c.Exclude), c.Exclude)
|
|
}
|
|
assertEqual(t, "Exclude[0]", c.Exclude[0], "_extended_")
|
|
assertEqual(t, "Exclude[1]", c.Exclude[1], "Linux-64bit")
|
|
}
|
|
|
|
func TestMonorepoTagPrefix(t *testing.T) {
|
|
c := confFromString(t, `
|
|
github_releases = therootcompany/golib
|
|
tag_prefix = tools/monorel/
|
|
`)
|
|
assertEqual(t, "TagPrefix", c.TagPrefix, "tools/monorel/")
|
|
}
|
|
|
|
func TestNodeDist(t *testing.T) {
|
|
c := confFromString(t, `
|
|
source = nodedist
|
|
url = https://nodejs.org/download/release
|
|
`)
|
|
assertEqual(t, "Source", c.Source, "nodedist")
|
|
assertEqual(t, "BaseURL", c.BaseURL, "https://nodejs.org/download/release")
|
|
}
|
|
|
|
func TestGiteaReleases(t *testing.T) {
|
|
c := confFromString(t, `
|
|
gitea_releases = https://git.rootprojects.org/root/pathman
|
|
`)
|
|
assertEqual(t, "Source", c.Source, "gitea")
|
|
assertEqual(t, "BaseURL", c.BaseURL, "https://git.rootprojects.org")
|
|
assertEqual(t, "Owner", c.Owner, "root")
|
|
assertEqual(t, "Repo", c.Repo, "pathman")
|
|
}
|
|
|
|
func TestGiteaReleasesWithBaseURL(t *testing.T) {
|
|
c := confFromString(t, `
|
|
gitea_releases = root/pathman
|
|
base_url = https://git.rootprojects.org
|
|
`)
|
|
assertEqual(t, "Source", c.Source, "gitea")
|
|
assertEqual(t, "BaseURL", c.BaseURL, "https://git.rootprojects.org")
|
|
assertEqual(t, "Owner", c.Owner, "root")
|
|
assertEqual(t, "Repo", c.Repo, "pathman")
|
|
}
|
|
|
|
func TestGitLabReleases(t *testing.T) {
|
|
c := confFromString(t, `
|
|
gitlab_releases = owner/repo
|
|
`)
|
|
assertEqual(t, "Source", c.Source, "gitlab")
|
|
assertEqual(t, "BaseURL", c.BaseURL, "https://gitlab.com")
|
|
assertEqual(t, "Owner", c.Owner, "owner")
|
|
assertEqual(t, "Repo", c.Repo, "repo")
|
|
}
|
|
|
|
func TestGitLabReleasesFullURL(t *testing.T) {
|
|
c := confFromString(t, `
|
|
gitlab_releases = https://gitlab.example.com/myorg/myrepo
|
|
`)
|
|
assertEqual(t, "Source", c.Source, "gitlab")
|
|
assertEqual(t, "BaseURL", c.BaseURL, "https://gitlab.example.com")
|
|
assertEqual(t, "Owner", c.Owner, "myorg")
|
|
assertEqual(t, "Repo", c.Repo, "myrepo")
|
|
}
|
|
|
|
func TestBlanksAndComments(t *testing.T) {
|
|
c := confFromString(t, `
|
|
# Hugo config
|
|
github_releases = foo/bar
|
|
|
|
# exclude line
|
|
exclude = extended
|
|
`)
|
|
assertEqual(t, "Source", c.Source, "github")
|
|
assertEqual(t, "Owner", c.Owner, "foo")
|
|
assertEqual(t, "Repo", c.Repo, "bar")
|
|
}
|
|
|
|
func TestExtraKeys(t *testing.T) {
|
|
c := confFromString(t, `
|
|
github_releases = foo/bar
|
|
custom_thing = hello
|
|
`)
|
|
if c.Extra == nil || c.Extra["custom_thing"] != "hello" {
|
|
t.Errorf("Extra[custom_thing] = %q, want hello", c.Extra["custom_thing"])
|
|
}
|
|
}
|
|
|
|
func TestAssetExcludeAlias(t *testing.T) {
|
|
c := confFromString(t, `
|
|
github_releases = gohugoio/hugo
|
|
asset_exclude = extended
|
|
`)
|
|
if len(c.Exclude) != 1 {
|
|
t.Fatalf("Exclude has %d items, want 1: %v", len(c.Exclude), c.Exclude)
|
|
}
|
|
assertEqual(t, "Exclude[0]", c.Exclude[0], "extended")
|
|
}
|
|
|
|
func TestVariants(t *testing.T) {
|
|
c := confFromString(t, `
|
|
github_releases = jmorganca/ollama
|
|
variants = rocm jetpack5 jetpack6
|
|
`)
|
|
if len(c.Variants) != 3 {
|
|
t.Fatalf("Variants has %d items, want 3: %v", len(c.Variants), c.Variants)
|
|
}
|
|
assertEqual(t, "Variants[0]", c.Variants[0], "rocm")
|
|
assertEqual(t, "Variants[1]", c.Variants[1], "jetpack5")
|
|
assertEqual(t, "Variants[2]", c.Variants[2], "jetpack6")
|
|
}
|
|
|
|
func TestEmptyExclude(t *testing.T) {
|
|
c := confFromString(t, "github_releases = foo/bar\n")
|
|
if c.Exclude != nil {
|
|
t.Errorf("Exclude = %v, want nil", c.Exclude)
|
|
}
|
|
}
|
|
|
|
// helpers
|
|
|
|
func confFromString(t *testing.T, content string) *installerconf.Conf {
|
|
t.Helper()
|
|
dir := t.TempDir()
|
|
path := filepath.Join(dir, "releases.conf")
|
|
if err := os.WriteFile(path, []byte(content), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
c, err := installerconf.Read(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
return c
|
|
}
|
|
|
|
func assertEqual(t *testing.T, name, got, want string) {
|
|
t.Helper()
|
|
if got != want {
|
|
t.Errorf("%s = %q, want %q", name, got, want)
|
|
}
|
|
}
|