Documentation
¶
Overview ¶
Package config loads and validates gitl configuration.
Two config levels are merged by priority flag > env > .gitl.yaml (repo, cwd) > ~/.config/gitl/config.yaml (personal), via a per-call viper instance → struct Config. The personal path comes from os.UserConfigDir() (never a hardcoded ~/.config; on Windows → %AppData%\gitl). An empty api_key selects offline mode (a warning is printed to stderr by the caller — Load does not fail).
The cost:/output:/policy:/diff: blocks and provider branching (openai / ollama / azure_openai) are all wired into behavior as of Этап 2 (см. docs/TECHNICAL_PLAN.md §5–§8). digest:/required_changelog_categories are wired into changelog/digest as of Этап 3 (§9.3, §10.4/§10.6).
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func PersonalConfigPath ¶
PersonalConfigPath returns the default personal config file path, derived from os.UserConfigDir() so it is correct across platforms.
Types ¶
type AzureOpenAIConfig ¶
type AzureOpenAIConfig struct {
Endpoint string `mapstructure:"endpoint"`
Deployment string `mapstructure:"deployment"`
APIVersion string `mapstructure:"api_version"`
}
AzureOpenAIConfig holds the Azure OpenAI endpoint coordinates. The request URL is {endpoint}/openai/deployments/{deployment}/chat/completions?api-version={api_version}, with auth via the "api-key" header (not "Authorization: Bearer").
type Config ¶
type Config struct {
LLM LLMConfig `mapstructure:"llm"`
Cost CostConfig `mapstructure:"cost"`
Output OutputConfig `mapstructure:"output"`
Diff DiffConfig `mapstructure:"diff"`
Policy PolicyConfig `mapstructure:"policy"`
Digest DigestConfig `mapstructure:"digest"`
}
Config is the fully merged, validated configuration for one gitl invocation.
func Load ¶
Load builds the merged configuration for one invocation.
Priority (lowest → highest): built-in defaults → personal config file → repo-level .gitl.yaml → environment (GITL_* / GITL_API_KEY) → flags. A fresh viper instance is used per call so tests never share global state.
Missing config files are not an error — the file layers are simply skipped.
func (*Config) OfflineMode ¶
OfflineMode reports whether gitl should use the deterministic offline provider instead of the network client (i.e. no API key is configured).
type CostConfig ¶
type CostConfig struct {
MaxCostUSD float64 `mapstructure:"max_cost_usd"`
WarnAtUSD float64 `mapstructure:"warn_at_usd"`
PricePer1MInput float64 `mapstructure:"price_per_1m_input"`
PricePer1MOutput float64 `mapstructure:"price_per_1m_output"`
}
CostConfig holds cost-guard thresholds and optional pricing overrides. When PricePer1MInput/Output are 0 the built-in pricing table (internal/llm) is used (§8.2). max_cost_usd <= 0 disables the guard entirely (§8.4).
type DiffConfig ¶
type DiffConfig struct {
MaxDiffBytes int `mapstructure:"max_diff_bytes"`
ExcludeGlobs []string `mapstructure:"exclude_globs"`
}
DiffConfig bounds the diff sent to the LLM: max_diff_bytes is the truncation limit, exclude_globs skip matching changed files before building the diff.
type DigestConfig ¶
type DigestConfig struct {
Repos []RepoRef `mapstructure:"repos"`
}
DigestConfig holds the repo-level multi-repo digest.repos list (§10.4/§10.6). A --repos flag, when set, replaces this list wholesale rather than merging with it (§10.4) — unlike exclude_globs, which adds.
type LLMConfig ¶
type LLMConfig struct {
Provider string `mapstructure:"provider"`
APIKey string `mapstructure:"api_key"`
BaseURL string `mapstructure:"base_url"`
Model string `mapstructure:"model"`
MaxTokens int `mapstructure:"max_tokens"`
Temperature float64 `mapstructure:"temperature"`
TimeoutSeconds int `mapstructure:"timeout_seconds"`
MaxRetries int `mapstructure:"max_retries"`
// AzureOpenAI is required only when Provider == "azure_openai".
AzureOpenAI AzureOpenAIConfig `mapstructure:"azure_openai"`
}
LLMConfig configures the LLM provider and request parameters.
type Options ¶
type Options struct {
// RepoDir is the directory searched for the repo-level ".gitl.yaml".
// Empty means the current working directory.
RepoDir string
// PersonalPath overrides the personal config file path. Empty means
// "<os.UserConfigDir()>/gitl/config.yaml".
PersonalPath string
// Flags, when non-nil, are bound so that explicitly-set flags win over
// env and files. Only flags present in the set are considered.
Flags *pflag.FlagSet
}
Options controls how Load discovers config files.
type OutputConfig ¶
type OutputConfig struct {
Format string `mapstructure:"format"`
Color bool `mapstructure:"color"`
}
OutputConfig holds output settings. All three formats (md/text/json) are rendered as of Этап 2.
type PolicyConfig ¶
type PolicyConfig struct {
FailOn string `mapstructure:"fail_on"`
RequiredChangelogCategories []string `mapstructure:"required_changelog_categories"`
ExcludeGlobs []string `mapstructure:"exclude_globs"`
}
PolicyConfig is the repo-level governance policy. fail_on is the CI gating threshold wired into `review` as of Этап 2; required_changelog_categories is wired into `changelog` as of Этап 3 (warn-only, see docs/TECHNICAL_PLAN.md §9.3).
type RepoRef ¶
type RepoRef struct {
Path string `mapstructure:"path"`
}
RepoRef is one entry of digest.repos: a filesystem path to another git repository, resolved relative to the directory containing the repo-level .gitl.yaml that declared it (or the current working directory if none was found) — see §10.4.