summaryrefslogtreecommitdiff
path: root/src/Eval.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Eval.hs')
-rw-r--r--src/Eval.hs20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/Eval.hs b/src/Eval.hs
index a918910..bd011cb 100644
--- a/src/Eval.hs
+++ b/src/Eval.hs
@@ -17,6 +17,7 @@ import Control.Monad.Catch
import Control.Monad.Except
import Control.Monad.Reader
+import Data.Bifunctor
import Data.Either
import Data.List
import Data.Maybe
@@ -114,8 +115,9 @@ collectJobSetRepos revisionOverrides dset = do
return ( rname, RepoRefCommit commit )
getJobExprDependencies :: DeclaredJob -> [ JobSetDep ]
-getJobExprDependencies _ = concat
- [
+getJobExprDependencies job = concat
+ [ concatMap (collectDependencies . jpushSource) $ jobPush job
+ , concatMap (collectDependencies . jpushDestination) $ jobPush job
]
collectOtherRepos :: DeclaredJobSet -> DeclaredJob -> Eval [ ( Maybe ( RepoName, Maybe Text ), RepoDepLevel ) ]
@@ -202,6 +204,11 @@ evalJobs (current : evaluating) evaluated repos dset reqs = do
return $ Just ( idpart, repoRef' )
return $ fmap (\subtree -> ( mbrepo, subtree )) mbSubtree
let otherRepoTrees = catMaybes otherRepoTreesMb
+
+ let jscRepos = maybe id ((:) . ( Nothing, )) eiContainingRepo $ map (first Just) eiOtherRepos
+ let jscRepoRefs = map (\( repo, ( _, ref ) ) -> ( fst <$> repo, ref )) otherRepoTrees
+ let ctx = JobSetContext {..}
+
if all isJust otherRepoTreesMb
then do
let otherRepoIds = flip mapMaybe otherRepoTrees $ \case
@@ -239,6 +246,14 @@ evalJobs (current : evaluating) evaluated repos dset reqs = do
}
Nothing -> throwError $ OtherEvalError $ "no url defined for destination ‘" <> textDestinationName (jpDestination dpublish) <> "’"
+ pushes <- forM (jobPush current) $ \JobPush {..} -> do
+ commit <- eval ctx jpushSource
+ branch <- eval ctx jpushDestination
+ return JobPush
+ { jpushSource = commit
+ , jpushDestination = branch
+ }
+
let job = Job
{ jobId = currentJobId
, jobName = jobName current
@@ -247,6 +262,7 @@ evalJobs (current : evaluating) evaluated repos dset reqs = do
, jobArtifacts = jobArtifacts current
, jobUses = uses
, jobPublish = destinations
+ , jobPush = pushes
}
evalJobs evaluating (Right job : evaluated) repos dset reqs
else do