Skip to content

Commit e18b049

Browse files
authored
Merge pull request #20376 from github/mbg/go/use-codeql-verbosity
2 parents 82476b9 + 8c13faf commit e18b049

File tree

6 files changed

+86
-0
lines changed

6 files changed

+86
-0
lines changed

go/extractor/cli/go-autobuilder/go-autobuilder.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,6 +623,8 @@ func installDependenciesAndBuild() {
623623
}
624624

625625
func main() {
626+
util.SetLogLevel()
627+
626628
if len(os.Args) == 1 {
627629
installDependenciesAndBuild()
628630
} else if len(os.Args) == 2 && os.Args[1] == "--identify-environment" {

go/extractor/cli/go-extractor/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go/extractor/cli/go-extractor/go-extractor.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010

1111
"github.com/github/codeql-go/extractor"
1212
"github.com/github/codeql-go/extractor/diagnostics"
13+
"github.com/github/codeql-go/extractor/util"
1314
)
1415

1516
var cpuprofile, memprofile string
@@ -96,6 +97,8 @@ func parseFlags(args []string, mimic bool, extractTests bool) ([]string, []strin
9697
}
9798

9899
func main() {
100+
util.SetLogLevel()
101+
99102
extractTestsDefault := os.Getenv("CODEQL_EXTRACTOR_GO_OPTION_EXTRACT_TESTS") == "true"
100103
buildFlags, patterns, extractTests := parseFlags(os.Args[1:], false, extractTestsDefault)
101104

go/extractor/util/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go/extractor/util/logging.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package util
2+
3+
import (
4+
"log/slog"
5+
"os"
6+
"strings"
7+
)
8+
9+
// Mirrors the verbosity definitions in the CodeQL CLI, which are passed to us
10+
// in the `CODEQL_VERBOSITY` environment variable.
11+
type Verbosity string
12+
13+
const (
14+
// Only print error messages.
15+
Errors Verbosity = "errors"
16+
// Print warnings and error messages.
17+
Warnings Verbosity = "warnings"
18+
// Default verbosity.
19+
Progress Verbosity = "progress"
20+
// More details of normal operations.
21+
Details Verbosity = "progress+"
22+
// Debug level set by e.g. the CodeQL Action.
23+
Spammy Verbosity = "progress++"
24+
// The most detailed.
25+
Spammier Verbosity = "progress+++"
26+
)
27+
28+
func parseLogLevel(value string) slog.Level {
29+
value = strings.ToLower(value)
30+
if strings.HasPrefix(value, string(Details)) {
31+
return slog.LevelDebug
32+
} else if value == string(Errors) {
33+
return slog.LevelError
34+
} else if value == string(Warnings) {
35+
return slog.LevelWarn
36+
} else {
37+
// Default
38+
return slog.LevelInfo
39+
}
40+
}
41+
42+
// Sets the log level for the default `slog` logger, based on `CODEQL_VERBOSITY`.
43+
func SetLogLevel() {
44+
slog.SetLogLoggerLevel(parseLogLevel(os.Getenv("CODEQL_VERBOSITY")))
45+
}

go/extractor/util/logging_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package util
2+
3+
import (
4+
"log/slog"
5+
"strings"
6+
"testing"
7+
)
8+
9+
func assertLogLevel(t *testing.T, value string, level slog.Level) {
10+
actual := parseLogLevel(value)
11+
if actual != level {
12+
t.Errorf("Expected %s to parse as %s, but got %s", value, level, actual)
13+
}
14+
}
15+
16+
func TestParseLogLevel(t *testing.T) {
17+
// Known verbosity levels.
18+
assertLogLevel(t, string(Errors), slog.LevelError)
19+
assertLogLevel(t, string(Warnings), slog.LevelWarn)
20+
assertLogLevel(t, string(Progress), slog.LevelInfo)
21+
assertLogLevel(t, string(Details), slog.LevelDebug)
22+
assertLogLevel(t, string(Spammy), slog.LevelDebug)
23+
assertLogLevel(t, string(Spammier), slog.LevelDebug)
24+
25+
// Ignore case
26+
assertLogLevel(t, strings.ToUpper(string(Spammier)), slog.LevelDebug)
27+
assertLogLevel(t, strings.ToUpper(string(Errors)), slog.LevelError)
28+
29+
// Other values default to LevelInfo
30+
assertLogLevel(t, "", slog.LevelInfo)
31+
assertLogLevel(t, "unknown", slog.LevelInfo)
32+
assertLogLevel(t, "none", slog.LevelInfo)
33+
}

0 commit comments

Comments
 (0)