From 6b1e107b1abf1966be5772f8ef0f5f5dca94e4c3 Mon Sep 17 00:00:00 2001 From: Mikhail Glushenkov Date: Fri, 9 Jun 2017 15:34:47 +0200 Subject: [PATCH] Experiment with Travis's build stages. See #4556. --- .travis.yml | 31 ++++++++++++++++++++++++------- travis-precache.sh | 8 ++++++++ 2 files changed, 32 insertions(+), 7 deletions(-) create mode 100755 travis-precache.sh diff --git a/.travis.yml b/.travis.yml index 1b77cec836e..a9410adb3f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -114,13 +114,30 @@ install: # We intentionally do not install anything before trying to build Cabal because # it should build with each supported GHC version out-of-the-box. -# Here starts the actual work to be performed for the package under test; any -# command which exits with a non-zero exit code causes the build to fail. Using -# ./dist/setup/setup here instead of cabal-install to avoid breakage when the -# build config format changed. -script: - - rm -rf dist-newstyle - - ./travis-${SCRIPT}.sh -j2 +# All jobs except 'meta' have two stages; the first stage is used to +# warm up the cache. This is mostly useful when a new compiler gets +# added to the build matrix: work done installing dependencies is not +# wasted when we exceed the time limit for jobs. +jobs: + include: + - stage: prepare cache + env: + # All except 'meta' basically. + - SCRIPT=script + - SCRIPT=solver-debug-flags + - SCRIPT=bootstrap + - SCRIPT=stack + script: ./travis-precache.sh + after_success: skip + - stage: test + # Here starts the actual work to be performed for the package + # under test; any command which exits with a non-zero exit code + # causes the build to fail. Using ./dist/setup/setup here + # instead of cabal-install to avoid breakage when the build + # config format changed. + script: + - rm -rf dist-newstyle + - ./travis-${SCRIPT}.sh -j2 cache: directories: diff --git a/travis-precache.sh b/travis-precache.sh new file mode 100755 index 00000000000..55595d53d7f --- /dev/null +++ b/travis-precache.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +. ./travis-common.sh + +# TODO: Don't build Cabal and hackage-security here, they'll be +# rebuilt anyway. + +timed cabal new-build --only-dependencies cabal-install cabal-tests