diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 963fbdf..0f7f130 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,14 +20,10 @@ jobs: matrix: os: - ubuntu-latest + - macos-12 ghc: - - '9.4' - - '9.6' - - '9.8' - '9.10' - include: - - os: macos-12 - ghc: system + steps: - uses: actions/checkout@v3 - uses: hspec/setup-haskell@v1 @@ -54,9 +50,12 @@ jobs: run: cabal build all - shell: bash - run: $(cabal list-bin spec) --times --print-slow - env: - HSPEC_OPTIONS: --color + run: | + for GHC in 9.4 9.6 9.8 9.10 + do + ghcup install ghc $GHC --no-set + SENSEI_GHC=ghc-$GHC $(cabal list-bin spec) + done success: needs: build diff --git a/cabal.project b/cabal.project index a4eadbd..63f8c7f 100644 --- a/cabal.project +++ b/cabal.project @@ -1,3 +1,5 @@ +with-compiler: ghc-9.10.1 + packages: sensei.cabal diff --git a/package.yaml b/package.yaml index 3a31ba5..6122fd3 100644 --- a/package.yaml +++ b/package.yaml @@ -41,7 +41,7 @@ dependencies: - async - containers - transformers - - mtl + - mtl >= 2.3.1 - aeson - yaml - casing diff --git a/sensei.cabal b/sensei.cabal index c3b1183..f7f313a 100644 --- a/sensei.cabal +++ b/sensei.cabal @@ -64,7 +64,7 @@ executable seito , fsnotify ==0.4.* , http-client >=0.5.0 , http-types - , mtl + , mtl >=2.3.1 , network , pretty , process @@ -124,7 +124,7 @@ executable sensei , fsnotify ==0.4.* , http-client >=0.5.0 , http-types - , mtl + , mtl >=2.3.1 , network , pretty , process @@ -184,7 +184,7 @@ executable sensei-web , fsnotify ==0.4.* , http-client >=0.5.0 , http-types - , mtl + , mtl >=2.3.1 , network , pretty , process @@ -268,7 +268,7 @@ test-suite spec , http-client >=0.5.0 , http-types , mockery - , mtl + , mtl >=2.3.1 , network , pretty , process diff --git a/src/Trigger.hs b/src/Trigger.hs index b75a42a..c352e13 100644 --- a/src/Trigger.hs +++ b/src/Trigger.hs @@ -14,12 +14,8 @@ module Trigger ( import Imports -#if MIN_VERSION_mtl(2,3,1) import Control.Monad.Trans.Writer.CPS (runWriterT) import Control.Monad.Writer.CPS hiding (pass) -#else -import Control.Monad.Writer.Strict hiding (pass) -#endif import Control.Monad.Except diff --git a/test/TriggerSpec.hs b/test/TriggerSpec.hs index 16b1495..cea6cc1 100644 --- a/test/TriggerSpec.hs +++ b/test/TriggerSpec.hs @@ -3,6 +3,8 @@ module TriggerSpec (spec) where import Helper +import qualified Data.Text as Text + import qualified Session import Session (Session) import Language.Haskell.GhciWrapper (Config(..)) @@ -11,7 +13,7 @@ import Trigger hiding (trigger, triggerAll) import qualified Trigger normalize :: String -> [String] -normalize = normalizeTiming . lines +normalize = normalizeTiming . lines . forGhc9dot4 where normalizeTiming :: [String] -> [String] normalizeTiming = normalizeLine "Finished in " @@ -23,6 +25,11 @@ normalize = normalizeTiming . lines | message `isPrefixOf` line = message ++ "..." | otherwise = line + forGhc9dot4 :: String -> String + forGhc9dot4 = Text.unpack + . Text.replace " error: Variable not in scope: " " error: [GHC-88464] Variable not in scope: " + . Text.pack + withSession :: FilePath -> [String] -> (Session -> IO a) -> IO a withSession specPath args = do Session.withSession ghciConfig {configWorkingDirectory = Just dir} $ @@ -147,19 +154,14 @@ spec = do it "stops after reloading" $ \ name -> do withSession name [] $ \ session -> do writeFile name (passingSpec ++ "foo = bar") - (trigger session >> trigger session) `shouldReturn` (Failure, [ + + let + fitterNotNull :: [String] -> [String] + fitterNotNull = filter (not . null) + + (fmap fitterNotNull <$> (trigger session >> trigger session)) `shouldReturn` (Failure, [ "[1 of 1] Compiling Spec" -#if __GLASGOW_HASKELL__ < 910 - , "" -#endif -#if __GLASGOW_HASKELL__ >= 906 , "Spec.hs:9:7: error: [GHC-88464] Variable not in scope: bar" -#else - , "Spec.hs:9:7: error: Variable not in scope: bar" -#endif -#if __GLASGOW_HASKELL__ >= 910 - , "" -#endif , withColor Red "RELOADING FAILED" ])