mirror of
https://github.com/golang/go
synced 2024-11-27 03:51:30 -07:00
f48a9fb815
Add scripts and docs for packaging releases. Change-Id: I0682c92bbb2e229d2636762e49fe73513852d351 Reviewed-on: https://go-review.googlesource.com/57890 Reviewed-by: Adam Langley <agl@golang.org>
91 lines
2.6 KiB
Bash
Executable File
91 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Copyright 2017 The Go Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style
|
|
# license that can be found in the LICENSE file.
|
|
|
|
# build.release builds and publishes a new Go+BoringCrypto release.
|
|
# After running this script, the change to the RELEASES file should be
|
|
# sent out for review and committed to the repository (but the release
|
|
# is already done, so there's not much to review).
|
|
|
|
set -e
|
|
|
|
case "$#" in
|
|
0)
|
|
rev=HEAD;;
|
|
1)
|
|
rev="$1";;
|
|
*)
|
|
echo 'usage: build.release [git-rev]' >&2
|
|
exit 2
|
|
esac
|
|
|
|
# Determine commit to use.
|
|
commit=$(git rev-parse "$rev" | awk '{print substr($1, 1, 12)}')
|
|
if [ "$commit" = "" ]; then
|
|
echo 'cannot find commit in git history' >&2
|
|
exit 2
|
|
fi
|
|
|
|
# Determine base Go release from tags.
|
|
base=$(git log --decorate=short --oneline "$rev" | grep 'tag: go' | sed 1q | sed 's/[),].*//; s/.*tag: //')
|
|
if [ "$base" = "" ]; then
|
|
echo "cannot find go release tag in git history for $rev" >&2
|
|
exit 2
|
|
fi
|
|
|
|
# Determine boring crypto version from file.
|
|
boring=$(git show "$commit:misc/boring/VERSION")
|
|
if [ "$boring" = "" ]; then
|
|
echo "missing BORINGVERSION file in $commit" >&2
|
|
exit 2
|
|
fi
|
|
|
|
# Make sure we're not redefining a published release.
|
|
version="${base}b${boring}"
|
|
if grep "^$version " RELEASES >/dev/null; then
|
|
echo "found $version in RELEASES - not rereleasing" >&2
|
|
exit 2
|
|
fi
|
|
|
|
# Show what's going on, while the release builds.
|
|
# Good time for user to type ^C if something is wrong.
|
|
echo >&2
|
|
echo "building $version from $commit" >&2
|
|
echo >&2
|
|
git log -n1 "$commit" >&2
|
|
echo >&2
|
|
|
|
# Build the release tool in a temporary GOPATH.
|
|
dir=$(mktemp -d)
|
|
trap "rm -rf $dir" EXIT
|
|
export GOPATH="$dir"
|
|
export GOBIN="$dir"
|
|
go get -u golang.org/x/build/cmd/release
|
|
|
|
# Build the release.
|
|
shortgo=$(echo "$base" | perl -pe 's/(go\d+\.\d+)(\.\d+|rc\d+)/$1/')
|
|
$dir/release -target linux-amd64 -rev "$commit" -version "$version" -tools "release-branch.$shortgo"
|
|
output="$version.linux-amd64.tar.gz"
|
|
ls -l "$output"
|
|
sha256=$(sha256sum "$output" | awk '{print $1}')
|
|
|
|
trap "rm -f /tmp/go.release.$$ /tmp/go.nm.$$" EXIT
|
|
tar -xzf "$output" -O go/bin/go >/tmp/go.release.$$
|
|
go tool nm /tmp/go.release.$$ >/tmp/go.nm.$$
|
|
if ! grep crypto/sha1.boringNewSHA1 /tmp/go.nm.$$ >/dev/null; then
|
|
echo 'built release but did NOT find sha1.boringNewSHA1 in go command!' >&2
|
|
exit 2
|
|
fi
|
|
if egrep 'crypto/sha1\.\(\*digest\)' /tmp/go.nm.$$ >/dev/null; then
|
|
echo 'built release but DID find sha1.(*digest) in go command unexpectedly!' >&2
|
|
exit 2
|
|
fi
|
|
|
|
# Publish the release.
|
|
gsutil cp "$output" gs://go-boringcrypto/
|
|
url="https://go-boringcrypto.storage.googleapis.com/$output"
|
|
|
|
# Record that it was published.
|
|
echo "$version $commit $url $sha256" >>RELEASES
|