Skip to content

Commit 8cba522

Browse files
authored
feat: Add config support for UI verbosity level (#175)
* feat: Add config support for UI verbosity level * docs: Add verbosity info in UI doc
1 parent 0c09988 commit 8cba522

File tree

5 files changed

+29
-0
lines changed

5 files changed

+29
-0
lines changed

config/config.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ import (
1414
)
1515

1616
const (
17+
// Verbosity level constants for the config file
18+
VerbositySilent = "silent"
19+
VerbosityNormal = "normal"
20+
VerbosityVerbose = "verbose"
21+
1722
// Environment variable key for the insecure installation flag
1823
pmgInsecureInstallationEnvKey = "PMG_INSECURE_INSTALLATION"
1924

@@ -64,6 +69,9 @@ type Config struct {
6469
// we initially introduced it as an experimental feature.
6570
ExperimentalProxyMode bool `mapstructure:"experimental_proxy_mode"`
6671

72+
// Verbosity controls the UI verbosity level. Valid values: "silent", "normal", "verbose".
73+
Verbosity string `mapstructure:"verbosity"`
74+
6775
// Sandbox enables sandboxing of package manager processes with controlled filesystem,
6876
// network, and process execution access. Provides defense-in-depth against supply chain attacks.
6977
Sandbox SandboxConfig `mapstructure:"sandbox"`
@@ -211,6 +219,7 @@ func DefaultConfig() RuntimeConfig {
211219
ExperimentalProxyMode: false,
212220
TrustedPackages: []TrustedPackage{},
213221
ProxyMode: true,
222+
Verbosity: VerbosityNormal,
214223
Sandbox: SandboxConfig{
215224
Enabled: false,
216225
EnforceAlways: false,

config/config.template.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ transitive_depth: 5
1010
# Include dev dependencies in the dependency graph. Default is false.
1111
include_dev_dependencies: false
1212

13+
# UI verbosity level. Valid values: silent, normal, verbose. Default is normal.
14+
# silent: PMG is hidden from the user except for errors and malicious package detection
15+
# normal: Show minimal status updates
16+
# verbose: Show verbose status updates and detailed information
17+
verbosity: normal
18+
1319
# Enable paranoid mode. In paranoid mode, PMG will treat suspicious packages
1420
# as malicious packages
1521
paranoid: false

config/config_template_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ func TestTemplateMatchesDefaults(t *testing.T) {
5454
assert.Equal(t, def.Paranoid, parsed.Paranoid, "paranoid mismatch")
5555
assert.Equal(t, def.SkipEventLogging, parsed.SkipEventLogging, "skip_event_logging mismatch")
5656
assert.Equal(t, def.EventLogRetentionDays, parsed.EventLogRetentionDays, "event_log_retention_days mismatch")
57+
assert.Equal(t, def.Verbosity, parsed.Verbosity, "verbosity mismatch")
5758

5859
assert.NotEmpty(t, parsed.TrustedPackages, "expected at least one trusted_packages entry")
5960

docs/ui.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
PMG is an interactive tool. We support multiple interactivity modes such as `silent`, `verbose` etc. to meet different developer experience needs. As such, we need to standardize the UI, UX and interactive messaging guidance for developers.
44

5+
The verbosity level can be set per-invocation using `--silent` or `--verbose` CLI flags, or persisted via the `verbosity` option in the [configuration file](config.md).
6+
57
## Messaging
68

79
Two types of messages to users are supported:

main.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,17 @@ func main() {
4747
os.Setenv("APP_LOG_SKIP_STDOUT_LOGGER", "true")
4848
}
4949

50+
// Apply config-based verbosity first
51+
switch config.Get().Config.Verbosity {
52+
case config.VerbositySilent:
53+
ui.SetVerbosityLevel(ui.VerbosityLevelSilent)
54+
case config.VerbosityVerbose:
55+
ui.SetVerbosityLevel(ui.VerbosityLevelVerbose)
56+
default:
57+
ui.SetVerbosityLevel(ui.VerbosityLevelNormal)
58+
}
59+
60+
// CLI flags override config
5061
if silent && verbose {
5162
ui.Fatalf("pmg: --silent and --verbose cannot be used together")
5263
}

0 commit comments

Comments
 (0)