66 lines
1.7 KiB
Bash
Executable File
66 lines
1.7 KiB
Bash
Executable File
#! /bin/bash
|
|
|
|
set -e
|
|
set -o nounset
|
|
|
|
# Preparation
|
|
|
|
## Get the new version number from the most recent tag
|
|
|
|
LATEST_TAG=$(git describe --abbrev=0 --match='v*')
|
|
VERSION=${LATEST_TAG#v}
|
|
echo Attempt to build distributables for version $VERSION
|
|
# NB does not check that this tag is on master
|
|
|
|
echo
|
|
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
|
|
echo https://github.com/zettio/weave/releases/$LATEST_TAG
|
|
exit 1
|
|
fi
|
|
|
|
## Clone the repo at the tag and go there
|
|
RELEASE_DIR=releases/$LATEST_TAG
|
|
mkdir -p releases
|
|
git clone -q -b $LATEST_TAG . $RELEASE_DIR
|
|
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
|
|
echo the latest tag $LATEST_TAG
|
|
exit 1
|
|
fi
|
|
|
|
echo Sanity checks OK for releasing tag $LATEST_TAG
|
|
|
|
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
|
|
|
|
## 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
|
|
exit 1
|
|
fi
|
|
|
|
make tests
|
|
|
|
echo Build and tests OK
|
|
|
|
# Publish
|
|
|
|
## Either leave the distributables in a directory for the dev to
|
|
## upload, or upload them automatically?
|