Skip to content
Snippets Groups Projects
Commit a572b9e1 authored by stuebinm's avatar stuebinm
Browse files

exit with code 1 if maximum lint level exceeded

parent 7b079ff7
No related branches found
No related tags found
No related merge requests found
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"AssemblyTag":"assemblyname", "AssemblyTag":"assemblyname",
"ScriptInject":null, "ScriptInject":null,
"AllowScripts":true, "AllowScripts":true,
"MaxWarnLevel":"Suggestion", "MaxLintLevel":"Suggestion",
"DontCopyAssets":true, "DontCopyAssets":true,
"LinkPrefix":"https://exit.rc3.world?link=" "LinkPrefix":"https://exit.rc3.world?link="
} }
...@@ -4,32 +4,33 @@ ...@@ -4,32 +4,33 @@
{-# LANGUAGE LambdaCase #-} {-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TupleSections #-} {-# LANGUAGE TupleSections #-}
{-# LANGUAGE TypeFamilies #-}
-- | Module that contains high-level checking for an entire directory -- | Module that contains high-level checking for an entire directory
module CheckDir (recursiveCheckDir, DirResult(..), resultIsFatal) where module CheckDir (recursiveCheckDir, DirResult(..), resultIsFatal) where
import CheckMap (MapResult (mapresultProvides), import CheckMap (MapResult (..), loadAndLintMap)
loadAndLintMap, mapresultDepends)
import Control.Monad (void) import Control.Monad (void)
import Control.Monad.Extra (mapMaybeM) import Control.Monad.Extra (mapMaybeM)
import Data.Aeson (ToJSON, (.=)) import Data.Aeson (ToJSON, (.=))
import qualified Data.Aeson as A import qualified Data.Aeson as A
import Data.Foldable (fold) import Data.Foldable (fold)
import Data.Functor ((<&>)) import Data.Functor ((<&>))
import Data.Map (Map) import Data.Map (Map, elems, keys)
import qualified Data.Map as M import qualified Data.Map as M
import Data.Map.Strict (mapKeys, (\\)) import Data.Map.Strict (mapKeys, (\\))
import Data.Maybe (mapMaybe) import Data.Maybe (mapMaybe)
import Data.Text (Text) import Data.Text (Text)
import qualified Data.Text as T import qualified Data.Text as T
import GHC.Generics (Generic) import GHC.Generics (Generic)
import LintConfig (LintConfig') import LintConfig (LintConfig', configMaxLintLevel)
import Paths (normalise, normaliseWithFrag) import Paths (normalise, normaliseWithFrag)
import System.Directory.Extra (doesFileExist) import System.Directory.Extra (doesFileExist)
import System.FilePath (splitPath, (</>)) import System.FilePath (splitPath, (</>))
import qualified System.FilePath as FP import qualified System.FilePath as FP
import System.FilePath.Posix (takeDirectory) import System.FilePath.Posix (takeDirectory)
import Types (Dep (Local, LocalMap), Level) import Types (Dep (Local, LocalMap), Level (..),
hintLevel)
import Util (PrettyPrint (prettyprint)) import Util (PrettyPrint (prettyprint))
...@@ -59,9 +60,18 @@ data MissingDep = MissingDep ...@@ -59,9 +60,18 @@ data MissingDep = MissingDep
newtype MissingAsset = MissingAsset MissingDep newtype MissingAsset = MissingAsset MissingDep
resultIsFatal :: DirResult -> Bool resultIsFatal :: LintConfig' -> DirResult -> Bool
resultIsFatal res = resultIsFatal config res =
not $ null (dirresultMissingAssets res) (not (null (dirresultMissingAssets res)))
&& (configMaxLintLevel config) <= maxObservedLevel
where maxObservedLevel = maximum
. map hintLevel
. concatMap keys
. map mapresultLayer
. elems
. dirresultMaps
$ res
......
...@@ -34,7 +34,7 @@ data LintConfig f = LintConfig ...@@ -34,7 +34,7 @@ data LintConfig f = LintConfig
-- ^ Link to Script that should be injected -- ^ Link to Script that should be injected
, configAssemblyTag :: HKD f Text , configAssemblyTag :: HKD f Text
-- ^ Assembly name (used for jitsiRoomAdminTag) -- ^ Assembly name (used for jitsiRoomAdminTag)
, configMaxWarnLevel :: HKD f Level , configMaxLintLevel :: HKD f Level
-- ^ Maximum warn level allowed before the lint fails -- ^ Maximum warn level allowed before the lint fails
, configDontCopyAssets :: HKD f Bool , configDontCopyAssets :: HKD f Bool
-- ^ Don't copy map assets (mostly useful for development) -- ^ Don't copy map assets (mostly useful for development)
......
...@@ -5,9 +5,8 @@ ...@@ -5,9 +5,8 @@
-- | Module for writing an already linted map Repository back out again. -- | Module for writing an already linted map Repository back out again.
module WriteRepo where module WriteRepo where
import CheckDir (DirResult (dirresultMaps), import CheckDir (DirResult (..), resultIsFatal)
resultIsFatal) import CheckMap (MapResult (..))
import CheckMap (MapResult (mapresultAdjusted, mapresultDepends))
import Control.Monad (forM_, unless) import Control.Monad (forM_, unless)
import Data.Aeson (encodeFile) import Data.Aeson (encodeFile)
import Data.Map.Strict (toList) import Data.Map.Strict (toList)
...@@ -25,11 +24,13 @@ import System.FilePath.Posix ((</>)) ...@@ -25,11 +24,13 @@ import System.FilePath.Posix ((</>))
import Types (Dep (Local)) import Types (Dep (Local))
writeAdjustedRepository :: LintConfig' -> FilePath -> FilePath -> DirResult -> IO ExitCode writeAdjustedRepository :: LintConfig' -> FilePath -> FilePath -> DirResult -> IO ExitCode
writeAdjustedRepository config inPath outPath result writeAdjustedRepository config inPath outPath result
| resultIsFatal result && not (configDontCopyAssets config) = do | resultIsFatal config result =
-- putStrLn "FATAL: Repository has missing assets; cannot write to outPath"
pure (ExitFailure 1) pure (ExitFailure 1)
| not (configDontCopyAssets config) =
pure (ExitSuccess)
| otherwise = do | otherwise = do
createDirectoryIfMissing True outPath createDirectoryIfMissing True outPath
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment