haskell-ci 0.4 → 0.6
raw patch · 24 files changed
+361/−205 lines, 24 filesdep +network-uridep ~Diffdep ~HsYAMLdep ~ansi-terminalPVP ok
version bump matches the API change (PVP)
Dependencies added: network-uri
Dependency ranges changed: Diff, HsYAML, ansi-terminal, base, base-compat, generic-lens, optparse-applicative
API changes (from Hackage documentation)
- HaskellCI.Sh: instance Control.Monad.Fail.MonadFail HaskellCI.Sh.ShM
+ HaskellCI.Config: [cfgGhcjsTools] :: Config -> ![PackageName]
+ HaskellCI.Config: [cfgGoogleChrome] :: Config -> !Bool
+ HaskellCI.Prelude: class Monad m => MonadFail (m :: Type -> Type)
+ HaskellCI.Prelude: data URI
+ HaskellCI.Prelude: parseURI :: String -> Maybe URI
+ HaskellCI.Prelude: partitionEithers :: () => [Either a b] -> ([a], [b])
+ HaskellCI.Prelude: prettyShow :: Pretty a => a -> String
+ HaskellCI.Prelude: simpleParsec :: Parsec a => String -> Maybe a
+ HaskellCI.Prelude: uriToString :: (String -> String) -> URI -> ShowS
+ HaskellCI.Project: [prjUriPackages] :: Project b a -> [URI]
+ HaskellCI.Travis.Yaml: [taGoogleChrome] :: TravisAddons -> Bool
- HaskellCI.Config: Config :: Maybe Version -> Maybe Jobs -> !Ubuntu -> !TestedWithJobs -> !CopyFields -> [String] -> !Bool -> !Bool -> !Bool -> [Installed] -> !VersionRange -> !VersionRange -> !VersionRange -> !VersionRange -> !VersionRange -> !VersionRange -> !VersionRange -> !Bool -> !Bool -> [String] -> [String] -> Maybe String -> Set Fold -> !Bool -> !Bool -> Map Version String -> !VersionRange -> !Bool -> Set Version -> Set String -> [FilePath] -> !Bool -> !Bool -> !DoctestConfig -> !HLintConfig -> [ConstraintSet] -> [PrettyField ()] -> Config
+ HaskellCI.Config: Config :: Maybe Version -> Maybe Jobs -> !Ubuntu -> !TestedWithJobs -> !CopyFields -> [String] -> !Bool -> !Bool -> !Bool -> [Installed] -> !VersionRange -> !VersionRange -> !VersionRange -> !VersionRange -> !VersionRange -> !VersionRange -> !VersionRange -> !Bool -> ![PackageName] -> !Bool -> [String] -> [String] -> Maybe String -> Set Fold -> !Bool -> !Bool -> !Bool -> Map Version String -> !VersionRange -> !Bool -> Set Version -> Set String -> [FilePath] -> !Bool -> !Bool -> !DoctestConfig -> !HLintConfig -> [ConstraintSet] -> [PrettyField ()] -> Config
- HaskellCI.Prelude: fail :: Monad m => String -> m a
+ HaskellCI.Prelude: fail :: MonadFail m => String -> m a
- HaskellCI.Prelude: infixl 1 <&>
+ HaskellCI.Prelude: infixl 1 &
- HaskellCI.Project: Project :: [a] -> [b] -> [String] -> [String] -> Bool -> Maybe Int -> Optimization -> [SourceRepo] -> [PrettyField ()] -> Project b a
+ HaskellCI.Project: Project :: [a] -> [b] -> [URI] -> [String] -> [String] -> Bool -> Maybe Int -> Optimization -> [SourceRepo] -> [PrettyField ()] -> Project b a
- HaskellCI.Travis.Yaml: TravisAddons :: TravisApt -> Maybe String -> TravisAddons
+ HaskellCI.Travis.Yaml: TravisAddons :: TravisApt -> Maybe String -> Bool -> TravisAddons
Files
- CHANGELOG.md +11/−0
- fixtures/cabal.project.copy-fields.all.travis.yml +28/−16
- fixtures/cabal.project.copy-fields.none.travis.yml +28/−16
- fixtures/cabal.project.copy-fields.some.travis.yml +28/−16
- fixtures/cabal.project.empty-line.travis.yml +28/−16
- fixtures/cabal.project.messy.travis.yml +28/−16
- fixtures/cabal.project.travis-patch.travis.yml +28/−16
- fixtures/haskell-ci.cabal +16/−13
- fixtures/haskell-ci.cabal.stderr +1/−1
- fixtures/haskell-ci.cabal.travis.yml +35/−23
- haskell-ci.cabal +16/−13
- src/HaskellCI.hs +22/−9
- src/HaskellCI/Compiler.hs +1/−2
- src/HaskellCI/Config.hs +11/−4
- src/HaskellCI/Config/Doctest.hs +1/−1
- src/HaskellCI/Glob.hs +1/−1
- src/HaskellCI/List.hs +0/−2
- src/HaskellCI/Prelude.hs +4/−0
- src/HaskellCI/Project.hs +3/−1
- src/HaskellCI/Sh.hs +0/−7
- src/HaskellCI/ShVersionRange.hs +1/−1
- src/HaskellCI/Travis.hs +61/−26
- src/HaskellCI/Travis/Yaml.hs +5/−2
- test/Tests.hs +4/−3
CHANGELOG.md view
@@ -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.
fixtures/cabal.project.copy-fields.all.travis.yml view
@@ -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
fixtures/cabal.project.copy-fields.none.travis.yml view
@@ -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
fixtures/cabal.project.copy-fields.some.travis.yml view
@@ -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
fixtures/cabal.project.empty-line.travis.yml view
@@ -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
fixtures/cabal.project.messy.travis.yml view
@@ -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
fixtures/cabal.project.travis-patch.travis.yml view
@@ -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
fixtures/haskell-ci.cabal view
@@ -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
fixtures/haskell-ci.cabal.stderr view
@@ -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
fixtures/haskell-ci.cabal.travis.yml view
@@ -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"]
haskell-ci.cabal view
@@ -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
src/HaskellCI.hs view
@@ -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" ]
src/HaskellCI/Compiler.hs view
@@ -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
src/HaskellCI/Config.hs view
@@ -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
src/HaskellCI/Config/Doctest.hs view
@@ -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
src/HaskellCI/Glob.hs view
@@ -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
src/HaskellCI/List.hs view
@@ -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
src/HaskellCI/Prelude.hs view
@@ -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
src/HaskellCI/Project.hs view
@@ -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
src/HaskellCI/Sh.hs view
@@ -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
src/HaskellCI/ShVersionRange.hs view
@@ -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 (..))
src/HaskellCI/Travis.hs view
@@ -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
src/HaskellCI/Travis/Yaml.hs view
@@ -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
test/Tests.hs view
@@ -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)