summaryrefslogtreecommitdiff
path: root/src/Config.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Config.hs')
-rw-r--r--src/Config.hs27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/Config.hs b/src/Config.hs
index e9287e4..68db57d 100644
--- a/src/Config.hs
+++ b/src/Config.hs
@@ -12,6 +12,7 @@ import Control.Monad.Combinators
import Control.Monad.IO.Class
import Data.ByteString.Lazy qualified as BS
+import Data.Either
import Data.List
import Data.Map qualified as M
import Data.Maybe
@@ -33,7 +34,7 @@ configFileName = "minici.yaml"
data Config = Config
- { configJobs :: [ Job ]
+ { configJobs :: [ DeclaredJob ]
, configRepos :: [ DeclaredRepo ]
}
@@ -67,14 +68,14 @@ instance FromYAML Config where
return $ config { configRepos = configRepos config ++ [ repo ] }
_ -> return config
-parseJob :: Text -> Node Pos -> Parser Job
+parseJob :: Text -> Node Pos -> Parser DeclaredJob
parseJob name node = flip (withMap "Job") node $ \j -> do
let jobName = JobName name
- jobCheckout <- choice
+ ( jobContainingCheckout, jobOtherCheckout ) <- partitionEithers <$> choice
[ parseSingleCheckout =<< j .: "checkout"
, parseMultipleCheckouts =<< j .: "checkout"
, withNull "no checkout" (return []) =<< j .: "checkout"
- , return [ ( Nothing, Nothing ) ]
+ , return [ Left $ JobCheckout Nothing Nothing ]
]
jobRecipe <- choice
[ cabalJob =<< j .: "cabal"
@@ -84,13 +85,17 @@ parseJob name node = flip (withMap "Job") node $ \j -> do
jobUses <- maybe (return []) parseUses =<< j .:? "uses"
return Job {..}
-parseSingleCheckout :: Node Pos -> Parser [ ( Maybe RepoName, Maybe FilePath ) ]
+parseSingleCheckout :: Node Pos -> Parser [ Either JobCheckout ( JobRepo Declared, JobCheckout ) ]
parseSingleCheckout = withMap "checkout definition" $ \m -> do
- name <- m .:? "repo"
- subtree <- m .:? "subtree"
- return [ ( RepoName <$> name, T.unpack <$> subtree ) ]
-
-parseMultipleCheckouts :: Node Pos -> Parser [ ( Maybe RepoName, Maybe FilePath ) ]
+ mbName <- m .:? "repo"
+ jcSubtree <- fmap T.unpack <$> m .:? "subtree"
+ jcDestination <- fmap T.unpack <$> m .:? "dest"
+ let checkout = JobCheckout {..}
+ return $ (: []) $ case mbName of
+ Nothing -> Left checkout
+ Just name -> Right ( DeclaredJobRepo (RepoName name), checkout )
+
+parseMultipleCheckouts :: Node Pos -> Parser [ Either JobCheckout ( JobRepo Declared, JobCheckout ) ]
parseMultipleCheckouts = withSeq "checkout definitions" $ fmap concat . mapM parseSingleCheckout
cabalJob :: Node Pos -> Parser [CreateProcess]
@@ -156,7 +161,7 @@ loadConfigForCommit commit = do
Just content -> either (\_ -> Left $ "failed to parse " <> configFileName) Right $ parseConfig content
Nothing -> Left $ configFileName <> " not found"
-loadJobSetForCommit :: MonadIO m => Commit -> m JobSet
+loadJobSetForCommit :: MonadIO m => Commit -> m DeclaredJobSet
loadJobSetForCommit commit = toJobSet <$> loadConfigForCommit commit
where
toJobSet configEither = JobSet