From bf2da1ba3ecefc3a847bddecdb020fcd1fa59601 Mon Sep 17 00:00:00 2001 From: sakthi N Date: Sat, 24 Feb 2024 23:04:46 +0530 Subject: [PATCH] feat: add checkerr flag to report code errors and skip binary generation New flag -checkerr will skip costly binary generation and report only the compilation errors. This will greatly reduce the time taken to validate changes in go codebase and reduce cpu and memory usage by go toolchain. --- src/cmd/go/internal/cfg/cfg.go | 1 + src/cmd/go/internal/work/action.go | 2 +- src/cmd/go/internal/work/build.go | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cmd/go/internal/cfg/cfg.go b/src/cmd/go/internal/cfg/cfg.go index 3b9f27e91d517e..eb9ef6459bd554 100644 --- a/src/cmd/go/internal/cfg/cfg.go +++ b/src/cmd/go/internal/cfg/cfg.go @@ -88,6 +88,7 @@ var ( BuildPkgdir string // -pkgdir flag BuildRace bool // -race flag BuildToolexec []string // -toolexec flag + BuildCheckError bool // -checkerr flag BuildToolchainName string BuildToolchainCompiler func() string BuildToolchainLinker func() string diff --git a/src/cmd/go/internal/work/action.go b/src/cmd/go/internal/work/action.go index 44bb9f8c1e4a05..afd40da424e291 100644 --- a/src/cmd/go/internal/work/action.go +++ b/src/cmd/go/internal/work/action.go @@ -434,7 +434,7 @@ func (b *Builder) cacheAction(mode string, p *load.Package, f func() *Action) *A // AutoAction returns the "right" action for go build or go install of p. func (b *Builder) AutoAction(mode, depMode BuildMode, p *load.Package) *Action { - if p.Name == "main" { + if !cfg.BuildCheckError && p.Name == "main" { return b.LinkAction(mode, depMode, p) } return b.CompileAction(mode, depMode, p) diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go index 3508d51fbb0452..f86ba0ebfcb4d4 100644 --- a/src/cmd/go/internal/work/build.go +++ b/src/cmd/go/internal/work/build.go @@ -247,6 +247,7 @@ func init() { AddBuildFlags(CmdBuild, DefaultBuildFlags) AddBuildFlags(CmdInstall, DefaultBuildFlags) + CmdInstall.Flag.BoolVar(&cfg.BuildCheckError, "checkerr", false, "set to true to validate only compilation errors and skip binary generation") if cfg.Experiment != nil && cfg.Experiment.CoverageRedesign { AddCoverFlags(CmdBuild, nil) AddCoverFlags(CmdInstall, nil)