go-forge/config.go
Snider 0a9564274d
All checks were successful
Security Scan / security (pull_request) Successful in 9s
Test / test (pull_request) Successful in 1m20s
refactor(module): migrate module path to dappco.re/go/core/forge
Update Go module path from forge.lthn.ai/core/go-forge to
dappco.re/go/core/forge. Migrate all import paths and dependency
references (go-io → dappco.re/go/core/io, go-log → dappco.re/go/core/log).
Update documentation (CLAUDE.md, README.md, docs/) to reflect new paths.

Co-Authored-By: Virgil <virgil@lethean.io>
2026-03-22 01:51:29 +00:00

48 lines
1.3 KiB
Go

package forge
import (
"os"
coreerr "dappco.re/go/core/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
}