hercules-ci-api-agent-0.4.0.0: src/Hercules/API/Agent/Evaluate/EvaluateEvent/DerivationInfo.hs
{-# LANGUAGE DeriveAnyClass #-}
module Hercules.API.Agent.Evaluate.EvaluateEvent.DerivationInfo where
import Control.Applicative
import Control.Lens
import qualified Data.Aeson as A
import Data.Aeson.Lens
import Hercules.API.Prelude
type OutputNameText = Text
type DerivationPathText = Text
-- | Derivation fields that are relevant to CI, notably excluding the details
-- that make it buildable and may be sensitive such as the builder script or
-- output hashes.
data DerivationInfo = DerivationInfo
{ derivationPath :: DerivationPathText,
platform :: Text,
requiredSystemFeatures :: [Text],
inputDerivations :: Map DerivationPathText [OutputNameText],
inputSources :: [DerivationPathText],
outputs :: Map OutputNameText OutputInfo
}
deriving (Generic, Show, Eq, NFData, ToJSON)
instance FromJSON DerivationInfo where
parseJSON = A.genericParseJSON A.defaultOptions . fixup
where
fixup :: A.Value -> A.Value
fixup = _Object . at "requiredSystemFeatures" %~ (<|> Just (A.Array mempty))
data OutputInfo = OutputInfo
{ path :: Maybe Text,
isFixed :: Bool
}
deriving (Generic, Show, Eq, NFData, ToJSON, FromJSON)