From 534c627c28d651baedcb14b65ed60fc2c227677c Mon Sep 17 00:00:00 2001 From: Damon Kohler Date: Tue, 18 Oct 2016 15:42:23 +0200 Subject: [PATCH] Adds Docker caching to Travis. (#72) --- .travis.yml | 15 ++++++++++++++- Dockerfile | 4 +++- scripts/load_docker_cache.sh | 25 +++++++++++++++++++++++++ scripts/save_docker_cache.sh | 28 ++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 2 deletions(-) create mode 100755 scripts/load_docker_cache.sh create mode 100755 scripts/save_docker_cache.sh diff --git a/.travis.yml b/.travis.yml index 01d4b31..0477c90 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,5 +14,18 @@ sudo: required services: docker + +# Cache intermediate Docker layers. For a description of how this works, see: +# https://giorgos.sealabs.net/docker-cache-on-travis-and-docker-112.html +cache: + directories: + - /home/travis/docker/ +env: + global: + - DOCKER_CACHE_FILE=/home/travis/docker/cache.tar.gz +before_install: scripts/load_docker_cache.sh + install: true -script: docker build ${TRAVIS_BUILD_DIR} -t cartographer +script: + - docker build ${TRAVIS_BUILD_DIR} -t cartographer + - scripts/save_docker_cache.sh diff --git a/Dockerfile b/Dockerfile index b5024c0..9180fd5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,9 @@ # limitations under the License. FROM ubuntu:trusty -COPY . cartographer +COPY scripts/install_debs.sh cartographer/scripts/ RUN cartographer/scripts/install_debs.sh && rm -rf /var/lib/apt/lists/* +COPY scripts/install_ceres.sh cartographer/scripts/ RUN cartographer/scripts/install_ceres.sh && rm -rf ceres-solver +COPY . cartographer RUN cartographer/scripts/install_cartographer.sh && rm -rf cartographer diff --git a/scripts/load_docker_cache.sh b/scripts/load_docker_cache.sh new file mode 100755 index 0000000..c4f218d --- /dev/null +++ b/scripts/load_docker_cache.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Copyright 2016 The Cartographer Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Cache intermediate Docker layers. For a description of how this works, see: +# https://giorgos.sealabs.net/docker-cache-on-travis-and-docker-112.html + +set -o errexit +set -o verbose + +if [ -f ${DOCKER_CACHE_FILE} ]; then + gunzip -c ${DOCKER_CACHE_FILE} | docker load; +fi diff --git a/scripts/save_docker_cache.sh b/scripts/save_docker_cache.sh new file mode 100755 index 0000000..d83061b --- /dev/null +++ b/scripts/save_docker_cache.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Copyright 2016 The Cartographer Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Cache intermediate Docker layers. For a description of how this works, see: +# https://giorgos.sealabs.net/docker-cache-on-travis-and-docker-112.html + +set -o errexit +set -o verbose + +if [[ ${TRAVIS_BRANCH} == "master" ]] && + [[ ${TRAVIS_PULL_REQUEST} == "false" ]]; then + mkdir -p $(dirname ${DOCKER_CACHE_FILE}); + docker save $(docker history -q ${DOCKER_REPOSITORY}:${TRAVIS_COMMIT} | + grep -v '') | gzip > ${DOCKER_CACHE_FILE}; +fi