Speed up your CI builds with pre-built Projucers

I keep each one of my plugins in a separate repo. The first step of my CI build is to build the ProJucer so I can resave the .jucer file and create the projects for VS and Xcode, which I don’t check in. When I updated all my plugins I was spending more time building the Projucer than my plugins. So I built a web service to build and cache Projucer builds.

The following URL https://projucer.rabien.com/get_projucer.php?hash=$HASH&os=$OS&key=$APIKEY will return a URL where you can download the Projucer where $HASH is the full git hash of the version you want. $OS is either mac or win and $APIKEY is a key I provide you. You don’t need an apikey to download, just to trigger builds.

If the build is ready on the server it will return the download URL, if it triggers a build it will return BUILDSTARTED. If the build is in progress it will return INPROGRESS. Or it may return an error like INVALID KEY, INVALID PLATFORM or INVALID HASH.

Here is an example how I use it in my build script:

# Get the hash
cd "$ROOT/modules/juce"
HASH=`git rev-parse HEAD`
echo "Hash: $HASH"

# Get the Projucer
cd "$ROOT/ci/bin"
while true
do
  PROJUCER_URL=$(curl -s -S "https://projucer.rabien.com/get_projucer.php?hash=$HASH&os=$OS&key=$APIKEY")
  echo "Response: $PROJUCER_URL"
  if [[ $PROJUCER_URL == http* ]]; then
    curl -s -S $PROJUCER_URL -o "$ROOT/ci/bin/Projucer.zip"
    unzip Projucer.zip
    break
  fi
  sleep 15
done

No guarantees of uptime. I just wrote this yesterday, so it may still have bugs. You may want to hit my server and see if the build is there, and if not, fall back and build it yourself. Email me at roland@rabien.com if you want an API key.

Update: I’ve added a cron job that builds the Projucer for the tip of master and develop every hour, so if you need builds of the Projucer going forward, they should always be there.

6 Likes