fix(forge): honor config precedence before file reads
Some checks failed
Security Scan / security (push) Successful in 13s
Test / test (push) Has been cancelled

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-02 08:46:50 +00:00
parent 6236446883
commit 51dfbe8de0
2 changed files with 38 additions and 7 deletions

View file

@ -90,13 +90,6 @@ func SaveConfig(url, token string) error {
// _ = url
// _ = token
func ResolveConfig(flagURL, flagToken string) (url, token string, err error) {
if fileURL, fileToken, fileErr := readConfigFile(); fileErr != nil {
return "", "", fileErr
} else {
url = fileURL
token = fileToken
}
if envURL, ok := os.LookupEnv("FORGE_URL"); ok && envURL != "" {
url = envURL
}
@ -110,6 +103,18 @@ func ResolveConfig(flagURL, flagToken string) (url, token string, err error) {
if flagToken != "" {
token = flagToken
}
if url == "" || token == "" {
fileURL, fileToken, fileErr := readConfigFile()
if fileErr != nil {
return "", "", fileErr
}
if url == "" {
url = fileURL
}
if token == "" {
token = fileToken
}
}
if url == "" {
url = DefaultURL
}

View file

@ -111,6 +111,32 @@ func TestResolveConfig_EnvOverridesConfig_Good(t *testing.T) {
}
}
func TestResolveConfig_FlagOverridesBrokenConfig_Good(t *testing.T) {
home := t.TempDir()
t.Setenv("HOME", home)
t.Setenv("FORGE_URL", "")
t.Setenv("FORGE_TOKEN", "")
cfgPath := filepath.Join(home, ".config", "forge", "config.json")
if err := coreio.Local.EnsureDir(filepath.Dir(cfgPath)); err != nil {
t.Fatal(err)
}
if err := coreio.Local.WriteMode(cfgPath, "{not-json", 0600); err != nil {
t.Fatal(err)
}
url, token, err := ResolveConfig("https://flag.example.com", "flag-token")
if err != nil {
t.Fatal(err)
}
if url != "https://flag.example.com" {
t.Errorf("got url=%q", url)
}
if token != "flag-token" {
t.Errorf("got token=%q", token)
}
}
func TestNewForgeFromConfig_NoToken_Bad(t *testing.T) {
t.Setenv("HOME", t.TempDir())
t.Setenv("FORGE_URL", "")