core,remote: add OldBuildResult as it is the one we claim to support now

This commit is contained in:
sorki 2023-12-04 19:38:02 +01:00
parent 2cd4c32b84
commit 8936300fbe
7 changed files with 57 additions and 14 deletions

View File

@ -5,15 +5,17 @@ Maintainer : srk <srk@48.io>
module System.Nix.Build
( BuildMode(..)
, BuildStatus(..)
, BuildResult(..)
, buildSuccess
, BuildResult(..)
, OldBuildResult(..)
) where
import Data.Time (UTCTime)
import Data.Text (Text)
import GHC.Generics (Generic)
-- keep the order of these Enums to match enums from reference implementations
-- | Mode of the build operation
-- Keep the order of these Enums to match enums from reference implementations
-- src/libstore/store-api.hh
data BuildMode
= BuildMode_Normal
@ -41,9 +43,9 @@ data BuildStatus =
-- | Result of the build
data BuildResult = BuildResult
{ -- | build status, MiscFailure should be default
{ -- | Build status, MiscFailure should be the default
buildResultStatus :: !BuildStatus
, -- | possible build error message
, -- | Possible build error message
buildResultErrorMessage :: !(Maybe Text)
, -- | How many times this build was performed
buildResultTimesBuilt :: !Int
@ -56,10 +58,19 @@ data BuildResult = BuildResult
}
deriving (Eq, Generic, Ord, Show)
buildSuccess :: BuildResult -> Bool
buildSuccess BuildResult {..} =
buildResultStatus `elem`
buildSuccess :: BuildStatus -> Bool
buildSuccess x =
x `elem`
[ BuildStatus_Built
, BuildStatus_Substituted
, BuildStatus_AlreadyValid
]
-- | Result of the build, for protocol version <= 1.27
data OldBuildResult = OldBuildResult
{ -- | Build status, MiscFailure should be the default
oldBuildResultStatus :: !BuildStatus
, -- | Possible build error message
oldBuildResultErrorMessage :: !(Maybe Text)
}
deriving (Eq, Generic, Ord, Show)

View File

@ -52,7 +52,7 @@ import Network.Socket (Family, SockAddr(SockAddrUnix))
import System.Nix.Nar (NarSource)
import System.Nix.Derivation (Derivation)
import System.Nix.Store.Types (FileIngestionMethod(..), RepairMode(..))
import System.Nix.Build (BuildMode, BuildResult)
import System.Nix.Build (BuildMode, OldBuildResult)
import System.Nix.Hash (NamedAlgo(..), BaseEncoding(Base16), decodeDigestWith)
import System.Nix.StorePath (StoreDir(..), StorePath, StorePathName, StorePathHashPart, InvalidPathError)
import System.Nix.StorePath.Metadata (Metadata(..), StorePathTrust(..))
@ -226,7 +226,7 @@ buildDerivation
:: StorePath
-> Derivation StorePath Text
-> BuildMode
-> MonadStore BuildResult
-> MonadStore OldBuildResult
buildDerivation p drv buildMode = do
storeDir <- getStoreDir
runOpArgs WorkerOp_BuildDerivation $ do

View File

@ -20,7 +20,7 @@ import qualified Data.Text
import qualified Data.Vector
import System.Nix.Derivation (Derivation(..), DerivationOutput(..))
import System.Nix.Build (BuildMode(..), BuildStatus(..), BuildResult(..))
import System.Nix.Build (BuildMode(..), BuildStatus(..), BuildResult(..), OldBuildResult(..))
import System.Nix.StorePath (StoreDir, StorePath)
import System.Nix.Store.Remote.Serialize.Prim
import System.Nix.Store.Remote.Types
@ -49,7 +49,7 @@ instance Serialize BuildResult where
buildResultIsNonDeterministic <- getBool
buildResultStartTime <- getTime
buildResultStopTime <- getTime
pure $ BuildResult{..}
pure BuildResult{..}
put BuildResult{..} = do
put buildResultStatus
@ -61,6 +61,20 @@ instance Serialize BuildResult where
putTime buildResultStartTime
putTime buildResultStopTime
instance Serialize OldBuildResult where
get = do
oldBuildResultStatus <- get
oldBuildResultErrorMessage <-
(\em -> Data.Bool.bool (Just em) Nothing (Data.Text.null em))
<$> get
pure OldBuildResult{..}
put OldBuildResult{..} = do
put oldBuildResultStatus
case oldBuildResultErrorMessage of
Just err -> putText err
Nothing -> putText mempty
-- * GCAction
--
instance Serialize GCAction where

View File

@ -54,6 +54,7 @@ module System.Nix.Store.Remote.Serializer
-- * Build
, buildMode
, buildResult
, oldBuildResult
-- * Logger
, LoggerSError(..)
, activityID
@ -117,7 +118,7 @@ import qualified Data.Vector
import Data.Serializer
import System.Nix.Base (BaseEncoding(NixBase32))
import System.Nix.Build (BuildMode, BuildResult(..))
import System.Nix.Build (BuildMode, BuildResult(..), OldBuildResult(..))
import System.Nix.ContentAddress (ContentAddress)
import System.Nix.Derivation (Derivation(..), DerivationOutput(..))
import System.Nix.DerivedPath (DerivedPath, ParseOutputsError)
@ -710,7 +711,7 @@ buildResult = Serializer
buildResultIsNonDeterministic <- getS bool
buildResultStartTime <- getS time
buildResultStopTime <- getS time
pure $ BuildResult{..}
pure BuildResult{..}
, putS = \BuildResult{..} -> do
putS enum buildResultStatus
@ -721,6 +722,18 @@ buildResult = Serializer
putS time buildResultStopTime
}
oldBuildResult :: NixSerializer r SError OldBuildResult
oldBuildResult = Serializer
{ getS = do
oldBuildResultStatus <- getS enum
oldBuildResultErrorMessage <- getS maybeText
pure OldBuildResult{..}
, putS = \OldBuildResult{..} -> do
putS enum oldBuildResultStatus
putS maybeText oldBuildResultErrorMessage
}
-- * Logger
data LoggerSError

View File

@ -67,6 +67,7 @@ spec = parallel $ do
describe "Complex" $ do
prop "BuildResult" $ roundtripS buildResult
prop "OldBuildResult" $ roundtripS oldBuildResult
prop "StorePath" $
roundtripSReader @StoreDir storePath

View File

@ -14,7 +14,7 @@ import qualified Data.Either
import qualified Data.HashSet
import System.Nix.Arbitrary ()
import System.Nix.Build (BuildMode(..), BuildResult, BuildStatus(..))
import System.Nix.Build (BuildMode(..), BuildResult, BuildStatus(..), OldBuildResult(..))
import System.Nix.Derivation (Derivation(inputDrvs))
import System.Nix.Store.Remote.Arbitrary ()
import System.Nix.Store.Remote.Serialize (getDerivation, putDerivation)
@ -76,6 +76,7 @@ spec = parallel $ do
prop "BuildMode" $ roundtripS @BuildMode
prop "BuildStatus" $ roundtripS @BuildStatus
prop "BuildResult" $ roundtripS @BuildResult
prop "OldBuildResult" $ roundtripS @OldBuildResult
prop "ProtoVersion" $ roundtripS @ProtoVersion

View File

@ -27,3 +27,6 @@ instance Arbitrary BuildResult where
buildResultStopTime <- arbitrary
pure $ BuildResult{..}
deriving via GenericArbitrary OldBuildResult
instance Arbitrary OldBuildResult