remote: simplify buildDerivation

This commit is contained in:
sorki 2023-12-08 13:26:49 +01:00
parent da9b46cdc3
commit 696f9e8421
4 changed files with 17 additions and 21 deletions

View File

@ -2,39 +2,23 @@
module Main where
import Data.Default.Class (Default(def))
import Data.Text (Text)
import System.Nix.Derivation (Derivation)
import System.Nix.StorePath (StorePath)
import qualified Data.Text
import qualified Data.Text.IO
import qualified Data.Attoparsec.Text
import qualified System.Environment
import qualified System.Nix.Build
import qualified System.Nix.Derivation
import qualified System.Nix.StorePath
import qualified System.Nix.Store.Remote
parseDerivation :: FilePath -> IO (Derivation StorePath Text)
parseDerivation source = do
contents <- Data.Text.IO.readFile source
case Data.Attoparsec.Text.parseOnly
(System.Nix.Derivation.parseDerivation def) contents of
Left e -> error e
Right drv -> pure drv
main :: IO ()
main = System.Environment.getArgs >>= \case
[filename] -> do
case System.Nix.StorePath.parsePathFromText def (Data.Text.pack filename) of
Left e -> error $ show e
Right p -> do
d <- parseDerivation filename
out <-
System.Nix.Store.Remote.runStore
$ System.Nix.Store.Remote.buildDerivation
p
d
System.Nix.Build.BuildMode_Normal
print out
_ -> error "No input derivation file"

View File

@ -137,7 +137,6 @@ executable build-derivation
buildable: False
build-depends:
base >=4.12 && <5
, attoparsec
, hnix-store-core
, hnix-store-remote
, data-default-class

View File

@ -32,10 +32,8 @@ import Data.HashSet (HashSet)
import Data.Map (Map)
import Data.Set (Set)
import Data.Some (Some)
import Data.Text (Text)
import System.Nix.Build (BuildMode, BuildResult)
import System.Nix.Derivation (Derivation)
import System.Nix.DerivedPath (DerivedPath)
import System.Nix.Hash (HashAlgo(..))
import System.Nix.Nar (NarSource)
@ -52,6 +50,12 @@ import System.Nix.Store.Remote.Types.SubstituteMode (SubstituteMode)
import System.Nix.Store.Remote.Client.Core
import System.Nix.Store.Types (FileIngestionMethod(..), RepairMode(..))
import qualified Control.Monad.IO.Class
import qualified Data.Attoparsec.Text
import qualified Data.Text.IO
import qualified System.Nix.Derivation
import qualified System.Nix.StorePath
-- | Add `NarSource` to the store
addToStore
:: MonadRemoteStore m
@ -114,10 +118,18 @@ addIndirectRoot = doReq . AddIndirectRoot
buildDerivation
:: MonadRemoteStore m
=> StorePath
-> Derivation StorePath Text
-> BuildMode
-> m BuildResult
buildDerivation a b c = doReq (BuildDerivation a b c)
buildDerivation sp mode = do
sd <- getStoreDir
drvContents <-
Control.Monad.IO.Class.liftIO
$ Data.Text.IO.readFile
$ System.Nix.StorePath.storePathToFilePath sd sp
case Data.Attoparsec.Text.parseOnly
(System.Nix.Derivation.parseDerivation sd) drvContents of
Left e -> throwError $ RemoteStoreError_DerivationParse e
Right drv -> doReq (BuildDerivation sp drv mode)
-- | Build paths if they are an actual derivations.
--

View File

@ -55,6 +55,7 @@ data RemoteStoreError
= RemoteStoreError_Fixme String
| RemoteStoreError_BuildFailed
| RemoteStoreError_ClientVersionTooOld
| RemoteStoreError_DerivationParse String
| RemoteStoreError_Disconnected
| RemoteStoreError_GetAddrInfoFailed
| RemoteStoreError_GenericIncrementalLeftovers String ByteString -- when there are bytes left over after genericIncremental parser is done, (Done x leftover), first param is show x