I found a couple of issues when I implemented the above answer, which are updated here:
#!/bin/bash
curl -o lastBuild.tmp "http://localhost:8111/app/rest/buildTypes/id:%system.teamcity.buildType.id%/builds/status:SUCCESS" --user rest:rest
last_commit=`xpath lastBuild.tmp '/build/revisions/revision/@version'| awk -F"\"" '{print $2}'`
git log --pretty=format:"- %%s" $last_commit..origin/master > changes.txt
Some more detailed things:
- Use
curl
to fetch the last successful build from your build configuration. You can use teamcity's substitution to put in the build id.
Note that the curl command relies on having a TeamCity user called rest, with a password "rest". Suggest changing the password.
Use XPath/AWK to parse the XML response and get the last git version
Use git log
to get all changes form last build and format them anyway you want. I wanted to just get the commit descriptions and write them to a file. You'll need to make sure the file goes away between builds by setting up git to clean in-between. NB: If you're building off of anything other than master, you'll need the right branch spec here.
Note that the git log
format option uses %, which is the teamcity substitution marker, and thus needs to be escaped as %%.
You need to do configure TeamCity to make the .git directory accessible. See Using git commands in a TeamCity Build Step
The changes are now in the changes.txt file. In my application (editor improving question) I used this file to submit to crashlytics for an iOS beta distribution.