This looks super nice. One thing I've found that really speeds up deploys using git (inspired by github's deploy process[1]), is having your production copies of your app just be a clone of the git repo. To deploy new code the commands that get run are just:
$ git fetch origin
$ git reset --hard origin/<production branch>
A rollback is just:
$ git reset --hard HEAD^
Fetching pulls down the new code, without replacing your production code just yet. Then git reset --hard is a super fast way to point the production server's working copy at the current head of the origin/<production branch>. Saves you the time of having to upload an archive of your entire app the server everytime. However, it also gets complicated if you want to rollback more than one deploy. I've been looking into maybe auto-tagging each deploy and using the tags for rollbacks.
Also, for uploading assets to S3 checkout s3cmd. It has a really nice sync command, that's basically like rsync for s3 --only uploads files that have changed.
$ git fetch origin
$ git reset --hard origin/<production branch>
A rollback is just:
$ git reset --hard HEAD^
Fetching pulls down the new code, without replacing your production code just yet. Then git reset --hard is a super fast way to point the production server's working copy at the current head of the origin/<production branch>. Saves you the time of having to upload an archive of your entire app the server everytime. However, it also gets complicated if you want to rollback more than one deploy. I've been looking into maybe auto-tagging each deploy and using the tags for rollbacks.
Also, for uploading assets to S3 checkout s3cmd. It has a really nice sync command, that's basically like rsync for s3 --only uploads files that have changed.
[1] https://github.com/blog/470-deployment-script-spring-cleanin...