Skip to content

Commit e7cc74a

Browse files
authored
Merge pull request #245 from haskell-CI/issues-182-236
Fix #182 and #236
2 parents 6a94361 + 66dfee8 commit e7cc74a

10 files changed

+70
-48
lines changed

.travis.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ script:
147147

148148
# build & run tests, build benchmarks
149149
- ${CABAL} new-build -w ${HC} ${TEST} ${BENCH} all
150-
- if [ "x$TEST" = "x--enable-tests" ]; then ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all; fi
150+
- ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all
151151

152152
# doctest
153153
- (cd haskell-ci-* && doctest --fast -XDeriveFoldable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable src)
@@ -164,11 +164,10 @@ script:
164164

165165
# Constraint sets
166166
- rm -rf cabal.project.local
167-
168167
# Constraint set deepseq-1.4
169168
- echo Constraint set deepseq-1.4 && echo -en 'travis_fold:start:constraint-sets-deepseq-1.4\\r'
170-
- if [ $HCNUMVER -ge 70800 ] && [ $HCNUMVER -lt 71000 ] || [ $HCNUMVER -eq 80202 ] ; then ${CABAL} new-build -w ${HC} --disable-tests --disable-benchmarks --constraint='deepseq ==1.4.*' all ; fi
171-
169+
- if [ $HCNUMVER -ge 70800 ] && [ $HCNUMVER -lt 71000 ] || [ $HCNUMVER -eq 80202 ] ; then ${CABAL} v2-build -w ${HC} --disable-tests --disable-benchmarks --constraint='deepseq ==1.4.*' --constraint='binary installed' all ; fi
170+
- if [ $HCNUMVER -ge 70800 ] && [ $HCNUMVER -lt 71000 ] || [ $HCNUMVER -eq 80202 ] ; then ${CABAL} v2-haddock -w ${HC} --disable-tests --disable-benchmarks --constraint='deepseq ==1.4.*' --constraint='binary installed' all ; fi
172171
- echo -en 'travis_fold:end:constraint-sets-deepseq-1.4\\r'
173172

174173
# REGENDATA ["--output=.travis.yml","--config=cabal.haskell-ci","haskell-ci.cabal"]

cabal.haskell-ci

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,19 @@ ghc-head: True
1212
-- remove cabal noise from test output
1313
-- cabal-noise: False
1414

15+
-- Build tests. In addition to True and False you may specify
16+
-- a version range, e.g. >= 8.0 to build tests only in some jobs.
17+
tests: True
18+
19+
-- Run tests. Note that only built tests are run. Accepts booleans or version range.
20+
run-tests: True
21+
22+
-- Build benchmarks. There are no way to run benchmarks. Accepts booleans or version range.
23+
benchmarks: True
24+
25+
-- Build haddocks. Accepts booleans or version range.
26+
haddock: True
27+
1528
-- Run cabal check
1629
-- cabal-check: True
1730

@@ -60,6 +73,17 @@ osx: 8.4.4
6073
constraint-set deepseq-1.4
6174
ghc: (>= 7.8 && <7.10) || == 8.2.2
6275
constraints: deepseq ==1.4.*
76+
constraints: binary installed
77+
78+
-- Constraint sets accept booleans for few steps, as the main script
79+
-- Defaults are False.
80+
-- These fields don't accept version ranges: you should rather create
81+
-- another constraint set.
82+
83+
-- tests: False
84+
-- run-tests: False
85+
-- benchmarks: False
86+
haddock: True
6387

6488
-- Copy over additional properties specified in a cabal.project file.
6589
-- Possible values are:

fixtures/cabal.project.copy-fields.all.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ script:
148148

149149
# build & run tests, build benchmarks
150150
- ${CABAL} new-build -w ${HC} ${TEST} ${BENCH} all
151-
- if [ "x$TEST" = "x--enable-tests" ]; then ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all; fi
151+
- ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all
152152

153153
# cabal check
154154
- (cd servant-* && ${CABAL} check)

fixtures/cabal.project.copy-fields.none.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ script:
138138

139139
# build & run tests, build benchmarks
140140
- ${CABAL} new-build -w ${HC} ${TEST} ${BENCH} all
141-
- if [ "x$TEST" = "x--enable-tests" ]; then ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all; fi
141+
- ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all
142142

143143
# cabal check
144144
- (cd servant-* && ${CABAL} check)

fixtures/cabal.project.copy-fields.some.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ script:
144144

145145
# build & run tests, build benchmarks
146146
- ${CABAL} new-build -w ${HC} ${TEST} ${BENCH} all
147-
- if [ "x$TEST" = "x--enable-tests" ]; then ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all; fi
147+
- ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all
148148

149149
# cabal check
150150
- (cd servant-* && ${CABAL} check)

fixtures/cabal.project.empty-line.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ script:
168168

169169
# build & run tests, build benchmarks
170170
- ${CABAL} new-build -w ${HC} ${TEST} ${BENCH} all
171-
- if [ "x$TEST" = "x--enable-tests" ]; then ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all; fi
171+
- ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all
172172

173173
# cabal check
174174
- (cd servant-* && ${CABAL} check)

fixtures/cabal.project.messy.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ script:
162162

163163
# build & run tests, build benchmarks
164164
- ${CABAL} new-build -w ${HC} ${TEST} ${BENCH} all
165-
- if [ "x$TEST" = "x--enable-tests" ]; then ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all; fi
165+
- ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all
166166

167167
# cabal check
168168
- (cd servant-* && ${CABAL} check)

src/HaskellCI.hs

Lines changed: 26 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -659,20 +659,17 @@ genTravisFromConfigs argv opts isCabalProject config prj@Project { prjPackages =
659659
]
660660

661661
-- cabal new-test fails if there are no test-suites.
662-
when hasTests $
663-
foldedTellStrLns FoldTest "Testing..." folds $ tellStrLns
664-
[ sh $ mconcat
665-
[ "if [ \"x$TEST\" = \"x--enable-tests\" ]; then "
666-
, if cfgNoise config
667-
then "${CABAL} "
668-
else "(set -o pipefail; ${CABAL} -vnormal+nowrap+markoutput "
669-
, "new-test -w ${HC} ${TEST} ${BENCH} all"
670-
, if cfgNoise config
671-
then ""
672-
else " 2>&1 | sed '/^-----BEGIN CABAL OUTPUT-----$/,/^-----END CABAL OUTPUT-----$/d' )"
673-
, "; fi"
674-
]
662+
when hasTests $ foldedTellStrLns FoldTest "Testing..." folds $ tellStrLns
663+
[ shForJob versions' (C.intersectVersionRanges (cfgTests config) (cfgRunTests config)) $ mconcat
664+
[ if cfgNoise config
665+
then "${CABAL} "
666+
else "(set -o pipefail; ${CABAL} -vnormal+nowrap+markoutput "
667+
, "new-test -w ${HC} ${TEST} ${BENCH} all"
668+
, if cfgNoise config
669+
then ""
670+
else " 2>&1 | sed '/^-----BEGIN CABAL OUTPUT-----$/,/^-----END CABAL OUTPUT-----$/d' )"
675671
]
672+
]
676673

677674
tellStrLns [""]
678675

@@ -727,21 +724,6 @@ genTravisFromConfigs argv opts isCabalProject config prj@Project { prjPackages =
727724
, ""
728725
]
729726

730-
unless (null colls) $
731-
foldedTellStrLns FoldStackage "Stackage builds..." folds $ tellStrLnsRaw
732-
[ " # try building & testing for package collections"
733-
, " - for COLL in \"${COLLS[@]}\"; do"
734-
, " echo \"== collection $COLL ==\";"
735-
, " ghc-travis collection ${COLL} > /dev/null || break;"
736-
, " ghc-travis collection ${COLL} | " ++ pkgFilter ++ " > cabal.project.freeze;"
737-
, " grep ' collection-id' cabal.project.freeze;"
738-
, " rm -rf dist-newstyle/;"
739-
, " ${CABAL} new-build -w ${HC} ${TEST} ${BENCH} all || break;"
740-
, " if [ \"x$TEST\" = \"x--enable-tests\" ]; then ${CABAL} new-test -w ${HC} ${TEST} ${BENCH} all || break; fi;"
741-
, " done"
742-
, ""
743-
]
744-
745727
-- Have to build last, as we remove cabal.project.local
746728
unless (equivVersionRanges noVersion $ cfgUnconstrainted config) $ foldedTellStrLns FoldBuildInstalled
747729
"Building without installed constraints for packages in global-db..." folds $ tellStrLns
@@ -757,18 +739,25 @@ genTravisFromConfigs argv opts isCabalProject config prj@Project { prjPackages =
757739
tellStrLns
758740
[ comment "Constraint sets"
759741
, sh "rm -rf cabal.project.local"
760-
, ""
761742
]
762743
forM_ constraintSets $ \cs -> do
763744
let name = csName cs
764-
let constraintFlags = concatMap (\x -> " --constraint='" ++ x ++ "'") (csConstraints cs)
765-
let cmd | csRunTests cs = "${CABAL} new-test -w ${HC} --enable-tests --enable-benchmarks"
766-
| otherwise = "${CABAL} new-build -w ${HC} --disable-tests --disable-benchmarks"
767745
tellStrLns [ comment $ "Constraint set " ++ name ]
746+
747+
let shForCs = shForJob versions' (csGhcVersions cs)
748+
let testFlag = if csTests cs then "--enable-tests" else "--disable-tests"
749+
let benchFlag = if csBenchmarks cs then "--enable-benchmarks" else "--disable-benchmarks"
750+
let constraintFlags = map (\x -> "--constraint='" ++ x ++ "'") (csConstraints cs)
751+
let allFlags = unwords (testFlag : benchFlag : constraintFlags)
752+
768753
foldedTellStrLns' FoldConstraintSets name ("Constraint set " ++ name) folds $ tellStrLns
769-
[ shForJob versions' (csGhcVersions cs) $
770-
cmd ++ " " ++ constraintFlags ++ " all"
771-
, ""
754+
[ shForCs $ "${CABAL} v2-build -w ${HC} " ++ allFlags ++ " all"
755+
, if csRunTests cs
756+
then shForCs $ "${CABAL} v2-test -w ${HC} " ++ allFlags ++ " all"
757+
else RowSkip
758+
, if csHaddock cs
759+
then shForCs $ "${CABAL} v2-haddock -w ${HC} " ++ allFlags ++ " all"
760+
else RowSkip
772761
]
773762
tellStrLns [""]
774763

@@ -971,7 +960,7 @@ doctestJobVersionRange = orLaterVersion $ mkVersion [8,0]
971960
-- /Note:/ same argument work for hlint too, but not exactly
972961
--
973962
doctestArgs :: GenericPackageDescription -> [[String]]
974-
doctestArgs gpd =
963+
doctestArgs gpd = nub $
975964
[ libraryModuleArgs c
976965
| c <- flattenPackageDescription gpd ^.. L.library . traverse
977966
] ++
@@ -1017,7 +1006,7 @@ hlintJobVersionRange vs HLintJobLatest = case S.maxView vs of
10171006
hlintJobVersionRange _ (HLintJob v) = thisVersion v
10181007

10191008
hlintArgs :: GenericPackageDescription -> [[String]]
1020-
hlintArgs gpd =
1009+
hlintArgs gpd = nub $
10211010
[ libraryModuleArgs c
10221011
| c <- flattenPackageDescription gpd ^.. L.library . traverse
10231012
] ++

src/HaskellCI/Config.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ data Config = Config
5555
, cfgInstallDeps :: !Bool
5656
, cfgInstalled :: [Installed]
5757
, cfgTests :: !VersionRange
58+
, cfgRunTests :: !VersionRange
5859
, cfgBenchmarks :: !VersionRange
5960
, cfgHaddock :: !VersionRange
6061
, cfgNoTestsNoBench :: !VersionRange
@@ -106,6 +107,7 @@ emptyConfig = Config
106107
, cfgInstalled = []
107108
, cfgInstallDeps = True
108109
, cfgTests = anyVersion
110+
, cfgRunTests = anyVersion
109111
, cfgBenchmarks = anyVersion
110112
, cfgHaddock = anyVersion
111113
, cfgNoTestsNoBench = anyVersion
@@ -152,7 +154,9 @@ configGrammar = Config
152154
<*> C.monoidalFieldAla "installed" (C.alaList C.FSep) #cfgInstalled
153155
^^^ metahelp "+/-PKG" "Specify 'constraint: ... installed' packages"
154156
<*> rangeField "tests" #cfgTests anyVersion
155-
^^^ metahelp "RANGE" "Build and run tests with"
157+
^^^ metahelp "RANGE" "Build tests with"
158+
<*> rangeField "run-tests" #cfgRunTests anyVersion
159+
^^^ metahelp "RANGE" "Run tests with (note: only built tests are run)"
156160
<*> rangeField "benchmarks" #cfgBenchmarks anyVersion
157161
^^^ metahelp "RANGE" "Build benchmarks"
158162
<*> rangeField "haddock" #cfgHaddock anyVersion

src/HaskellCI/Config/ConstraintSet.hs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,15 @@ data ConstraintSet = ConstraintSet
1515
{ csName :: String
1616
, csGhcVersions :: VersionRange
1717
, csConstraints :: [String] -- we parse these simply as strings
18+
, csTests :: Bool
1819
, csRunTests :: Bool
20+
, csBenchmarks :: Bool
21+
, csHaddock :: Bool
1922
}
2023
deriving (Show, Generic)
2124

2225
emptyConstraintSet :: String -> ConstraintSet
23-
emptyConstraintSet n = ConstraintSet n anyVersion [] False
26+
emptyConstraintSet n = ConstraintSet n anyVersion [] False False False False
2427

2528
-------------------------------------------------------------------------------
2629
-- Grammar
@@ -32,4 +35,7 @@ constraintSetGrammar
3235
constraintSetGrammar name = ConstraintSet name
3336
<$> C.optionalFieldDef "ghc" #csGhcVersions anyVersion
3437
<*> C.monoidalFieldAla "constraints" (C.alaList' C.CommaVCat NoCommas) #csConstraints
38+
<*> C.booleanFieldDef "tests" #csTests False
3539
<*> C.booleanFieldDef "run-tests" #csRunTests False
40+
<*> C.booleanFieldDef "benchmarks" #csBenchmarks False
41+
<*> C.booleanFieldDef "haddock" #csHaddock False

0 commit comments

Comments
 (0)