From ab890004a687da451382597fd5a543eb59203057 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 a8daa2dfc369ea..d5600e87f226cc 100644 --- a/src/cmd/go/internal/cfg/cfg.go +++ b/src/cmd/go/internal/cfg/cfg.go @@ -84,6 +84,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 a59072e591d354..5f50bb97efa756 100644 --- a/src/cmd/go/internal/work/action.go +++ b/src/cmd/go/internal/work/action.go @@ -428,7 +428,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 408edb51193d35..6ebbfd9469f912 100644 --- a/src/cmd/go/internal/work/build.go +++ b/src/cmd/go/internal/work/build.go @@ -242,6 +242,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)