diff --git a/cmd/trivy/main.go b/cmd/trivy/main.go index 33bd25416566..f636f1ca5530 100644 --- a/cmd/trivy/main.go +++ b/cmd/trivy/main.go @@ -34,7 +34,7 @@ func main() { func run() error { // Trivy behaves as the specified plugin. if runAsPlugin := os.Getenv("TRIVY_RUN_AS_PLUGIN"); runAsPlugin != "" { - log.InitLogger(false, false) + log.InitLogger(false, false, false) if err := plugin.Run(context.Background(), runAsPlugin, plugin.Options{Args: os.Args[1:]}); err != nil { return xerrors.Errorf("plugin error: %w", err) } diff --git a/docs/guide/configuration/others.md b/docs/guide/configuration/others.md index b31fc8984fd3..0e3b0ff4c629 100644 --- a/docs/guide/configuration/others.md +++ b/docs/guide/configuration/others.md @@ -118,6 +118,17 @@ The following example will fail when a critical vulnerability is found or the OS $ trivy image --exit-code 1 --exit-on-eol 1 --severity CRITICAL alpine:3.16.3 ``` +## No Color +| Scanner | Supported | +|:----------------:|:---------:| +| Vulnerability | āœ“ | +| Misconfiguration | āœ“ | +| Secret | āœ“ | +| License | āœ“ | + +By default, `Trivy` uses color output in the terminal. +Use the `--no-color` option if you don't want to use color output. + ## Mirror Registries !!! warning "EXPERIMENTAL" diff --git a/docs/guide/references/configuration/cli/trivy.md b/docs/guide/references/configuration/cli/trivy.md index a22b0a937640..0417db11d65b 100644 --- a/docs/guide/references/configuration/cli/trivy.md +++ b/docs/guide/references/configuration/cli/trivy.md @@ -37,6 +37,7 @@ trivy [global flags] command [flags] target --generate-default-config write the default config to trivy-default.yaml -h, --help help for trivy --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_clean.md b/docs/guide/references/configuration/cli/trivy_clean.md index 4479819a7392..5c5d61f863d0 100644 --- a/docs/guide/references/configuration/cli/trivy_clean.md +++ b/docs/guide/references/configuration/cli/trivy_clean.md @@ -41,6 +41,7 @@ trivy clean [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_cloud.md b/docs/guide/references/configuration/cli/trivy_cloud.md index f3d95cb04cb9..8e298ef335c7 100644 --- a/docs/guide/references/configuration/cli/trivy_cloud.md +++ b/docs/guide/references/configuration/cli/trivy_cloud.md @@ -17,6 +17,7 @@ Control Trivy Cloud platform integration settings -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_cloud_config.md b/docs/guide/references/configuration/cli/trivy_cloud_config.md index cbb85ff7bcc3..41d18a718b85 100644 --- a/docs/guide/references/configuration/cli/trivy_cloud_config.md +++ b/docs/guide/references/configuration/cli/trivy_cloud_config.md @@ -17,6 +17,7 @@ Control Trivy Cloud configuration -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_cloud_config_edit.md b/docs/guide/references/configuration/cli/trivy_cloud_config_edit.md index 26a9e583320a..de6752fc1e25 100644 --- a/docs/guide/references/configuration/cli/trivy_cloud_config_edit.md +++ b/docs/guide/references/configuration/cli/trivy_cloud_config_edit.md @@ -25,6 +25,7 @@ trivy cloud config edit [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_cloud_config_get.md b/docs/guide/references/configuration/cli/trivy_cloud_config_get.md index 6c6f6ce8f6f0..563f58e9d52d 100644 --- a/docs/guide/references/configuration/cli/trivy_cloud_config_get.md +++ b/docs/guide/references/configuration/cli/trivy_cloud_config_get.md @@ -34,6 +34,7 @@ trivy cloud config get [setting] [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_cloud_config_list.md b/docs/guide/references/configuration/cli/trivy_cloud_config_list.md index 07772a5df7e5..08abd9638c60 100644 --- a/docs/guide/references/configuration/cli/trivy_cloud_config_list.md +++ b/docs/guide/references/configuration/cli/trivy_cloud_config_list.md @@ -25,6 +25,7 @@ trivy cloud config list [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_cloud_config_set.md b/docs/guide/references/configuration/cli/trivy_cloud_config_set.md index 95fdfc94f80c..cac5cb6780a9 100644 --- a/docs/guide/references/configuration/cli/trivy_cloud_config_set.md +++ b/docs/guide/references/configuration/cli/trivy_cloud_config_set.md @@ -34,6 +34,7 @@ trivy cloud config set [setting] [value] [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_cloud_config_unset.md b/docs/guide/references/configuration/cli/trivy_cloud_config_unset.md index e01871037a9f..9a1dd7a1058d 100644 --- a/docs/guide/references/configuration/cli/trivy_cloud_config_unset.md +++ b/docs/guide/references/configuration/cli/trivy_cloud_config_unset.md @@ -34,6 +34,7 @@ trivy cloud config unset [setting] [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_config.md b/docs/guide/references/configuration/cli/trivy_config.md index 899e8e55c9e5..1a478c6b58fe 100644 --- a/docs/guide/references/configuration/cli/trivy_config.md +++ b/docs/guide/references/configuration/cli/trivy_config.md @@ -90,6 +90,7 @@ trivy config [flags] DIR -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_convert.md b/docs/guide/references/configuration/cli/trivy_convert.md index 23929921cb6b..d731b6bdb84b 100644 --- a/docs/guide/references/configuration/cli/trivy_convert.md +++ b/docs/guide/references/configuration/cli/trivy_convert.md @@ -64,6 +64,7 @@ trivy convert [flags] RESULT_JSON -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_filesystem.md b/docs/guide/references/configuration/cli/trivy_filesystem.md index dde53f11d91e..ff3d9a69a2a9 100644 --- a/docs/guide/references/configuration/cli/trivy_filesystem.md +++ b/docs/guide/references/configuration/cli/trivy_filesystem.md @@ -184,6 +184,7 @@ trivy filesystem [flags] PATH -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_image.md b/docs/guide/references/configuration/cli/trivy_image.md index a00d0801ccf5..c0328342c799 100644 --- a/docs/guide/references/configuration/cli/trivy_image.md +++ b/docs/guide/references/configuration/cli/trivy_image.md @@ -205,6 +205,7 @@ trivy image [flags] IMAGE_NAME -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_kubernetes.md b/docs/guide/references/configuration/cli/trivy_kubernetes.md index f50769056ce0..2b563bc800b9 100644 --- a/docs/guide/references/configuration/cli/trivy_kubernetes.md +++ b/docs/guide/references/configuration/cli/trivy_kubernetes.md @@ -193,6 +193,7 @@ trivy kubernetes [flags] [CONTEXT] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_login.md b/docs/guide/references/configuration/cli/trivy_login.md index 07f0a3b6188e..f34c4c61f171 100644 --- a/docs/guide/references/configuration/cli/trivy_login.md +++ b/docs/guide/references/configuration/cli/trivy_login.md @@ -35,6 +35,7 @@ trivy login [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_logout.md b/docs/guide/references/configuration/cli/trivy_logout.md index 61e52e9fee9b..391cf4e871e0 100644 --- a/docs/guide/references/configuration/cli/trivy_logout.md +++ b/docs/guide/references/configuration/cli/trivy_logout.md @@ -21,6 +21,7 @@ trivy logout [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_module.md b/docs/guide/references/configuration/cli/trivy_module.md index a305c1fe1d3c..d69e615c95cf 100644 --- a/docs/guide/references/configuration/cli/trivy_module.md +++ b/docs/guide/references/configuration/cli/trivy_module.md @@ -19,6 +19,7 @@ Manage modules -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_module_install.md b/docs/guide/references/configuration/cli/trivy_module_install.md index fed88072a3f7..0e18bc64d30f 100644 --- a/docs/guide/references/configuration/cli/trivy_module_install.md +++ b/docs/guide/references/configuration/cli/trivy_module_install.md @@ -23,6 +23,7 @@ trivy module install [flags] REPOSITORY --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections --module-dir string specify directory to the wasm modules that will be loaded (default "$HOME/.trivy/modules") + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_module_uninstall.md b/docs/guide/references/configuration/cli/trivy_module_uninstall.md index 14c902ff961d..c1a30ec03011 100644 --- a/docs/guide/references/configuration/cli/trivy_module_uninstall.md +++ b/docs/guide/references/configuration/cli/trivy_module_uninstall.md @@ -23,6 +23,7 @@ trivy module uninstall [flags] REPOSITORY --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections --module-dir string specify directory to the wasm modules that will be loaded (default "$HOME/.trivy/modules") + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_plugin.md b/docs/guide/references/configuration/cli/trivy_plugin.md index f0b2726acf3c..debdcd694018 100644 --- a/docs/guide/references/configuration/cli/trivy_plugin.md +++ b/docs/guide/references/configuration/cli/trivy_plugin.md @@ -17,6 +17,7 @@ Manage plugins -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_plugin_info.md b/docs/guide/references/configuration/cli/trivy_plugin_info.md index 6009d421377a..681391fc37db 100644 --- a/docs/guide/references/configuration/cli/trivy_plugin_info.md +++ b/docs/guide/references/configuration/cli/trivy_plugin_info.md @@ -21,6 +21,7 @@ trivy plugin info PLUGIN_NAME -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_plugin_install.md b/docs/guide/references/configuration/cli/trivy_plugin_install.md index 5b553e696d48..df722d89ca63 100644 --- a/docs/guide/references/configuration/cli/trivy_plugin_install.md +++ b/docs/guide/references/configuration/cli/trivy_plugin_install.md @@ -34,6 +34,7 @@ trivy plugin install NAME | URL | FILE_PATH -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_plugin_list.md b/docs/guide/references/configuration/cli/trivy_plugin_list.md index 7bc7237c4b4e..10bc45d227d4 100644 --- a/docs/guide/references/configuration/cli/trivy_plugin_list.md +++ b/docs/guide/references/configuration/cli/trivy_plugin_list.md @@ -21,6 +21,7 @@ trivy plugin list -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_plugin_run.md b/docs/guide/references/configuration/cli/trivy_plugin_run.md index e99ecd00e9f2..22444bd011a1 100644 --- a/docs/guide/references/configuration/cli/trivy_plugin_run.md +++ b/docs/guide/references/configuration/cli/trivy_plugin_run.md @@ -21,6 +21,7 @@ trivy plugin run NAME | URL | FILE_PATH -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_plugin_search.md b/docs/guide/references/configuration/cli/trivy_plugin_search.md index d93b5d366aa1..f2b135c3a13b 100644 --- a/docs/guide/references/configuration/cli/trivy_plugin_search.md +++ b/docs/guide/references/configuration/cli/trivy_plugin_search.md @@ -21,6 +21,7 @@ trivy plugin search [KEYWORD] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_plugin_uninstall.md b/docs/guide/references/configuration/cli/trivy_plugin_uninstall.md index 669bf0e6ccae..93829f9908a8 100644 --- a/docs/guide/references/configuration/cli/trivy_plugin_uninstall.md +++ b/docs/guide/references/configuration/cli/trivy_plugin_uninstall.md @@ -21,6 +21,7 @@ trivy plugin uninstall PLUGIN_NAME -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_plugin_update.md b/docs/guide/references/configuration/cli/trivy_plugin_update.md index 5b706e77ebcd..8f0e2fe1ff49 100644 --- a/docs/guide/references/configuration/cli/trivy_plugin_update.md +++ b/docs/guide/references/configuration/cli/trivy_plugin_update.md @@ -21,6 +21,7 @@ trivy plugin update -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_plugin_upgrade.md b/docs/guide/references/configuration/cli/trivy_plugin_upgrade.md index 0c5c6e14253a..ad603de89c32 100644 --- a/docs/guide/references/configuration/cli/trivy_plugin_upgrade.md +++ b/docs/guide/references/configuration/cli/trivy_plugin_upgrade.md @@ -21,6 +21,7 @@ trivy plugin upgrade [PLUGIN_NAMES] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_registry.md b/docs/guide/references/configuration/cli/trivy_registry.md index bf7af19c7526..34d730a7e2a7 100644 --- a/docs/guide/references/configuration/cli/trivy_registry.md +++ b/docs/guide/references/configuration/cli/trivy_registry.md @@ -17,6 +17,7 @@ Manage registry authentication -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_registry_login.md b/docs/guide/references/configuration/cli/trivy_registry_login.md index 2f5460bf4f62..dbf21aa12042 100644 --- a/docs/guide/references/configuration/cli/trivy_registry_login.md +++ b/docs/guide/references/configuration/cli/trivy_registry_login.md @@ -31,6 +31,7 @@ trivy registry login SERVER [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_registry_logout.md b/docs/guide/references/configuration/cli/trivy_registry_logout.md index 809488f66539..fbc8ab03126d 100644 --- a/docs/guide/references/configuration/cli/trivy_registry_logout.md +++ b/docs/guide/references/configuration/cli/trivy_registry_logout.md @@ -28,6 +28,7 @@ trivy registry logout SERVER [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_repository.md b/docs/guide/references/configuration/cli/trivy_repository.md index 1a6ac9bd93bd..2c050b45e85d 100644 --- a/docs/guide/references/configuration/cli/trivy_repository.md +++ b/docs/guide/references/configuration/cli/trivy_repository.md @@ -183,6 +183,7 @@ trivy repository [flags] (REPO_PATH | REPO_URL) -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_rootfs.md b/docs/guide/references/configuration/cli/trivy_rootfs.md index 8a0d51085daa..0a467ac29735 100644 --- a/docs/guide/references/configuration/cli/trivy_rootfs.md +++ b/docs/guide/references/configuration/cli/trivy_rootfs.md @@ -185,6 +185,7 @@ trivy rootfs [flags] ROOTDIR -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_sbom.md b/docs/guide/references/configuration/cli/trivy_sbom.md index 23bc6dc025c9..c60cda394416 100644 --- a/docs/guide/references/configuration/cli/trivy_sbom.md +++ b/docs/guide/references/configuration/cli/trivy_sbom.md @@ -153,6 +153,7 @@ trivy sbom [flags] SBOM_PATH -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_server.md b/docs/guide/references/configuration/cli/trivy_server.md index ed4e132dfec8..f11dd1aaa5c4 100644 --- a/docs/guide/references/configuration/cli/trivy_server.md +++ b/docs/guide/references/configuration/cli/trivy_server.md @@ -51,6 +51,7 @@ trivy server [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_version.md b/docs/guide/references/configuration/cli/trivy_version.md index 99ab0b520232..ed171cc9b819 100644 --- a/docs/guide/references/configuration/cli/trivy_version.md +++ b/docs/guide/references/configuration/cli/trivy_version.md @@ -22,6 +22,7 @@ trivy version [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_vex.md b/docs/guide/references/configuration/cli/trivy_vex.md index 6b30950ad62e..ec698ecf6fbe 100644 --- a/docs/guide/references/configuration/cli/trivy_vex.md +++ b/docs/guide/references/configuration/cli/trivy_vex.md @@ -17,6 +17,7 @@ -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_vex_repo.md b/docs/guide/references/configuration/cli/trivy_vex_repo.md index 5758f05cb327..b0dc5873febf 100644 --- a/docs/guide/references/configuration/cli/trivy_vex_repo.md +++ b/docs/guide/references/configuration/cli/trivy_vex_repo.md @@ -31,6 +31,7 @@ Manage VEX repositories -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_vex_repo_download.md b/docs/guide/references/configuration/cli/trivy_vex_repo_download.md index fa6ec2ec6a77..95b1adf38cc4 100644 --- a/docs/guide/references/configuration/cli/trivy_vex_repo_download.md +++ b/docs/guide/references/configuration/cli/trivy_vex_repo_download.md @@ -25,6 +25,7 @@ trivy vex repo download [REPO_NAMES] [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_vex_repo_init.md b/docs/guide/references/configuration/cli/trivy_vex_repo_init.md index 1d3be26287e1..6f3fcb31bd79 100644 --- a/docs/guide/references/configuration/cli/trivy_vex_repo_init.md +++ b/docs/guide/references/configuration/cli/trivy_vex_repo_init.md @@ -21,6 +21,7 @@ trivy vex repo init [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_vex_repo_list.md b/docs/guide/references/configuration/cli/trivy_vex_repo_list.md index 92b246f52a0e..4f63d438e9f1 100644 --- a/docs/guide/references/configuration/cli/trivy_vex_repo_list.md +++ b/docs/guide/references/configuration/cli/trivy_vex_repo_list.md @@ -21,6 +21,7 @@ trivy vex repo list [flags] -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/cli/trivy_vm.md b/docs/guide/references/configuration/cli/trivy_vm.md index 4fbb5d4d4a1e..9a680a8b0235 100644 --- a/docs/guide/references/configuration/cli/trivy_vm.md +++ b/docs/guide/references/configuration/cli/trivy_vm.md @@ -169,6 +169,7 @@ trivy vm [flags] VM_IMAGE -d, --debug debug mode --generate-default-config write the default config to trivy-default.yaml --insecure allow insecure server connections + --no-color Remove color from output -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show version diff --git a/docs/guide/references/configuration/config-file.md b/docs/guide/references/configuration/config-file.md index 31ecdad18da8..15b861e699af 100644 --- a/docs/guide/references/configuration/config-file.md +++ b/docs/guide/references/configuration/config-file.md @@ -22,6 +22,9 @@ debug: false # Same as '--insecure' insecure: false +# Same as '--no-color' +no-color: false + # Same as '--quiet' quiet: false diff --git a/pkg/attestation/sbom/rekor_test.go b/pkg/attestation/sbom/rekor_test.go index 381a52306e01..c010dcbb5f45 100644 --- a/pkg/attestation/sbom/rekor_test.go +++ b/pkg/attestation/sbom/rekor_test.go @@ -30,7 +30,7 @@ func TestRekor_RetrieveSBOM(t *testing.T) { }, } - log.InitLogger(false, true) + log.InitLogger(false, true, true) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { ts := rekortest.NewServer(t) diff --git a/pkg/commands/app.go b/pkg/commands/app.go index 0b139ef553ab..1b6a4f0a94a9 100644 --- a/pkg/commands/app.go +++ b/pkg/commands/app.go @@ -215,7 +215,7 @@ func NewRootCommand(globalFlags *flag.GlobalFlagGroup) *cobra.Command { return err } // Initialize logger - log.InitLogger(opts.Debug, opts.Quiet) + log.InitLogger(opts.Debug, opts.Quiet, opts.NoColor) return cloud.CheckTrivyCloudStatus(cmd) }, diff --git a/pkg/commands/server/run.go b/pkg/commands/server/run.go index 0f29c5f35176..3a3e45746167 100644 --- a/pkg/commands/server/run.go +++ b/pkg/commands/server/run.go @@ -17,7 +17,7 @@ import ( // Run runs the scan func Run(ctx context.Context, opts flag.Options) (err error) { - log.InitLogger(opts.Debug, opts.Quiet) + log.InitLogger(opts.Debug, opts.Quiet, opts.NoColor) // Set the default HTTP transport xhttp.SetDefaultTransport(xhttp.NewTransport(xhttp.Options{ diff --git a/pkg/detector/ospkg/redhat/redhat_test.go b/pkg/detector/ospkg/redhat/redhat_test.go index 7d4cc41d6cff..427bd31fd0f0 100644 --- a/pkg/detector/ospkg/redhat/redhat_test.go +++ b/pkg/detector/ospkg/redhat/redhat_test.go @@ -19,7 +19,7 @@ import ( ) func TestMain(m *testing.M) { - log.InitLogger(false, false) + log.InitLogger(false, false, true) os.Exit(m.Run()) } diff --git a/pkg/fanal/analyzer/language/nodejs/bun/bun_test.go b/pkg/fanal/analyzer/language/nodejs/bun/bun_test.go index 8b43d4bdac4f..fe01073f2793 100644 --- a/pkg/fanal/analyzer/language/nodejs/bun/bun_test.go +++ b/pkg/fanal/analyzer/language/nodejs/bun/bun_test.go @@ -14,7 +14,7 @@ import ( ) func TestMain(m *testing.M) { - log.InitLogger(false, true) + log.InitLogger(false, true, true) os.Exit(m.Run()) } diff --git a/pkg/fanal/analyzer/language/nodejs/npm/npm_test.go b/pkg/fanal/analyzer/language/nodejs/npm/npm_test.go index 1812b7bdd35f..6fa97ee18d4f 100644 --- a/pkg/fanal/analyzer/language/nodejs/npm/npm_test.go +++ b/pkg/fanal/analyzer/language/nodejs/npm/npm_test.go @@ -14,7 +14,7 @@ import ( ) func TestMain(m *testing.M) { - log.InitLogger(false, true) + log.InitLogger(false, true, true) os.Exit(m.Run()) } diff --git a/pkg/fanal/artifact/image/remote_sbom_test.go b/pkg/fanal/artifact/image/remote_sbom_test.go index 88cc8d169820..51ffb2a9e989 100644 --- a/pkg/fanal/artifact/image/remote_sbom_test.go +++ b/pkg/fanal/artifact/image/remote_sbom_test.go @@ -23,7 +23,7 @@ import ( ) func TestMain(m *testing.M) { - log.InitLogger(false, true) + log.InitLogger(false, true, true) os.Exit(m.Run()) } @@ -150,7 +150,7 @@ func TestArtifact_InspectRekorAttestation(t *testing.T) { }, } - log.InitLogger(false, true) + log.InitLogger(false, true, true) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { ts := rekortest.NewServer(t) diff --git a/pkg/fanal/handler/unpackaged/unpackaged_test.go b/pkg/fanal/handler/unpackaged/unpackaged_test.go index cc522c678c46..441a8db271ea 100644 --- a/pkg/fanal/handler/unpackaged/unpackaged_test.go +++ b/pkg/fanal/handler/unpackaged/unpackaged_test.go @@ -73,7 +73,7 @@ func Test_unpackagedHook_Handle(t *testing.T) { }, } - log.InitLogger(false, true) + log.InitLogger(false, true, true) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { ts := rekortest.NewServer(t) diff --git a/pkg/fanal/secret/scanner_test.go b/pkg/fanal/secret/scanner_test.go index 65cc2835c655..d92466b7d5bf 100644 --- a/pkg/fanal/secret/scanner_test.go +++ b/pkg/fanal/secret/scanner_test.go @@ -16,7 +16,7 @@ import ( ) func TestMain(m *testing.M) { - log.InitLogger(false, true) + log.InitLogger(false, true, true) os.Exit(m.Run()) } diff --git a/pkg/flag/global_flags.go b/pkg/flag/global_flags.go index 954e0cfe7880..39f0bb36a233 100644 --- a/pkg/flag/global_flags.go +++ b/pkg/flag/global_flags.go @@ -86,6 +86,12 @@ var ( TelemetrySafe: true, Internal: true, // Hidden from help output, intended for maintainer debugging only } + NoColorFlag = Flag[bool]{ + Name: "no-color", + ConfigName: "no-color", + Usage: "Remove color from output", + Persistent: true, + } ) // GlobalFlagGroup composes global flags @@ -100,6 +106,7 @@ type GlobalFlagGroup struct { CacheDir *Flag[string] GenerateDefaultConfig *Flag[bool] TraceHTTP *Flag[bool] + NoColor *Flag[bool] } // GlobalOptions defines flags and other configuration parameters for all the subcommands @@ -114,6 +121,7 @@ type GlobalOptions struct { CacheDir string GenerateDefaultConfig bool TraceHTTP bool + NoColor bool } func NewGlobalFlagGroup() *GlobalFlagGroup { @@ -128,6 +136,7 @@ func NewGlobalFlagGroup() *GlobalFlagGroup { CacheDir: CacheDirFlag.Clone(), GenerateDefaultConfig: GenerateDefaultConfigFlag.Clone(), TraceHTTP: TraceHTTPFlag.Clone(), + NoColor: NoColorFlag.Clone(), } } @@ -147,6 +156,7 @@ func (f *GlobalFlagGroup) Flags() []Flagger { f.CacheDir, f.GenerateDefaultConfig, f.TraceHTTP, + f.NoColor, } } @@ -186,6 +196,7 @@ func (f *GlobalFlagGroup) ToOptions(opts *Options) error { CacheDir: f.CacheDir.Value(), GenerateDefaultConfig: f.GenerateDefaultConfig.Value(), TraceHTTP: f.TraceHTTP.Value(), + NoColor: f.NoColor.Value(), } return nil } diff --git a/pkg/k8s/commands/run.go b/pkg/k8s/commands/run.go index 15f2e6841971..8c1ec0b8d25b 100644 --- a/pkg/k8s/commands/run.go +++ b/pkg/k8s/commands/run.go @@ -112,6 +112,7 @@ func (r *runner) run(ctx context.Context, artifacts []*k8sArtifacts.Artifact) er Severities: r.flagOpts.Severities, Scanners: r.flagOpts.ScanOptions.Scanners, APIVersion: r.flagOpts.AppVersion, + NoColor: r.flagOpts.GlobalOptions.NoColor, }); err != nil { return xerrors.Errorf("unable to write results: %w", err) } diff --git a/pkg/k8s/report/report.go b/pkg/k8s/report/report.go index 1f1c1ec50d93..1190436231e3 100644 --- a/pkg/k8s/report/report.go +++ b/pkg/k8s/report/report.go @@ -34,6 +34,7 @@ type Option struct { ColumnHeading []string Scanners types.Scanners APIVersion string + NoColor bool } // Report represents a kubernetes scan report diff --git a/pkg/k8s/scanner/scanner.go b/pkg/k8s/scanner/scanner.go index 1d6ebddd3934..efc7bff75fd5 100644 --- a/pkg/k8s/scanner/scanner.go +++ b/pkg/k8s/scanner/scanner.go @@ -54,12 +54,12 @@ func NewScanner(cluster string, runner cmd.Runner, opts flag.Options) *Scanner { func (s *Scanner) Scan(ctx context.Context, artifactsData []*artifacts.Artifact) (report.Report, error) { // disable logs before scanning - log.InitLogger(s.opts.Debug, true) + log.InitLogger(s.opts.Debug, true, s.opts.NoColor) // enable log, this is done in a defer function, // to enable logs even when the function returns earlier // due to an error - defer log.InitLogger(s.opts.Debug, false) + defer log.InitLogger(s.opts.Debug, false, s.opts.NoColor) if s.opts.Format == types.FormatCycloneDX { kbom, err := s.clusterInfoToReportResources(artifactsData) diff --git a/pkg/k8s/writer.go b/pkg/k8s/writer.go index abc5bb381b64..824047ef1e11 100644 --- a/pkg/k8s/writer.go +++ b/pkg/k8s/writer.go @@ -11,7 +11,7 @@ import ( "github.com/aquasecurity/trivy/pkg/types" ) -// Write writes the results in the give format +// Write writes the results in the given format func Write(ctx context.Context, k8sreport report.Report, option report.Option) error { k8sreport.PrintErrors() @@ -27,7 +27,7 @@ func Write(ctx context.Context, k8sreport report.Report, option report.Option) e if option.Report == report.SummaryReport { target := fmt.Sprintf("Summary Report for %s", k8sreport.ClusterName) - table.RenderTarget(option.Output, target, table.IsOutputToTerminal(option.Output)) + table.RenderTarget(option.Output, target, table.IsOutputToTerminal(option.Output), option.NoColor) } for _, r := range separatedReports { diff --git a/pkg/log/handler.go b/pkg/log/handler.go index 9bbfd8060e3f..f2cbd6a6ed52 100644 --- a/pkg/log/handler.go +++ b/pkg/log/handler.go @@ -36,7 +36,8 @@ type Options struct { // Level reports the minimum level to log. // Levels with lower levels are discarded. // If nil, the Handler uses [slog.LevelInfo]. - Level slog.Leveler + Level slog.Leveler + NoColor bool } func NewHandler(out io.Writer, opts *Options) *ColorHandler { @@ -50,6 +51,9 @@ func NewHandler(out io.Writer, opts *Options) *ColorHandler { if h.opts.Level == nil { h.opts.Level = slog.LevelInfo } + if h.opts.NoColor { + color.NoColor = true + } return h } diff --git a/pkg/log/logger.go b/pkg/log/logger.go index e4c1babc19c6..cd6cb84e5feb 100644 --- a/pkg/log/logger.go +++ b/pkg/log/logger.go @@ -39,10 +39,10 @@ func New(h slog.Handler) *Logger { } // InitLogger initializes the logger variable and flushes the buffered logs if needed. -func InitLogger(debug, disable bool) { +func InitLogger(debug, disable, noColor bool) { level := lo.Ternary(debug, slog.LevelDebug, slog.LevelInfo) out := lo.Ternary(disable, io.Discard, io.Writer(os.Stderr)) - h := NewHandler(out, &Options{Level: level}) + h := NewHandler(out, &Options{Level: level, NoColor: noColor}) // Flush the buffered logs if needed. if d, ok := slog.Default().Handler().(*DeferredHandler); ok { diff --git a/pkg/notification/notice.go b/pkg/notification/notice.go index b8a71077f0c4..5386ae0e6b7c 100644 --- a/pkg/notification/notice.go +++ b/pkg/notification/notice.go @@ -139,7 +139,13 @@ func (v *VersionChecker) PrintNotices(ctx context.Context, output io.Writer) { if len(notices) > 0 { logger.Debug("Printing notices") - fmt.Fprintf(output, "\nšŸ“£ \x1b[34mNotices:\x1b[0m\n") + + if v.cliOptions.NoColor { + fmt.Printf("\n Notices:\n") + } else { + fmt.Fprintf(output, "\nšŸ“£ \x1b[34mNotices:\x1b[0m\n") + } + for _, notice := range notices { fmt.Fprintf(output, " - %s\n", notice) } diff --git a/pkg/report/table/licensing.go b/pkg/report/table/licensing.go index 6c6e95786877..31e5261d8970 100644 --- a/pkg/report/table/licensing.go +++ b/pkg/report/table/licensing.go @@ -23,15 +23,17 @@ type pkgLicenseRenderer struct { isTerminal bool severities []dbTypes.Severity once *sync.Once + noColor bool } -func NewPkgLicenseRenderer(buf *bytes.Buffer, isTerminal bool, severities []dbTypes.Severity) *pkgLicenseRenderer { +func NewPkgLicenseRenderer(buf *bytes.Buffer, isTerminal, noColor bool, severities []dbTypes.Severity) *pkgLicenseRenderer { return &pkgLicenseRenderer{ w: buf, - tableWriter: newTableWriter(buf, isTerminal), + tableWriter: newTableWriter(buf, isTerminal, noColor), isTerminal: isTerminal, severities: severities, once: new(sync.Once), + noColor: noColor, } } @@ -48,7 +50,7 @@ func (r *pkgLicenseRenderer) Render(result types.Result) { total, summaries := summarize(r.severities, r.countSeverities(result.Licenses)) target := result.Target + " (license)" - RenderTarget(r.w, target, r.isTerminal) + RenderTarget(r.w, target, r.isTerminal, r.noColor) r.printf("Total: %d (%s)\n\n", total, strings.Join(summaries, ", ")) r.tableWriter.Render() @@ -105,15 +107,17 @@ type fileLicenseRenderer struct { isTerminal bool severities []dbTypes.Severity once *sync.Once + noColor bool } -func NewFileLicenseRenderer(buf *bytes.Buffer, isTerminal bool, severities []dbTypes.Severity) *fileLicenseRenderer { +func NewFileLicenseRenderer(buf *bytes.Buffer, isTerminal, noColor bool, severities []dbTypes.Severity) *fileLicenseRenderer { return &fileLicenseRenderer{ w: buf, - tableWriter: newTableWriter(buf, isTerminal), + tableWriter: newTableWriter(buf, isTerminal, noColor), isTerminal: isTerminal, severities: severities, once: new(sync.Once), + noColor: noColor, } } @@ -130,7 +134,7 @@ func (r *fileLicenseRenderer) Render(result types.Result) { total, summaries := summarize(r.severities, r.countSeverities(result.Licenses)) target := result.Target + " (license)" - RenderTarget(r.w, target, r.isTerminal) + RenderTarget(r.w, target, r.isTerminal, r.noColor) r.printf("Total: %d (%s)\n\n", total, strings.Join(summaries, ", ")) r.tableWriter.Render() diff --git a/pkg/report/table/misconfig.go b/pkg/report/table/misconfig.go index 8ca2e88cbc51..0ec24735f921 100644 --- a/pkg/report/table/misconfig.go +++ b/pkg/report/table/misconfig.go @@ -31,9 +31,10 @@ type misconfigRenderer struct { width int ansi bool renderCause []ftypes.ConfigType + noColor bool } -func NewMisconfigRenderer(buf *bytes.Buffer, severities []dbTypes.Severity, trace, includeNonFailures, ansi bool, renderCause []ftypes.ConfigType) *misconfigRenderer { +func NewMisconfigRenderer(buf *bytes.Buffer, severities []dbTypes.Severity, trace, includeNonFailures, ansi, noColor bool, renderCause []ftypes.ConfigType) *misconfigRenderer { width, _, err := term.GetSize(0) if err != nil || width == 0 { width = 40 @@ -50,6 +51,7 @@ func NewMisconfigRenderer(buf *bytes.Buffer, severities []dbTypes.Severity, trac width: width, ansi: ansi, renderCause: renderCause, + noColor: noColor, } } @@ -60,7 +62,7 @@ func (r *misconfigRenderer) Render(result types.Result) { return } target := fmt.Sprintf("%s (%s)", result.Target, result.Type) - RenderTarget(r.w, target, r.ansi) + RenderTarget(r.w, target, r.ansi, r.noColor) total, summaries := summarize(r.severities, r.countSeverities(result.Misconfigurations)) diff --git a/pkg/report/table/misconfig_test.go b/pkg/report/table/misconfig_test.go index 975794d6a346..3203a4e3eded 100644 --- a/pkg/report/table/misconfig_test.go +++ b/pkg/report/table/misconfig_test.go @@ -456,7 +456,7 @@ resource "aws_s3_bucket" "this" { dbTypes.SeverityCritical, } buf := bytes.NewBuffer([]byte{}) - renderer := table.NewMisconfigRenderer(buf, severities, false, tt.args.includeNonFailures, false, tt.args.renderCause) + renderer := table.NewMisconfigRenderer(buf, severities, false, tt.args.includeNonFailures, false, true, tt.args.renderCause) renderer.Render(tt.input) assert.Equal(t, tt.want, strings.ReplaceAll(buf.String(), "\r\n", "\n")) }) diff --git a/pkg/report/table/secret.go b/pkg/report/table/secret.go index fa99d5629b8d..3a22cf84e736 100644 --- a/pkg/report/table/secret.go +++ b/pkg/report/table/secret.go @@ -18,9 +18,10 @@ type secretRenderer struct { severities []dbTypes.Severity width int ansi bool + noColor bool } -func NewSecretRenderer(buf *bytes.Buffer, ansi bool, severities []dbTypes.Severity) *secretRenderer { +func NewSecretRenderer(buf *bytes.Buffer, ansi, noColor bool, severities []dbTypes.Severity) *secretRenderer { width, _, err := term.GetSize(0) if err != nil || width == 0 { width = 40 @@ -33,6 +34,7 @@ func NewSecretRenderer(buf *bytes.Buffer, ansi bool, severities []dbTypes.Severi severities: severities, width: width, ansi: ansi, + noColor: noColor, } } @@ -43,7 +45,7 @@ func (r *secretRenderer) Render(result types.Result) { return } target := result.Target + " (secrets)" - RenderTarget(r.w, target, r.ansi) + RenderTarget(r.w, target, r.ansi, r.noColor) severityCount := r.countSeverities(result.Secrets) total, summaries := summarize(r.severities, severityCount) diff --git a/pkg/report/table/secret_test.go b/pkg/report/table/secret_test.go index c7eaca4462a7..1b7352b63d96 100644 --- a/pkg/report/table/secret_test.go +++ b/pkg/report/table/secret_test.go @@ -143,7 +143,7 @@ this is a title for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { buf := bytes.NewBuffer([]byte{}) - renderer := table.NewSecretRenderer(buf, false, []dbTypes.Severity{ + renderer := table.NewSecretRenderer(buf, false, true, []dbTypes.Severity{ dbTypes.SeverityHigh, dbTypes.SeverityMedium, }) diff --git a/pkg/report/table/summary.go b/pkg/report/table/summary.go index 6307ccd00fc4..ba9ea32cb82c 100644 --- a/pkg/report/table/summary.go +++ b/pkg/report/table/summary.go @@ -120,9 +120,10 @@ type summaryRenderer struct { isTerminal bool scanners []Scanner logger *log.Logger + noColor bool } -func NewSummaryRenderer(buf *bytes.Buffer, isTerminal bool, scanners types.Scanners) *summaryRenderer { +func NewSummaryRenderer(buf *bytes.Buffer, isTerminal, noColor bool, scanners types.Scanners) *summaryRenderer { if !isTerminal { tml.DisableFormatting() } @@ -141,6 +142,7 @@ func NewSummaryRenderer(buf *bytes.Buffer, isTerminal bool, scanners types.Scann isTerminal: isTerminal, scanners: ss, logger: log.WithPrefix("report"), + noColor: noColor, } } @@ -150,9 +152,13 @@ func (r *summaryRenderer) Render(report types.Report) { return } - r.printf("\nReport Summary\n\n") + if r.noColor { + r.printf("\nReport Summary\n\n") + } else { + r.printf("\nReport Summary\n\n") + } - t := newTableWriter(r.w, r.isTerminal) + t := newTableWriter(r.w, r.isTerminal, r.noColor) t.SetAutoMerge(false) t.SetColumnMaxWidth(80) diff --git a/pkg/report/table/summary_test.go b/pkg/report/table/summary_test.go index da74ad045b6b..ca964399c6cd 100644 --- a/pkg/report/table/summary_test.go +++ b/pkg/report/table/summary_test.go @@ -425,7 +425,7 @@ Legend: for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { buf := bytes.NewBuffer([]byte{}) - r := table.NewSummaryRenderer(buf, false, tt.scanners) + r := table.NewSummaryRenderer(buf, false, true, tt.scanners) r.Render(tt.report) require.Equal(t, tt.want, buf.String()) }) diff --git a/pkg/report/table/table.go b/pkg/report/table/table.go index f0f81b44dce2..c000857383c6 100644 --- a/pkg/report/table/table.go +++ b/pkg/report/table/table.go @@ -66,6 +66,8 @@ type Options struct { // For licenses LicenseRiskThreshold int IgnoredLicenses []string + + NoColor bool } func NewWriter(options Options) *Writer { @@ -74,12 +76,12 @@ func NewWriter(options Options) *Writer { return &Writer{ buf: buf, - summaryRenderer: NewSummaryRenderer(buf, isTerminal, options.Scanners), - vulnerabilityRenderer: NewVulnerabilityRenderer(buf, isTerminal, options.Tree, options.ShowSuppressed, options.Severities), - misconfigRenderer: NewMisconfigRenderer(buf, options.Severities, options.Trace, options.IncludeNonFailures, isTerminal, options.RenderCause), - secretRenderer: NewSecretRenderer(buf, isTerminal, options.Severities), - pkgLicenseRenderer: NewPkgLicenseRenderer(buf, isTerminal, options.Severities), - fileLicenseRenderer: NewFileLicenseRenderer(buf, isTerminal, options.Severities), + summaryRenderer: NewSummaryRenderer(buf, isTerminal, options.NoColor, options.Scanners), + vulnerabilityRenderer: NewVulnerabilityRenderer(buf, isTerminal, options.Tree, options.ShowSuppressed, options.NoColor, options.Severities), + misconfigRenderer: NewMisconfigRenderer(buf, options.Severities, options.Trace, options.IncludeNonFailures, isTerminal, options.NoColor, options.RenderCause), + secretRenderer: NewSecretRenderer(buf, isTerminal, options.NoColor, options.Severities), + pkgLicenseRenderer: NewPkgLicenseRenderer(buf, isTerminal, options.NoColor, options.Severities), + fileLicenseRenderer: NewFileLicenseRenderer(buf, isTerminal, options.NoColor, options.Severities), options: options, } } @@ -139,15 +141,16 @@ func (tw *Writer) render(result types.Result) { } } -func newTableWriter(output io.Writer, isTerminal bool) *table.Table { +func newTableWriter(output io.Writer, isTerminal, noColor bool) *table.Table { tableWriter := table.New(output) - if isTerminal { // use ansi output if we're not piping elsewhere + if isTerminal && !noColor { // use ansi output if we're not piping elsewhere tableWriter.SetHeaderStyle(table.StyleBold) tableWriter.SetLineStyle(table.StyleDim) } tableWriter.SetBorders(true) tableWriter.SetAutoMerge(true) tableWriter.SetRowLines(true) + color.NoColor = noColor return tableWriter } @@ -189,8 +192,8 @@ func IsOutputToTerminal(output io.Writer) bool { return (o.Mode() & os.ModeCharDevice) == os.ModeCharDevice } -func RenderTarget(w io.Writer, target string, isTerminal bool) { - if isTerminal { +func RenderTarget(w io.Writer, target string, isTerminal, noColor bool) { + if isTerminal && !noColor { // nolint _ = tml.Fprintf(w, "\n%s\n\n", target) } else { diff --git a/pkg/report/table/vulnerability.go b/pkg/report/table/vulnerability.go index 118cccc9d524..a519c0c2ef28 100644 --- a/pkg/report/table/vulnerability.go +++ b/pkg/report/table/vulnerability.go @@ -52,9 +52,10 @@ type vulnerabilityRenderer struct { showSuppressed bool // Show suppressed vulnerabilities severities []dbTypes.Severity once *sync.Once + noColor bool } -func NewVulnerabilityRenderer(buf *bytes.Buffer, isTerminal, tree, suppressed bool, severities []dbTypes.Severity) *vulnerabilityRenderer { +func NewVulnerabilityRenderer(buf *bytes.Buffer, isTerminal, tree, suppressed, noColor bool, severities []dbTypes.Severity) *vulnerabilityRenderer { if !isTerminal { tml.DisableFormatting() } @@ -65,6 +66,7 @@ func NewVulnerabilityRenderer(buf *bytes.Buffer, isTerminal, tree, suppressed bo showSuppressed: suppressed, severities: severities, once: new(sync.Once), + noColor: noColor, } } @@ -96,7 +98,7 @@ func (r *vulnerabilityRenderer) renderDetectedVulnerabilities(result types.Resul _, _ = color.New(color.FgCyan).Fprintf(r.w, vexNotice, doc.URL("docs/supply-chain/vex/repo", "publishing-vex-documents")) }) - tw := newTableWriter(r.w, r.isTerminal) + tw := newTableWriter(r.w, r.isTerminal, r.noColor) r.setHeaders(tw, result.Vulnerabilities) r.setVulnerabilityRows(tw, result.Vulnerabilities) @@ -107,7 +109,7 @@ func (r *vulnerabilityRenderer) renderDetectedVulnerabilities(result types.Resul if result.Class == types.ClassLangPkg { target += fmt.Sprintf(" (%s)", result.Type) } - RenderTarget(r.w, target, r.isTerminal) + RenderTarget(r.w, target, r.isTerminal, r.noColor) r.printf("Total: %d (%s)\n\n", total, strings.Join(summaries, ", ")) tw.Render() @@ -151,7 +153,7 @@ func (r *vulnerabilityRenderer) setVulnerabilityRows(tw *table.Table, vulns []ty } if v.PrimaryURL != "" { - if r.isTerminal { + if r.isTerminal && !r.noColor { title = tml.Sprintf("%s\n%s", title, v.PrimaryURL) } else { title = fmt.Sprintf("%s\n%s", title, v.PrimaryURL) @@ -194,7 +196,7 @@ func (r *vulnerabilityRenderer) countSeverities(vulns []types.DetectedVulnerabil } func (r *vulnerabilityRenderer) renderModifiedVulnerabilities(modifiedFindings []types.ModifiedFinding) { - tw := newTableWriter(r.w, r.isTerminal) + tw := newTableWriter(r.w, r.isTerminal, r.noColor) header := []string{ "Library", "Vulnerability", @@ -269,8 +271,13 @@ Dependency Origin Tree (Reversed) // Render tree for _, vulnPkg := range vulnPkgs { _, summaries := summarize(r.severities, pkgSeverityCount[vulnPkg.ID]) - topLvlID := tml.Sprintf("%s, (%s)", vulnPkg.ID, strings.Join(summaries, ", ")) + format := "%s, (%s)" + if r.noColor { + format = "%s, (%s)" + } + + topLvlID := tml.Sprintf(format, vulnPkg.ID, strings.Join(summaries, ", ")) branch := root.AddBranch(topLvlID) addParents(branch, vulnPkg, parents, ancestors, set.New(vulnPkg.ID), 1) diff --git a/pkg/report/table/vulnerability_test.go b/pkg/report/table/vulnerability_test.go index 57f50b01b3f6..f753a9dc1a77 100644 --- a/pkg/report/table/vulnerability_test.go +++ b/pkg/report/table/vulnerability_test.go @@ -504,7 +504,7 @@ Suppressed Vulnerabilities (Total: 1) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { buf := bytes.NewBuffer([]byte{}) - r := table.NewVulnerabilityRenderer(buf, false, true, tt.showSuppressed, []dbTypes.Severity{ + r := table.NewVulnerabilityRenderer(buf, false, true, tt.showSuppressed, true, []dbTypes.Severity{ dbTypes.SeverityHigh, dbTypes.SeverityMedium, }) diff --git a/pkg/report/writer.go b/pkg/report/writer.go index 11cc47a45301..f36ae77262c2 100644 --- a/pkg/report/writer.go +++ b/pkg/report/writer.go @@ -62,6 +62,7 @@ func Write(ctx context.Context, report types.Report, option flag.Options) (err e LicenseRiskThreshold: option.LicenseRiskThreshold, IgnoredLicenses: option.IgnoredLicenses, TableModes: option.TableModes, + NoColor: option.NoColor, }) case types.FormatJSON: writer = &JSONWriter{ diff --git a/pkg/vex/vex_test.go b/pkg/vex/vex_test.go index 3a36154bffa6..59fc507a6e0f 100644 --- a/pkg/vex/vex_test.go +++ b/pkg/vex/vex_test.go @@ -163,7 +163,7 @@ var ( ) func TestMain(m *testing.M) { - log.InitLogger(false, true) + log.InitLogger(false, true, true) os.Exit(m.Run()) }