The build process for the site is managed by the awesome Grunt task management framework running in Node.JS (if you haven't looked into it, I highly recommend checking it out). I used to use Apache Ant, but I've found the flexibility of Grunt much to my liking.
My personal build flow includes several custom-written tasks. These were primarily created to support a deployment flow that allows me to easily identify deliverable files that have changed and only sync those files to the hosting server (rather than constantantly syncing files because their sources were re-compressed during an optimization step).
When everything for a set of changes looks good and tests out on the staging server, another Grunt task is run to sync only the necessary, changed files to a production files mirror (which is stored in Git) and synced to the live hosting server.
It would be true enough to say that this is a rather complicated build flow for a site of this size. But, with so much of it automated, I can really focus on the site's design and let the build processes let me know if something's getting screwy as I work. In addition, it allows me to minimize unnecessary file uploads and extraneous bloat in the Git repo.