Skip to content

Commit 0581e1a

Browse files
committed
Add a script that tests for SemVer version bumps
This will help us avoid cutting releases with unexpected or invalid version increments.
1 parent ce22c9f commit 0581e1a

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

valid-semver-bump.sh

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
#!/bin/sh
2+
3+
# This script tests whether a given version bump is valid.
4+
5+
die() {
6+
echo "$*" >&2
7+
exit 1
8+
}
9+
10+
succeed() {
11+
echo "$*" >&2
12+
exit 0
13+
}
14+
15+
major() {
16+
major=${1%%.*}
17+
test -n "$major" || die "Invalid SemVer: $1"
18+
echo $major
19+
}
20+
21+
minor() {
22+
tmp=${1#*.}
23+
minor=${tmp%%.*}
24+
test -n "$minor" || die "Invalid SemVer: $1"
25+
echo $minor
26+
}
27+
28+
patch() {
29+
patch=${1##*.}
30+
test -n "$patch" || die "Invalid SemVer: $1"
31+
echo $patch
32+
}
33+
34+
SNAPSHOT="${1%-SNAPSHOT}"
35+
RELEASE="$2"
36+
37+
test -n "$RELEASE" -a -n "$SNAPSHOT" ||
38+
die "Usage: valid-semver-bump.sh previous-snapshot-version new-release-version"
39+
40+
test "$RELEASE" = "$SNAPSHOT" &&
41+
succeed "Detected DEFAULT version bump"
42+
43+
NEW_MAJOR=$(major $RELEASE)
44+
NEW_MINOR=$(minor $RELEASE)
45+
NEW_PATCH=$(patch $RELEASE)
46+
OLD_MAJOR=$(major $SNAPSHOT)
47+
OLD_MINOR=$(minor $SNAPSHOT)
48+
OLD_PATCH=$(patch $SNAPSHOT)
49+
50+
# check for MINOR version bump
51+
# e.g. 1.0.1-SNAPSHOT -> 1.1.0
52+
if [ "$OLD_PATCH" -gt 0 ]
53+
then
54+
test "$NEW_MAJOR" -eq "$OLD_MAJOR" \
55+
-a "$NEW_MINOR" -eq "$((OLD_MINOR+1))" \
56+
-a "$NEW_PATCH" -eq 0 &&
57+
succeed "Detected MINOR version bump"
58+
fi
59+
60+
# check for MAJOR version bump
61+
# e.g. 1.1.0-SNAPSHOT -> 2.0.0
62+
# e.g. 1.0.1-SNAPSHOT -> 2.0.0
63+
if [ "$OLD_PATCH" -gt 0 -o "$OLD_MINOR" -gt 0 ]
64+
then
65+
test "$NEW_MAJOR" -eq "$((OLD_MAJOR+1))" \
66+
-a "$NEW_MINOR" -eq 0 \
67+
-a "$NEW_PATCH" -eq 0 &&
68+
succeed "Detected MAJOR version bump"
69+
fi
70+
71+
die "Invalid version bump: $SNAPSHOT -> $RELEASE"

0 commit comments

Comments
 (0)