From 1fda4cc471c98ef9442d017a5c6ff32eac50e7d4 Mon Sep 17 00:00:00 2001 From: Raphael 'kena' Poss Date: Fri, 11 Aug 2023 16:34:43 +0200 Subject: [PATCH] dev,bazelrc: new flag `--test-build-only` When specified, only the dependencies of test targets (including the test sources) are compiled; the test executables themselves are not linked. This change depends on https://github.com/cockroachdb/rules_go/pull/16. Release note: None --- .bazelrc | 1 + pkg/cmd/dev/build.go | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.bazelrc b/.bazelrc index 4cfeacc25219..c163ce40ebfa 100644 --- a/.bazelrc +++ b/.bazelrc @@ -30,6 +30,7 @@ build:nolintonbuild --nolintonbuild # Note: nonogo is classically the name of the nolintonbuild configuration. build:nonogo --nolintonbuild build:test --crdb_test +build:testbuildonly --crdb_test --@io_bazel_rules_go//go/config:testbuildonly # Basic settings. build --define gotags=bazel,gss diff --git a/pkg/cmd/dev/build.go b/pkg/cmd/dev/build.go index 3096bc91a7d9..c6ae51709109 100644 --- a/pkg/cmd/dev/build.go +++ b/pkg/cmd/dev/build.go @@ -35,6 +35,7 @@ const ( nogoDisableFlag = "--//build/toolchains:nogo_disable_flag" geosTarget = "//c-deps:libgeos" devTarget = "//pkg/cmd/dev:dev" + testbuildonly = "test-build-only" ) type buildTarget struct { @@ -68,6 +69,7 @@ func makeBuildCmd(runE func(cmd *cobra.Command, args []string) error) *cobra.Com buildCmd.Flags().String(crossFlag, "", "cross-compiles using the builder image (options: linux, linuxarm, macos, macosarm, windows)") buildCmd.Flags().Lookup(crossFlag).NoOptDefVal = "linux" buildCmd.Flags().StringArray(dockerArgsFlag, []string{}, "additional arguments to pass to Docker (only used for cross builds)") + buildCmd.Flags().Bool(testbuildonly, false, "only check test binaries can be built; do not link them") addCommonBuildFlags(buildCmd) return buildCmd } @@ -147,6 +149,7 @@ func (d *dev) build(cmd *cobra.Command, commandLine []string) error { targets, additionalBazelArgs := splitArgsAtDash(cmd, commandLine) ctx := cmd.Context() cross := mustGetFlagString(cmd, crossFlag) + testbuildonly := mustGetFlagBool(cmd, testbuildonly) dockerArgs := mustGetFlagStringArray(cmd, dockerArgsFlag) // Set up dev cache unless it's disabled via the environment variable or the @@ -166,7 +169,7 @@ func (d *dev) build(cmd *cobra.Command, commandLine []string) error { } } - args, buildTargets, err := d.getBasicBuildArgs(ctx, targets) + args, buildTargets, err := d.getBasicBuildArgsInternal(ctx, targets, testbuildonly) if err != nil { return err } @@ -387,6 +390,12 @@ func targetToBinBasename(target string) string { // (e.g. after translation, so short -> "//pkg/cmd/cockroach-short"). func (d *dev) getBasicBuildArgs( ctx context.Context, targets []string, +) (args []string, buildTargets []buildTarget, _ error) { + return d.getBasicBuildArgsInternal(ctx, targets, false) +} + +func (d *dev) getBasicBuildArgsInternal( + ctx context.Context, targets []string, testbuildonly bool, ) (args []string, buildTargets []buildTarget, _ error) { if len(targets) == 0 { // Default to building the cockroach binary. @@ -457,7 +466,11 @@ func (d *dev) getBasicBuildArgs( } if shouldBuildWithTestConfig { - args = append(args, "--config=test") + if testbuildonly { + args = append(args, "--config=testbuildonly") + } else { + args = append(args, "--config=test") + } } if canDisableNogo { args = append(args, nogoDisableFlag)