Ever had one of those days?
You are not alone!This Saturday 9th March 2019, the GHC devs are going to announce that git://git.haskell.org/ghc.git has been decommissioned. The new official upstream GHC will be https://gitlab.haskell.org/ghc/ghc.
Sadly (for us) this broke ghc-lib
CI's Travis linux configuration.
What does our CI do? The ghc-lib
CI script pulls down the latest GHC sources and builds and tests them as a ghc-lib. The details of the problem are that Travis gives you a broken Ubuntu where cloning the official URL fails with a TLS “handshake error”. More generally, any Travis job that tries to git clone
over the https protocol from a GitLab remote will fail the same way.
This .travis.yml shows a workaround. The idea is to spin up a container before install that doesn’t have this problem and clone from there. The essential bits are:
services:
- docker
# [Why we git clone on linux here]
# At this time, `git clone https://gitlab.haskell.org/ghc/ghc.git`
# from within `CI.hs` does not work on on linux. This appears to be a
# known Travis/ubuntu SSL verification issue. We've tried many less
# drastic workarounds. This grand hack is the only way we've found so
# far that can be made to work.
before_install:
- |
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
docker pull alpine/git
docker run -ti --rm -v ${HOME}:/root -v $(pwd):/git \
alpine/git clone https://gitlab.haskell.org/ghc/ghc.git /git/ghc --recursive
fi
Note, MacOS docker services aren’t supported but that’s OK! The TLS handshake problem doesn’t exhibit in that configuration.
Update : It turns out that while this issue exists in Ubuntu 14.04 which Travis uses by default, it is “fixed” in Ubuntu 16.04. So by writing dist: xenial
in your .travis.yml
file, the above workaround can be avoided.