Repository: gohugoio/hugo (language: go)

Issue:
Respect NO_COLOR
https://no-color.org/


Discussion / hints:

Fix patch:
diff --git a/commands/hugo.go b/commands/hugo.go
index f10fec00b7c..5169d65a52e 100644
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -284,10 +284,6 @@ func setValueFromFlag(flags *flag.FlagSet, key string, cfg config.Provider, targ
 	}
 }
 
-func isTerminal() bool {
-	return terminal.IsTerminal(os.Stdout)
-}
-
 func (c *commandeer) fullBuild(noBuildLock bool) error {
 	var (
 		g         errgroup.Group
@@ -297,7 +293,7 @@ func (c *commandeer) fullBuild(noBuildLock bool) error {
 	if !c.h.quiet {
 		fmt.Println("Start building sites … ")
 		fmt.Println(hugo.BuildVersionString())
-		if isTerminal() {
+		if terminal.IsTerminal(os.Stdout) {
 			defer func() {
 				fmt.Print(showCursor + clearLine)
 			}()
diff --git a/common/loggers/loggers.go b/common/loggers/loggers.go
index c61c55a67fa..308635fe9d4 100644
--- a/common/loggers/loggers.go
+++ b/common/loggers/loggers.go
@@ -290,7 +290,7 @@ func InitGlobalLogger(stdoutThreshold, logThreshold jww.Threshold, outHandle, lo
 }
 
 func getLogWriters(outHandle, logHandle io.Writer) (io.Writer, io.Writer) {
-	isTerm := terminal.IsTerminal(os.Stdout)
+	isTerm := terminal.PrintANSIColors(os.Stdout)
 	if logHandle != ioutil.Discard && isTerm {
 		// Remove any Ansi coloring from log output
 		logHandle = ansiCleaner{w: logHandle}
diff --git a/common/terminal/colors.go b/common/terminal/colors.go
index 334b82fae5b..c4a78291ed4 100644
--- a/common/terminal/colors.go
+++ b/common/terminal/colors.go
@@ -1,4 +1,4 @@
-// Copyright 2018 The Hugo Authors. All rights reserved.
+// Copyright 2022 The Hugo Authors. All rights reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -29,6 +29,15 @@ const (
 	noticeColor  = "\033[1;36m%s\033[0m"
 )
 
+// PrintANSIColors returns false if NO_COLOR env variable is set,
+// else  IsTerminal(f).
+func PrintANSIColors(f *os.File) bool {
+	if os.Getenv("NO_COLOR") != "" {
+		return false
+	}
+	return IsTerminal(f)
+}
+
 // IsTerminal return true if the file descriptor is terminal and the TERM
 // environment variable isn't a dumb one.
 func IsTerminal(f *os.File) bool {
diff --git a/common/text/position.go b/common/text/position.go
index 34e856c5dd9..cc1eda3540a 100644
--- a/common/text/position.go
+++ b/common/text/position.go
@@ -83,7 +83,7 @@ func createPositionStringFormatter(formatStr string) func(p Position) string {
 
 		msg := fmt.Sprintf(format, args...)
 
-		if terminal.IsTerminal(os.Stdout) {
+		if terminal.PrintANSIColors(os.Stdout) {
 			return terminal.Notice(msg)
 		}
 


Test patch: