module Hix.Managed.Data.StageState where import Hix.Data.PackageId (PackageId) import Hix.Managed.Build.NixOutput (PackageDerivation) import Hix.Managed.Data.Initial (Initial (Initial)) import Hix.Managed.Data.Mutable (MutableDep) import qualified Hix.Managed.Data.MutableId import Hix.Managed.Data.MutableId (MutableId (MutableId)) import Hix.Managed.Data.Mutation (DepMutation) import Hix.Managed.Data.MutationState (MutationState) data BuildStatus = Success | Failure deriving stock (BuildStatus -> BuildStatus -> Bool (BuildStatus -> BuildStatus -> Bool) -> (BuildStatus -> BuildStatus -> Bool) -> Eq BuildStatus forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: BuildStatus -> BuildStatus -> Bool == :: BuildStatus -> BuildStatus -> Bool $c/= :: BuildStatus -> BuildStatus -> Bool /= :: BuildStatus -> BuildStatus -> Bool Eq, Int -> BuildStatus -> ShowS [BuildStatus] -> ShowS BuildStatus -> String (Int -> BuildStatus -> ShowS) -> (BuildStatus -> String) -> ([BuildStatus] -> ShowS) -> Show BuildStatus forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> BuildStatus -> ShowS showsPrec :: Int -> BuildStatus -> ShowS $cshow :: BuildStatus -> String show :: BuildStatus -> String $cshowList :: [BuildStatus] -> ShowS showList :: [BuildStatus] -> ShowS Show, (forall x. BuildStatus -> Rep BuildStatus x) -> (forall x. Rep BuildStatus x -> BuildStatus) -> Generic BuildStatus forall x. Rep BuildStatus x -> BuildStatus forall x. BuildStatus -> Rep BuildStatus x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. BuildStatus -> Rep BuildStatus x from :: forall x. BuildStatus -> Rep BuildStatus x $cto :: forall x. Rep BuildStatus x -> BuildStatus to :: forall x. Rep BuildStatus x -> BuildStatus Generic) justSuccess :: a -> BuildStatus -> Maybe a justSuccess :: forall a. a -> BuildStatus -> Maybe a justSuccess a a = \case BuildStatus Success -> a -> Maybe a forall a. a -> Maybe a Just a a BuildStatus Failure -> Maybe a forall a. Maybe a Nothing data BuildFailure = UnknownFailure | PackageFailure (NonEmpty PackageDerivation) | TimeoutFailure [PackageId] deriving stock (BuildFailure -> BuildFailure -> Bool (BuildFailure -> BuildFailure -> Bool) -> (BuildFailure -> BuildFailure -> Bool) -> Eq BuildFailure forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: BuildFailure -> BuildFailure -> Bool == :: BuildFailure -> BuildFailure -> Bool $c/= :: BuildFailure -> BuildFailure -> Bool /= :: BuildFailure -> BuildFailure -> Bool Eq, Int -> BuildFailure -> ShowS [BuildFailure] -> ShowS BuildFailure -> String (Int -> BuildFailure -> ShowS) -> (BuildFailure -> String) -> ([BuildFailure] -> ShowS) -> Show BuildFailure forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> BuildFailure -> ShowS showsPrec :: Int -> BuildFailure -> ShowS $cshow :: BuildFailure -> String show :: BuildFailure -> String $cshowList :: [BuildFailure] -> ShowS showList :: [BuildFailure] -> ShowS Show, (forall x. BuildFailure -> Rep BuildFailure x) -> (forall x. Rep BuildFailure x -> BuildFailure) -> Generic BuildFailure forall x. Rep BuildFailure x -> BuildFailure forall x. BuildFailure -> Rep BuildFailure x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. BuildFailure -> Rep BuildFailure x from :: forall x. BuildFailure -> Rep BuildFailure x $cto :: forall x. Rep BuildFailure x -> BuildFailure to :: forall x. Rep BuildFailure x -> BuildFailure Generic) data BuildResult = BuildSuccess | BuildFailure BuildFailure deriving stock (BuildResult -> BuildResult -> Bool (BuildResult -> BuildResult -> Bool) -> (BuildResult -> BuildResult -> Bool) -> Eq BuildResult forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: BuildResult -> BuildResult -> Bool == :: BuildResult -> BuildResult -> Bool $c/= :: BuildResult -> BuildResult -> Bool /= :: BuildResult -> BuildResult -> Bool Eq, Int -> BuildResult -> ShowS [BuildResult] -> ShowS BuildResult -> String (Int -> BuildResult -> ShowS) -> (BuildResult -> String) -> ([BuildResult] -> ShowS) -> Show BuildResult forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> BuildResult -> ShowS showsPrec :: Int -> BuildResult -> ShowS $cshow :: BuildResult -> String show :: BuildResult -> String $cshowList :: [BuildResult] -> ShowS showList :: [BuildResult] -> ShowS Show, (forall x. BuildResult -> Rep BuildResult x) -> (forall x. Rep BuildResult x -> BuildResult) -> Generic BuildResult forall x. Rep BuildResult x -> BuildResult forall x. BuildResult -> Rep BuildResult x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. BuildResult -> Rep BuildResult x from :: forall x. BuildResult -> Rep BuildResult x $cto :: forall x. Rep BuildResult x -> BuildResult to :: forall x. Rep BuildResult x -> BuildResult Generic) buildUnsuccessful :: BuildResult -> Bool buildUnsuccessful :: BuildResult -> Bool buildUnsuccessful = \case BuildResult BuildSuccess -> Bool False BuildFailure BuildFailure _ -> Bool True buildStatus :: BuildResult -> BuildStatus buildStatus :: BuildResult -> BuildStatus buildStatus = \case BuildResult BuildSuccess -> BuildStatus Success BuildFailure BuildFailure _ -> BuildStatus Failure resultFromStatus :: BuildStatus -> BuildResult resultFromStatus :: BuildStatus -> BuildResult resultFromStatus = \case BuildStatus Success -> BuildResult BuildSuccess BuildStatus Failure -> BuildFailure -> BuildResult BuildFailure BuildFailure UnknownFailure data BuildSuccess = CandidateBuilt MutableId | Unmodified MutableDep deriving stock (BuildSuccess -> BuildSuccess -> Bool (BuildSuccess -> BuildSuccess -> Bool) -> (BuildSuccess -> BuildSuccess -> Bool) -> Eq BuildSuccess forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: BuildSuccess -> BuildSuccess -> Bool == :: BuildSuccess -> BuildSuccess -> Bool $c/= :: BuildSuccess -> BuildSuccess -> Bool /= :: BuildSuccess -> BuildSuccess -> Bool Eq, Int -> BuildSuccess -> ShowS [BuildSuccess] -> ShowS BuildSuccess -> String (Int -> BuildSuccess -> ShowS) -> (BuildSuccess -> String) -> ([BuildSuccess] -> ShowS) -> Show BuildSuccess forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> BuildSuccess -> ShowS showsPrec :: Int -> BuildSuccess -> ShowS $cshow :: BuildSuccess -> String show :: BuildSuccess -> String $cshowList :: [BuildSuccess] -> ShowS showList :: [BuildSuccess] -> ShowS Show, (forall x. BuildSuccess -> Rep BuildSuccess x) -> (forall x. Rep BuildSuccess x -> BuildSuccess) -> Generic BuildSuccess forall x. Rep BuildSuccess x -> BuildSuccess forall x. BuildSuccess -> Rep BuildSuccess x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. BuildSuccess -> Rep BuildSuccess x from :: forall x. BuildSuccess -> Rep BuildSuccess x $cto :: forall x. Rep BuildSuccess x -> BuildSuccess to :: forall x. Rep BuildSuccess x -> BuildSuccess Generic) buildSuccessPackage :: BuildSuccess -> MutableDep buildSuccessPackage :: BuildSuccess -> MutableDep buildSuccessPackage = \case CandidateBuilt MutableId {MutableDep name :: MutableDep name :: MutableId -> MutableDep name} -> MutableDep name Unmodified MutableDep name -> MutableDep name modifiedCandidates :: [BuildSuccess] -> [MutableId] modifiedCandidates :: [BuildSuccess] -> [MutableId] modifiedCandidates = (BuildSuccess -> Maybe MutableId) -> [BuildSuccess] -> [MutableId] forall a b. (a -> Maybe b) -> [a] -> [b] mapMaybe \case CandidateBuilt MutableId candidate -> MutableId -> Maybe MutableId forall a. a -> Maybe a Just MutableId candidate Unmodified MutableDep _ -> Maybe MutableId forall a. Maybe a Nothing data StageState a s = StageState { forall a s. StageState a s -> Map MutableDep BuildSuccess success :: Map MutableDep BuildSuccess, forall a s. StageState a s -> [DepMutation a] failed :: [DepMutation a], forall a s. StageState a s -> MutationState state :: MutationState, forall a s. StageState a s -> Set PackageId revisions :: Set PackageId, forall a s. StageState a s -> Natural iterations :: Natural, forall a s. StageState a s -> s ext :: s } deriving stock (StageState a s -> StageState a s -> Bool (StageState a s -> StageState a s -> Bool) -> (StageState a s -> StageState a s -> Bool) -> Eq (StageState a s) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a forall a s. (Eq a, Eq s) => StageState a s -> StageState a s -> Bool $c== :: forall a s. (Eq a, Eq s) => StageState a s -> StageState a s -> Bool == :: StageState a s -> StageState a s -> Bool $c/= :: forall a s. (Eq a, Eq s) => StageState a s -> StageState a s -> Bool /= :: StageState a s -> StageState a s -> Bool Eq, Int -> StageState a s -> ShowS [StageState a s] -> ShowS StageState a s -> String (Int -> StageState a s -> ShowS) -> (StageState a s -> String) -> ([StageState a s] -> ShowS) -> Show (StageState a s) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a forall a s. (Show a, Show s) => Int -> StageState a s -> ShowS forall a s. (Show a, Show s) => [StageState a s] -> ShowS forall a s. (Show a, Show s) => StageState a s -> String $cshowsPrec :: forall a s. (Show a, Show s) => Int -> StageState a s -> ShowS showsPrec :: Int -> StageState a s -> ShowS $cshow :: forall a s. (Show a, Show s) => StageState a s -> String show :: StageState a s -> String $cshowList :: forall a s. (Show a, Show s) => [StageState a s] -> ShowS showList :: [StageState a s] -> ShowS Show) initStageState :: Initial MutationState -> s -> StageState a s initStageState :: forall s a. Initial MutationState -> s -> StageState a s initStageState (Initial MutationState state) s ext = StageState {success :: Map MutableDep BuildSuccess success = [], failed :: [DepMutation a] failed = [], revisions :: Set PackageId revisions = [], iterations :: Natural iterations = Natural 0, s MutationState state :: MutationState ext :: s state :: MutationState ext :: s ..}