Documentation
¶
Overview ¶
Package config is a helper package to facilitate getting and setting config values using Viper.
This package provides functions to read and write configuration settings for the eng CLI tool. It supports various configuration file formats and allows for easy management of local configuration settings.
Key features: - Load configuration from JSON, YAML, TOML, and other formats. - Set and get configuration values programmatically. - Support for environment variable overrides. - Easy integration with the Viper library.
These are local configs related to the eng CLI, not deployment configs.
Index ¶
- Variables
- func AddProject(project Project) error
- func AddRepoToProject(projectName string, repo ProjectRepo) error
- func BareRepoPath() string
- func Branch() string
- func DisableAllProxies() error
- func DotfilesRepo() string
- func Email() string
- func EnsureProfileID() string
- func ExplicitTargetRepoPath() string
- func FindProxyIndexByTitle(proxies []ProxyConfig, title string) int
- func FormatProxyOption(proxy ProxyConfig) string
- func GenerateUUIDv4() string
- func GetActiveProxy() (string, bool)
- func GetDotfilesRepo()
- func GetEmail()
- func GetProjectNames() []string
- func GitDevPath() string
- func IdeURL(optionalURL ...string) string
- func IsGitRepo(path string) bool
- func IsTelemetryConfigured() bool
- func IsTelemetryEnabled() bool
- func IsVerbose() bool
- func MigrateConfig()
- func NormalizeProxyURLString(value string) string
- func PromptProxyValuesImpl(initialTitle, initialValue, initialNoProxy string) (title, value, noProxy string, err error)
- func RemoveProject(projectName string) error
- func RemoveRepoFromProject(projectName, repoURL string) error
- func RepoURL() string
- func RunInteractiveEditor() error
- func SaveProjects(projects []Project) error
- func SaveProxyConfigsImpl(proxies []ProxyConfig) error
- func SelectProxy(proxies []ProxyConfig) (int, error)
- func SetIdeURL(url string)
- func SetProxyEnvVars(proxyValue string)
- func SetTargetRepoPath(path string) error
- func SetTelemetryEnabled(enabled bool) error
- func ShouldAutoOnboard(args []string, stdinTTY, stdoutTTY, fileCreated bool) bool
- func TargetRepoCandidates(devPath string) []string
- func TargetRepoPath(devPath string) string
- func Telemetry() bool
- func TestProxyConnection(proxyURLStr, targetURLStr string) (time.Duration, error)
- func UnsetProxyEnvVars()
- func UpdateBareRepoPath()
- func UpdateBranch()
- func UpdateDotfilesRepo()
- func UpdateRepoURL()
- func UpdateWorktreePath()
- func ValidateProxyURLString(value string) error
- func Verbose() bool
- func VerifyDotfilesConfig() (string, string, string, string, error)
- func WorktreePath() string
- type AntigravityConfig
- type ContainersConfig
- type DotfilesConfig
- type GitConfig
- type Project
- type ProjectRepo
- type PromptProxyValuesFunc
- type ProxyConfig
- func AddOrUpdateProxy() ([]ProxyConfig, int)
- func AddOrUpdateProxyWithValues(title, value, noProxy string) ([]ProxyConfig, int, error)
- func EnableProxy(index int, proxies []ProxyConfig) ([]ProxyConfig, error)
- func GetProxyConfigs() ([]ProxyConfig, int)
- func RemoveProxy(index int) ([]ProxyConfig, error)
- type SaveProxyConfigsFunc
- type TelemetryConfig
Constants ¶
This section is empty.
Variables ¶
var ( // ConfirmPrompt asks a yes/no question. ConfirmPrompt = confirmUnwired // InputPrompt asks for a line of text. InputPrompt = inputUnwired // SelectPrompt asks to pick one option. SelectPrompt = selectUnwired // MultiSelectPrompt asks to pick any number of options. MultiSelectPrompt = multiSelectUnwired )
Interactive prompt hooks consumed by this package.
config must never import presentation packages (internal/ui), so all user prompting goes through these variables. The command layer wires the real implementations at startup (see cmd/config/prompts.go); tests override them per-case. Defaults fail loudly so an unwired composition surfaces immediately instead of hanging on stdin.
var ( // DefaultAPIURL is the default OpenPanel API endpoint URL (overridable at build time via ldflags). DefaultAPIURL = "https://openpanel.gventureshq.com/api" // DefaultClientID is the default OpenPanel client ID (injected at build time via ldflags). DefaultClientID = "" // DefaultClientSecret is the default OpenPanel client secret (injected at build time via ldflags). DefaultClientSecret = "" )
var PromptProxyValues = PromptProxyValuesImpl
PromptProxyValues is a variable that holds the function to prompt for proxy values. This can be overridden in tests.
var SaveProxyConfigs = SaveProxyConfigsImpl
SaveProxyConfigs is a variable that holds the function to save proxy configurations This can be overridden in tests.
Functions ¶
func AddProject ¶
AddProject adds a new project or updates an existing one. If a project with the same name exists, it updates it; otherwise, it appends.
func AddRepoToProject ¶
func AddRepoToProject(projectName string, repo ProjectRepo) error
AddRepoToProject adds a repository to an existing project. Returns an error if the project doesn't exist.
func BareRepoPath ¶
func BareRepoPath() string
BareRepoPath checks for the bare repository path in the configuration and returns it.
func Branch ¶
func Branch() string
Branch checks for the dotfiles branch in the configuration and returns it.
func DisableAllProxies ¶
func DisableAllProxies() error
DisableAllProxies disables all proxy configurations and unsets environment variables.
func DotfilesRepo ¶
func DotfilesRepo() string
DotfilesRepo is an alias for BareRepoPath for backward compatibility with external callers.
func Email ¶
func Email() string
Email checks for the user's email in the configuration and prompts the user to confirm it. If the email is not found or the user does not confirm it, the function will call updateEmail() to update the email. It logs the start and success of the email checking process and returns the confirmed email as a string.
func EnsureProfileID ¶ added in v1.48.0
func EnsureProfileID() string
EnsureProfileID returns the configured anonymous Profile ID, or generates and saves a new one.
func ExplicitTargetRepoPath ¶ added in v1.53.0
func ExplicitTargetRepoPath() string
ExplicitTargetRepoPath returns the configured override, if any. Two keys are honored for backward compatibility; target_repo_path wins.
func FindProxyIndexByTitle ¶
func FindProxyIndexByTitle(proxies []ProxyConfig, title string) int
FindProxyIndexByTitle returns the index of the proxy matching the title (case-insensitive), or -1.
func FormatProxyOption ¶
func FormatProxyOption(proxy ProxyConfig) string
FormatProxyOption renders a single proxy as a stylized radio option string. Example: "● Corp Proxy (http://proxy:8080)" with colored markers and dimmed value.
func GenerateUUIDv4 ¶ added in v1.48.0
func GenerateUUIDv4() string
GenerateUUIDv4 generates a cryptographically secure RFC 4122 version 4 UUID.
func GetActiveProxy ¶
GetActiveProxy returns the currently active proxy value and true if any proxy is enabled If no proxy is enabled, returns the first proxy value and false If no proxies exist, returns an empty string and false.
func GetDotfilesRepo ¶
func GetDotfilesRepo()
GetDotfilesRepo logs the current dotfiles repository path.
func GetEmail ¶
func GetEmail()
GetEmail retrieves the user's email from the configuration. If the email is not found in the configuration, it prompts the user to update it. Logs the process of checking and finding the email.
func GetProjectNames ¶
func GetProjectNames() []string
GetProjectNames returns a list of all configured project names.
func GitDevPath ¶
func GitDevPath() string
GitDevPath checks for the development folder path in the configuration and prompts the user to confirm it. If the path is not found or the user does not confirm it, the function will call updateGitDevPath() to update the path. It logs the start and success of the path checking process and returns the confirmed path as a string.
func IdeURL ¶ added in v1.40.0
IdeURL checks for the Antigravity IDE download URL in the configuration and prompts the user to confirm or set it. If an optionalURL argument is passed, it sets the URL directly.
func IsTelemetryConfigured ¶ added in v1.48.0
func IsTelemetryConfigured() bool
IsTelemetryConfigured returns true if ClientID and ClientSecret are populated.
func IsTelemetryEnabled ¶ added in v1.48.0
func IsTelemetryEnabled() bool
IsTelemetryEnabled checks if telemetry is enabled, honoring environment variables (DO_NOT_TRACK, ENG_TELEMETRY_DISABLED, ENG_TELEMETRY_ENABLED) and config settings.
func IsVerbose ¶ added in v1.15.0
func IsVerbose() bool
IsVerbose returns whether verbose mode is enabled globally via config or environment.
func MigrateConfig ¶
func MigrateConfig()
MigrateConfig handles the migration of old configuration keys to new standardized ones. It checks for old keys, moves their values to new keys if the new ones are empty, and saves the configuration if any changes were made.
func NormalizeProxyURLString ¶
NormalizeProxyURLString adds a default http scheme when missing.
func PromptProxyValuesImpl ¶ added in v1.15.0
func PromptProxyValuesImpl( initialTitle, initialValue, initialNoProxy string, ) (title, value, noProxy string, err error)
PromptProxyValuesImpl uses huh.NewForm to collect proxy details interactively.
func RemoveProject ¶
RemoveProject removes a project from the configuration.
func RemoveRepoFromProject ¶
RemoveRepoFromProject removes a repository from a project.
func RepoURL ¶
func RepoURL() string
RepoURL checks for the dotfiles repository URL in the configuration and returns it.
func RunInteractiveEditor ¶ added in v1.16.0
func RunInteractiveEditor() error
RunInteractiveEditor launches a TUI to edit the CLI's configuration.
func SaveProjects ¶
SaveProjects persists the list of projects to the config file.
func SaveProxyConfigsImpl ¶
func SaveProxyConfigsImpl(proxies []ProxyConfig) error
SaveProxyConfigsImpl is the actual implementation of saving proxy configurations to viper config.
func SelectProxy ¶
func SelectProxy(proxies []ProxyConfig) (int, error)
SelectProxy prompts the user to select a proxy from the list and returns the index.
func SetIdeURL ¶ added in v1.40.0
func SetIdeURL(url string)
SetIdeURL updates the antigravity.ide_download_url setting in viper and writes to config.
func SetProxyEnvVars ¶
func SetProxyEnvVars(proxyValue string)
SetProxyEnvVars sets all proxy-related environment variables to the provided value and handles custom no_proxy settings.
func SetTargetRepoPath ¶ added in v1.53.0
SetTargetRepoPath validates and persists an explicit target repository path. The path must exist; a missing .git directory warns but still saves, since the copy flow re-validates at use time with an interactive fallback.
func SetTelemetryEnabled ¶ added in v1.48.0
SetTelemetryEnabled updates the enabled state of telemetry in the config file.
func ShouldAutoOnboard ¶ added in v1.52.0
ShouldAutoOnboard decides whether to offer the first-run setup wizard. fileCreated reports whether initConfig just created a fresh config file (true first run). stdinTTY/stdoutTTY are injected for testability; callers probe the real descriptors (e.g. via ui.IsTerminal).
The prompt fires at most once per machine — only on true first run — and never for meta/config commands, non-terminals (scripts, CI, pipes), or when ENG_NO_ONBOARDING is set. Later runs with missing settings rely on actionable command errors pointing at `eng config edit --interactive`.
func TargetRepoCandidates ¶ added in v1.53.0
TargetRepoCandidates lists every on-disk location under devPath that could host the dotfiles git repository, in priority order (project config match, project subdirectory scan, legacy path, deep walk). Used for interactive selection when the automatic resolution fails.
func TargetRepoPath ¶ added in v1.38.0
TargetRepoPath resolves the destination git repository path for copying dotfile changes. It checks explicit config first, then the candidate search, then project configuration (even when not yet on disk), and finally falls back to the legacy path under devPath (which may not exist — callers must verify).
func Telemetry ¶ added in v1.48.0
func Telemetry() bool
Telemetry prompts the user to verify or update their telemetry preferences.
func TestProxyConnection ¶ added in v1.29.0
TestProxyConnection tests HTTP connectivity using the specified proxy URL.
func UnsetProxyEnvVars ¶
func UnsetProxyEnvVars()
UnsetProxyEnvVars unsets all proxy-related environment variables.
func UpdateBareRepoPath ¶
func UpdateBareRepoPath()
UpdateBareRepoPath prompts the user to input their bare repository path.
func UpdateBranch ¶
func UpdateBranch()
UpdateBranch prompts the user to select their dotfiles branch.
func UpdateDotfilesRepo ¶
func UpdateDotfilesRepo()
UpdateDotfilesRepo is an alias for UpdateBareRepoPath.
func UpdateRepoURL ¶
func UpdateRepoURL()
UpdateRepoURL prompts the user to input their dotfiles repository URL.
func UpdateWorktreePath ¶
func UpdateWorktreePath()
UpdateWorktreePath prompts the user to input their worktree path.
func ValidateProxyURLString ¶
validateTitle ensures the title is non-empty after trimming.
func Verbose ¶
func Verbose() bool
Verbose checks for the verbose setting in the configuration and prompts the user to confirm it. If the verbose setting is not found or the user does not confirm it, the function will call updateVerbose() to update the setting. It logs the start and success of the verbose checking process and returns the confirmed verbose setting as a bool.
func VerifyDotfilesConfig ¶
VerifyDotfilesConfig checks for Repo URL, Branch, and Bare Repo Path. If all are present, it offers a single multi-select to update them. If any are missing, it falls back to sequential mandatory prompts.
func WorktreePath ¶
func WorktreePath() string
WorktreePath checks for the worktree path in the configuration and returns it.
Types ¶
type AntigravityConfig ¶ added in v1.40.0
type AntigravityConfig struct {
IdeDownloadURL string `mapstructure:"ide_download_url"`
}
AntigravityConfig holds Antigravity-related configuration.
func GetAntigravityConfig ¶ added in v1.40.0
func GetAntigravityConfig() AntigravityConfig
GetAntigravityConfig retrieves the Antigravity configuration from Viper.
type ContainersConfig ¶ added in v1.25.0
type ContainersConfig struct {
Path string `mapstructure:"path"`
}
ContainersConfig holds container-related configuration.
func GetContainersConfig ¶ added in v1.25.0
func GetContainersConfig() ContainersConfig
GetContainersConfig retrieves the containers configuration from Viper.
type DotfilesConfig ¶ added in v1.15.0
type DotfilesConfig struct {
RepoURL string `mapstructure:"repo_url"`
Branch string `mapstructure:"branch"`
BareRepoPath string `mapstructure:"bare_repo_path"`
WorktreePath string `mapstructure:"worktree_path"`
TargetRepoPath string `mapstructure:"target_repo_path"`
}
DotfilesConfig holds all dotfiles-related configuration.
func GetDotfilesConfig ¶ added in v1.15.0
func GetDotfilesConfig() DotfilesConfig
GetDotfilesConfig retrieves the dotfiles configuration from Viper.
type GitConfig ¶ added in v1.15.0
type GitConfig struct {
DevPath string `mapstructure:"dev_path"`
Editor string `mapstructure:"editor"`
}
GitConfig holds all git-related configuration.
func GetGitConfig ¶ added in v1.15.0
func GetGitConfig() GitConfig
GetGitConfig retrieves the git configuration from Viper.
type Project ¶
type Project struct {
Name string `mapstructure:"name"`
Repos []ProjectRepo `mapstructure:"repos"`
}
Project represents a collection of related repositories.
func GetProjectByName ¶
GetProjectByName retrieves a specific project by name. Returns nil if not found.
func GetProjects ¶
func GetProjects() []Project
GetProjects retrieves the list of configured projects from the config file.
type ProjectRepo ¶
type ProjectRepo struct {
URL string `mapstructure:"url"`
Path string `mapstructure:"path,omitempty"` // Optional, defaults to repo name from URL
}
ProjectRepo represents a single repository within a project.
func (*ProjectRepo) GetEffectivePath ¶
func (r *ProjectRepo) GetEffectivePath() (string, error)
GetEffectivePath returns the effective path for a git. If Path is set, it uses that; otherwise, it derives from the URL.
type PromptProxyValuesFunc ¶ added in v1.15.0
type PromptProxyValuesFunc func(initialTitle, initialValue, initialNoProxy string) (title, value, noProxy string, err error)
ProxyConfig represents a single proxy configuration.
type ProxyConfig ¶
ProxyConfig represents a single proxy configuration.
func AddOrUpdateProxy ¶
func AddOrUpdateProxy() ([]ProxyConfig, int)
ProxyConfig represents a single proxy configuration.
func AddOrUpdateProxyWithValues ¶
func AddOrUpdateProxyWithValues(title, value, noProxy string) ([]ProxyConfig, int, error)
AddOrUpdateProxyWithValues adds or updates a proxy using provided values (non-interactive). Returns updated proxies, the affected index, or an error.
func EnableProxy ¶
func EnableProxy(index int, proxies []ProxyConfig) ([]ProxyConfig, error)
ProxyConfig represents a single proxy configuration.
func GetProxyConfigs ¶
func GetProxyConfigs() ([]ProxyConfig, int)
GetProxyConfigs checks for proxy settings in the configuration and returns the current proxies and the index of the active proxy (-1 if none are active).
func RemoveProxy ¶ added in v1.29.0
func RemoveProxy(index int) ([]ProxyConfig, error)
RemoveProxy removes the proxy configuration at the specified index.
type SaveProxyConfigsFunc ¶
type SaveProxyConfigsFunc func(proxies []ProxyConfig) error
SaveProxyConfigsFunc defines the function type for saving proxy configs.
type TelemetryConfig ¶ added in v1.48.0
type TelemetryConfig struct {
Enabled bool `mapstructure:"enabled"`
APIURL string `mapstructure:"-"`
ClientID string `mapstructure:"-"`
ClientSecret string `mapstructure:"-"`
ProfileID string `mapstructure:"profile_id"`
}
TelemetryConfig holds all telemetry and analytics related configuration.
func GetEffectiveTelemetryConfig ¶ added in v1.48.0
func GetEffectiveTelemetryConfig() TelemetryConfig
GetEffectiveTelemetryConfig returns the active telemetry configuration. Telemetry endpoint and credentials are built-in and fixed to the project servers.
func GetTelemetryConfig ¶ added in v1.48.0
func GetTelemetryConfig() TelemetryConfig
GetTelemetryConfig retrieves the telemetry configuration from Viper.