- deploy from working copy, but…
- make sure that you can deploy only if you committed everything
- make sure that you can deploy only if you pushed everything upstream
- tag the deployed hash
- display changelog (all the commits between two last tags)
Here are some BASH procedures I wrote on the way, if you need them:
make sure that you can deploy only if you committed everything
verifyEverythingIsCommited() { gitCommitStatus=$(git status --porcelain) if [ "$gitCommitStatus" != "" ]; then echo "You have uncommited files." echo "Your git status:" echo $gitCommitStatus echo "Sorry. Rules are rules. Aborting!" exit 1 fi }
make sure that you can deploy only if you pushed everything upstream
verifyEverythingIsPushedToOrigin() { gitPushStatus=$(git cherry -v) if [ "$gitPushStatus" != "" ]; then echo "You have local commits that were NOT pushed." echo "Your 'git cherry -v' status:" echo $gitPushStatus echo "Sorry. Rules are rules. Aborting!" exit 1 fi }
tag the deployed hash Notice: my script takes first parameter as the name of the server to deploy to (this is $1 passed to this procedure). Also notice, that ‘git push’ without the ‘–tags’ does not push your tags.
tagLastCommit() { d=$(date '+%y-%m-%d_%H-%M-%S') git tag "$1_$d" git push --tags }
This creates nice looking tags like these: preprod_12-01-11_15-16-24 prod_12-01-12_10-51-33 test_12-01-11_15-11-10 test_12-01-11_15-53-42
display changelog (all the commits between two last tags)
printChangelog() { echo "This is changelog since last deploy. Send it to the client." twoLastHashesInOneLine=$(git show-ref --tags -s | tail -n 2 | tr "\\n" "-"); twoLastHashesInOneLineWithThreeDots=${twoLastHashesInOneLine/-/...}; twoLastHashesInOneLineWithThreeDotsNoMinusAtTheEnd=$(echo $twoLastHashesInOneLineWithThreeDots | sed 's/-$//'); git log --pretty=oneline --no-merges --abbrev-commit $twoLastHashesInOneLineWithThreeDotsNoMinusAtTheEnd }
The last command gives you a nice log like this: e755c63 deploy: fix for showing changelog from two first tags instead of two last ones 926eb02 pringing changelog between last two tags on deployment 34478b2 added git tagging to deploy