diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,14 @@
+## 0.6
+
+- ghc-options limiting heap size
+- GHCJS tests can be run in simple cases
+- Work around cabal#6214 (haddock failing with `build-type: Custom` packages)
+- Support requesting `google-chrome` addon
+- Nicer `docctest-filter-packages`
+- Buildable with GHC-8.8
+- Record `haskell-ci` version in REGENDATA;
+  warn if older executable is used to `regenerate`
+
 ## 0.4
 
 * Make default `--output` to be `.travis.yml`; use `--stdout` to output to standard output.
diff --git a/fixtures/cabal.project.copy-fields.all.travis.yml b/fixtures/cabal.project.copy-fields.all.travis.yml
--- a/fixtures/cabal.project.copy-fields.all.travis.yml
+++ b/fixtures/cabal.project.copy-fields.all.travis.yml
@@ -69,6 +69,7 @@
 before_install:
   - HC=$(echo "/opt/$CC/bin/ghc" | sed 's/-/\//')
   - WITHCOMPILER="-w $HC"
+  - HADDOCK=$(echo "/opt/$CC/bin/haddock" | sed 's/-/\//')
   - HCPKG="$HC-pkg"
   - unset CC
   - CABAL=/opt/ghc/bin/cabal
@@ -105,21 +106,32 @@
   - HEADHACKAGE=false
   - rm -f $CABALHOME/config
   - |
-    echo "verbose: normal +nowrap +markoutput"          >> $CABALHOME/config
-    echo "remote-build-reporting: anonymous"            >> $CABALHOME/config
-    echo "write-ghc-environment-files: always"          >> $CABALHOME/config
-    echo "remote-repo-cache: $CABALHOME/packages"       >> $CABALHOME/config
-    echo "logs-dir:          $CABALHOME/logs"           >> $CABALHOME/config
-    echo "world-file:        $CABALHOME/world"          >> $CABALHOME/config
-    echo "extra-prog-path:   $CABALHOME/bin"            >> $CABALHOME/config
-    echo "symlink-bindir:    $CABALHOME/bin"            >> $CABALHOME/config
-    echo "installdir:        $CABALHOME/bin"            >> $CABALHOME/config
-    echo "build-summary:     $CABALHOME/logs/build.log" >> $CABALHOME/config
-    echo "store-dir:         $CABALHOME/store"          >> $CABALHOME/config
-    echo "install-dirs user"                            >> $CABALHOME/config
-    echo "  prefix: $CABALHOME"                         >> $CABALHOME/config
-    echo "repository hackage.haskell.org"               >> $CABALHOME/config
-    echo "  url: http://hackage.haskell.org/"           >> $CABALHOME/config
+    echo "verbose: normal +nowrap +markoutput"                                  >> $CABALHOME/config
+    echo "remote-build-reporting: anonymous"                                    >> $CABALHOME/config
+    echo "write-ghc-environment-files: always"                                  >> $CABALHOME/config
+    echo "remote-repo-cache: $CABALHOME/packages"                               >> $CABALHOME/config
+    echo "logs-dir:          $CABALHOME/logs"                                   >> $CABALHOME/config
+    echo "world-file:        $CABALHOME/world"                                  >> $CABALHOME/config
+    echo "extra-prog-path:   $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "symlink-bindir:    $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "installdir:        $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "build-summary:     $CABALHOME/logs/build.log"                         >> $CABALHOME/config
+    echo "store-dir:         $CABALHOME/store"                                  >> $CABALHOME/config
+    echo "install-dirs user"                                                    >> $CABALHOME/config
+    echo "  prefix: $CABALHOME"                                                 >> $CABALHOME/config
+    echo "repository hackage.haskell.org"                                       >> $CABALHOME/config
+    echo "  url: http://hackage.haskell.org/"                                   >> $CABALHOME/config
+    echo "  secure: True"                                                       >> $CABALHOME/config
+    echo "  key-threshold: 3"                                                   >> $CABALHOME/config
+    echo "  root-keys:"                                                         >> $CABALHOME/config
+    echo "    fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0" >> $CABALHOME/config
+    echo "    1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42" >> $CABALHOME/config
+    echo "    2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3" >> $CABALHOME/config
+    echo "    0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d" >> $CABALHOME/config
+    echo "    51f0161b906011b52c6613376b1ae937670da69322113a246a09f807c62f6921" >> $CABALHOME/config
+  - |
+    echo "program-default-options"                >> $CABALHOME/config
+    echo "  ghc-options: $GHCJOBS +RTS -M6G -RTS" >> $CABALHOME/config
   - cat $CABALHOME/config
   - rm -fv cabal.project cabal.project.local cabal.project.freeze
   - travis_retry ${CABAL} v2-update -v
@@ -195,7 +207,7 @@
   - (cd ${PKGDIR_servant_docs} && ${CABAL} -vnormal check)
   - (cd ${PKGDIR_servant_server} && ${CABAL} -vnormal check)
   # haddock...
-  - ${CABAL} v2-haddock $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output
+  - ${CABAL} v2-haddock $WITHCOMPILER --with-haddock $HADDOCK ${TEST} ${BENCH} all | color_cabal_output
   # Building without installed constraints for packages in global-db...
   - rm -f cabal.project.local
   - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks all | color_cabal_output
diff --git a/fixtures/cabal.project.copy-fields.none.travis.yml b/fixtures/cabal.project.copy-fields.none.travis.yml
--- a/fixtures/cabal.project.copy-fields.none.travis.yml
+++ b/fixtures/cabal.project.copy-fields.none.travis.yml
@@ -69,6 +69,7 @@
 before_install:
   - HC=$(echo "/opt/$CC/bin/ghc" | sed 's/-/\//')
   - WITHCOMPILER="-w $HC"
+  - HADDOCK=$(echo "/opt/$CC/bin/haddock" | sed 's/-/\//')
   - HCPKG="$HC-pkg"
   - unset CC
   - CABAL=/opt/ghc/bin/cabal
@@ -105,21 +106,32 @@
   - HEADHACKAGE=false
   - rm -f $CABALHOME/config
   - |
-    echo "verbose: normal +nowrap +markoutput"          >> $CABALHOME/config
-    echo "remote-build-reporting: anonymous"            >> $CABALHOME/config
-    echo "write-ghc-environment-files: always"          >> $CABALHOME/config
-    echo "remote-repo-cache: $CABALHOME/packages"       >> $CABALHOME/config
-    echo "logs-dir:          $CABALHOME/logs"           >> $CABALHOME/config
-    echo "world-file:        $CABALHOME/world"          >> $CABALHOME/config
-    echo "extra-prog-path:   $CABALHOME/bin"            >> $CABALHOME/config
-    echo "symlink-bindir:    $CABALHOME/bin"            >> $CABALHOME/config
-    echo "installdir:        $CABALHOME/bin"            >> $CABALHOME/config
-    echo "build-summary:     $CABALHOME/logs/build.log" >> $CABALHOME/config
-    echo "store-dir:         $CABALHOME/store"          >> $CABALHOME/config
-    echo "install-dirs user"                            >> $CABALHOME/config
-    echo "  prefix: $CABALHOME"                         >> $CABALHOME/config
-    echo "repository hackage.haskell.org"               >> $CABALHOME/config
-    echo "  url: http://hackage.haskell.org/"           >> $CABALHOME/config
+    echo "verbose: normal +nowrap +markoutput"                                  >> $CABALHOME/config
+    echo "remote-build-reporting: anonymous"                                    >> $CABALHOME/config
+    echo "write-ghc-environment-files: always"                                  >> $CABALHOME/config
+    echo "remote-repo-cache: $CABALHOME/packages"                               >> $CABALHOME/config
+    echo "logs-dir:          $CABALHOME/logs"                                   >> $CABALHOME/config
+    echo "world-file:        $CABALHOME/world"                                  >> $CABALHOME/config
+    echo "extra-prog-path:   $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "symlink-bindir:    $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "installdir:        $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "build-summary:     $CABALHOME/logs/build.log"                         >> $CABALHOME/config
+    echo "store-dir:         $CABALHOME/store"                                  >> $CABALHOME/config
+    echo "install-dirs user"                                                    >> $CABALHOME/config
+    echo "  prefix: $CABALHOME"                                                 >> $CABALHOME/config
+    echo "repository hackage.haskell.org"                                       >> $CABALHOME/config
+    echo "  url: http://hackage.haskell.org/"                                   >> $CABALHOME/config
+    echo "  secure: True"                                                       >> $CABALHOME/config
+    echo "  key-threshold: 3"                                                   >> $CABALHOME/config
+    echo "  root-keys:"                                                         >> $CABALHOME/config
+    echo "    fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0" >> $CABALHOME/config
+    echo "    1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42" >> $CABALHOME/config
+    echo "    2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3" >> $CABALHOME/config
+    echo "    0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d" >> $CABALHOME/config
+    echo "    51f0161b906011b52c6613376b1ae937670da69322113a246a09f807c62f6921" >> $CABALHOME/config
+  - |
+    echo "program-default-options"                >> $CABALHOME/config
+    echo "  ghc-options: $GHCJOBS +RTS -M6G -RTS" >> $CABALHOME/config
   - cat $CABALHOME/config
   - rm -fv cabal.project cabal.project.local cabal.project.freeze
   - travis_retry ${CABAL} v2-update -v
@@ -183,7 +195,7 @@
   - (cd ${PKGDIR_servant_docs} && ${CABAL} -vnormal check)
   - (cd ${PKGDIR_servant_server} && ${CABAL} -vnormal check)
   # haddock...
-  - ${CABAL} v2-haddock $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output
+  - ${CABAL} v2-haddock $WITHCOMPILER --with-haddock $HADDOCK ${TEST} ${BENCH} all | color_cabal_output
   # Building without installed constraints for packages in global-db...
   - rm -f cabal.project.local
   - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks all | color_cabal_output
diff --git a/fixtures/cabal.project.copy-fields.some.travis.yml b/fixtures/cabal.project.copy-fields.some.travis.yml
--- a/fixtures/cabal.project.copy-fields.some.travis.yml
+++ b/fixtures/cabal.project.copy-fields.some.travis.yml
@@ -69,6 +69,7 @@
 before_install:
   - HC=$(echo "/opt/$CC/bin/ghc" | sed 's/-/\//')
   - WITHCOMPILER="-w $HC"
+  - HADDOCK=$(echo "/opt/$CC/bin/haddock" | sed 's/-/\//')
   - HCPKG="$HC-pkg"
   - unset CC
   - CABAL=/opt/ghc/bin/cabal
@@ -105,21 +106,32 @@
   - HEADHACKAGE=false
   - rm -f $CABALHOME/config
   - |
-    echo "verbose: normal +nowrap +markoutput"          >> $CABALHOME/config
-    echo "remote-build-reporting: anonymous"            >> $CABALHOME/config
-    echo "write-ghc-environment-files: always"          >> $CABALHOME/config
-    echo "remote-repo-cache: $CABALHOME/packages"       >> $CABALHOME/config
-    echo "logs-dir:          $CABALHOME/logs"           >> $CABALHOME/config
-    echo "world-file:        $CABALHOME/world"          >> $CABALHOME/config
-    echo "extra-prog-path:   $CABALHOME/bin"            >> $CABALHOME/config
-    echo "symlink-bindir:    $CABALHOME/bin"            >> $CABALHOME/config
-    echo "installdir:        $CABALHOME/bin"            >> $CABALHOME/config
-    echo "build-summary:     $CABALHOME/logs/build.log" >> $CABALHOME/config
-    echo "store-dir:         $CABALHOME/store"          >> $CABALHOME/config
-    echo "install-dirs user"                            >> $CABALHOME/config
-    echo "  prefix: $CABALHOME"                         >> $CABALHOME/config
-    echo "repository hackage.haskell.org"               >> $CABALHOME/config
-    echo "  url: http://hackage.haskell.org/"           >> $CABALHOME/config
+    echo "verbose: normal +nowrap +markoutput"                                  >> $CABALHOME/config
+    echo "remote-build-reporting: anonymous"                                    >> $CABALHOME/config
+    echo "write-ghc-environment-files: always"                                  >> $CABALHOME/config
+    echo "remote-repo-cache: $CABALHOME/packages"                               >> $CABALHOME/config
+    echo "logs-dir:          $CABALHOME/logs"                                   >> $CABALHOME/config
+    echo "world-file:        $CABALHOME/world"                                  >> $CABALHOME/config
+    echo "extra-prog-path:   $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "symlink-bindir:    $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "installdir:        $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "build-summary:     $CABALHOME/logs/build.log"                         >> $CABALHOME/config
+    echo "store-dir:         $CABALHOME/store"                                  >> $CABALHOME/config
+    echo "install-dirs user"                                                    >> $CABALHOME/config
+    echo "  prefix: $CABALHOME"                                                 >> $CABALHOME/config
+    echo "repository hackage.haskell.org"                                       >> $CABALHOME/config
+    echo "  url: http://hackage.haskell.org/"                                   >> $CABALHOME/config
+    echo "  secure: True"                                                       >> $CABALHOME/config
+    echo "  key-threshold: 3"                                                   >> $CABALHOME/config
+    echo "  root-keys:"                                                         >> $CABALHOME/config
+    echo "    fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0" >> $CABALHOME/config
+    echo "    1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42" >> $CABALHOME/config
+    echo "    2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3" >> $CABALHOME/config
+    echo "    0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d" >> $CABALHOME/config
+    echo "    51f0161b906011b52c6613376b1ae937670da69322113a246a09f807c62f6921" >> $CABALHOME/config
+  - |
+    echo "program-default-options"                >> $CABALHOME/config
+    echo "  ghc-options: $GHCJOBS +RTS -M6G -RTS" >> $CABALHOME/config
   - cat $CABALHOME/config
   - rm -fv cabal.project cabal.project.local cabal.project.freeze
   - travis_retry ${CABAL} v2-update -v
@@ -189,7 +201,7 @@
   - (cd ${PKGDIR_servant_docs} && ${CABAL} -vnormal check)
   - (cd ${PKGDIR_servant_server} && ${CABAL} -vnormal check)
   # haddock...
-  - ${CABAL} v2-haddock $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output
+  - ${CABAL} v2-haddock $WITHCOMPILER --with-haddock $HADDOCK ${TEST} ${BENCH} all | color_cabal_output
   # Building without installed constraints for packages in global-db...
   - rm -f cabal.project.local
   - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks all | color_cabal_output
diff --git a/fixtures/cabal.project.empty-line.travis.yml b/fixtures/cabal.project.empty-line.travis.yml
--- a/fixtures/cabal.project.empty-line.travis.yml
+++ b/fixtures/cabal.project.empty-line.travis.yml
@@ -73,6 +73,7 @@
 before_install:
   - HC=$(echo "/opt/$CC/bin/ghc" | sed 's/-/\//')
   - WITHCOMPILER="-w $HC"
+  - HADDOCK=$(echo "/opt/$CC/bin/haddock" | sed 's/-/\//')
   - HCPKG="$HC-pkg"
   - unset CC
   - CABAL=/opt/ghc/bin/cabal
@@ -110,21 +111,29 @@
   - if [ $HCNUMVER -gt 80801 ] ; then HEADHACKAGE=true ; fi
   - rm -f $CABALHOME/config
   - |
-    echo "verbose: normal +nowrap +markoutput"          >> $CABALHOME/config
-    echo "remote-build-reporting: anonymous"            >> $CABALHOME/config
-    echo "write-ghc-environment-files: always"          >> $CABALHOME/config
-    echo "remote-repo-cache: $CABALHOME/packages"       >> $CABALHOME/config
-    echo "logs-dir:          $CABALHOME/logs"           >> $CABALHOME/config
-    echo "world-file:        $CABALHOME/world"          >> $CABALHOME/config
-    echo "extra-prog-path:   $CABALHOME/bin"            >> $CABALHOME/config
-    echo "symlink-bindir:    $CABALHOME/bin"            >> $CABALHOME/config
-    echo "installdir:        $CABALHOME/bin"            >> $CABALHOME/config
-    echo "build-summary:     $CABALHOME/logs/build.log" >> $CABALHOME/config
-    echo "store-dir:         $CABALHOME/store"          >> $CABALHOME/config
-    echo "install-dirs user"                            >> $CABALHOME/config
-    echo "  prefix: $CABALHOME"                         >> $CABALHOME/config
-    echo "repository hackage.haskell.org"               >> $CABALHOME/config
-    echo "  url: http://hackage.haskell.org/"           >> $CABALHOME/config
+    echo "verbose: normal +nowrap +markoutput"                                  >> $CABALHOME/config
+    echo "remote-build-reporting: anonymous"                                    >> $CABALHOME/config
+    echo "write-ghc-environment-files: always"                                  >> $CABALHOME/config
+    echo "remote-repo-cache: $CABALHOME/packages"                               >> $CABALHOME/config
+    echo "logs-dir:          $CABALHOME/logs"                                   >> $CABALHOME/config
+    echo "world-file:        $CABALHOME/world"                                  >> $CABALHOME/config
+    echo "extra-prog-path:   $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "symlink-bindir:    $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "installdir:        $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "build-summary:     $CABALHOME/logs/build.log"                         >> $CABALHOME/config
+    echo "store-dir:         $CABALHOME/store"                                  >> $CABALHOME/config
+    echo "install-dirs user"                                                    >> $CABALHOME/config
+    echo "  prefix: $CABALHOME"                                                 >> $CABALHOME/config
+    echo "repository hackage.haskell.org"                                       >> $CABALHOME/config
+    echo "  url: http://hackage.haskell.org/"                                   >> $CABALHOME/config
+    echo "  secure: True"                                                       >> $CABALHOME/config
+    echo "  key-threshold: 3"                                                   >> $CABALHOME/config
+    echo "  root-keys:"                                                         >> $CABALHOME/config
+    echo "    fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0" >> $CABALHOME/config
+    echo "    1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42" >> $CABALHOME/config
+    echo "    2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3" >> $CABALHOME/config
+    echo "    0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d" >> $CABALHOME/config
+    echo "    51f0161b906011b52c6613376b1ae937670da69322113a246a09f807c62f6921" >> $CABALHOME/config
   - |
     if $HEADHACKAGE; then
     echo "allow-newer: $($HCPKG list --simple-output | sed -E 's/([a-zA-Z-]+)-[0-9.]+/*:\1/g')" >> $CABALHOME/config
@@ -136,6 +145,9 @@
     echo "              f76d08be13e9a61a377a85e2fb63f4c5435d40f8feb3e12eb05905edb8cdea89" >> $CABALHOME/config
     echo "   key-threshold: 3"                                                            >> $CABALHOME/config
     fi
+  - |
+    echo "program-default-options"                >> $CABALHOME/config
+    echo "  ghc-options: $GHCJOBS +RTS -M6G -RTS" >> $CABALHOME/config
   - cat $CABALHOME/config
   - rm -fv cabal.project cabal.project.local cabal.project.freeze
   - travis_retry ${CABAL} v2-update -v
@@ -205,7 +217,7 @@
   - (cd ${PKGDIR_servant_docs} && ${CABAL} -vnormal check)
   - (cd ${PKGDIR_servant_server} && ${CABAL} -vnormal check)
   # haddock...
-  - ${CABAL} v2-haddock $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output
+  - ${CABAL} v2-haddock $WITHCOMPILER --with-haddock $HADDOCK ${TEST} ${BENCH} all | color_cabal_output
   # Building without installed constraints for packages in global-db...
   - rm -f cabal.project.local
   - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks all | color_cabal_output
diff --git a/fixtures/cabal.project.messy.travis.yml b/fixtures/cabal.project.messy.travis.yml
--- a/fixtures/cabal.project.messy.travis.yml
+++ b/fixtures/cabal.project.messy.travis.yml
@@ -73,6 +73,7 @@
 before_install:
   - HC=$(echo "/opt/$CC/bin/ghc" | sed 's/-/\//')
   - WITHCOMPILER="-w $HC"
+  - HADDOCK=$(echo "/opt/$CC/bin/haddock" | sed 's/-/\//')
   - HCPKG="$HC-pkg"
   - unset CC
   - CABAL=/opt/ghc/bin/cabal
@@ -110,21 +111,29 @@
   - if [ $HCNUMVER -gt 80801 ] ; then HEADHACKAGE=true ; fi
   - rm -f $CABALHOME/config
   - |
-    echo "verbose: normal +nowrap +markoutput"          >> $CABALHOME/config
-    echo "remote-build-reporting: anonymous"            >> $CABALHOME/config
-    echo "write-ghc-environment-files: always"          >> $CABALHOME/config
-    echo "remote-repo-cache: $CABALHOME/packages"       >> $CABALHOME/config
-    echo "logs-dir:          $CABALHOME/logs"           >> $CABALHOME/config
-    echo "world-file:        $CABALHOME/world"          >> $CABALHOME/config
-    echo "extra-prog-path:   $CABALHOME/bin"            >> $CABALHOME/config
-    echo "symlink-bindir:    $CABALHOME/bin"            >> $CABALHOME/config
-    echo "installdir:        $CABALHOME/bin"            >> $CABALHOME/config
-    echo "build-summary:     $CABALHOME/logs/build.log" >> $CABALHOME/config
-    echo "store-dir:         $CABALHOME/store"          >> $CABALHOME/config
-    echo "install-dirs user"                            >> $CABALHOME/config
-    echo "  prefix: $CABALHOME"                         >> $CABALHOME/config
-    echo "repository hackage.haskell.org"               >> $CABALHOME/config
-    echo "  url: http://hackage.haskell.org/"           >> $CABALHOME/config
+    echo "verbose: normal +nowrap +markoutput"                                  >> $CABALHOME/config
+    echo "remote-build-reporting: anonymous"                                    >> $CABALHOME/config
+    echo "write-ghc-environment-files: always"                                  >> $CABALHOME/config
+    echo "remote-repo-cache: $CABALHOME/packages"                               >> $CABALHOME/config
+    echo "logs-dir:          $CABALHOME/logs"                                   >> $CABALHOME/config
+    echo "world-file:        $CABALHOME/world"                                  >> $CABALHOME/config
+    echo "extra-prog-path:   $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "symlink-bindir:    $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "installdir:        $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "build-summary:     $CABALHOME/logs/build.log"                         >> $CABALHOME/config
+    echo "store-dir:         $CABALHOME/store"                                  >> $CABALHOME/config
+    echo "install-dirs user"                                                    >> $CABALHOME/config
+    echo "  prefix: $CABALHOME"                                                 >> $CABALHOME/config
+    echo "repository hackage.haskell.org"                                       >> $CABALHOME/config
+    echo "  url: http://hackage.haskell.org/"                                   >> $CABALHOME/config
+    echo "  secure: True"                                                       >> $CABALHOME/config
+    echo "  key-threshold: 3"                                                   >> $CABALHOME/config
+    echo "  root-keys:"                                                         >> $CABALHOME/config
+    echo "    fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0" >> $CABALHOME/config
+    echo "    1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42" >> $CABALHOME/config
+    echo "    2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3" >> $CABALHOME/config
+    echo "    0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d" >> $CABALHOME/config
+    echo "    51f0161b906011b52c6613376b1ae937670da69322113a246a09f807c62f6921" >> $CABALHOME/config
   - |
     if $HEADHACKAGE; then
     echo "allow-newer: $($HCPKG list --simple-output | sed -E 's/([a-zA-Z-]+)-[0-9.]+/*:\1/g')" >> $CABALHOME/config
@@ -136,6 +145,9 @@
     echo "              f76d08be13e9a61a377a85e2fb63f4c5435d40f8feb3e12eb05905edb8cdea89" >> $CABALHOME/config
     echo "   key-threshold: 3"                                                            >> $CABALHOME/config
     fi
+  - |
+    echo "program-default-options"                >> $CABALHOME/config
+    echo "  ghc-options: $GHCJOBS +RTS -M6G -RTS" >> $CABALHOME/config
   - cat $CABALHOME/config
   - rm -fv cabal.project cabal.project.local cabal.project.freeze
   - travis_retry ${CABAL} v2-update -v
@@ -199,7 +211,7 @@
   - (cd ${PKGDIR_servant_docs} && ${CABAL} -vnormal check)
   - (cd ${PKGDIR_servant_server} && ${CABAL} -vnormal check)
   # haddock...
-  - ${CABAL} v2-haddock $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output
+  - ${CABAL} v2-haddock $WITHCOMPILER --with-haddock $HADDOCK ${TEST} ${BENCH} all | color_cabal_output
   # Building without installed constraints for packages in global-db...
   - rm -f cabal.project.local
   - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks all | color_cabal_output
diff --git a/fixtures/cabal.project.travis-patch.travis.yml b/fixtures/cabal.project.travis-patch.travis.yml
--- a/fixtures/cabal.project.travis-patch.travis.yml
+++ b/fixtures/cabal.project.travis-patch.travis.yml
@@ -69,6 +69,7 @@
 before_install:
   - HC=$(echo "/opt/$CC/bin/ghc" | sed 's/-/\//')
   - WITHCOMPILER="-w $HC"
+  - HADDOCK=$(echo "/opt/$CC/bin/haddock" | sed 's/-/\//')
   - HCPKG="$HC-pkg"
   - unset CC
   - CABAL=/opt/ghc/bin/cabal
@@ -105,21 +106,32 @@
   - HEADHACKAGE=false
   - rm -f $CABALHOME/config
   - |
-    echo "verbose: normal +nowrap +markoutput"          >> $CABALHOME/config
-    echo "remote-build-reporting: anonymous"            >> $CABALHOME/config
-    echo "write-ghc-environment-files: always"          >> $CABALHOME/config
-    echo "remote-repo-cache: $CABALHOME/packages"       >> $CABALHOME/config
-    echo "logs-dir:          $CABALHOME/logs"           >> $CABALHOME/config
-    echo "world-file:        $CABALHOME/world"          >> $CABALHOME/config
-    echo "extra-prog-path:   $CABALHOME/bin"            >> $CABALHOME/config
-    echo "symlink-bindir:    $CABALHOME/bin"            >> $CABALHOME/config
-    echo "installdir:        $CABALHOME/bin"            >> $CABALHOME/config
-    echo "build-summary:     $CABALHOME/logs/build.log" >> $CABALHOME/config
-    echo "store-dir:         $CABALHOME/store"          >> $CABALHOME/config
-    echo "install-dirs user"                            >> $CABALHOME/config
-    echo "  prefix: $CABALHOME"                         >> $CABALHOME/config
-    echo "repository hackage.haskell.org"               >> $CABALHOME/config
-    echo "  url: http://hackage.haskell.org/"           >> $CABALHOME/config
+    echo "verbose: normal +nowrap +markoutput"                                  >> $CABALHOME/config
+    echo "remote-build-reporting: anonymous"                                    >> $CABALHOME/config
+    echo "write-ghc-environment-files: always"                                  >> $CABALHOME/config
+    echo "remote-repo-cache: $CABALHOME/packages"                               >> $CABALHOME/config
+    echo "logs-dir:          $CABALHOME/logs"                                   >> $CABALHOME/config
+    echo "world-file:        $CABALHOME/world"                                  >> $CABALHOME/config
+    echo "extra-prog-path:   $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "symlink-bindir:    $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "installdir:        $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "build-summary:     $CABALHOME/logs/build.log"                         >> $CABALHOME/config
+    echo "store-dir:         $CABALHOME/store"                                  >> $CABALHOME/config
+    echo "install-dirs user"                                                    >> $CABALHOME/config
+    echo "  prefix: $CABALHOME"                                                 >> $CABALHOME/config
+    echo "repository hackage.haskell.org"                                       >> $CABALHOME/config
+    echo "  url: http://hackage.haskell.org/"                                   >> $CABALHOME/config
+    echo "  secure: True"                                                       >> $CABALHOME/config
+    echo "  key-threshold: 3"                                                   >> $CABALHOME/config
+    echo "  root-keys:"                                                         >> $CABALHOME/config
+    echo "    fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0" >> $CABALHOME/config
+    echo "    1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42" >> $CABALHOME/config
+    echo "    2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3" >> $CABALHOME/config
+    echo "    0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d" >> $CABALHOME/config
+    echo "    51f0161b906011b52c6613376b1ae937670da69322113a246a09f807c62f6921" >> $CABALHOME/config
+  - |
+    echo "program-default-options"                >> $CABALHOME/config
+    echo "  ghc-options: $GHCJOBS +RTS -M6G -RTS" >> $CABALHOME/config
   - cat $CABALHOME/config
   - rm -fv cabal.project cabal.project.local cabal.project.freeze
   - travis_retry ${CABAL} v2-update -v
@@ -168,7 +180,7 @@
   # cabal check...
   - (cd ${PKGDIR_servant} && ${CABAL} -vnormal check)
   # haddock...
-  - ${CABAL} v2-haddock $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output
+  - ${CABAL} v2-haddock $WITHCOMPILER --with-haddock $HADDOCK ${TEST} ${BENCH} all | color_cabal_output
   # Building without installed constraints for packages in global-db...
   - rm -f cabal.project.local
   - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks all | color_cabal_output
diff --git a/fixtures/haskell-ci.cabal b/fixtures/haskell-ci.cabal
--- a/fixtures/haskell-ci.cabal
+++ b/fixtures/haskell-ci.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.2
 name:               haskell-ci
-version:            0.4
+version:            0.6
 synopsis:           Cabal package script generator for Travis-CI
 description:
   Script generator (@haskell-ci@) for [Travis-CI](https://travis-ci.org/) for continuous-integration testing of Haskell Cabal packages.
@@ -30,7 +30,7 @@
 maintainer:         hvr@gnu.org
 category:           Development
 build-type:         Simple
-tested-with:        GHC ==8.6.5 || ==8.4.4 || ==8.2.2
+tested-with:        GHC ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.1
 extra-source-files:
   CHANGELOG.md
   fixtures/cabal.haskell-ci
@@ -112,14 +112,15 @@
     HaskellCI.Travis.Yaml
     HaskellCI.YamlSyntax
 
-  ghc-options:
-    -Wall -Wcompat -Wnoncanonical-monad-instances
-    -Wnoncanonical-monadfail-instances
+  ghc-options:        -Wall -Wcompat -Wnoncanonical-monad-instances
 
+  if impl(ghc <8.8)
+    ghc-options: -Wnoncanonical-monadfail-instances
+
   hs-source-dirs:     src
   default-extensions:
-    BangPatterns
     NoImplicitPrelude
+    BangPatterns
     DeriveAnyClass
     DeriveFoldable
     DeriveFunctor
@@ -136,7 +137,7 @@
     ViewPatterns
 
   build-depends:
-    , base          >=4.10     && <4.13
+    , base          >=4.10     && <4.14
     , bytestring    ^>=0.10.8.1
     , Cabal         ^>=3.0
     , containers    ^>=0.5.7.1 || ^>=0.6.0.1
@@ -156,13 +157,14 @@
   -- other dependencies
   build-depends:
     , aeson                 ^>=1.4.2.0
-    , base-compat           ^>=0.10.5
+    , base-compat           ^>=0.11
     , exceptions            ^>=0.10.0
-    , generic-lens          ^>=1.1.0.0
-    , HsYAML                ^>=0.1.1.3
+    , generic-lens          ^>=1.2.0.0
+    , HsYAML                ^>=0.2.0.0
     , lattices              ^>=2
     , microlens             ^>=0.4.10
-    , optparse-applicative  ^>=0.14.3.0
+    , network-uri           ^>=2.6.1.0
+    , optparse-applicative  ^>=0.15
     , temporary             ^>=1.3
     , unordered-containers  ^>=0.2.10.0
 
@@ -186,10 +188,11 @@
   main-is:          Tests.hs
   hs-source-dirs:   test
   build-depends:
-    , ansi-terminal        ^>=0.8.0.2 || ^>=0.9.1
+    , ansi-terminal        ^>=0.10
     , base
+    , base-compat
     , bytestring
-    , Diff                 ^>=0.3.4
+    , Diff                 ^>=0.4.0
     , directory
     , filepath
     , haskell-ci-internal
diff --git a/fixtures/haskell-ci.cabal.stderr b/fixtures/haskell-ci.cabal.stderr
--- a/fixtures/haskell-ci.cabal.stderr
+++ b/fixtures/haskell-ci.cabal.stderr
@@ -1,2 +1,2 @@
-*INFO* Generating Travis-CI config for testing for GHC versions: ghc-head 8.2.2 8.4.4 8.6.5
+*INFO* Generating Travis-CI config for testing for GHC versions: ghc-head 8.2.2 8.4.4 8.6.5 8.8.1
 *INFO* Also OSX jobs for: 8.4.4 8.6.5
diff --git a/fixtures/haskell-ci.cabal.travis.yml b/fixtures/haskell-ci.cabal.travis.yml
--- a/fixtures/haskell-ci.cabal.travis.yml
+++ b/fixtures/haskell-ci.cabal.travis.yml
@@ -28,6 +28,8 @@
   - rm -rfv $CABALHOME/packages/head.hackage
 matrix:
   include:
+    - compiler: ghc-8.8.1
+      addons: {"apt":{"sources":["hvr-ghc"],"packages":["ghc-8.8.1","cabal-install-3.0"]}}
     - compiler: ghc-8.6.5
       addons: {"apt":{"sources":["hvr-ghc"],"packages":["ghc-8.6.5","cabal-install-3.0"]}}
     - compiler: ghc-8.4.4
@@ -47,6 +49,7 @@
 before_install:
   - HC=$(echo "/opt/$CC/bin/ghc" | sed 's/-/\//')
   - WITHCOMPILER="-w $HC"
+  - HADDOCK=$(echo "/opt/$CC/bin/haddock" | sed 's/-/\//')
   - HCPKG="$HC-pkg"
   - unset CC
   - CABAL=/opt/ghc/bin/cabal
@@ -83,24 +86,32 @@
   - TEST=--enable-tests
   - BENCH=--enable-benchmarks
   - HEADHACKAGE=false
-  - if [ $HCNUMVER -gt 80605 ] ; then HEADHACKAGE=true ; fi
+  - if [ $HCNUMVER -gt 80801 ] ; then HEADHACKAGE=true ; fi
   - rm -f $CABALHOME/config
   - |
-    echo "verbose: normal +nowrap +markoutput"          >> $CABALHOME/config
-    echo "remote-build-reporting: anonymous"            >> $CABALHOME/config
-    echo "write-ghc-environment-files: always"          >> $CABALHOME/config
-    echo "remote-repo-cache: $CABALHOME/packages"       >> $CABALHOME/config
-    echo "logs-dir:          $CABALHOME/logs"           >> $CABALHOME/config
-    echo "world-file:        $CABALHOME/world"          >> $CABALHOME/config
-    echo "extra-prog-path:   $CABALHOME/bin"            >> $CABALHOME/config
-    echo "symlink-bindir:    $CABALHOME/bin"            >> $CABALHOME/config
-    echo "installdir:        $CABALHOME/bin"            >> $CABALHOME/config
-    echo "build-summary:     $CABALHOME/logs/build.log" >> $CABALHOME/config
-    echo "store-dir:         $CABALHOME/store"          >> $CABALHOME/config
-    echo "install-dirs user"                            >> $CABALHOME/config
-    echo "  prefix: $CABALHOME"                         >> $CABALHOME/config
-    echo "repository hackage.haskell.org"               >> $CABALHOME/config
-    echo "  url: http://hackage.haskell.org/"           >> $CABALHOME/config
+    echo "verbose: normal +nowrap +markoutput"                                  >> $CABALHOME/config
+    echo "remote-build-reporting: anonymous"                                    >> $CABALHOME/config
+    echo "write-ghc-environment-files: always"                                  >> $CABALHOME/config
+    echo "remote-repo-cache: $CABALHOME/packages"                               >> $CABALHOME/config
+    echo "logs-dir:          $CABALHOME/logs"                                   >> $CABALHOME/config
+    echo "world-file:        $CABALHOME/world"                                  >> $CABALHOME/config
+    echo "extra-prog-path:   $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "symlink-bindir:    $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "installdir:        $CABALHOME/bin"                                    >> $CABALHOME/config
+    echo "build-summary:     $CABALHOME/logs/build.log"                         >> $CABALHOME/config
+    echo "store-dir:         $CABALHOME/store"                                  >> $CABALHOME/config
+    echo "install-dirs user"                                                    >> $CABALHOME/config
+    echo "  prefix: $CABALHOME"                                                 >> $CABALHOME/config
+    echo "repository hackage.haskell.org"                                       >> $CABALHOME/config
+    echo "  url: http://hackage.haskell.org/"                                   >> $CABALHOME/config
+    echo "  secure: True"                                                       >> $CABALHOME/config
+    echo "  key-threshold: 3"                                                   >> $CABALHOME/config
+    echo "  root-keys:"                                                         >> $CABALHOME/config
+    echo "    fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0" >> $CABALHOME/config
+    echo "    1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42" >> $CABALHOME/config
+    echo "    2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3" >> $CABALHOME/config
+    echo "    0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d" >> $CABALHOME/config
+    echo "    51f0161b906011b52c6613376b1ae937670da69322113a246a09f807c62f6921" >> $CABALHOME/config
   - |
     if $HEADHACKAGE; then
     echo "allow-newer: $($HCPKG list --simple-output | sed -E 's/([a-zA-Z-]+)-[0-9.]+/*:\1/g')" >> $CABALHOME/config
@@ -113,14 +124,15 @@
     echo "   key-threshold: 3"                                                            >> $CABALHOME/config
     fi
   - "echo 'jobs: 2' >> $CABALHOME/config"
+  - GHCJOBS=-j2
   - |
-    echo "program-default-options" >> $CABALHOME/config
-    echo "  ghc-options: -j2"      >> $CABALHOME/config
+    echo "program-default-options"                >> $CABALHOME/config
+    echo "  ghc-options: $GHCJOBS +RTS -M6G -RTS" >> $CABALHOME/config
   - cat $CABALHOME/config
   - rm -fv cabal.project cabal.project.local cabal.project.freeze
   - travis_retry ${CABAL} v2-update -v
   - (cd /tmp && ${CABAL} v2-install $WITHCOMPILER -j2 doctest --constraint='doctest ==0.16.*' | color_cabal_output)
-  - if [ $HCNUMVER -ge 80600 ] && [ $HCNUMVER -lt 80606 ] ; then (cd /tmp && ${CABAL} v2-install $WITHCOMPILER -j2 hlint --constraint='hlint ==2.1.*' | color_cabal_output) ; fi
+  - if [ $HCNUMVER -ge 80800 ] && [ $HCNUMVER -lt 80802 ] ; then (cd /tmp && ${CABAL} v2-install $WITHCOMPILER -j2 hlint --constraint='hlint ==2.1.*' | color_cabal_output) ; fi
   # Generate cabal.project
   - rm -rf cabal.project cabal.project.local cabal.project.freeze
   - touch cabal.project
@@ -178,10 +190,10 @@
   # Testing...
   - ${CABAL} v2-test $WITHCOMPILER ${TEST} ${BENCH} all | color_cabal_output
   # Doctest...
-  - (cd ${PKGDIR_haskell_ci} && doctest --fast -XBangPatterns -XNoImplicitPrelude -XDeriveAnyClass -XDeriveFoldable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XDerivingStrategies -XGeneralizedNewtypeDeriving -XScopedTypeVariables src)
+  - (cd ${PKGDIR_haskell_ci} && doctest --fast -XNoImplicitPrelude -XBangPatterns -XDeriveAnyClass -XDeriveFoldable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XDerivingStrategies -XGeneralizedNewtypeDeriving -XScopedTypeVariables src)
   # HLint..
-  - if [ $HCNUMVER -ge 80600 ] && [ $HCNUMVER -lt 80606 ] ; then (cd ${PKGDIR_haskell_ci} && hlint -h ${TOP}/.hlint.yaml -XBangPatterns -XNoImplicitPrelude -XDeriveAnyClass -XDeriveFoldable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XDerivingStrategies -XGeneralizedNewtypeDeriving -XScopedTypeVariables src) ; fi
-  - if [ $HCNUMVER -ge 80600 ] && [ $HCNUMVER -lt 80606 ] ; then (cd ${PKGDIR_haskell_ci} && hlint -h ${TOP}/.hlint.yaml cli) ; fi
+  - if [ $HCNUMVER -ge 80800 ] && [ $HCNUMVER -lt 80802 ] ; then (cd ${PKGDIR_haskell_ci} && hlint -h ${TOP}/.hlint.yaml -XNoImplicitPrelude -XBangPatterns -XDeriveAnyClass -XDeriveFoldable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XDerivingStrategies -XGeneralizedNewtypeDeriving -XScopedTypeVariables src) ; fi
+  - if [ $HCNUMVER -ge 80800 ] && [ $HCNUMVER -lt 80802 ] ; then (cd ${PKGDIR_haskell_ci} && hlint -h ${TOP}/.hlint.yaml cli) ; fi
   # cabal check...
   - (cd ${PKGDIR_haskell_ci} && ${CABAL} -vnormal check)
   # Building without installed constraints for packages in global-db...
@@ -192,7 +204,7 @@
   # Constraint set deepseq-1.4
   - echo 'Constraint set deepseq-1.4' && echo -en 'travis_fold:start:constraint-sets-deepseq-1.4\\r'
   - if [ $HCNUMVER -lt 80400 ] ; then ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='deepseq ==1.4.*' --constraint='binary installed' all | color_cabal_output ; fi
-  - if [ $HCNUMVER -lt 80400 ] ; then ${CABAL} v2-haddock $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='deepseq ==1.4.*' --constraint='binary installed' all | color_cabal_output ; fi
+  - if [ $HCNUMVER -lt 80400 ] ; then ${CABAL} v2-haddock $WITHCOMPILER --with-haddock $HADDOCK --disable-tests --disable-benchmarks --constraint='deepseq ==1.4.*' --constraint='binary installed' all | color_cabal_output ; fi
   - echo -en 'travis_fold:end:constraint-sets-deepseq-1.4\\r'
 
 # REGENDATA ["--config=cabal.haskell-ci","cabal.project"]
diff --git a/haskell-ci.cabal b/haskell-ci.cabal
--- a/haskell-ci.cabal
+++ b/haskell-ci.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.2
 name:               haskell-ci
-version:            0.4
+version:            0.6
 synopsis:           Cabal package script generator for Travis-CI
 description:
   Script generator (@haskell-ci@) for [Travis-CI](https://travis-ci.org/) for continuous-integration testing of Haskell Cabal packages.
@@ -30,7 +30,7 @@
 maintainer:         hvr@gnu.org
 category:           Development
 build-type:         Simple
-tested-with:        GHC ==8.6.5 || ==8.4.4 || ==8.2.2
+tested-with:        GHC ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.1
 extra-source-files:
   CHANGELOG.md
   fixtures/cabal.haskell-ci
@@ -112,14 +112,15 @@
     HaskellCI.Travis.Yaml
     HaskellCI.YamlSyntax
 
-  ghc-options:
-    -Wall -Wcompat -Wnoncanonical-monad-instances
-    -Wnoncanonical-monadfail-instances
+  ghc-options:        -Wall -Wcompat -Wnoncanonical-monad-instances
 
+  if impl(ghc <8.8)
+    ghc-options: -Wnoncanonical-monadfail-instances
+
   hs-source-dirs:     src
   default-extensions:
-    BangPatterns
     NoImplicitPrelude
+    BangPatterns
     DeriveAnyClass
     DeriveFoldable
     DeriveFunctor
@@ -136,7 +137,7 @@
     ViewPatterns
 
   build-depends:
-    , base          >=4.10     && <4.13
+    , base          >=4.10     && <4.14
     , bytestring    ^>=0.10.8.1
     , Cabal         ^>=3.0
     , containers    ^>=0.5.7.1 || ^>=0.6.0.1
@@ -156,13 +157,14 @@
   -- other dependencies
   build-depends:
     , aeson                 ^>=1.4.2.0
-    , base-compat           ^>=0.10.5
+    , base-compat           ^>=0.11
     , exceptions            ^>=0.10.0
-    , generic-lens          ^>=1.1.0.0
-    , HsYAML                ^>=0.1.1.3
+    , generic-lens          ^>=1.2.0.0
+    , HsYAML                ^>=0.2.0.0
     , lattices              ^>=2
     , microlens             ^>=0.4.10
-    , optparse-applicative  ^>=0.14.3.0
+    , network-uri           ^>=2.6.1.0
+    , optparse-applicative  ^>=0.15
     , temporary             ^>=1.3
     , unordered-containers  ^>=0.2.10.0
 
@@ -186,10 +188,11 @@
   main-is:          Tests.hs
   hs-source-dirs:   test
   build-depends:
-    , ansi-terminal        ^>=0.8.0.2 || ^>=0.9.1
+    , ansi-terminal        ^>=0.10
     , base
+    , base-compat
     , bytestring
-    , Diff                 ^>=0.3.4
+    , Diff                 ^>=0.4.0
     , directory
     , filepath
     , haskell-ci-internal
diff --git a/src/HaskellCI.hs b/src/HaskellCI.hs
--- a/src/HaskellCI.hs
+++ b/src/HaskellCI.hs
@@ -20,7 +20,7 @@
 
 import HaskellCI.Prelude
 
-import Data.List                    (intercalate, isPrefixOf, nub, nubBy, sort, sortBy, (\\))
+import Data.List                    (nubBy, sort, sortBy, (\\))
 import System.Directory             (canonicalizePath, doesDirectoryExist, doesFileExist, makeRelativeToCurrentDirectory, setCurrentDirectory)
 import System.Environment           (getArgs)
 import System.Exit                  (ExitCode (..), exitFailure)
@@ -89,15 +89,22 @@
                 Nothing     -> do
                     hPutStrLn stderr $ "Error: expected REGENDATA line in " ++ fp
                     exitFailure
-                Just argv   -> do
+                Just (mversion, argv) -> do
+                    -- warn if we regenerate using older haskell-ci
+                    for_ mversion $ \version -> for_ (simpleParsec haskellCIVerStr) $ \haskellCIVer ->
+                        when (haskellCIVer < version) $ do
+                            hPutStrLn stderr $ "Regenerating using older haskell-ci-" ++ haskellCIVerStr
+                            hPutStrLn stderr $ "File generated using haskell-ci-" ++ prettyShow version
+
                     (f, opts') <- parseTravis argv
                     doTravis argv f (optionsWithOutputFile newFp <> opts' <> opts)
         CommandTravis f -> doTravis argv0 f opts
   where
-    findArgv :: [String] -> Maybe [String]
+    findArgv :: [String] -> Maybe (Maybe Version, [String])
     findArgv ls = do
         l <- findMaybe (afterInfix "REGENDATA") ls
-        readMaybe l
+        first simpleParsec <$> (readMaybe l :: Maybe (String, [String]))
+            <|> (,) Nothing <$> (readMaybe l :: Maybe [String])
 
     groupedVersions :: [(Version, NonEmpty Version)]
     groupedVersions = map ((\vs -> (head vs, vs)) . NE.sortBy (flip compare))
@@ -154,21 +161,27 @@
             contents <- liftIO $ BS.readFile path
             prj  <- either putStrLnErr return $ parseProjectFile path contents
             prj' <- bitraverse findOptProjectPackage findProjectPackage prj
+            let (uris, pkgs) = partitionEithers $ concat $ prjPackages prj'
             return prj'
-                { prjPackages    = concat $ prjPackages prj' ++ prjOptPackages prj'
+                { prjPackages    = pkgs ++ concat (prjOptPackages prj')
                 , prjOptPackages = []
+                , prjUriPackages = uris
                 }
 
     rootdir = takeDirectory path
 
     -- See findProjectPackages in cabal-install codebase
     -- this is simple variant.
-    findProjectPackage :: String -> m [FilePath]
+    findProjectPackage :: String -> m [Either URI FilePath]
     findProjectPackage pkglocstr = do
-        mfp <- checkisFileGlobPackage pkglocstr `mplusMaybeT`
-               checkIsSingleFilePackage pkglocstr
+        mfp <- fmap3 Right (checkisFileGlobPackage pkglocstr) `mplusMaybeT`
+               fmap3 Right (checkIsSingleFilePackage pkglocstr) `mplusMaybeT`
+               fmap2 (\uri -> [Left uri]) (return $ parseURI pkglocstr)
         maybe (putStrLnErr $ "bad package location: " ++ pkglocstr) return mfp
 
+    fmap2 f = fmap (fmap f)
+    fmap3 f = fmap (fmap (fmap f))
+
     findOptProjectPackage :: String -> m [FilePath]
     findOptProjectPackage pkglocstr = do
         mfp <- checkisFileGlobPackage pkglocstr `mplusMaybeT`
@@ -217,7 +230,7 @@
                 lines (prettyYaml id $ reann (travisHeader (cfgInsertVersion config) argv ++) $ toYaml travis)
                 ++
                 [ ""
-                , "# REGENDATA " ++ show argv
+                , "# REGENDATA " ++ if cfgInsertVersion config then show (haskellCIVerStr, argv) else show argv
                 , "# EOF"
                 ]
 
diff --git a/src/HaskellCI/Compiler.hs b/src/HaskellCI/Compiler.hs
--- a/src/HaskellCI/Compiler.hs
+++ b/src/HaskellCI/Compiler.hs
@@ -24,8 +24,7 @@
 
 import HaskellCI.Prelude
 
-import Data.Set             (Set)
-import Distribution.Version (Version, VersionRange, hasUpperBound, invertVersionRange, mkVersion, versionNumbers, withinRange)
+import Distribution.Version (hasUpperBound, invertVersionRange, versionNumbers, withinRange)
 
 import qualified Data.Set            as S
 import qualified Distribution.Pretty as C
diff --git a/src/HaskellCI/Config.hs b/src/HaskellCI/Config.hs
--- a/src/HaskellCI/Config.hs
+++ b/src/HaskellCI/Config.hs
@@ -6,9 +6,7 @@
 
 import HaskellCI.Prelude
 
-import Distribution.Simple.Utils       (fromUTF8BS)
-import Distribution.Types.Version      (Version)
-import Distribution.Types.VersionRange (VersionRange, anyVersion, noVersion)
+import Distribution.Simple.Utils (fromUTF8BS)
 
 import qualified Data.ByteString                 as BS
 import qualified Data.Map                        as M
@@ -21,6 +19,7 @@
 import qualified Distribution.Parsec             as C
 import qualified Distribution.Parsec.Newtypes    as C
 import qualified Distribution.Pretty             as C
+import qualified Distribution.Types.PackageName  as C
 import qualified Distribution.Types.Version      as C
 import qualified Distribution.Types.VersionRange as C
 import qualified Text.PrettyPrint                as PP
@@ -61,6 +60,7 @@
     , cfgUnconstrainted      :: !VersionRange
     , cfgHeadHackage         :: !VersionRange
     , cfgGhcjsTests          :: !Bool
+    , cfgGhcjsTools          :: ![C.PackageName]
     , cfgCheck               :: !Bool
     , cfgOnlyBranches        :: [String]
     , cfgIrcChannels         :: [String]
@@ -68,6 +68,7 @@
     , cfgFolds               :: S.Set Fold
     , cfgGhcHead             :: !Bool
     , cfgPostgres            :: !Bool
+    , cfgGoogleChrome        :: !Bool
     , cfgEnv                 :: M.Map Version String
     , cfgAllowFailures       :: !VersionRange
     , cfgLastInSeries        :: !Bool
@@ -120,6 +121,7 @@
     , cfgUnconstrainted  = anyVersion
     , cfgHeadHackage     = defaultHeadHackage
     , cfgGhcjsTests      = False
+    , cfgGhcjsTools      = []
     , cfgCheck           = True
     , cfgOnlyBranches    = []
     , cfgIrcChannels     = []
@@ -127,6 +129,7 @@
     , cfgFolds           = S.empty
     , cfgGhcHead         = False
     , cfgPostgres        = False
+    , cfgGoogleChrome    = False
     , cfgEnv             = M.empty
     , cfgAllowFailures   = noVersion
     , cfgLastInSeries    = False
@@ -180,8 +183,10 @@
         ^^^ metahelp "RANGE" "Make unconstrained build"
     <*> rangeField            "head-hackage"                                                  #cfgHeadHackage defaultHeadHackage
         ^^^ metahelp "RANGE" "Use head.hackage repository. Also marks as allow-failures"
-    <*> C.booleanFieldDef "ghcjs-tests"                                                       #cfgGhcjsTests False
+    <*> C.booleanFieldDef     "ghcjs-tests"                                                   #cfgGhcjsTests False
         ^^^ help "Run tests with GHCJS (experimental, relies on cabal-plan finding test-suites)"
+    <*> C.monoidalFieldAla    "ghcjs-tools"               (C.alaList C.FSep)                  #cfgGhcjsTools
+--        ^^^ metahelp "TOOL" "Additional host tools to install with GHCJS"
     <*> C.booleanFieldDef "cabal-check"                                                       #cfgCheck True
         ^^^ help "Disable cabal check run"
     <*> C.monoidalFieldAla    "branches"                  (C.alaList' C.FSep C.Token')        #cfgOnlyBranches
@@ -196,6 +201,8 @@
         ^^^ help "Add ghc-head job"
     <*> C.booleanFieldDef     "postgresql"                                                    #cfgPostgres False
         ^^^ help "Add postgresql service"
+    <*> C.booleanFieldDef     "google-chrome"                                                 #cfgGoogleChrome False
+        ^^^ help "Add google-chrome service"
     <*> C.monoidalFieldAla    "env"                       Env                                 #cfgEnv
         ^^^ metahelp "ENV" "Environment variables per job (e.g. `8.0.2:HADDOCK=false`)"
     <*> C.optionalFieldDefAla "allow-failures"            Range                               #cfgAllowFailures noVersion
diff --git a/src/HaskellCI/Config/Doctest.hs b/src/HaskellCI/Config/Doctest.hs
--- a/src/HaskellCI/Config/Doctest.hs
+++ b/src/HaskellCI/Config/Doctest.hs
@@ -4,7 +4,7 @@
 
 import HaskellCI.Prelude
 
-import Distribution.Version (mkVersion, noVersion, withinVersion)
+import Distribution.Version (withinVersion)
 
 import qualified Distribution.FieldGrammar      as C
 import qualified Distribution.Parsec.Newtypes   as C
diff --git a/src/HaskellCI/Glob.hs b/src/HaskellCI/Glob.hs
--- a/src/HaskellCI/Glob.hs
+++ b/src/HaskellCI/Glob.hs
@@ -3,7 +3,7 @@
 import HaskellCI.Prelude
 
 import Control.Applicative       as App ((<$>))
-import Control.Monad             (filterM, liftM2, void)
+import Control.Monad             (filterM, liftM2)
 import System.Directory          (doesDirectoryExist, getDirectoryContents)
 import System.FilePath.Posix     ((</>))
 import Text.ParserCombinators.ReadP
diff --git a/src/HaskellCI/List.hs b/src/HaskellCI/List.hs
--- a/src/HaskellCI/List.hs
+++ b/src/HaskellCI/List.hs
@@ -7,8 +7,6 @@
 
 import HaskellCI.Prelude
 
-import Control.Monad (ap)
-
 newtype ListBuilder x a = LB { unLB :: forall r. (([x] -> [x]) -> a -> r) -> r }
 
 instance Functor (ListBuilder x) where
diff --git a/src/HaskellCI/Prelude.hs b/src/HaskellCI/Prelude.hs
--- a/src/HaskellCI/Prelude.hs
+++ b/src/HaskellCI/Prelude.hs
@@ -19,6 +19,7 @@
 import Data.ByteString        as X (ByteString)
 import Data.Char              as X (isSpace, isUpper, toLower)
 import Data.Coerce            as X (coerce)
+import Data.Either            as X (partitionEithers)
 import Data.Foldable          as X (for_, toList, traverse_)
 import Data.Function          as X (on)
 import Data.Functor.Identity  as X (Identity (..))
@@ -31,8 +32,11 @@
 import Data.Void              as X (Void)
 import GHC.Generics           as X (Generic)
 import Lens.Micro             as X (mapped, over, (&), (.~), (<&>), (^.), (^..))
+import Network.URI            as X (URI, parseURI, uriToString)
 import Text.Read              as X (readMaybe)
 
+import Distribution.Parsec  as X (simpleParsec)
+import Distribution.Pretty  as X (prettyShow)
 import Distribution.Version as X (Version, VersionRange, anyVersion, mkVersion, noVersion)
 
 import qualified Distribution.Version as C
diff --git a/src/HaskellCI/Project.hs b/src/HaskellCI/Project.hs
--- a/src/HaskellCI/Project.hs
+++ b/src/HaskellCI/Project.hs
@@ -28,6 +28,7 @@
 data Project b a = Project
     { prjPackages     :: [a]
     , prjOptPackages  :: [b]
+    , prjUriPackages  :: [URI]
     , prjConstraints  :: [String]
     , prjAllowNewer   :: [String]
     , prjReorderGoals :: Bool
@@ -47,7 +48,7 @@
         <*> traverse g (prjPackages prj)
 
 emptyProject :: Project b a
-emptyProject = Project [] [] [] [] False Nothing OptimizationOn [] []
+emptyProject = Project [] [] [] [] [] False Nothing OptimizationOn [] []
 
 -- | Parse project file. Extracts only few fields.
 --
@@ -86,6 +87,7 @@
 grammar origFields = Project
     <$> C.monoidalFieldAla "packages"          (C.alaList' C.FSep PackageLocation) #prjPackages
     <*> C.monoidalFieldAla "optional-packages" (C.alaList' C.FSep PackageLocation) #prjOptPackages
+    <*> pure []
     <*> C.monoidalFieldAla "constraints"       (C.alaList' C.CommaVCat NoCommas)   #prjConstraints
     <*> C.monoidalFieldAla "allow-newer"       (C.alaList' C.CommaVCat NoCommas)   #prjAllowNewer
     <*> C.booleanFieldDef  "reorder-goals"                                         #prjReorderGoals False
diff --git a/src/HaskellCI/Sh.hs b/src/HaskellCI/Sh.hs
--- a/src/HaskellCI/Sh.hs
+++ b/src/HaskellCI/Sh.hs
@@ -19,8 +19,6 @@
 import qualified ShellCheck.Interface  as SC
 #endif
 
-import qualified Control.Monad.Fail as Fail
-
 import HaskellCI.MonadErr
 
 -------------------------------------------------------------------------------
@@ -104,11 +102,6 @@
         (shs1, x) <- unShM m     shs0
         (shs2, y) <- unShM (k x) shs1
         return (shs2, y)
-
-    fail = Fail.fail
-
-instance Fail.MonadFail ShM where
-    fail = throwErr . ShError
 
 instance MonadErr ShError ShM where
     throwErr err = ShM $ \_ -> Left err
diff --git a/src/HaskellCI/ShVersionRange.hs b/src/HaskellCI/ShVersionRange.hs
--- a/src/HaskellCI/ShVersionRange.hs
+++ b/src/HaskellCI/ShVersionRange.hs
@@ -4,7 +4,7 @@
 
 import HaskellCI.Prelude
 
-import Algebra.Lattice (bottom, top, joins)
+import Algebra.Lattice (joins)
 import Algebra.Heyting.Free (Free (..))
 import Algebra.Lattice.Wide (Wide (..))
 
diff --git a/src/HaskellCI/Travis.hs b/src/HaskellCI/Travis.hs
--- a/src/HaskellCI/Travis.hs
+++ b/src/HaskellCI/Travis.hs
@@ -126,6 +126,9 @@
         shForJob RangeGHCJS "HC=${HC}js"
         shForJob RangeGHCJS "WITHCOMPILER=\"--ghcjs ${WITHCOMPILER}js\""
 
+        -- Needed to work around haskell/cabal#6214
+        sh "HADDOCK=$(echo \"/opt/$CC/bin/haddock\" | sed 's/-/\\//')"
+
         -- Hack: happy needs ghc. Let's install version matching GHCJS.
         -- At the moment, there is only GHCJS-8.4, so we install GHC-8.4.4
         when anyGHCJS $ do
@@ -210,6 +213,14 @@
             , "  prefix: $CABALHOME"
             , "repository hackage.haskell.org"
             , "  url: http://hackage.haskell.org/"
+            , "  secure: True"
+            , "  key-threshold: 3"
+            , "  root-keys:"
+            , "    fe331502606802feac15e514d9b9ea83fee8b6ffef71335479a2e68d84adc6b0"
+            , "    1ea9ba32c526d1cc91ab5e5bd364ec5e9e8cb67179a471872f6e26f0ae773d42"
+            , "    2c6c3627bd6c982990239487f1abd02e08a02e6cf16edb105a8012d444d870c3"
+            , "    0a5c7ea47cd1b15f01f5f51a33adda7e655bc0f0b0615baa8e271f4c3351e21d"
+            , "    51f0161b906011b52c6613376b1ae937670da69322113a246a09f807c62f6921"
             ]
 
         -- Add head.hackage repository to ~/.cabal/config
@@ -234,12 +245,13 @@
         for_ (cfgJobs >>= cabalJobs) $ \n ->
             sh $ "echo 'jobs: " ++ show n ++ "' >> $CABALHOME/config"
 
-        -- GHC jobs
+        -- GHC jobs + ghc-options
         for_ (cfgJobs >>= ghcJobs) $ \m -> do
-            catForJob (Range $ C.orLaterVersion (C.mkVersion [7,8])) "$CABALHOME/config"
-                [ "program-default-options"
-                , "  ghc-options: -j" ++ show m
-                ]
+            shForJob (Range $ C.orLaterVersion (C.mkVersion [7,8])) $ "GHCJOBS=-j" ++ show m
+        cat "$CABALHOME/config"
+            [ "program-default-options"
+            , "  ghc-options: $GHCJOBS +RTS -M6G -RTS"
+            ]
 
         sh "cat $CABALHOME/config"
 
@@ -264,10 +276,13 @@
         when (cfgHLintEnabled cfgHLint) $ shForJob (hlintJobVersionRange versions cfgHeadHackage (cfgHLintJob cfgHLint)) $
             cabalInTmp $ "v2-install $WITHCOMPILER -j2 hlint" ++ hlintVersionConstraint
 
-        when (anyGHCJS && cfgGhcjsTests) $ shForJob RangeGHCJS $ cabalInTmp "v2-install -w ghc-8.4.4 cabal-plan"
+        -- Install cabal-plan (for ghcjs tests)
+        when (anyGHCJS && cfgGhcjsTests) $ do
+            shForJob RangeGHCJS $ cabalInTmp "v2-install -w ghc-8.4.4 cabal-plan --constraint='cabal-plan ^>=0.6.0.0' --constraint='cabal-plan +exe'"
 
         -- Install happy
-        when anyGHCJS $ shForJob RangeGHCJS $ cabalInTmp "v2-install -w ghc-8.4.4 happy"
+        when anyGHCJS $ for_ cfgGhcjsTools $ \t ->
+            shForJob RangeGHCJS $ cabalInTmp $ "v2-install -w ghc-8.4.4 " ++ C.prettyShow t
 
         -- create cabal.project file
         generateCabalProject False
@@ -310,6 +325,17 @@
 
             generateCabalProject True
 
+            when (anyGHCJS && cfgGhcjsTests) $ sh $ unlines $
+                [ "pkgdir() {"
+                , "  case $1 in"
+                ] ++
+                [ "    " ++ pkgName ++ ") echo " ++ pkgNameDirVariable pkgName ++ " ;;"
+                | Pkg{pkgName} <- pkgs
+                ] ++
+                [ "  esac"
+                , "}"
+                ]
+
         -- build no-tests no-benchmarks
         unless (equivVersionRanges C.noVersion cfgNoTestsNoBench) $ foldedSh FoldBuild "Building..." cfgFolds $ do
             comment "this builds all libraries and executables (without tests/benchmarks)"
@@ -325,24 +351,21 @@
             shForJob (RangeGHC /\ Range (cfgTests /\ cfgRunTests) /\ hasTests) $
                 cabal "v2-test $WITHCOMPILER ${TEST} ${BENCH} all"
 
-            when cfgGhcjsTests $ shForJob (RangeGHCJS /\ hasTests)
-                "for testexe in $(cabal-plan list-bins '*:test:*' | awk '{ print $2 }'); do echo $testexe; nodejs ${testexe}.jsexe/all.js; done"
+            when cfgGhcjsTests $ shForJob (RangeGHCJS /\ hasTests) $ unwords
+                [ "cabal-plan list-bins '*:test:*' | while read -r line; do"
+                , "testpkg=$(echo \"$line\" | perl -pe 's/:.*//');"
+                , "testexe=$(echo \"$line\" | awk '{ print $2 }');"
+                , "echo \"testing $textexe in package $textpkg\";"
+                , "(cd \"$(pkgdir $testpkg)\" && nodejs \"$testexe\".jsexe/all.js);"
+                , "done"
+                ]
 
         -- doctest
         when doctestEnabled $ foldedSh FoldDoctest "Doctest..." cfgFolds $ do
             let doctestOptions = unwords $ cfgDoctestOptions cfgDoctest
             unless (null $ cfgDoctestFilterPkgs cfgDoctest) $ do
-                sh $ unlines $ concat
-                    [ [ "for ghcenv in .ghc.environment.*; do"
-                      , "mv $ghcenv ghcenv;"
-                      ]
-                    , cfgDoctestFilterPkgs cfgDoctest <&> \pn ->
-                        "grep -vE '^package-id " ++ C.unPackageName pn ++ "-([0-9]+(\\.[0-9]+)*)-' ghcenv > ghcenv.tmp; mv ghcenv.tmp ghcenv;"
-                    , [ "mv ghcenv $ghcenv;"
-                      , "cat $ghcenv;"
-                      , "done"
-                      ]
-                    ]
+                let filterPkgs = intercalate "|" $ map C.unPackageName $ cfgDoctestFilterPkgs cfgDoctest
+                sh $ "perl -i -e 'while (<ARGV>) { print unless /package-id\\s+(" ++ filterPkgs ++ ")-\\d+(\\.\\d+)*/; }' .ghc.environment.*"
             for_ pkgs $ \Pkg{pkgName,pkgGpd,pkgJobs} -> do
                 for_ (doctestArgs pkgGpd) $ \args -> do
                     let args' = unwords args
@@ -378,7 +401,7 @@
         -- haddock
         when (hasLibrary && not (equivVersionRanges C.noVersion cfgHaddock)) $
             foldedSh FoldHaddock "haddock..." cfgFolds $
-                shForJob (RangeGHC /\ Range cfgHaddock) $ cabal "v2-haddock $WITHCOMPILER ${TEST} ${BENCH} all"
+                shForJob (RangeGHC /\ Range cfgHaddock) $ cabal $ "v2-haddock $WITHCOMPILER " ++ withHaddock ++ " ${TEST} ${BENCH} all"
 
         -- unconstained build
         -- Have to build last, as we remove cabal.project.local
@@ -406,7 +429,7 @@
                     when (csRunTests cs) $
                         shForCs $ cabal $ "v2-test $WITHCOMPILER " ++ allFlags ++ " all"
                     when (csHaddock cs) $
-                        shForCs $ cabal $ "v2-haddock $WITHCOMPILER " ++ allFlags ++ " all"
+                        shForCs $ cabal $ "v2-haddock $WITHCOMPILER " ++ withHaddock ++ " " ++ allFlags ++ " all"
 
     -- assemble travis configuration
     return Travis
@@ -439,8 +462,9 @@
         , travisServices      = buildList $ do
             when cfgPostgres $ item "postgresql"
         , travisAddons        = TravisAddons
-            { taApt      = TravisApt [] []
-            , taPostgres = if cfgPostgres then Just "10" else Nothing
+            { taApt          = TravisApt [] []
+            , taPostgres     = if cfgPostgres then Just "10" else Nothing
+            , taGoogleChrome = cfgGoogleChrome
             }
         , travisMatrix        = TravisMatrix
             { tmInclude = buildList $ do
@@ -464,7 +488,9 @@
                                     { taPackages = addGvs $ ("cabal-install-" ++ cvs) : S.toList cfgApt
                                     , taSources  = ["hvr-ghc"]
                                     }
-                                , taPostgres = Nothing
+
+                                , taPostgres     = Nothing
+                                , taGoogleChrome = False
                                 }
                             }
 
@@ -484,6 +510,7 @@
         }
   where
     pkgs = prjPackages prj
+    uris = prjUriPackages prj
     projectName = fromMaybe (pkgName $ Prelude.head pkgs) cfgProjectName
 
     justIf True x  = Just x
@@ -558,10 +585,14 @@
     shForJob :: CompilerRange -> String -> ShM ()
     shForJob vr cmd = maybe (pure ()) sh (forJob vr cmd)
 
-    catForJob vr fp contents = shForJob vr (catCmd Double fp contents)
+    -- catForJob vr fp contents = shForJob vr (catCmd Double fp contents)
 
     generateCabalProjectFields :: Bool -> [C.PrettyField ()]
     generateCabalProjectFields dist = buildList $ do
+        -- generate package fields for URI packages.
+        for_ uris $ \uri ->
+            item $ C.PrettyField () "packages" $ PP.text $ uriToString id uri ""
+
         -- copy files from original cabal.project
         case cfgCopyFields of
             CopyFieldsNone -> pure ()
@@ -650,6 +681,10 @@
 
         sh "cat cabal.project || true"
         sh "cat cabal.project.local || true"
+
+    -- Needed to work around haskell/cabal#6214
+    withHaddock :: String
+    withHaddock = "--with-haddock $HADDOCK"
 
 pkgNameDirVariable' :: String -> String
 pkgNameDirVariable' n = "PKGDIR_" ++ map f n where
diff --git a/src/HaskellCI/Travis/Yaml.hs b/src/HaskellCI/Travis/Yaml.hs
--- a/src/HaskellCI/Travis/Yaml.hs
+++ b/src/HaskellCI/Travis/Yaml.hs
@@ -77,8 +77,9 @@
   deriving Show
 
 data TravisAddons = TravisAddons
-    { taApt      :: TravisApt
-    , taPostgres :: Maybe String
+    { taApt          :: TravisApt
+    , taPostgres     :: Maybe String
+    , taGoogleChrome :: Bool
     }
   deriving Show
 
@@ -214,6 +215,8 @@
         -- no apt on purpose
         for_ taPostgres $ \p ->
             item $ "postgresql" ~> fromString p
+        when taGoogleChrome $
+            item $ "google" ~> fromString "stable"
 
 -------------------------------------------------------------------------------
 -- ToJSON
diff --git a/test/Tests.hs b/test/Tests.hs
--- a/test/Tests.hs
+++ b/test/Tests.hs
@@ -1,15 +1,16 @@
 {-# LANGUAGE ViewPatterns #-}
 module Main (main) where
 
+import Prelude ()
+import Prelude.Compat
+
 import HaskellCI             hiding (main)
 import HaskellCI.Diagnostics (runDiagnosticsT)
 
-import Control.Applicative        ((<$>), (<*>))
 import Control.Exception          (ErrorCall (..), throwIO)
-import Data.Algorithm.Diff        (Diff (..), getGroupedDiff)
+import Data.Algorithm.Diff        (PolyDiff (..), getGroupedDiff)
 import Data.List                  (stripPrefix)
 import Data.Maybe                 (mapMaybe)
-import Data.Monoid                (mconcat)
 import System.Directory           (doesFileExist, setCurrentDirectory)
 import System.FilePath            (addExtension)
 import Test.Tasty                 (TestName, TestTree, defaultMain, testGroup)
