on efe80bc help sign in
elk/builder/src/Reporting/Progress.hs
118 lines 2.2 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module Reporting.Progress
3 ( Reporter(..)
4 , makeReporter
5 , silentReporter
6 , Msg(..)
7 , Progress(..)
8 , Outcome(..)
9 , PublishPhase(..)
10 , BumpPhase(..)
11 )
12 where
15import Control.Concurrent.Chan (Chan, writeChan)
16import Control.Concurrent.MVar (MVar, newEmptyMVar, readMVar)
17import qualified Elm.ModuleName as ModuleName
18import Deps.Diff (Magnitude)
19import qualified Elm.Package as Pkg
20import qualified Elm.Version as V
21import qualified Reporting.Doc as D
22import Reporting.Exit (Exit)
26-- REPORTER
29data Reporter =
30 Reporter
31 { _tell :: Progress -> IO ()
32 , _ask :: D.Doc -> IO Bool
33 , _end :: Maybe Exit -> IO ()
34 }
37makeReporter :: Chan Msg -> MVar () -> Reporter
38makeReporter chan mvar =
39 let
40 tell progress =
41 writeChan chan (Progress progress)
43 ask doc =
44 do var <- newEmptyMVar
45 writeChan chan (Ask doc var)
46 readMVar var
48 end maybeError =
49 do writeChan chan (End maybeError)
50 readMVar mvar
51 in
52 Reporter tell ask end
55silentReporter :: Reporter
56silentReporter =
57 Reporter
58 (\_ -> return ())
59 (\_ -> return True)
60 (\_ -> return ())
64-- MESSAGES
67data Msg
68 = Progress Progress
69 | Ask D.Doc (MVar Bool)
70 | End (Maybe Exit)
73data Progress
74 -- download packages
75 = DownloadSkip
76 | DownloadStart [(Pkg.Name, V.Version)]
77 | DownloadPkgStart Pkg.Name V.Version
78 | DownloadPkgEnd Pkg.Name V.Version Outcome
79 | DownloadEnd Outcome
81 -- build dependencies
82 | BuildDepsStart Int
83 | BuildDepsProgress
84 | BuildDepsEnd
86 -- compile files
87 | CompileStart Int
88 | CompileFileStart ModuleName.Raw
89 | CompileFileEnd ModuleName.Raw Outcome
90 | CompileEnd
92 -- publish
93 | PublishStart Pkg.Name V.Version (Maybe [V.Version])
94 | PublishCheckBump V.Version BumpPhase
95 | PublishProgress PublishPhase (Maybe Outcome)
96 | PublishEnd
98 -- solver
99 | UnableToLoadLatestPackages
102data Outcome = Good | Bad
105data PublishPhase
106 = CheckReadme
107 | CheckLicense
108 | CheckTag V.Version
109 | CheckDownload
110 | CheckBuild
111 | CheckChanges
114data BumpPhase
115 = StatedVersion
116 | GoodStart
117 | GoodBump V.Version Magnitude
118 | BadBump