@@ -7,8 +7,10 @@ import Control.Monad
7
7
import Control.Monad.IO.Class
8
8
import Control.Monad.Logger
9
9
import Data.Aeson as A
10
+ import qualified Data.List as L
11
+ import qualified Data.Map as M
10
12
import Data.String.Interpolate
11
- import qualified Data.Text as T
13
+ import Data.Text as T
12
14
import qualified Data.Yaml as Yaml
13
15
import System.FilePath
14
16
import Test.Sandwich as Sandwich
@@ -22,7 +24,7 @@ import UnliftIO.Directory
22
24
tests :: TopSpec
23
25
tests = describe " Sample environments" $ introduceBootstrapNixpkgs $ introduceJustBubblewrap $ do
24
26
parallelN 4 $
25
- forM_ fileList $ \ file -> do
27
+ forM_ ( L. sort fileList) $ \ file -> do
26
28
describe [i |#{file}|] $ do
27
29
it " Builds" $ do
28
30
let name = T. dropEnd 4 (T. pack file) -- Drop the .nix suffix
@@ -31,22 +33,24 @@ tests = describe "Sample environments" $ introduceBootstrapNixpkgs $ introduceJu
31
33
32
34
it " Has well-formed UI metadata" $ do
33
35
let name = T. dropEnd 4 (T. pack file) -- Drop the .nix suffix
34
- envRoot <- testBuildUsingFlake [i |.\#sample_environment_#{name}.ui_metadata_yaml|]
35
- info [i |Got metadata YAML: #{envRoot}|]
36
36
37
- NixHydrationResult {.. } <- liftIO (Yaml. decodeFileEither envRoot) >>= \ case
37
+ envRoot <- testBuildUsingFlake [i |.\#sample_environment_#{name}|]
38
+
39
+ yamlPath <- testBuildUsingFlake [i |.\#sample_environment_#{name}.ui_metadata_yaml|]
40
+ NixHydrationResult {.. } <- liftIO (Yaml. decodeFileEither yamlPath) >>= \ case
38
41
Left err -> expectationFailure [i |Couldn't decode UI metadata YAML: #{err}|]
39
42
Right x -> pure x
40
43
info [i |packages: #{A.encode nixHydrationResultPackages}|]
41
44
42
- forM_ nixHydrationResultPackages ( validatePackage envRoot)
45
+ forM_ ( M. toList nixHydrationResultPackages) ( \ (n, v) -> validatePackage envRoot n v )
43
46
44
- validatePackage :: (MonadLoggerIO m , MonadFail m ) => FilePath -> NixPackage -> m ()
45
- validatePackage envRoot (NixPackage {nixPackageMeta= (NixMeta {.. }), .. }) = do
46
- when (" shells." `T.isPrefixOf` nixPackageName ) $ do
47
+ validatePackage :: (MonadLoggerIO m , MonadFail m ) => FilePath -> Text -> NixPackage -> m ()
48
+ validatePackage envRoot attr (NixPackage {nixPackageMeta= (NixMeta {.. }), .. }) = do
49
+ when (" shells." `T.isPrefixOf` attr ) $ do
47
50
info [i |(#{nixPackageName}) Shell detected; checking it has a mainProgram|]
48
51
shouldBeJust nixMetaMainProgram
49
52
Just program <- return nixMetaMainProgram
53
+ info [i |(#{nixPackageName}) Checking for #{envRoot </> "bin" </> program}|]
50
54
doesPathExist (envRoot </> " bin" </> program) >>= (`shouldBe` True )
51
55
52
56
0 commit comments