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())
}