go-forge/config.go
Snider f84643140e
All checks were successful
Security Scan / security (push) Successful in 7s
Test / test (push) Successful in 1m18s
refactor: replace os.ReadFile/WriteFile/MkdirAll and fmt.Errorf/errors.New with go-io/go-log
- Replace os.ReadFile with coreio.Local.Read in parser.go and generator_test.go
- Replace os.WriteFile with coreio.Local.Write in generator.go
- Replace os.MkdirAll with coreio.Local.EnsureDir in generator.go
- Replace all fmt.Errorf and errors.New with coreerr.E() from go-log
- Add forge.lthn.ai/core/go-io and forge.lthn.ai/core/go-log dependencies

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-16 19:06:48 +00:00

48 lines
1.3 KiB
Go

package forge
import (
"os"
coreerr "forge.lthn.ai/core/go-log"
)
const (
// DefaultURL is the fallback Forgejo instance URL when neither flag nor
// environment variable is set.
DefaultURL = "http://localhost:3000"
)
// ResolveConfig resolves the Forgejo URL and API token from flags, environment
// variables, and built-in defaults. Priority order: flags > env > defaults.
//
// Environment variables:
// - FORGE_URL — base URL of the Forgejo instance
// - FORGE_TOKEN — API token for authentication
func ResolveConfig(flagURL, flagToken string) (url, token string, err error) {
url = os.Getenv("FORGE_URL")
token = os.Getenv("FORGE_TOKEN")
if flagURL != "" {
url = flagURL
}
if flagToken != "" {
token = flagToken
}
if url == "" {
url = DefaultURL
}
return url, token, nil
}
// NewForgeFromConfig creates a new Forge client using resolved configuration.
// It returns an error if no API token is available from flags or environment.
func NewForgeFromConfig(flagURL, flagToken string, opts ...Option) (*Forge, error) {
url, token, err := ResolveConfig(flagURL, flagToken)
if err != nil {
return nil, err
}
if token == "" {
return nil, coreerr.E("NewForgeFromConfig", "forge: no API token configured (set FORGE_TOKEN or pass --token)", nil)
}
return NewForge(url, token, opts...), nil
}