#! /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