diff --git a/.github/workflows/haskell-ci.yml b/.github/workflows/haskell-ci.yml index 0b0e5eef..5883ebc8 100644 --- a/.github/workflows/haskell-ci.yml +++ b/.github/workflows/haskell-ci.yml @@ -229,6 +229,10 @@ jobs: if [ $((HCNUMVER >= 90400)) -ne 0 ] ; then echo " ghc-options: -Werror=unused-packages" >> cabal.project ; fi if [ $((HCNUMVER >= 90400)) -ne 0 ] ; then echo "package cabal-install-parsers" >> cabal.project ; fi if [ $((HCNUMVER >= 90400)) -ne 0 ] ; then echo " ghc-options: -Werror=unused-packages" >> cabal.project ; fi + if [ $((HCNUMVER >= 90000)) -ne 0 ] ; then echo "package haskell-ci" >> cabal.project ; fi + if [ $((HCNUMVER >= 90000)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi + if [ $((HCNUMVER >= 90000)) -ne 0 ] ; then echo "package cabal-install-parsers" >> cabal.project ; fi + if [ $((HCNUMVER >= 90000)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi cat >> cabal.project <= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((! GHCJSARITH && HCNUMVER >= 90400)) -ne 0 ] ; then echo "package splitmix" >> cabal.project ; fi if [ $((! GHCJSARITH && HCNUMVER >= 90400)) -ne 0 ] ; then echo " ghc-options: -Werror=unused-packages" >> cabal.project ; fi + if [ $((! GHCJSARITH && HCNUMVER >= 90000)) -ne 0 ] ; then echo "package splitmix" >> cabal.project ; fi + if [ $((! GHCJSARITH && HCNUMVER >= 90000)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi cat >> cabal.project <> cabal.project.local diff --git a/fixtures/doctest-version.github b/fixtures/doctest-version.github index e9887a24..e58376b2 100644 --- a/fixtures/doctest-version.github +++ b/fixtures/doctest-version.github @@ -460,6 +460,8 @@ jobs: if [ $((GHCJSARITH || ! GHCJSARITH && HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((! GHCJSARITH && HCNUMVER >= 90400)) -ne 0 ] ; then echo "package splitmix" >> cabal.project ; fi if [ $((! GHCJSARITH && HCNUMVER >= 90400)) -ne 0 ] ; then echo " ghc-options: -Werror=unused-packages" >> cabal.project ; fi + if [ $((! GHCJSARITH && HCNUMVER >= 90000)) -ne 0 ] ; then echo "package splitmix" >> cabal.project ; fi + if [ $((! GHCJSARITH && HCNUMVER >= 90000)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi cat >> cabal.project <> cabal.project.local diff --git a/fixtures/doctest.github b/fixtures/doctest.github index 57d7624b..a76d7c81 100644 --- a/fixtures/doctest.github +++ b/fixtures/doctest.github @@ -460,6 +460,8 @@ jobs: if [ $((GHCJSARITH || ! GHCJSARITH && HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((! GHCJSARITH && HCNUMVER >= 90400)) -ne 0 ] ; then echo "package splitmix" >> cabal.project ; fi if [ $((! GHCJSARITH && HCNUMVER >= 90400)) -ne 0 ] ; then echo " ghc-options: -Werror=unused-packages" >> cabal.project ; fi + if [ $((! GHCJSARITH && HCNUMVER >= 90000)) -ne 0 ] ; then echo "package splitmix" >> cabal.project ; fi + if [ $((! GHCJSARITH && HCNUMVER >= 90000)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi cat >> cabal.project <> cabal.project.local diff --git a/fixtures/empty-line.github b/fixtures/empty-line.github index d712e699..4c3578ae 100644 --- a/fixtures/empty-line.github +++ b/fixtures/empty-line.github @@ -302,6 +302,14 @@ jobs: if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo " ghc-options: -Werror=unused-packages" >> cabal.project ; fi if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo "package servant-server" >> cabal.project ; fi if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo " ghc-options: -Werror=unused-packages" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo "package servant" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo "package servant-client" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo "package servant-docs" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo "package servant-server" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi cat >> cabal.project <= 0.14 allow-newer: servant-js:servant diff --git a/fixtures/enabled-jobs.github b/fixtures/enabled-jobs.github index 1e6f1988..1baf7735 100644 --- a/fixtures/enabled-jobs.github +++ b/fixtures/enabled-jobs.github @@ -445,6 +445,8 @@ jobs: if [ $((GHCJSARITH || ! GHCJSARITH && HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((! GHCJSARITH && HCNUMVER >= 90400)) -ne 0 ] ; then echo "package splitmix" >> cabal.project ; fi if [ $((! GHCJSARITH && HCNUMVER >= 90400)) -ne 0 ] ; then echo " ghc-options: -Werror=unused-packages" >> cabal.project ; fi + if [ $((! GHCJSARITH && HCNUMVER >= 90000)) -ne 0 ] ; then echo "package splitmix" >> cabal.project ; fi + if [ $((! GHCJSARITH && HCNUMVER >= 90000)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi cat >> cabal.project <> cabal.project.local diff --git a/fixtures/messy.github b/fixtures/messy.github index 22a91cfd..0c5e4d79 100644 --- a/fixtures/messy.github +++ b/fixtures/messy.github @@ -303,6 +303,14 @@ jobs: if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo " ghc-options: -Werror=unused-packages" >> cabal.project ; fi if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo "package servant-server" >> cabal.project ; fi if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo " ghc-options: -Werror=unused-packages" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo "package servant" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo "package servant-client" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo "package servant-docs" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo "package servant-server" >> cabal.project ; fi + if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" >> cabal.project ; fi cat >> cabal.project < rangeField "error-unused-packages" (field @"cfgErrorUnusedPkgs") defaultConfig ^^^ metahelp "RANGE" "Insert -Werror=unused-packages" + <*> rangeField "error-incomplete-patterns" (field @"cfgErrorIncompletePatterns") defaultConfig + ^^^ metahelp "RANGE" "Insert -Werror=incomplete-(uni-)patterns" <*> blurFieldGrammar (field @"cfgDoctest") doctestConfigGrammar defaultConfig <*> blurFieldGrammar (field @"cfgDocspec") docspecConfigGrammar defaultConfig <*> pure [] -- constraint sets diff --git a/src/HaskellCI/Config/History.hs b/src/HaskellCI/Config/History.hs index e40bd209..63f09549 100644 --- a/src/HaskellCI/Config/History.hs +++ b/src/HaskellCI/Config/History.hs @@ -85,6 +85,8 @@ configHistory = & field @"cfgDocspec" . field @"cfgDocspecHash" .~ "cc20bb5c19501b42bde77556bc419c7c0a5c8d1eb65663024d8a4e4c868bef25" , ver 0 19 20250708 := \cfg -> cfg & field @"cfgErrorUnusedPkgs" .~ C.orLaterVersion (C.mkVersion [9,4]) + , ver 0 19 20250108 := \cfg -> cfg + & field @"cfgErrorIncompletePatterns" .~ C.orLaterVersion (C.mkVersion [9,0]) ] where ver x y z = [x, y, z] diff --git a/src/HaskellCI/Config/Initial.hs b/src/HaskellCI/Config/Initial.hs index 4107e7e3..0a94ba46 100644 --- a/src/HaskellCI/Config/Initial.hs +++ b/src/HaskellCI/Config/Initial.hs @@ -75,6 +75,7 @@ initialConfig = Config , cfgInsertVersion = True , cfgErrorMissingMethods = PackageScopeLocal , cfgErrorUnusedPkgs = noVersion + , cfgErrorIncompletePatterns = noVersion , cfgDoctest = initialDoctestConfig , cfgDocspec = initialDocspecConfig , cfgConstraintSets = [] diff --git a/src/HaskellCI/Config/Type.hs b/src/HaskellCI/Config/Type.hs index 8e06bc44..dbc3a930 100644 --- a/src/HaskellCI/Config/Type.hs +++ b/src/HaskellCI/Config/Type.hs @@ -75,6 +75,7 @@ data Config = Config , cfgInsertVersion :: !Bool , cfgErrorMissingMethods :: !PackageScope , cfgErrorUnusedPkgs :: !VersionRange + , cfgErrorIncompletePatterns :: !VersionRange , cfgDoctest :: !DoctestConfig , cfgDocspec :: !DocspecConfig , cfgConstraintSets :: [ConstraintSet] diff --git a/src/HaskellCI/GitHub.hs b/src/HaskellCI/GitHub.hs index 9ce1acf7..56dcc496 100644 --- a/src/HaskellCI/GitHub.hs +++ b/src/HaskellCI/GitHub.hs @@ -363,6 +363,13 @@ makeGitHub _argv config@Config {..} gitconfig prj jobs@JobVersions {..} = do echo_if_to range "cabal.project" $ "package " ++ pkgName echo_if_to range "cabal.project" $ " ghc-options: -Werror=unused-packages" + -- -Werror-unused-pkgs + for_ pkgs $ \Pkg{pkgName,pkgJobs} -> do + -- is introduced in 8.10. + let range = Range cfgErrorIncompletePatterns /\ RangePoints pkgJobs + echo_if_to range "cabal.project" $ "package " ++ pkgName + echo_if_to range "cabal.project" $ " ghc-options: -Werror=incomplete-patterns -Werror=incomplete-uni-patterns" + -- extra cabal.project fields cat "cabal.project" $ C.showFields' (const C.NoComment) (const id) 2 $ extraCabalProjectFields "$GITHUB_WORKSPACE/source/"