|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# This script automates the gem release project for this repo. |
| 4 | + |
| 5 | +GEM_NAME=arduino_ci |
| 6 | +GEM_MODULE=ArduinoCI |
| 7 | +PUSH_REMOTE=upstream |
| 8 | + |
| 9 | +# test if we have an arguments on the command line |
| 10 | +if [ $# -lt 1 ] |
| 11 | +then |
| 12 | + echo "You must pass an argument for KeepAChangelogManager:" |
| 13 | + bundle exec keepachangelog_manager.rb |
| 14 | + exit 1 |
| 15 | +fi |
| 16 | + |
| 17 | +# set up a cleanup function for any errors, so that we git stash pop |
| 18 | +cleanup () { |
| 19 | + set +x +e |
| 20 | + echo -e "\n### Reverting uncommitted changes" |
| 21 | + git checkout README.md CHANGELOG.md lib/$GEM_NAME/version.rb |
| 22 | + if [ $DID_STASH -eq 0 ]; then |
| 23 | + echo -e "\n### Unstashing changes" |
| 24 | + git stash pop |
| 25 | + fi |
| 26 | + exit $1 |
| 27 | +} |
| 28 | + |
| 29 | +DIDNT_STASH="No local changes to save" |
| 30 | +DID_STASH=1 |
| 31 | +echo -ne "\n### Stashing changes..." |
| 32 | +STASH_OUTPUT=$(git stash save) |
| 33 | +[ "$DIDNT_STASH" != "$STASH_OUTPUT" ] |
| 34 | +DID_STASH=$? |
| 35 | +echo DID_STASH=$DID_STASH |
| 36 | + |
| 37 | +trap "cleanup 1" INT TERM ERR |
| 38 | +set -xe |
| 39 | + |
| 40 | +echo "### Checking existence of specified git push destination '$PUSH_REMOTE'" |
| 41 | +git remote get-url $PUSH_REMOTE |
| 42 | + |
| 43 | +# ensure latest master |
| 44 | +git pull --rebase |
| 45 | + |
| 46 | +# update version in changelog and save it |
| 47 | +NEW_VERSION=$(bundle exec keepachangelog_manager.rb $@) |
| 48 | + |
| 49 | +echo "Checking whether new version string is a semver" |
| 50 | +echo $NEW_VERSION | grep -Eq ^[0-9]*\.[0-9]*\.[0-9]*$ |
| 51 | + |
| 52 | +# write version.rb with new version |
| 53 | +cat << EOF > lib/$GEM_NAME/version.rb |
| 54 | +module $GEM_MODULE |
| 55 | + VERSION = "$NEW_VERSION".freeze |
| 56 | +end |
| 57 | +EOF |
| 58 | + |
| 59 | +# update README with new version |
| 60 | +sed -e "s/\/gems\/$GEM_NAME\/[0-9]*\.[0-9]*\.[0-9]*)/\/gems\/$GEM_NAME\/$NEW_VERSION)/" -i "" README.md |
| 61 | + |
| 62 | +# mutation! |
| 63 | +git add README.md CHANGELOG.md lib/$GEM_NAME/version.rb |
| 64 | +git commit -m "v$NEW_VERSION bump" |
| 65 | +git tag -a v$NEW_VERSION -m "Released version $NEW_VERSION" |
| 66 | +gem build $GEM_NAME.gemspec |
| 67 | +gem push $GEM_NAME-$NEW_VERSION.gem |
| 68 | +git push $PUSH_REMOTE |
| 69 | +git push $PUSH_REMOTE --tags |
| 70 | +git fetch |
| 71 | + |
| 72 | +# do normal cleanup |
| 73 | +cleanup 0 |
0 commit comments