From ebe120fcfffc6d4d8ca261cfef7699eac7fd94fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Wed, 5 Nov 2025 21:14:01 +0100 Subject: Store artifact work path along with data --- src/Command/Extract.hs | 10 +++------- src/Job.hs | 8 +++++--- 2 files changed, 8 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/Command/Extract.hs b/src/Command/Extract.hs index b21c63c..6828029 100644 --- a/src/Command/Extract.hs +++ b/src/Command/Extract.hs @@ -93,15 +93,11 @@ cmdExtract (ExtractCommand ExtractOptions {..} ExtractArguments {..}) = do True -> return () False -> tfail $ "artifact ‘" <> aname <> "’ of job ‘" <> textJobId jid <> "’ not found" - afile <- liftIO (listDirectory adir) >>= \case - [ file ] -> return file - [] -> tfail $ "artifact ‘" <> aname <> "’ of job ‘" <> textJobId jid <> "’ not found" - _:_:_ -> tfail $ "unexpected files in ‘" <> T.pack adir <> "’" - - let tpath | isdir = extractDestination afile + wpath <- liftIO $ readFile (adir "path") + let tpath | isdir = extractDestination takeFileName wpath | otherwise = extractDestination when (not extractForce) $ do liftIO (doesPathExist tpath) >>= \case True -> tfail $ "destination ‘" <> T.pack tpath <> "’ already exists" False -> return () - liftIO $ copyRecursiveForce (adir afile) tpath + liftIO $ copyRecursiveForce (adir "data") tpath diff --git a/src/Job.hs b/src/Job.hs index 6a55db1..7db1645 100644 --- a/src/Job.hs +++ b/src/Job.hs @@ -329,8 +329,8 @@ runJob job uses checkoutPath jdir = do | fromIntegral n == -sigINT -> throwError JobCancelled | otherwise -> throwError JobFailed - let adir = jdir "artifacts" artifacts <- forM (jobArtifacts job) $ \( name@(ArtifactName tname), pathPattern ) -> do + let adir = jdir "artifacts" T.unpack tname path <- liftIO (globDir1 pathPattern checkoutPath) >>= \case [ path ] -> return path found -> do @@ -338,13 +338,15 @@ runJob job uses checkoutPath jdir = do (if null found then "no file" else "multiple files") <> " found matching pattern ‘" <> decompile pathPattern <> "’ for artifact ‘" <> T.unpack tname <> "’" throwError JobFailed - let target = adir T.unpack tname takeFileName path + let target = adir "data" + workPath = makeRelative checkoutPath path liftIO $ do createDirectoryIfMissing True $ takeDirectory target copyRecursiveForce path target + writeFile (adir "path") workPath return $ ArtifactOutput { aoutName = name - , aoutWorkPath = makeRelative checkoutPath path + , aoutWorkPath = workPath , aoutStorePath = target } -- cgit v1.2.3