|
1 | 1 | #!/bin/bash |
2 | 2 |
|
3 | | -set -e |
| 3 | +set -eu -o pipefail |
4 | 4 |
|
5 | | -VERSION=$(perl -MFile::Slurp::Tiny=read_file -MDateTime <<EOF |
6 | | -use v5.16; |
7 | | -my \$log = read_file(q{CHANGELOG.md}); |
8 | | -\$log =~ /\n(\d+\.\d+\.\d+) \((\d{4}-\d{2}-\d{2})\)\n/; |
9 | | -die 'Release time is not today!' unless DateTime->now->ymd eq \$2; |
10 | | -say \$1; |
11 | | -EOF |
12 | | -) |
| 5 | +changelog=$(cat CHANGELOG.md) |
13 | 6 |
|
14 | | -TAG="v$VERSION" |
| 7 | +regex=' |
| 8 | +([0-9]+\.[0-9]+\.[0-9]+) \(([0-9]{4}-[0-9]{2}-[0-9]{2})\) |
| 9 | +-* |
| 10 | +
|
| 11 | +((.| |
| 12 | +)*) |
| 13 | +' |
| 14 | + |
| 15 | +if [[ ! $changelog =~ $regex ]]; then |
| 16 | + echo "Could not find date line in change log!" |
| 17 | + exit 1 |
| 18 | +fi |
| 19 | + |
| 20 | +version="${BASH_REMATCH[1]}" |
| 21 | +date="${BASH_REMATCH[2]}" |
| 22 | +notes="$(echo "${BASH_REMATCH[3]}" | sed -n -e '/^[0-9]\+\.[0-9]\+\.[0-9]\+/,$!p')" |
| 23 | + |
| 24 | +if [[ "$date" -ne $(date +"%Y-%m-%d") ]]; then |
| 25 | + echo "$date is not today!" |
| 26 | + exit 1 |
| 27 | +fi |
| 28 | + |
| 29 | +tag="v$version" |
15 | 30 |
|
16 | 31 | if [ -n "$(git status --porcelain)" ]; then |
17 | 32 | echo ". is not clean." >&2 |
|
20 | 35 |
|
21 | 36 | mvn versions:display-dependency-updates |
22 | 37 |
|
23 | | -read -e -p "Continue given above dependencies? (y/n) " SHOULD_CONTINUE |
| 38 | +read -e -p "Continue given above dependencies? (y/n) " should_continue |
24 | 39 |
|
25 | | -if [ "$SHOULD_CONTINUE" != "y" ]; then |
| 40 | +if [ "$should_continue" != "y" ]; then |
26 | 41 | echo "Aborting" |
27 | 42 | exit 1 |
28 | 43 | fi |
29 | 44 |
|
30 | | -export VERSION |
31 | | -perl -pi -e 's/(?<=<version>)[^<]*/$ENV{VERSION}/' README.md |
| 45 | +perl -pi -e "s/(?<=<version>)[^<]*/$version/" README.md |
| 46 | +perl -pi -e "s/(?<=com\.maxmind\.db\:maxmind-db\:)\d+\.\d+\.\d+([\w\-]+)?/$version/" README.md |
32 | 47 |
|
33 | 48 | if [ -n "$(git status --porcelain)" ]; then |
34 | 49 | git diff |
35 | 50 |
|
36 | | - read -e -p "Commit README.md changes? " SHOULD_COMMIT |
37 | | - if [ "$SHOULD_COMMIT" != "y" ]; then |
| 51 | + read -e -p "Commit README.md changes? " should_commit |
| 52 | + if [ "$should_commit" != "y" ]; then |
38 | 53 | echo "Aborting" |
39 | 54 | exit 1 |
40 | 55 | fi |
|
45 | 60 |
|
46 | 61 | # could be combined with the primary build |
47 | 62 | mvn release:clean |
48 | | -mvn release:prepare -DreleaseVersion="$VERSION" -Dtag="$TAG" |
| 63 | +mvn release:prepare -DreleaseVersion="$version" -Dtag="$tag" |
49 | 64 | mvn release:perform |
50 | 65 |
|
51 | | -read -e -p "Push to origin? " SHOULD_PUSH |
| 66 | +read -e -p "Push to origin? " should_push |
52 | 67 |
|
53 | | -if [ "$SHOULD_PUSH" != "y" ]; then |
| 68 | +if [ "$should_push" != "y" ]; then |
54 | 69 | echo "Aborting" |
55 | 70 | exit 1 |
56 | 71 | fi |
57 | 72 |
|
58 | 73 | git push |
59 | 74 | git push --tags |
60 | 75 |
|
| 76 | +message="$version |
| 77 | +
|
| 78 | +$notes" |
| 79 | + |
| 80 | +hub release create -m "$message" "$tag" |
| 81 | + |
61 | 82 | echo "Remember to do the release on https://oss.sonatype.org/!" |
0 commit comments