module Hix.Managed.ProjectContext where import Control.Monad.Trans.Reader (ask) import qualified Hix.Data.Monad import Hix.Data.Monad (AppResources (AppResources), M (M)) import qualified Hix.Data.Options import Hix.Data.Options (ProjectOptions) import Hix.Managed.BuildOutput (buildOutput, outputResult) import qualified Hix.Managed.Data.BuildConfig import Hix.Managed.Data.BuildConfig (BuildConfig) import Hix.Managed.Data.ProjectContext (ProjectContext) import Hix.Managed.Data.ProjectContextProto (ProjectContextProto) import qualified Hix.Managed.Data.ProjectResult import Hix.Managed.Data.ProjectResult (ProjectResult) import qualified Hix.Managed.Handlers.Build import Hix.Managed.Handlers.Build (BuildHandlers) import qualified Hix.Managed.Handlers.Report import qualified Hix.Managed.ProjectContextProto as ProjectContextProto import Hix.Managed.StateFile (writeProjectState) updateProject :: BuildHandlers -> BuildConfig -> ProjectResult -> M () updateProject :: BuildHandlers -> BuildConfig -> ProjectResult -> M () updateProject BuildHandlers handlers BuildConfig buildConf ProjectResult results = do Bool -> M () -> M () forall (f :: * -> *). Applicative f => Bool -> f () -> f () unless BuildConfig buildConf.validate do StateFileHandlers -> ProjectState -> M () writeProjectState BuildHandlers handlers.stateFile ProjectResult results.state BuildHandlers handlers.report.mutations ProjectResult results processBuildResults :: BuildHandlers -> BuildConfig -> ProjectResult -> M () processBuildResults :: BuildHandlers -> BuildConfig -> ProjectResult -> M () processBuildResults BuildHandlers handlers BuildConfig buildConf ProjectResult results = do BuildHandlers -> BuildConfig -> ProjectResult -> M () updateProject BuildHandlers handlers BuildConfig buildConf ProjectResult results AppResources {$sel:output:AppResources :: AppResources -> OutputFormat output = OutputFormat format, OutputTarget target :: OutputTarget $sel:target:AppResources :: AppResources -> OutputTarget target} <- ReaderT AppResources (ExceptT Error IO) AppResources -> M AppResources forall a. ReaderT AppResources (ExceptT Error IO) a -> M a M ReaderT AppResources (ExceptT Error IO) AppResources forall (m :: * -> *) r. Monad m => ReaderT r m r ask BuildOutput -> OutputTarget -> OutputFormat -> M () outputResult (ProjectResult -> BuildOutput buildOutput ProjectResult results) OutputTarget target OutputFormat format withProjectContext :: BuildHandlers -> ProjectOptions -> ProjectContextProto -> (ProjectContext -> M ProjectResult) -> M () withProjectContext :: BuildHandlers -> ProjectOptions -> ProjectContextProto -> (ProjectContext -> M ProjectResult) -> M () withProjectContext BuildHandlers handlers ProjectOptions opts ProjectContextProto proto ProjectContext -> M ProjectResult use = do ProjectContext project <- ProjectOptions -> ProjectContextProto -> M ProjectContext ProjectContextProto.validate ProjectOptions opts ProjectContextProto proto ProjectResult result <- ProjectContext -> M ProjectResult use ProjectContext project BuildHandlers -> BuildConfig -> ProjectResult -> M () processBuildResults BuildHandlers handlers ProjectOptions opts.build ProjectResult result