scripts/tag-release.sh: libuplink release tagging (#2256)
* scripts/tag-release.sh: libuplink release tagging a couple of arch review meetings ago we discussed how to make sure that it is much easier to get the release defaults for binaries, libraries, and so on. we already imperfectly solved the binary problem with the release.sh script, but (until now!) have not solved the problem of getting release defaults for people building from source. the solution we seemed to all prefer was to make sure our tagged version commits check the release state into the source code. this script aides in tagging commits with version tags and updating the source defaults. it still plays nicely with release.sh and our other build processes. after this is merged we should configure github/go modules to prefer people use one of our tags instead of master (which will keep dev defaults). Change-Id: I36c5c33a1bc90ec1685f59b05dde779090e252b6 * gofmt release.go Change-Id: I6e968eff86230496e9cbddecd767ca8d8ff36ba4 * regex for version tag Change-Id: Icaa6d753ffc962115d961bcabe9daed89b16430c * added some docs Change-Id: Ide624fab794ce849e3a3e7254fb038251bba0c71
This commit is contained in:
parent
5fb2e01912
commit
eb1b1c434d
59
scripts/tag-release.sh
Executable file
59
scripts/tag-release.sh
Executable file
@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
## This script:
|
||||
#
|
||||
# 1) Makes sure the current git working tree is clean
|
||||
# 2) Creates a release file that changes the build defaults to include
|
||||
# a timestamp, a commit hash, a version number, and set the release
|
||||
# flag to true.
|
||||
# 3) commits that release file and tags it with the release version
|
||||
# 4) resets the working tree back
|
||||
#
|
||||
# This script should be used instead of 'git tag' for Storj releases,
|
||||
# so downstream users developing with Go 1.11+ style modules find code
|
||||
# with our release defaults set instead of our dev defaults set.
|
||||
#
|
||||
|
||||
set -eu
|
||||
set -o pipefail
|
||||
|
||||
VERSION="${1-}"
|
||||
|
||||
if ! [[ "$VERSION" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
echo "usage: $0 vMAJOR.MINOR.PATCH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "$(git rev-parse --show-toplevel)"
|
||||
|
||||
if [[ "$(git diff --stat)" != '' ]] || [[ -n "$(git status -s)" ]]; then
|
||||
echo "git working tree unclean"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TIMESTAMP=$(date +%s)
|
||||
COMMIT=$(git rev-parse HEAD)
|
||||
|
||||
cat > ./internal/version/release.go <<EOF
|
||||
// Copyright (C) 2019 Storj Labs, Inc.
|
||||
// See LICENSE for copying information.
|
||||
|
||||
package version
|
||||
|
||||
func init() {
|
||||
buildTimestamp = "$TIMESTAMP"
|
||||
buildCommitHash = "$COMMIT"
|
||||
buildVersion = "$VERSION"
|
||||
buildRelease = "true"
|
||||
}
|
||||
EOF
|
||||
|
||||
gofmt -w -s ./internal/version/release.go
|
||||
go install ./internal/version
|
||||
|
||||
git add ./internal/version/release.go >/dev/null
|
||||
git commit -m "release $VERSION" >/dev/null
|
||||
if git tag $VERSION; then
|
||||
echo successfully created tag $VERSION
|
||||
fi
|
||||
git reset --hard $COMMIT >/dev/null
|
Loading…
Reference in New Issue
Block a user