120 lines
3.1 KiB
Bash
Executable File
120 lines
3.1 KiB
Bash
Executable File
#! /bin/bash
|
|
|
|
set -e
|
|
|
|
PWD=`pwd`
|
|
GITHUB_USER=squaremo
|
|
RELEASE_NAME="Weave"
|
|
RELEASE_DESCRIPTION="Weaving Containers into Applications"
|
|
|
|
setup() {
|
|
## Get the new version number from the most recent tag
|
|
LATEST_TAG=$(git describe --abbrev=0 --match='v*')
|
|
VERSION=${LATEST_TAG#v}
|
|
# NB does not check that this tag is on master
|
|
RELEASE_DIR=./releases/$LATEST_TAG
|
|
}
|
|
|
|
prepare() {
|
|
setup
|
|
|
|
echo "Attempting to build distributables for version $VERSION"
|
|
if [ -d $RELEASE_DIR ]; then
|
|
echo Release directory $RELEASE_DIR already exists, you may want to >&2
|
|
echo rm -rf $RELEASE_DIR >&2
|
|
exit 1
|
|
fi
|
|
|
|
## Clone the repo at the tag and go there
|
|
mkdir -p releases
|
|
git clone -q -b $LATEST_TAG . $RELEASE_DIR 2>/dev/null
|
|
cd $RELEASE_DIR
|
|
|
|
## Check that the top changelog entry is this version
|
|
latest_changelog=$(grep -o "Release v.*" -m1 ./CHANGELOG.md)
|
|
if ! [ `echo "$latest_changelog" | grep -o 'v[^ ]*'` == $LATEST_TAG ]; then
|
|
echo Latest changelog entry $latest_changelog does not match >&2
|
|
echo the latest tag $LATEST_TAG >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo
|
|
echo == Build and test
|
|
|
|
## Inject the version numbers and build the distributables
|
|
## (library versions?)
|
|
|
|
sed -i "/var version = / c\var version = \"$VERSION\"" weaver/main.go
|
|
make
|
|
|
|
if make tests; then
|
|
echo '** Tests pass'
|
|
else
|
|
echo Tests failed, probably best not publish this one >&2
|
|
exit 1
|
|
fi
|
|
|
|
## Run tests with the distributables, including version check
|
|
v=$(./weaver/weaver --version)
|
|
if ! [ "$v" == "weaver $VERSION" ]; then
|
|
echo Version of distributable "$v" does not match tag $LATEST_TAG >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo '** Build OK'
|
|
echo '** Release artefacts in' $RELEASE_DIR
|
|
}
|
|
|
|
publish() {
|
|
setup
|
|
cd $PWD/$RELEASE_DIR
|
|
|
|
echo == Sanity checks
|
|
|
|
## Check that the version doesn't already exist by looking at github
|
|
## releases
|
|
if curl -sSf https://api.github.com/repos/zettio/weave/releases/$LATEST_TAG 2>/dev/null; then
|
|
echo Release $LATEST_TAG already exists on GitHub >&2
|
|
echo https://github.com/zettio/weave/releases/$LATEST_TAG >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo '** Sanity checks OK for publishing tag' $LATEST_TAG as zettio/weave:$VERSION
|
|
|
|
if ! which github-release; then
|
|
echo Please install git-release:
|
|
echo go get github.com/aktau/github-release
|
|
echo and create a git token per https://github.com/aktau/github-release
|
|
exit 1
|
|
fi
|
|
|
|
echo == Creating GitHub release $VERSION
|
|
github-release release --user $GITHUB_USER \
|
|
--repo weave \
|
|
--tag $LATEST_TAG \
|
|
--name "$RELEASE_NAME" \
|
|
--description "$RELEASE_DESCRIPTION" \
|
|
--pre-release
|
|
}
|
|
|
|
usage() {
|
|
echo Usage:
|
|
echo ./bin/release prepare
|
|
echo -- Build artefacts for the latest version tag
|
|
echo ./bin/release publish
|
|
echo -- Publish the artefacts for the latest tag to GitHub and DockerHub
|
|
}
|
|
|
|
case "$1" in
|
|
prepare)
|
|
prepare
|
|
;;
|
|
publish)
|
|
publish
|
|
;;
|
|
*)
|
|
echo Unknown command "$1"
|
|
usage
|
|
;;
|
|
esac
|