Skip to content

Composer caching proposal

Ben Scholzen edited this page May 8, 2013 · 1 revision

Composer caching proposal

Requirements

  • Speed up loading of dependencies for travis builds
  • Keep dependencies up-to-date

Solution

Integrate a dependency loader script like this one: https://github.com/Bacon/BaconUser/blob/master/.travis/load-vendor.sh

Have a cron job running on the server storing the cache files ever hour (or every 12/24 hours):

#!/bin/bash

branches=( master develop )
workDir=/some/path

for branch in ${branches[@]}
do
    if [ -d "$workDir/zf2.git" ]
    then
        cd "$workDir/zf2.git"
        git fetch
        git checkout $branch
        git pull origin $branch
    else
        git clone git://github.com/zendframework/zf2.git "$workDir/zf2.git"
        cd "$workDir/zf2.git"
        git checkout $branch
    fi

    if [ -f composer.lock ]
    then
        composer update --dev --prefer-source
    else
        composer install --dev --prefer-source
    fi

    jsonChecksum=$(sha1sum composer.json | cut -d' ' -f1)    
    lockChecksum=$(sha1sum composer.lock | cut -d' ' -f1)

    if [ -f "$workDir/$jsonChecksum.cache" ]
    then
        prevLockChechsum=$(cat "$workDir/$jsonChecksum.cache")
    else:
        prevLockChecksum=""
    fi

    if [ ! $lockChecksum -eq $prevLockChecksum ]
    then
        tar -xjf "$workDir/vendor.tgz" vendor
        mv -f "$workDir/vendor.tgz" "$workDir/vendor-$jsonChecksum.tgz"
        echo $lockChecksum > "$workDir/$jsonChecksum.cache"
    fi
done