diff --git a/build/bazelutil/stamp.sh b/build/bazelutil/stamp.sh index 6ea1ad4efd9c..ed98ccaaf2e7 100755 --- a/build/bazelutil/stamp.sh +++ b/build/bazelutil/stamp.sh @@ -10,6 +10,7 @@ # target-triple: defaults to the value of `cc -dumpmachine` # build-channel: defaults to `unknown`, but can be `official-binary` # build-type: defaults to `development`, but can be `release` +# build-tag: will default to an appropriate value if not passed in, but can be overridden set -euo pipefail @@ -56,7 +57,16 @@ else CRASH_REPORT_ENV="development" fi -BUILD_REV=$(git rev-parse HEAD) +# Handle build-tag. +if [ -z "${1+x}" ] +then + BUILD_TAG= +else + BUILD_TAG="$1" + shift 1 +fi + +BUILD_REV=$(git describe --match="" --always --abbrev=40 --dirty) BUILD_UTCTIME=$(date -u '+%Y/%m/%d %H:%M:%S') @@ -69,6 +79,7 @@ BUILD_UTCTIME=$(date -u '+%Y/%m/%d %H:%M:%S') # * https://github.com/bazelbuild/rules_go/blob/master/go/core.rst#defines-and-stamping cat <, "development", or "release" @@ -62,6 +63,9 @@ func SeemsOfficial() bool { } func computeBinaryVersion(versionTxt, revision string) string { + if buildTagOverride != "" { + return buildTagOverride + } txt := strings.TrimSuffix(versionTxt, "\n") v, err := version.Parse(txt) if err != nil { diff --git a/pkg/cmd/publish-provisional-artifacts/main.go b/pkg/cmd/publish-provisional-artifacts/main.go index 6a858a39f1b7..ea5ac16dbe45 100644 --- a/pkg/cmd/publish-provisional-artifacts/main.go +++ b/pkg/cmd/publish-provisional-artifacts/main.go @@ -33,6 +33,7 @@ var provisionalReleasePrefixRE = regexp.MustCompile(`^provisional_[0-9]{12}_`) func main() { var gcsBucket string var outputDirectory string + var buildTagOverride string var doProvisional bool var isRelease bool var doBless bool @@ -40,6 +41,7 @@ func main() { flag.StringVar(&gcsBucket, "gcs-bucket", "", "GCS bucket") flag.StringVar(&outputDirectory, "output-directory", "", "Save local copies of uploaded release archives in this directory") + flag.StringVar(&buildTagOverride, "build-tag-override", "", "override the version from version.txt") flag.BoolVar(&doProvisional, "provisional", false, "publish provisional binaries") flag.BoolVar(&doBless, "bless", false, "bless provisional binaries") @@ -82,24 +84,26 @@ func main() { } run(providers, runFlags{ - doProvisional: doProvisional, - doBless: doBless, - isRelease: isRelease, - branch: branch, - pkgDir: pkg, - sha: string(bytes.TrimSpace(shaOut)), - outputDirectory: outputDirectory, + doProvisional: doProvisional, + doBless: doBless, + isRelease: isRelease, + buildTagOverride: buildTagOverride, + branch: branch, + pkgDir: pkg, + sha: string(bytes.TrimSpace(shaOut)), + outputDirectory: outputDirectory, }, release.ExecFn{}) } type runFlags struct { - doProvisional bool - doBless bool - isRelease bool - branch string - sha string - pkgDir string - outputDirectory string + doProvisional bool + doBless bool + isRelease bool + buildTagOverride string + branch string + sha string + pkgDir string + outputDirectory string } func run(providers []release.ObjectPutGetter, flags runFlags, execFn release.ExecFn) { @@ -241,7 +245,9 @@ func buildCockroach(flags runFlags, o opts, execFn release.ExecFn) { } if flags.isRelease { buildOpts.Release = true - buildOpts.BuildTag = o.VersionStr + } + if flags.buildTagOverride != "" { + buildOpts.BuildTag = flags.buildTagOverride } if err := release.MakeRelease(o.Platform, buildOpts, o.PkgDir); err != nil { diff --git a/pkg/cmd/publish-provisional-artifacts/main_test.go b/pkg/cmd/publish-provisional-artifacts/main_test.go index f0d9c48bcfec..709d37c6e961 100644 --- a/pkg/cmd/publish-provisional-artifacts/main_test.go +++ b/pkg/cmd/publish-provisional-artifacts/main_test.go @@ -225,6 +225,67 @@ func TestProvisional(t *testing.T) { "gs://release-binaries-bucket/cockroach-sql-v0.0.1-alpha.linux-arm64.tgz.sha256sum CONTENTS ", }, }, + { + name: `release-override-tag`, + flags: runFlags{ + doProvisional: true, + isRelease: true, + branch: `provisional_201901010101_v0.0.1-alpha`, + buildTagOverride: "injected-tag", + }, + expectedCmds: []string{ + "env=[] args=bazel build //pkg/cmd/cockroach //pkg/cmd/cockroach-sql //c-deps:libgeos " + + "'--workspace_status_command=./build/bazelutil/stamp.sh x86_64-pc-linux-gnu official-binary release injected-tag' -c opt --config=ci --config=force_build_cdeps --config=with_ui --config=crosslinuxbase", + "env=[] args=bazel info bazel-bin -c opt --config=ci --config=force_build_cdeps --config=with_ui --config=crosslinuxbase", + "env=[MALLOC_CONF=prof:true] args=./cockroach.linux-2.6.32-gnu-amd64 version", + "env=[] args=ldd ./cockroach.linux-2.6.32-gnu-amd64", + "env=[] args=bazel run @go_sdk//:bin/go -- tool nm ./cockroach.linux-2.6.32-gnu-amd64", + "env=[] args=bazel build //pkg/cmd/cockroach //pkg/cmd/cockroach-sql //c-deps:libgeos '--workspace_status_command=./build/bazelutil/stamp.sh x86_64-pc-linux-gnu official-fips-binary release injected-tag' -c opt --config=ci --config=force_build_cdeps --config=with_ui --config=crosslinuxfipsbase", + "env=[] args=bazel info bazel-bin -c opt --config=ci --config=force_build_cdeps --config=with_ui --config=crosslinuxfipsbase", + "env=[MALLOC_CONF=prof:true] args=./cockroach.linux-2.6.32-gnu-amd64-fips version", + "env=[] args=ldd ./cockroach.linux-2.6.32-gnu-amd64-fips", + "env=[] args=bazel run @go_sdk//:bin/go -- tool nm ./cockroach.linux-2.6.32-gnu-amd64-fips", + "env=[] args=bazel build //pkg/cmd/cockroach //pkg/cmd/cockroach-sql //c-deps:libgeos " + + "'--workspace_status_command=./build/bazelutil/stamp.sh x86_64-apple-darwin19 official-binary release injected-tag' -c opt --config=ci --config=force_build_cdeps --config=with_ui --config=crossmacosbase", + "env=[] args=bazel info bazel-bin -c opt --config=ci --config=force_build_cdeps --config=with_ui --config=crossmacosbase", + "env=[] args=bazel build //pkg/cmd/cockroach //pkg/cmd/cockroach-sql '--workspace_status_command=./build/bazelutil/stamp.sh aarch64-apple-darwin21.2 official-binary release injected-tag' -c opt --config=ci --config=force_build_cdeps --config=with_ui --config=crossmacosarmbase", + "env=[] args=bazel info bazel-bin -c opt --config=ci --config=force_build_cdeps --config=with_ui --config=crossmacosarmbase", + "env=[] args=bazel build //pkg/cmd/cockroach //pkg/cmd/cockroach-sql //c-deps:libgeos " + + "'--workspace_status_command=." + + "/build/bazelutil/stamp.sh x86_64-w64-mingw32 official-binary release injected-tag' -c opt --config=ci --config=force_build_cdeps --config=with_ui --config=crosswindowsbase", + "env=[] args=bazel info bazel-bin -c opt --config=ci --config=force_build_cdeps --config=with_ui --config=crosswindowsbase", + "env=[] args=bazel build //pkg/cmd/cockroach //pkg/cmd/cockroach-sql //c-deps:libgeos '--workspace_status_command=./build/bazelutil/stamp.sh aarch64-unknown-linux-gnu official-binary release injected-tag' -c opt --config=ci --config=force_build_cdeps --config=with_ui --config=crosslinuxarmbase", + "env=[] args=bazel info bazel-bin -c opt --config=ci --config=force_build_cdeps --config=with_ui --config=crosslinuxarmbase", + }, + expectedGets: nil, + expectedPuts: []string{ + "gs://release-binaries-bucket/cockroach-v0.0.1-alpha.linux-amd64.tgz " + + "CONTENTS ", + "gs://release-binaries-bucket/cockroach-v0.0.1-alpha.linux-amd64.tgz.sha256sum CONTENTS ", + "gs://release-binaries-bucket/cockroach-sql-v0.0.1-alpha.linux-amd64.tgz CONTENTS ", + "gs://release-binaries-bucket/cockroach-sql-v0.0.1-alpha.linux-amd64.tgz.sha256sum CONTENTS ", + "gs://release-binaries-bucket/cockroach-v0.0.1-alpha.linux-amd64-fips.tgz CONTENTS ", + "gs://release-binaries-bucket/cockroach-v0.0.1-alpha.linux-amd64-fips.tgz.sha256sum CONTENTS ", + "gs://release-binaries-bucket/cockroach-sql-v0.0.1-alpha.linux-amd64-fips.tgz CONTENTS ", + "gs://release-binaries-bucket/cockroach-sql-v0.0.1-alpha.linux-amd64-fips.tgz.sha256sum CONTENTS ", + "gs://release-binaries-bucket/cockroach-v0.0.1-alpha.darwin-10.9-amd64.tgz CONTENTS ", + "gs://release-binaries-bucket/cockroach-v0.0.1-alpha.darwin-10.9-amd64.tgz.sha256sum CONTENTS ", + "gs://release-binaries-bucket/cockroach-sql-v0.0.1-alpha.darwin-10.9-amd64.tgz CONTENTS ", + "gs://release-binaries-bucket/cockroach-sql-v0.0.1-alpha.darwin-10.9-amd64.tgz.sha256sum CONTENTS ", + "gs://release-binaries-bucket/cockroach-v0.0.1-alpha.darwin-11.0-arm64.unsigned.tgz CONTENTS ", + "gs://release-binaries-bucket/cockroach-v0.0.1-alpha.darwin-11.0-arm64.unsigned.tgz.sha256sum CONTENTS ", + "gs://release-binaries-bucket/cockroach-sql-v0.0.1-alpha.darwin-11.0-arm64.unsigned.tgz CONTENTS ", + "gs://release-binaries-bucket/cockroach-sql-v0.0.1-alpha.darwin-11.0-arm64.unsigned.tgz.sha256sum CONTENTS ", + "gs://release-binaries-bucket/cockroach-v0.0.1-alpha.windows-6.2-amd64.zip CONTENTS ", + "gs://release-binaries-bucket/cockroach-v0.0.1-alpha.windows-6.2-amd64.zip.sha256sum CONTENTS ", + "gs://release-binaries-bucket/cockroach-sql-v0.0.1-alpha.windows-6.2-amd64.zip CONTENTS ", + "gs://release-binaries-bucket/cockroach-sql-v0.0.1-alpha.windows-6.2-amd64.zip.sha256sum CONTENTS ", + "gs://release-binaries-bucket/cockroach-v0.0.1-alpha.linux-arm64.tgz CONTENTS ", + "gs://release-binaries-bucket/cockroach-v0.0.1-alpha.linux-arm64.tgz.sha256sum CONTENTS ", + "gs://release-binaries-bucket/cockroach-sql-v0.0.1-alpha.linux-arm64.tgz CONTENTS ", + "gs://release-binaries-bucket/cockroach-sql-v0.0.1-alpha.linux-arm64.tgz.sha256sum CONTENTS ", + }, + }, { name: `edge`, flags: runFlags{ diff --git a/pkg/release/build.go b/pkg/release/build.go index a42e9cd0d646..f79a5b03f263 100644 --- a/pkg/release/build.go +++ b/pkg/release/build.go @@ -31,7 +31,8 @@ import ( type BuildOptions struct { // True iff this is a release build. Release bool - // BuildTag must be set if Release is set, and vice-versea. + // BuildTag overrides the build tag for a "Release" build. + // This can only be set for a Release build. BuildTag string // ExecFn.Run() is called to execute commands for this build. @@ -163,17 +164,20 @@ func MakeRelease(platform Platform, opts BuildOptions, pkgDir string) error { buildArgs = append(buildArgs, "//c-deps:libgeos") } targetTriple := TargetTripleFromPlatform(platform) + var stampCommand string if opts.Release { if opts.BuildTag == "" { - return errors.Newf("must set BuildTag if Release is set") + stampCommand = fmt.Sprintf("--workspace_status_command=./build/bazelutil/stamp.sh %s %s release", targetTriple, opts.Channel) + } else { + stampCommand = fmt.Sprintf("--workspace_status_command=./build/bazelutil/stamp.sh %s %s release %s", targetTriple, opts.Channel, opts.BuildTag) } - buildArgs = append(buildArgs, fmt.Sprintf("--workspace_status_command=./build/bazelutil/stamp.sh %s %s release", targetTriple, opts.Channel)) } else { if opts.BuildTag != "" { - return errors.Newf("cannot set BuildTag if Release is not set") + return errors.Newf("BuildTag cannot be set for non-Release builds") } - buildArgs = append(buildArgs, fmt.Sprintf("--workspace_status_command=./build/bazelutil/stamp.sh %s %s", targetTriple, opts.Channel)) + stampCommand = fmt.Sprintf("--workspace_status_command=./build/bazelutil/stamp.sh %s %s", targetTriple, opts.Channel) } + buildArgs = append(buildArgs, stampCommand) configs := []string{"-c", "opt", "--config=ci", "--config=force_build_cdeps", "--config=with_ui", fmt.Sprintf("--config=%s", CrossConfigFromPlatform(platform))} buildArgs = append(buildArgs, configs...) cmd := exec.Command("bazel", buildArgs...)