Add buildkite caching to our verify pipeline.

I'm not sure why we're doing this ourselves instead of using
buildkite's own artifact caching, but that's fine.

This speeds up the "bundle install" phase from ~3m to ~20s.

Signed-off-by: Ryan Davis <zenspider@chef.io>
This commit is contained in:
Ryan Davis 2019-10-22 17:39:04 -07:00
parent c93d61da1c
commit 3cc4b4d0b4

View file

@ -1,10 +1,23 @@
#!/bin/bash #!/bin/bash
set -ueo pipefail set -ue
echo "--- dependencies"
export LANG=C.UTF-8 LANGUAGE=C.UTF-8 export LANG=C.UTF-8 LANGUAGE=C.UTF-8
S3_URL="s3://public-cd-buildkite-cache/${BUILDKITE_PIPELINE_SLUG}/${BUILDKITE_LABEL}"
pull_s3_file() {
aws s3 cp "${S3_URL}/$1" "$1" || echo "Could not pull $1 from S3"
}
push_s3_file() {
if [ -f "$1" ]; then
aws s3 cp "$1" "${S3_URL}/$1" || echo "Could not push $1 to S3 for caching."
fi
}
apt-get update -y apt-get update -y
apt-get install sudo -y apt-get install sudo awscli -y
echo "--- setting up user" echo "--- setting up user"
useradd -m -U --uid 2000 normal useradd -m -U --uid 2000 normal
@ -19,8 +32,25 @@ gem env
bundle --version bundle --version
echo "--- bundle install" echo "--- bundle install"
pull_s3_file "bundle.tar.gz"
pull_s3_file "bundle.sha256"
if [ -f bundle.tar.gz ]; then
tar -xzf bundle.tar.gz
fi
bundle config --local path vendor/bundle
bundle install --jobs=7 --retry=3 --without tools maintenance deploy bundle install --jobs=7 --retry=3 --without tools maintenance deploy
if [[ -f bundle.tar.gz && -f bundle.sha256 ]] && shasum --check bundle.sha256 --status; then
echo "Bundled gems have not changed. Skipping upload to s3"
else
shasum -a 256 vendor/bundle > bundle.sha256
tar -czf bundle.tar.gz vendor/
push_s3_file bundle.tar.gz
push_s3_file bundle.sha256
fi
echo "+++ bundle exec rake" echo "+++ bundle exec rake"
# TODO: run this as non-root: # TODO: run this as non-root:
# chown -R normal:normal /home/normal /workdir # chown -R normal:normal /home/normal /workdir