hercules-ci-agent-0.10.1: src/Hercules/Agent/Store.hs
module Hercules.Agent.Store where
import Hercules.Agent.WorkerProtocol.OutputInfo (OutputInfo (OutputInfo))
import Hercules.Agent.WorkerProtocol.OutputInfo qualified
import Hercules.CNix.Store (DerivationOutput (derivationOutputName, derivationOutputPath), Store, getStorePathBaseName, queryPathInfo, validPathInfoNarHash32, validPathInfoNarSize, validPathInfoReferences')
import Hercules.CNix.Store qualified as CNix
import Protolude
toDrvInfo :: Store -> DerivationOutput -> IO OutputInfo
toDrvInfo store drvOut = do
-- FIXME: ca-derivations: always get the built path
vpi <- for (derivationOutputPath drvOut) (queryPathInfo store)
hash_ <- traverse validPathInfoNarHash32 vpi
path <- traverse (CNix.storePathToPath store) (derivationOutputPath drvOut)
let size = fmap validPathInfoNarSize vpi
refs <- traverse (traverse getStorePathBaseName <=< validPathInfoReferences') vpi
pure
OutputInfo
{ name = derivationOutputName drvOut,
path = fromMaybe "" path,
hash = fromMaybe "" hash_,
size = fromMaybe 0 size,
references = fromMaybe [] refs
}