diff --git a/.github/workflows/haskell-ci.yml b/.github/workflows/haskell-ci.yml index 316f1640..02890fa3 100644 --- a/.github/workflows/haskell-ci.yml +++ b/.github/workflows/haskell-ci.yml @@ -292,6 +292,12 @@ jobs: - name: prepare for constraint sets run: | rm -f cabal.project.local + - name: constraint set prefer-oldest + run: | + $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --prefer-oldest all --dry-run + cabal-plan topo | sort + $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --prefer-oldest --dependencies-only -j2 all + $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --prefer-oldest all - name: save cache if: always() uses: actions/cache/save@v4 diff --git a/cabal.haskell-ci b/cabal.haskell-ci index 4ee70509..262ce117 100644 --- a/cabal.haskell-ci +++ b/cabal.haskell-ci @@ -91,21 +91,24 @@ macos-jobs: ==8.10.* -- Package will be build with different constraints. -- This is useful to check compatibility with older versions of dependencies. -constraint-set deepseq-1.4 - ghc: (>= 7.8 && <7.10) || == 8.2.2 - constraints: deepseq ==1.4.* - constraints: binary installed +constraint-set prefer-oldest + -- we can limit GHC's and add extra constraints for each constraint-set + -- for haskell-ci itself, we don't. + + -- ghc: (>= 7.8 && <7.10) || == 8.2.2 + -- constraints: deepseq ==1.4.* -- Constraint sets accept booleans for few steps, as the main script -- Defaults are False. -- These fields don't accept version ranges: you should rather create -- another constraint set. - -- tests: False - -- run-tests: False + tests: False + run-tests: False + prefer-oldest: True -- docspec: False -- benchmarks: False - haddock: True + -- haddock: True -- Copy over additional properties specified in a cabal.project file. -- Possible values are: diff --git a/haskell-ci.cabal b/haskell-ci.cabal index dee3a955..cea83d90 100644 --- a/haskell-ci.cabal +++ b/haskell-ci.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: haskell-ci -version: 0.19.20250506 +version: 0.19.20250531 synopsis: Haskell CI script generator description: Script generator (@haskell-ci@) for diff --git a/haskell-ci.sh b/haskell-ci.sh index 6c81e800..7d0a32b1 100755 --- a/haskell-ci.sh +++ b/haskell-ci.sh @@ -549,7 +549,9 @@ run_cmd $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all # constraint sets put_info "constraint sets" run_cmd rm -f cabal.project.local -put_info "constraint set deepseq-1.4" +put_info "constraint set prefer-oldest" +run_cmd $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --dependencies-only -j all +run_cmd $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all # Done diff --git a/src/HaskellCI/Config/ConstraintSet.hs b/src/HaskellCI/Config/ConstraintSet.hs index c5ab7d76..c5b931bf 100644 --- a/src/HaskellCI/Config/ConstraintSet.hs +++ b/src/HaskellCI/Config/ConstraintSet.hs @@ -11,15 +11,16 @@ import HaskellCI.Newtypes import HaskellCI.OptionsGrammar data ConstraintSet = ConstraintSet - { csName :: String - , csGhcVersions :: VersionRange - , csGhcjs :: Bool - , csConstraints :: [String] -- we parse these simply as strings - , csTests :: Bool - , csRunTests :: Bool - , csDocspec :: Bool - , csBenchmarks :: Bool - , csHaddock :: Bool + { csName :: String + , csGhcVersions :: VersionRange + , csGhcjs :: Bool + , csConstraints :: [String] -- we parse these simply as strings + , csTests :: Bool + , csRunTests :: Bool + , csDocspec :: Bool + , csBenchmarks :: Bool + , csHaddock :: Bool + , csPreferOldest :: Bool } deriving (Show, Generic) @@ -40,3 +41,4 @@ constraintSetGrammar name = ConstraintSet name <*> C.booleanFieldDef "docspec" (field @"csDocspec") False <*> C.booleanFieldDef "benchmarks" (field @"csBenchmarks") False <*> C.booleanFieldDef "haddock" (field @"csHaddock") False + <*> C.booleanFieldDef "prefer-oldest" (field @"csPreferOldest") False diff --git a/src/HaskellCI/GitHub.hs b/src/HaskellCI/GitHub.hs index d34ad8f1..221f6f11 100644 --- a/src/HaskellCI/GitHub.hs +++ b/src/HaskellCI/GitHub.hs @@ -497,7 +497,8 @@ makeGitHub _argv config@Config {..} gitconfig prj jobs@JobVersions {..} = do let testFlag = if csTests cs then "--enable-tests" else "--disable-tests" let benchFlag = if csBenchmarks cs then "--enable-benchmarks" else "--disable-benchmarks" let constraintFlags = map (\x -> "--constraint='" ++ x ++ "'") (csConstraints cs) - let allFlags = unwords (testFlag : benchFlag : constraintFlags) + let preferFlags = if csPreferOldest cs then ["--prefer-oldest"] else [] + let allFlags = unwords (testFlag : benchFlag : constraintFlags ++ preferFlags) sh_cs $ "$CABAL v2-build $ARG_COMPILER " ++ allFlags ++ " all --dry-run" sh_cs $ "cabal-plan topo | sort"