packages feed

hix-0.9.0: lib/Hix/Managed/Handlers/Maint/Test.hs

module Hix.Managed.Handlers.Maint.Test where

import Hix.Data.EnvName (EnvName)
import Hix.Data.Monad (M)
import qualified Hix.Data.Options
import Hix.Data.Options (ManagedOptions)
import Hix.Http (httpManager)
import Hix.Managed.Cabal.Data.Config (CabalConfig, HackagePurpose (ForPublish))
import Hix.Managed.Data.BuildConfig (SpecialBuildHandlers (BuildHandlersTestMaint))
import Hix.Managed.Data.BuildOutput (DepChanges)
import Hix.Managed.Data.MaintConfig (MaintConfig (..))
import Hix.Managed.Data.ProjectContext (ProjectContext (..))
import Hix.Managed.Handlers.Build (BuildHandlers)
import qualified Hix.Managed.Handlers.Build.Test as Build
import qualified Hix.Managed.Handlers.Context as ContextHandlers
import Hix.Managed.Handlers.Context (ContextHandlers (..), ContextKey (ContextManaged), ContextQuery (ContextQuery))
import qualified Hix.Managed.Handlers.HackageClient.Prod as HackageClient
import Hix.Managed.Handlers.Maint (MaintHandlers (..))
import Hix.Managed.Handlers.Maint.Prod (projectWithEnv, runBump)
import qualified Hix.Managed.Handlers.Project.Prod as Project
import Hix.Managed.Maint.Git (gitApiMaintProd)
import qualified Hix.Managed.ProjectContextProto as ProjectContextProto

bumpHandlers ::
  ContextHandlers ->
  ManagedOptions ->
  EnvName ->
  M (BuildHandlers, ProjectContext)
bumpHandlers ContextHandlers {query} options envName = do
  proto <- query (ContextQuery ContextManaged)
  project <- ProjectContextProto.validate options.project proto
  handlersProject <- Project.handlersProd options.stateFile
  handlers <-
    Build.chooseHandlers (Just BuildHandlersTestMaint) handlersProject options.project.build project.cabal
  bumpProject <- projectWithEnv envName project
  pure (handlers, bumpProject)

runBumpTest ::
  ContextHandlers ->
  ManagedOptions ->
  EnvName ->
  M DepChanges
runBumpTest config options envName = do
  (handlers, project) <- bumpHandlers config options envName
  runBump handlers project

handlersTest ::
  ManagedOptions ->
  MaintConfig ->
  CabalConfig ->
  M MaintHandlers
handlersTest options config cabal = do
  manager <- httpManager
  publishHackages <- HackageClient.handlersProdFor (Just manager) ForPublish cabal
  pure MaintHandlers {
    git = gitApiMaintProd config,
    context,
    runBump = runBumpTest context options,
    publishHackages
  }
  where
    context = ContextHandlers.handlersProd