diff options
Diffstat (limited to 'src/Config.hs')
-rw-r--r-- | src/Config.hs | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/Config.hs b/src/Config.hs index 5631179..ea2907c 100644 --- a/src/Config.hs +++ b/src/Config.hs @@ -1,4 +1,5 @@ module Config ( + JobRoot(..), Config(..), findConfig, parseConfig, @@ -12,7 +13,6 @@ 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 @@ -34,6 +34,11 @@ configFileName :: FilePath configFileName = "minici.yaml" +data JobRoot + = JobRootRepo Repo + | JobRootConfig Config + + data Config = Config { configJobs :: [ DeclaredJob ] , configRepos :: [ DeclaredRepo ] @@ -72,11 +77,12 @@ instance FromYAML Config where parseJob :: Text -> Node Pos -> Parser DeclaredJob parseJob name node = flip (withMap "Job") node $ \j -> do let jobName = JobName name - ( jobContainingCheckout, jobOtherCheckout ) <- partitionEithers <$> choice + jobId = jobName + jobCheckout <- choice [ parseSingleCheckout =<< j .: "checkout" , parseMultipleCheckouts =<< j .: "checkout" , withNull "no checkout" (return []) =<< j .: "checkout" - , return [ Left $ JobCheckout Nothing Nothing ] + , return [ JobCheckout Nothing Nothing Nothing ] ] jobRecipe <- choice [ cabalJob =<< j .: "cabal" @@ -86,18 +92,18 @@ parseJob name node = flip (withMap "Job") node $ \j -> do jobUses <- maybe (return []) parseUses =<< j .:? "uses" return Job {..} -parseSingleCheckout :: Node Pos -> Parser [ Either JobCheckout ( JobRepo Declared, Maybe Text, JobCheckout ) ] +parseSingleCheckout :: Node Pos -> Parser [ JobCheckout Declared ] parseSingleCheckout = withMap "checkout definition" $ \m -> do jcSubtree <- fmap T.unpack <$> m .:? "subtree" jcDestination <- fmap T.unpack <$> m .:? "dest" - let checkout = JobCheckout {..} - m .:? "repo" >>= \case - Nothing -> return [ Left checkout ] + jcRepo <- m .:? "repo" >>= \case + Nothing -> return Nothing Just name -> do revision <- m .:? "revision" - return [ Right ( DeclaredJobRepo (RepoName name), revision, checkout ) ] + return $ Just ( RepoName name, revision ) + return [ JobCheckout {..} ] -parseMultipleCheckouts :: Node Pos -> Parser [ Either JobCheckout ( JobRepo Declared, Maybe Text, JobCheckout ) ] +parseMultipleCheckouts :: Node Pos -> Parser [ JobCheckout Declared ] parseMultipleCheckouts = withSeq "checkout definitions" $ fmap concat . mapM parseSingleCheckout cabalJob :: Node Pos -> Parser [CreateProcess] @@ -167,6 +173,7 @@ loadJobSetForCommit :: (MonadIO m, MonadFail m) => Commit -> m DeclaredJobSet loadJobSetForCommit commit = return . toJobSet =<< loadConfigForCommit =<< getCommitTree commit where toJobSet configEither = JobSet - { jobsetCommit = Just commit + { jobsetId = () + , jobsetCommit = Just commit , jobsetJobsEither = fmap configJobs configEither } |