1#!/bin/bash
2
3set -eu -o pipefail
4
5
6changelog=$(cat CHANGELOG.md)
7
8regex='
9([0-9]+\.[0-9]+\.[0-9]+) \(([0-9]{4}-[0-9]{2}-[0-9]{2})\)
10-*
11
12((.|
13)*)
14'
15
16if [[ ! $changelog =~ $regex ]]; then
17      echo "Could not find date line in change log!"
18      exit 1
19fi
20
21version="${BASH_REMATCH[1]}"
22date="${BASH_REMATCH[2]}"
23notes="$(echo "${BASH_REMATCH[3]}" | sed -n -e '/^[0-9]\+\.[0-9]\+\.[0-9]\+/,$!p')"
24
25if [[ "$date" !=  $(date +"%Y-%m-%d") ]]; then
26    echo "$date is not today!"
27    exit 1
28fi
29
30tag="v$version"
31
32if [ -n "$(git status --porcelain)" ]; then
33    echo ". is not clean." >&2
34    exit 1
35fi
36
37php composer.phar self-update
38php composer.phar update
39
40./vendor/bin/phpunit
41
42echo "Release notes for $tag:"
43echo "$notes"
44
45read -e -p "Commit changes and push to origin? " should_push
46
47if [ "$should_push" != "y" ]; then
48    echo "Aborting"
49    exit 1
50fi
51
52git push
53
54message="$version
55
56$notes"
57
58hub release create -m "$message" "$tag"
59
60git push --tags
61