Skip to content

Commit 2402940

Browse files
committed
Add release.sh script
See #17
1 parent 44fdca5 commit 2402940

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

release.sh

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
usage() {
5+
cat <<HELP_USAGE
6+
Usage:
7+
$0 NEW_VERSION
8+
9+
Tags the master branch with given NEW_VERSION and pushes to upstream.
10+
Ensures the current HEAD is master and has no untracked changes.
11+
HELP_USAGE
12+
exit 1
13+
}
14+
15+
NEW_VERSION=${1:-""}
16+
if [[ -z "$NEW_VERSION" ]]; then
17+
echo "Error: First argument NEW_VERSION must be non-empty"
18+
usage
19+
fi
20+
21+
ERROR_OCCURRED=""
22+
23+
if [[ "$(git rev-parse --abbrev-ref HEAD 2>/dev/null)" != "master" ]]; then
24+
echo "Error: The current branch is not master"
25+
ERROR_OCCURRED="1"
26+
fi
27+
28+
if [[ -n "$(git status --porcelain)" ]]; then
29+
echo "Error: There are untracked changes. Please commit or stash them before releasing."
30+
ERROR_OCCURRED="1"
31+
fi
32+
33+
TAG_NAME="version-$NEW_VERSION"
34+
if [[ "$(git tag -l "$TAG_NAME")" == "$TAG_NAME" ]]; then
35+
echo "Error: Tag $TAG_NAME already exists locally"
36+
ERROR_OCCURRED="1"
37+
fi
38+
39+
echo "Running mvn verify...(be patient)"
40+
if ! mvn -q verify >/dev/null; then
41+
echo "Error: mvn verify has failed"
42+
ERROR_OCCURRED="1"
43+
fi
44+
45+
REMOTE_TRACKING_REF=$(git for-each-ref --format='%(upstream:short)' "$(git symbolic-ref -q HEAD)" | tr -d "$IFS")
46+
if [[ -z "${REMOTE_TRACKING_REF/[ ]*\n/}" ]]; then
47+
echo "Error: No remote tracking ref found"
48+
ERROR_OCCURRED="1"
49+
fi
50+
REMOTE_NAME=${REMOTE_TRACKING_REF%/*}
51+
52+
git fetch -q "$REMOTE_NAME" master
53+
if [[ "$(git rev-list -1 FETCH_HEAD)" != "$(git rev-list -1 master)" ]]; then
54+
echo "Error: Upstream is not in sync with local master. Please pull and/or push before releasing."
55+
ERROR_OCCURRED="1"
56+
fi
57+
58+
if git fetch -q "$REMOTE_NAME" $TAG_NAME 2>/dev/null; then
59+
echo "Error: Tag $TAG_NAME already exists remotely"
60+
ERROR_OCCURRED="1"
61+
fi
62+
63+
if [[ -n "$ERROR_OCCURRED" ]]; then
64+
exit 1
65+
fi
66+
67+
echo "Releasing version $NEW_VERSION..."
68+
mvn -q versions:set -DgenerateBackupPoms=false "-DnewVersion=$NEW_VERSION"
69+
git commit -am "Release version $NEW_VERSION"
70+
git tag "$TAG_NAME"
71+
git push "$REMOTE_NAME" "refs/heads/master" "refs/tags/$TAG_NAME"
72+
73+
echo "Updating versions in README and demo pom.xml..."
74+
75+
sed -z -i -f - \
76+
README.md \
77+
demo/openapi-generator-for-spring-demo-webflux/pom.xml \
78+
demo/openapi-generator-for-spring-demo-webmvc/pom.xml \
79+
<<SED_SCRIPT
80+
s~\(\
81+
[ ]*<dependency>\n\
82+
[ ]*<groupId>de.qaware.tools.openapi-generator-for-spring</groupId>\n\
83+
[ ]*<artifactId>openapi-generator-for-spring-starter</artifactId>\n\
84+
[ ]*<version>\).*\(</version>\)\
85+
~\1$NEW_VERSION\2~
86+
SED_SCRIPT
87+
git commit -am "Use released version in README and demos"
88+
89+
mvn -q versions:set -DgenerateBackupPoms=false -DnextSnapshot=true >/dev/null
90+
git commit -am "Start development on next version"
91+
git push "$REMOTE_NAME" "refs/heads/master"

0 commit comments

Comments
 (0)