packages feed

hercules-ci-api-0.8.2.0: src/Hercules/API/Build/FailureGraph.hs

{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DerivingStrategies #-}

module Hercules.API.Build.FailureGraph where

import Data.OpenApi qualified as O3
import Hercules.API.Derivation (Derivation)
import Hercules.API.Prelude

-- | A graph where each node is a failed (directly/indirectly) derivation
--   and edges represent a dependencies on other directly or indirectly failed
--   derivations.
data Graph = Graph
  { nodes :: [Node]
  }
  deriving (Generic, Show, Eq)
  deriving anyclass (NFData, ToJSON, FromJSON, ToSchema, O3.ToSchema)

-- | A derivation and any dependencies that caused it to fail, if applicable.
data Node = Node
  { derivation :: Derivation,
    -- | Dependency paths to failed dependencies that, if present, have caused a
    --   DependencyFailure for this derivation.
    failedDependencies :: [Text]
  }
  deriving (Generic, Show, Eq)
  deriving anyclass (NFData, ToJSON, FromJSON, ToSchema, O3.ToSchema)