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