1 | #!/usr/bin/env bash
|
2 |
|
3 |
|
4 | read -r -d '' purposeMsg <<'EOF'
|
5 | Bumping Auspice version & deploying to Heroku
|
6 |
|
7 | This script attempts to do 9 things. It will exit if any steps fail...
|
8 | (1) checkout master & ensure it is up to date with github
|
9 | (2) increment Version number (in `src/version.js` and `package.json`) by prompting the user
|
10 | (3) add a title with the version number to the CHANGELOG
|
11 | (4) commit to master
|
12 | (5) checkout `release` branch from github (will fail if it exists locally)
|
13 | (6) merge master -> release
|
14 | (7) tag release with new version
|
15 | (8) push release branch to github (this triggers Travis CI to build, upload and trigger Heroku deploy)
|
16 | (9) checkout `master` and remove local `release` branch
|
17 |
|
18 | EOF
|
19 |
|
20 |
|
21 |
|
22 | function errorFound {
|
23 | echo -e "\nScript Failed at step $step (Line $1)\nYou are responsible for clean up (sorry!)"
|
24 | exit 2
|
25 | }
|
26 |
|
27 |
|
28 | trap 'errorFound $LINENO' ERR
|
29 |
|
30 |
|
31 | echo "$purposeMsg"
|
32 | echo -e "\n"
|
33 |
|
34 |
|
35 | if git rev-parse --verify --quiet release
|
36 | then
|
37 | echo "release branch already exists locally - fatal"
|
38 | exit 2
|
39 | fi
|
40 |
|
41 |
|
42 | step="1"
|
43 | git diff-index --quiet HEAD --
|
44 | git checkout master
|
45 | git fetch origin
|
46 | git status -uno | grep "up-to-date\|up to date"
|
47 | git diff-index --quiet HEAD --
|
48 |
|
49 |
|
50 | step="2"
|
51 | packagesVersion=$(grep "\"version\":" package.json | perl -pe 's/.*([0-9]+.[0-9]+.[0-9]+).*/\1/')
|
52 | srcVersion=$(grep "const version" src/version.js | perl -pe 's/.*([0-9]+.[0-9]+.[0-9]+).*/\1/')
|
53 | if [ ${packagesVersion} != ${srcVersion} ]
|
54 | then
|
55 | echo "packages.json version (${packagesVersion}) doesn't match version.js version (${srcVersion}). Fatal."
|
56 | exit 2
|
57 | fi
|
58 | parts=(${srcVersion//./ })
|
59 | bumps=($((${parts[0]}+1)) $((${parts[1]}+1)) $((${parts[2]}+1)))
|
60 | echo -e "\nCurrent version: ${srcVersion}. Is this a major new release (${bumps[0]}.0.0), a feature release (${parts[0]}.${bumps[1]}.0) or a minor fix (${parts[0]}.${parts[1]}.${bumps[2]})?\n"
|
61 | select yn in "major-new-release" "feature-release" "minor-fix"; do
|
62 | case $yn in
|
63 | major-new-release ) msg="major new release"; newVersion="${bumps[0]}.0.0"; break;;
|
64 | feature-release ) msg="feature release"; newVersion="${parts[0]}.${bumps[1]}.0"; break;;
|
65 | minor-fix ) msg="minor fix"; newVersion="${parts[0]}.${parts[1]}.${bumps[2]}"; break;;
|
66 | esac
|
67 | done
|
68 | echo -e "\n"
|
69 |
|
70 | perl -pi -e "s/\"version\": \"${packagesVersion}\"/\"version\": \"${newVersion}\"/" package.json
|
71 | perl -pi -e "s/version = \"${srcVersion}\";/version = \"${newVersion}\";/" src/version.js
|
72 | unset packagesVersion srcVersion parts bumps yn
|
73 |
|
74 |
|
75 | today=$(date +'%Y/%m/%d')
|
76 | echo -e "---\ntitle: Changelog\n---\n\n## version ${newVersion} - ${today}\n\n$(tail -n +4 CHANGELOG.md)" > CHANGELOG.md
|
77 | unset today
|
78 |
|
79 |
|
80 | step="4"
|
81 | git add .
|
82 | git commit -m "version bump to ${newVersion} for release"
|
83 | git push origin master
|
84 | echo -e "Master successfully updated and pushed to github"
|
85 |
|
86 |
|
87 | step="5"
|
88 | git checkout -b release origin/release
|
89 |
|
90 |
|
91 | step="6"
|
92 | git merge --ff-only master
|
93 |
|
94 |
|
95 | step="7"
|
96 | git tag -a v${newVersion} -m "${msg}"
|
97 |
|
98 |
|
99 | step="8"
|
100 | git push --follow-tags origin release
|
101 |
|
102 |
|
103 | step="9"
|
104 | git checkout master
|
105 | git branch -d release
|
106 |
|
107 | echo -e "\nScript completed. $msg (version ${newVersion}) pushed to github:release and github:master\n"
|