55module System.Nix.Build
66 ( BuildMode (.. )
77 , BuildStatus (.. )
8- , BuildResult (.. )
98 , buildSuccess
9+ , BuildResult (.. )
1010 ) where
1111
12+ import Data.Map (Map )
1213import Data.Time (UTCTime )
1314import Data.Text (Text )
1415import GHC.Generics (Generic )
1516
16- -- keep the order of these Enums to match enums from reference implementations
17+ import System.Nix.OutputName (OutputName )
18+ import System.Nix.Realisation (DerivationOutput , Realisation )
19+
20+ -- | Mode of the build operation
21+ -- Keep the order of these Enums to match enums from reference implementations
1722-- src/libstore/store-api.hh
1823data BuildMode
19- = BuildMode_Normal
20- | BuildMode_Repair
21- | BuildMode_Check
24+ = BuildMode_Normal -- ^ Perform normal build
25+ | BuildMode_Repair -- ^ Try to repair corrupted or missing paths by re-building or re-downloading them
26+ | BuildMode_Check -- ^ Check if the build is reproducible (rebuild and compare to previous build)
2227 deriving (Eq , Generic , Ord , Enum , Show )
2328
29+ -- | Build result status
2430data BuildStatus =
25- BuildStatus_Built
26- | BuildStatus_Substituted
27- | BuildStatus_AlreadyValid
31+ BuildStatus_Built -- ^ Build performed successfully
32+ | BuildStatus_Substituted -- ^ Path substituted from cache
33+ | BuildStatus_AlreadyValid -- ^ Path is already valid (available in local store)
2834 | BuildStatus_PermanentFailure
2935 | BuildStatus_InputRejected
3036 | BuildStatus_OutputRejected
31- | BuildStatus_TransientFailure -- possibly transient
32- | BuildStatus_CachedFailure -- no longer used
33- | BuildStatus_TimedOut
37+ | BuildStatus_TransientFailure -- ^ Possibly transient build failure
38+ | BuildStatus_CachedFailure -- ^ Obsolete
39+ | BuildStatus_TimedOut -- ^ Build timed out
3440 | BuildStatus_MiscFailure
35- | BuildStatus_DependencyFailed
41+ | BuildStatus_DependencyFailed -- ^ Build dependency failed to build
3642 | BuildStatus_LogLimitExceeded
3743 | BuildStatus_NotDeterministic
3844 | BuildStatus_ResolvesToAlreadyValid
@@ -41,24 +47,27 @@ data BuildStatus =
4147
4248-- | Result of the build
4349data BuildResult = BuildResult
44- { -- | build status, MiscFailure should be default
45- status :: ! BuildStatus
46- , -- | possible build error message
47- errorMessage :: ! (Maybe Text )
48- , -- | How many times this build was performed
49- timesBuilt :: ! Int
50- , -- | If timesBuilt > 1, whether some builds did not produce the same result
51- isNonDeterministic :: ! Bool
52- , -- Start time of this build
53- startTime :: ! UTCTime
54- , -- Stop time of this build
55- stopTime :: ! UTCTime
50+ { buildResultStatus :: BuildStatus
51+ -- ^ Build status, MiscFailure should be the default
52+ , buildResultErrorMessage :: Maybe Text
53+ -- ^ Possible build error message
54+ , buildResultTimesBuilt :: Maybe Int
55+ -- ^ How many times this build was performed (since 1.29)
56+ , buildResultIsNonDeterministic :: Maybe Bool
57+ -- ^ If timesBuilt > 1, whether some builds did not produce the same result (since 1.29)
58+ , buildResultStartTime :: Maybe UTCTime
59+ -- ^ Start time of this build (since 1.29)
60+ , buildResultStopTime :: Maybe UTCTime
61+ -- ^ Stop time of this build (since 1.29)
62+ , buildResultBuiltOutputs :: Maybe (Map (DerivationOutput OutputName ) Realisation )
63+ -- ^ Mapping of the output names to @Realisation@s (since 1.28)
64+ -- (paths with additional info and their dependencies)
5665 }
5766 deriving (Eq , Generic , Ord , Show )
5867
59- buildSuccess :: BuildResult -> Bool
60- buildSuccess BuildResult { .. } =
61- status `elem`
68+ buildSuccess :: BuildStatus -> Bool
69+ buildSuccess x =
70+ x `elem`
6271 [ BuildStatus_Built
6372 , BuildStatus_Substituted
6473 , BuildStatus_AlreadyValid
0 commit comments