From dca8934d3c49beb2838d9f8934b27b6f27c03cf5 Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Tue, 8 Jul 2025 16:17:10 +0300 Subject: [PATCH] Add -Werror=unused-packages option Also add -Werror=missing-fields when -Werror=missing-methods is used --- .github/workflows/haskell-ci.yml | 4 ++++ .../cabal-install-parsers.cabal | 7 ------- fixtures/all-versions.github | 4 +++- fixtures/conditionals.github | 4 ++-- fixtures/copy-fields-all.github | 8 ++++---- fixtures/copy-fields-none.github | 8 ++++---- fixtures/copy-fields-some.github | 8 ++++---- fixtures/doctest-version.github | 4 +++- fixtures/doctest.github | 4 +++- fixtures/empty-line.github | 16 ++++++++++++---- fixtures/enabled-jobs.github | 4 +++- fixtures/fail-versions.github | 12 ++++++------ fixtures/irc-channels.github | 2 +- fixtures/messy.github | 16 ++++++++++++---- fixtures/psql.github | 2 +- fixtures/travis-patch.github | 2 +- haskell-ci.cabal | 6 +----- src/HaskellCI/Config/Grammar.hs | 6 ++++-- src/HaskellCI/Config/History.hs | 2 ++ src/HaskellCI/Config/Initial.hs | 1 + src/HaskellCI/Config/Type.hs | 1 + src/HaskellCI/GitHub.hs | 9 ++++++++- src/HaskellCI/VersionInfo.hs | 2 -- test/Tests.hs | 3 +++ 24 files changed, 83 insertions(+), 52 deletions(-) diff --git a/.github/workflows/haskell-ci.yml b/.github/workflows/haskell-ci.yml index 70ec055a..0b0e5eef 100644 --- a/.github/workflows/haskell-ci.yml +++ b/.github/workflows/haskell-ci.yml @@ -225,6 +225,10 @@ jobs: package * ghc-options: -Werror=missing-methods -Werror=missing-fields EOF + if [ $((HCNUMVER >= 90400)) -ne 0 ] ; then echo "package haskell-ci" >> cabal.project ; fi + 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 cat >> cabal.project <=1.0 && <1.2 , tasty ^>=1.4 || ^>=1.5 , tasty-golden ^>=2.3.1.1 , tree-diff >=0.2 && <0.4 @@ -146,10 +143,6 @@ benchmark cabal-parsers-bench , base , bytestring , cabal-install-parsers - , Cabal-syntax - , containers - , directory - , filepath -- dependencies needing explicit constraints build-depends: criterion ^>=1.6.0.0 diff --git a/fixtures/all-versions.github b/fixtures/all-versions.github index d0585eb8..0c144426 100644 --- a/fixtures/all-versions.github +++ b/fixtures/all-versions.github @@ -442,7 +442,9 @@ jobs: touch cabal.project.local echo "packages: ${PKGDIR_splitmix}" >> cabal.project if [ $((GHCJSARITH || ! GHCJSARITH && HCNUMVER >= 80200)) -ne 0 ] ; then echo "package splitmix" >> cabal.project ; fi - if [ $((GHCJSARITH || ! GHCJSARITH && HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + 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 cat >> cabal.project <> cabal.project.local diff --git a/fixtures/conditionals.github b/fixtures/conditionals.github index 4725bef1..6196c206 100644 --- a/fixtures/conditionals.github +++ b/fixtures/conditionals.github @@ -267,9 +267,9 @@ jobs: echo "packages: ${PKGDIR_servant}" >> cabal.project echo "packages: ${PKGDIR_servant_client}" >> cabal.project if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-client" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi cat >> cabal.project <> cabal.project.local diff --git a/fixtures/copy-fields-all.github b/fixtures/copy-fields-all.github index ecc0cc0d..f6ad2e4e 100644 --- a/fixtures/copy-fields-all.github +++ b/fixtures/copy-fields-all.github @@ -275,13 +275,13 @@ jobs: echo "packages: ${PKGDIR_servant_docs}" >> cabal.project echo "packages: ${PKGDIR_servant_server}" >> cabal.project if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-client" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-docs" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-server" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi cat >> cabal.project <= 0.14 allow-newer: servant-js:servant diff --git a/fixtures/copy-fields-none.github b/fixtures/copy-fields-none.github index 3c6c4066..262b6562 100644 --- a/fixtures/copy-fields-none.github +++ b/fixtures/copy-fields-none.github @@ -275,13 +275,13 @@ jobs: echo "packages: ${PKGDIR_servant_docs}" >> cabal.project echo "packages: ${PKGDIR_servant_server}" >> cabal.project if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-client" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-docs" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-server" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi cat >> cabal.project <> cabal.project.local diff --git a/fixtures/copy-fields-some.github b/fixtures/copy-fields-some.github index 4446b921..8d50efd5 100644 --- a/fixtures/copy-fields-some.github +++ b/fixtures/copy-fields-some.github @@ -275,13 +275,13 @@ jobs: echo "packages: ${PKGDIR_servant_docs}" >> cabal.project echo "packages: ${PKGDIR_servant_server}" >> cabal.project if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-client" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-docs" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-server" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi cat >> cabal.project <= 0.14 allow-newer: servant-js:servant diff --git a/fixtures/doctest-version.github b/fixtures/doctest-version.github index 658b62ca..e9887a24 100644 --- a/fixtures/doctest-version.github +++ b/fixtures/doctest-version.github @@ -457,7 +457,9 @@ jobs: touch cabal.project.local echo "packages: ${PKGDIR_splitmix}" >> cabal.project if [ $((GHCJSARITH || ! GHCJSARITH && HCNUMVER >= 80200)) -ne 0 ] ; then echo "package splitmix" >> cabal.project ; fi - if [ $((GHCJSARITH || ! GHCJSARITH && HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + 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 cat >> cabal.project <> cabal.project.local diff --git a/fixtures/doctest.github b/fixtures/doctest.github index ec94d497..57d7624b 100644 --- a/fixtures/doctest.github +++ b/fixtures/doctest.github @@ -457,7 +457,9 @@ jobs: touch cabal.project.local echo "packages: ${PKGDIR_splitmix}" >> cabal.project if [ $((GHCJSARITH || ! GHCJSARITH && HCNUMVER >= 80200)) -ne 0 ] ; then echo "package splitmix" >> cabal.project ; fi - if [ $((GHCJSARITH || ! GHCJSARITH && HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + 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 cat >> cabal.project <> cabal.project.local diff --git a/fixtures/empty-line.github b/fixtures/empty-line.github index cbb48702..d712e699 100644 --- a/fixtures/empty-line.github +++ b/fixtures/empty-line.github @@ -287,13 +287,21 @@ jobs: echo "packages: ${PKGDIR_servant_docs}" >> cabal.project echo "packages: ${PKGDIR_servant_server}" >> cabal.project if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-client" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-docs" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-server" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> 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=unused-packages" >> 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=unused-packages" >> 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=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 cat >> cabal.project <= 0.14 allow-newer: servant-js:servant diff --git a/fixtures/enabled-jobs.github b/fixtures/enabled-jobs.github index cfc42f2f..1e6f1988 100644 --- a/fixtures/enabled-jobs.github +++ b/fixtures/enabled-jobs.github @@ -442,7 +442,9 @@ jobs: touch cabal.project.local echo "packages: ${PKGDIR_splitmix}" >> cabal.project if [ $((GHCJSARITH || ! GHCJSARITH && HCNUMVER >= 80200)) -ne 0 ] ; then echo "package splitmix" >> cabal.project ; fi - if [ $((GHCJSARITH || ! GHCJSARITH && HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + 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 cat >> cabal.project <> cabal.project.local diff --git a/fixtures/fail-versions.github b/fixtures/fail-versions.github index dd0f2b37..c1f7f444 100644 --- a/fixtures/fail-versions.github +++ b/fixtures/fail-versions.github @@ -283,17 +283,17 @@ jobs: echo "packages: ${PKGDIR_servant_foreign}" >> cabal.project echo "packages: ${PKGDIR_servant_server}" >> cabal.project if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-client" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-client-core" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-docs" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-foreign" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-server" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi cat >> cabal.project <> cabal.project.local diff --git a/fixtures/irc-channels.github b/fixtures/irc-channels.github index 2f052665..d66dc4b3 100644 --- a/fixtures/irc-channels.github +++ b/fixtures/irc-channels.github @@ -290,7 +290,7 @@ jobs: touch cabal.project.local echo "packages: ${PKGDIR_servant}" >> cabal.project if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi cat >> cabal.project <> cabal.project.local diff --git a/fixtures/messy.github b/fixtures/messy.github index d8602f07..22a91cfd 100644 --- a/fixtures/messy.github +++ b/fixtures/messy.github @@ -288,13 +288,21 @@ jobs: echo "packages: ${PKGDIR_servant_docs}" >> cabal.project echo "packages: ${PKGDIR_servant_server}" >> cabal.project if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-client" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-docs" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-server" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> 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=unused-packages" >> 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=unused-packages" >> 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=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 cat >> cabal.project <> cabal.project if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi cat >> cabal.project <> cabal.project.local diff --git a/fixtures/travis-patch.github b/fixtures/travis-patch.github index ad090d00..fede1819 100644 --- a/fixtures/travis-patch.github +++ b/fixtures/travis-patch.github @@ -263,7 +263,7 @@ jobs: touch cabal.project.local echo "packages: ${PKGDIR_servant}" >> cabal.project if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant" >> cabal.project ; fi - if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi + if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods -Werror=missing-fields" >> cabal.project ; fi cat >> cabal.project <> cabal.project.local diff --git a/haskell-ci.cabal b/haskell-ci.cabal index 37de0c40..b8f93452 100644 --- a/haskell-ci.cabal +++ b/haskell-ci.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: haskell-ci -version: 0.19.20250630 +version: 0.19.20250708 synopsis: Haskell CI script generator description: Script generator (@haskell-ci@) for @@ -160,7 +160,6 @@ library haskell-ci-internal , bytestring ^>=0.10.10.1 || ^>=0.11.1.0 || ^>=0.12.0.2 , Cabal-syntax ^>=3.14.2.0 , containers ^>=0.6.2.1 || ^>=0.7 - , deepseq ^>=1.4.4.0 || ^>=1.5.0.0 , directory ^>=1.3.6.0 , filepath ^>=1.4.2.1 || ^>=1.5.2.0 , mtl ^>=2.2.2 || ^>=2.3.1 @@ -188,7 +187,6 @@ library haskell-ci-internal , network-uri ^>=2.6.1.0 , optparse-applicative ^>=0.19.0.0 , temporary ^>=1.3 - , unordered-containers ^>=0.2.10.0 , zinza ^>=0.2 -- ShellCheck. Would need newer transformers for older GHC @@ -214,13 +212,11 @@ test-suite golden -- inherited constraints via lib:haskell-ci build-depends: , base - , base-compat , bytestring , Cabal-syntax , directory , filepath , haskell-ci-internal - , transformers -- dependencies needing explicit constraints build-depends: diff --git a/src/HaskellCI/Config/Grammar.hs b/src/HaskellCI/Config/Grammar.hs index 785917bb..6104aa25 100644 --- a/src/HaskellCI/Config/Grammar.hs +++ b/src/HaskellCI/Config/Grammar.hs @@ -159,10 +159,12 @@ configGrammar = Config ^^^ metaActionHelp "PATCH" "file" ".patch files to apply to the generated Travis YAML file" <*> monoidalFieldAla "github-patches" (C.alaList' C.NoCommaFSep C.Token') (field @"cfgGitHubPatches") ^^^ metaActionHelp "PATCH" "file" ".patch files to apply to the generated GitHub Actions YAML file" - <*> booleanFieldDef "insert-version" (field @"cfgInsertVersion") defaultConfig + <*> booleanFieldDef "insert-version" (field @"cfgInsertVersion") defaultConfig ^^^ help "Don't insert the haskell-ci version into the generated Travis YAML file" - <*> optionalFieldDef "error-missing-methods" (field @"cfgErrorMissingMethods") defaultConfig + <*> optionalFieldDef "error-missing-methods" (field @"cfgErrorMissingMethods") defaultConfig ^^^ metahelp "PKGSCOPE" "Insert -Werror=missing-methods for package scope (none, local, all)" + <*> rangeField "error-unused-packages" (field @"cfgErrorUnusedPkgs") defaultConfig + ^^^ metahelp "RANGE" "Insert -Werror=unused-packages" <*> 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 22515f66..e40bd209 100644 --- a/src/HaskellCI/Config/History.hs +++ b/src/HaskellCI/Config/History.hs @@ -83,6 +83,8 @@ configHistory = , ver 0 19 20250606 := \cfg -> cfg & field @"cfgDocspec" . field @"cfgDocspecUrl" .~ "https://github.com/phadej/cabal-extras/releases/download/cabal-docspec-0.0.0.20250606/cabal-docspec-0.0.0.20250606-x86_64-linux.xz" & field @"cfgDocspec" . field @"cfgDocspecHash" .~ "cc20bb5c19501b42bde77556bc419c7c0a5c8d1eb65663024d8a4e4c868bef25" + , ver 0 19 20250708 := \cfg -> cfg + & field @"cfgErrorUnusedPkgs" .~ C.orLaterVersion (C.mkVersion [9,4]) ] where ver x y z = [x, y, z] diff --git a/src/HaskellCI/Config/Initial.hs b/src/HaskellCI/Config/Initial.hs index 74c36e22..4107e7e3 100644 --- a/src/HaskellCI/Config/Initial.hs +++ b/src/HaskellCI/Config/Initial.hs @@ -74,6 +74,7 @@ initialConfig = Config , cfgGitHubPatches = [] , cfgInsertVersion = True , cfgErrorMissingMethods = PackageScopeLocal + , cfgErrorUnusedPkgs = noVersion , cfgDoctest = initialDoctestConfig , cfgDocspec = initialDocspecConfig , cfgConstraintSets = [] diff --git a/src/HaskellCI/Config/Type.hs b/src/HaskellCI/Config/Type.hs index e16f8c5a..8e06bc44 100644 --- a/src/HaskellCI/Config/Type.hs +++ b/src/HaskellCI/Config/Type.hs @@ -74,6 +74,7 @@ data Config = Config , cfgGitHubPatches :: [FilePath] , cfgInsertVersion :: !Bool , cfgErrorMissingMethods :: !PackageScope + , cfgErrorUnusedPkgs :: !VersionRange , cfgDoctest :: !DoctestConfig , cfgDocspec :: !DocspecConfig , cfgConstraintSets :: [ConstraintSet] diff --git a/src/HaskellCI/GitHub.hs b/src/HaskellCI/GitHub.hs index 221f6f11..9ce1acf7 100644 --- a/src/HaskellCI/GitHub.hs +++ b/src/HaskellCI/GitHub.hs @@ -350,12 +350,19 @@ makeGitHub _argv config@Config {..} gitconfig prj jobs@JobVersions {..} = do PackageScopeLocal -> for_ pkgs $ \Pkg{pkgName,pkgJobs} -> do let range = Range (C.orLaterVersion (C.mkVersion [8,2])) /\ RangePoints pkgJobs echo_if_to range "cabal.project" $ "package " ++ pkgName - echo_if_to range "cabal.project" $ " ghc-options: -Werror=missing-methods" + echo_if_to range "cabal.project" $ " ghc-options: -Werror=missing-methods -Werror=missing-fields" PackageScopeAll -> cat "cabal.project" $ unlines [ "package *" , " ghc-options: -Werror=missing-methods -Werror=missing-fields" ] + -- -Werror-unused-pkgs + for_ pkgs $ \Pkg{pkgName,pkgJobs} -> do + -- is introduced in 8.10. + let range = Range cfgErrorUnusedPkgs /\ Range (C.orLaterVersion (C.mkVersion [8,10])) /\ RangePoints pkgJobs + echo_if_to range "cabal.project" $ "package " ++ pkgName + echo_if_to range "cabal.project" $ " ghc-options: -Werror=unused-packages" + -- extra cabal.project fields cat "cabal.project" $ C.showFields' (const C.NoComment) (const id) 2 $ extraCabalProjectFields "$GITHUB_WORKSPACE/source/" diff --git a/src/HaskellCI/VersionInfo.hs b/src/HaskellCI/VersionInfo.hs index f15546d6..278d8d32 100644 --- a/src/HaskellCI/VersionInfo.hs +++ b/src/HaskellCI/VersionInfo.hs @@ -20,7 +20,6 @@ dependencies = Map.fromList , ("Cabal-syntax", VERSION_Cabal_syntax) , ("cabal-install-parsers", VERSION_cabal_install_parsers) , ("containers", VERSION_containers) - , ("deepseq", VERSION_deepseq) , ("directory", VERSION_directory) , ("exceptions", VERSION_exceptions) , ("filepath", VERSION_filepath) @@ -39,5 +38,4 @@ dependencies = Map.fromList , ("temporary", VERSION_temporary) , ("text", VERSION_text) , ("transformers", VERSION_transformers) - , ("unordered-containers", VERSION_unordered_containers) ] diff --git a/test/Tests.hs b/test/Tests.hs index f23048ba..25f58a1f 100644 --- a/test/Tests.hs +++ b/test/Tests.hs @@ -1,6 +1,9 @@ {-# LANGUAGE ViewPatterns #-} module Main (main) where +-- to add explicit dependency on base for -Wunused-packages purpose +import Prelude () + import HaskellCI hiding (main) import HaskellCI.Prelude