diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2025-11-13 22:59:11 +0100 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-11-13 22:59:11 +0100 |
| commit | d6ff11543a3897dd2b38ed121f958ef0050e272c (patch) | |
| tree | d37f1c58a214f9c3db84b229af7c832e5d5373a6 /src/Job.hs | |
| parent | e96ecb1ce8f81b3a256f6982c5da1aa7cbeb4e59 (diff) | |
Support publishing artifacts in the same job they're created
Diffstat (limited to 'src/Job.hs')
| -rw-r--r-- | src/Job.hs | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -296,7 +296,12 @@ waitForUsedArtifacts -> m [ ( ArtifactSpec, ArtifactOutput ) ] waitForUsedArtifacts tout job results outVar = do origState <- liftIO $ atomically $ readTVar outVar - let artSpecs = nubOrd $ jobUses job ++ (map jpArtifact $ jobPublish job) + let ( selfSpecs, artSpecs ) = partition ((jobName job ==) . fst) $ nubOrd $ jobUses job ++ (map jpArtifact $ jobPublish job) + + forM_ selfSpecs $ \( _, artName@(ArtifactName tname) ) -> do + when (not (artName `elem` map fst (jobArtifacts job))) $ do + throwError . JobError =<< liftIO (outputFootnote tout $ "Artifact ‘" <> tname <> "’ not produced by the job") + ujobs <- forM artSpecs $ \(ujobName@(JobName tjobName), uartName) -> do case find (\( j, _, _ ) -> jobName j == ujobName) results of Just ( _, _, var ) -> return ( var, ( ujobName, uartName )) @@ -413,7 +418,7 @@ runJob job uses checkoutPath jdir = do } forM_ (jobPublish job) $ \pub -> do - Just aout <- return $ lookup (jpArtifact pub) uses + Just aout <- return $ lookup (jpArtifact pub) $ map (\aout -> ( ( jobName job, aoutName aout ), aout )) artifacts ++ uses let ppath = case jpPath pub of Just path | hasTrailingPathSeparator path -> path </> takeFileName (aoutWorkPath aout) |