-
Notifications
You must be signed in to change notification settings - Fork 9
/
publish.sh
executable file
·131 lines (114 loc) · 3.34 KB
/
publish.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/usr/bin/env bash
#
# Build the release image for the project and publish it on Dockerhub, then
# announce the new version on Slack
#
# Option:
# --no-tests: skip the test suite
set -o pipefail # trace ERR through pipes
set -o errtrace # trace ERR through 'time command' and other functions
set -o errexit ## set -e : exit the script if any statement returns a non-true return value
get_script_dir () {
SOURCE="${BASH_SOURCE[0]}"
while [[ -h "$SOURCE" ]]; do
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$( readlink "$SOURCE" )"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
done
cd -P "$( dirname "$SOURCE" )"
pwd
}
WORKSPACE=$(get_script_dir)
if pgrep -lf sshuttle > /dev/null ; then
echo "sshuttle detected. Please close this program as it messes with networking and prevents builds inside Docker to work"
exit 1
fi
if [ $NO_SUDO ]; then
DOCKER="docker"
elif groups "$USER" | grep &>/dev/null '\bdocker\b'; then
DOCKER="docker"
else
DOCKER="sudo docker"
fi
tests=1
for param in "$@"
do
if [[ "--no-tests" == "$param" ]]; then
tests=0
echo "INFO: --no-tests option detected !"
fi
done
# Build
echo "Build the project..."
./build.sh
if [[ $tests == 1 ]]; then
./tests/test.sh
fi
echo "[ok] Done"
count=$(git status --porcelain | wc -l)
if test $count -gt 0; then
git status
echo "Not all files have been committed in Git. Release aborted"
exit 1
fi
select_part() {
local choice=$1
case "$choice" in
"Patch release")
bumpversion patch
;;
"Minor release")
bumpversion minor
;;
"Major release")
bumpversion major
;;
*)
read -p "Version > " version
bumpversion --new-version="$version" all
;;
esac
}
git pull --tags
# Look for a version tag in Git. If not found, ask the user to provide one
[[ $(git tag --points-at HEAD | wc -l) == 1 ]] || (
latest_version=$(bumpversion --dry-run --list patch | grep current_version | sed -r s,"^.*=",, || echo '0.0.1')
echo
echo "Current commit has not been tagged with a version. Latest known version is $latest_version."
echo
echo 'What do you want to release?'
PS3='Select the version increment> '
options=("Patch release" "Minor release" "Major release" "Release with a custom version")
select choice in "${options[@]}";
do
select_part "$choice"
break
done
updated_version=$(bumpversion --dry-run --list patch | grep current_version | sed -r s,"^.*=",,)
read -p "Release version $updated_version? [y/N] > " ok
if [[ "$ok" != "y" ]]; then
echo "Release aborted"
exit 1
fi
)
updated_version=$(bumpversion --dry-run --list patch | grep current_version | sed -r s,"^.*=",,)
# Build again to update the version
echo "Build the project for distribution..."
./build.sh
if [[ $tests == 1 ]]; then
./tests/test.sh
fi
echo "[ok] Done"
# Push on Docker Hub
echo
echo "Publishing..."
source ./.dockerimage
$DOCKER push "$IMAGE:latest"
$DOCKER push "$IMAGE:$updated_version"
git push
git push --tags
# Notify on slack
sed "s/USER/${USER^}/" $WORKSPACE/slack.json > $WORKSPACE/.slack.json
sed -i.bak "s/VERSION/$updated_version/" $WORKSPACE/.slack.json
curl -k -X POST --data-urlencode payload@$WORKSPACE/.slack.json https://hbps1.chuv.ch/slack/dev-activity
rm -f $WORKSPACE/.slack.json $WORKSPACE/.slack.json.bak