cachix-0.3.0: src/Cachix/Client/NixVersion.hs
module Cachix.Client.NixVersion
( assertNixVersion,
parseNixVersion
)
where
import Data.Text as T
import Data.Versions
import Protolude
import System.Process (readProcessWithExitCode)
assertNixVersion :: IO (Either Text ())
assertNixVersion = do
(exitcode, out, err) <- readProcessWithExitCode "nix-env" ["--version"] mempty
unless (err == "") $ putStrLn $ "nix-env stderr: " <> err
return $ case exitcode of
ExitFailure i -> Left $ "'nix-env --version' exited with " <> show i
ExitSuccess -> parseNixVersion $ toS out
parseNixVersion :: Text -> Either Text ()
parseNixVersion output =
let verStr = T.drop 14 $ T.strip output
err = "Couldn't parse 'nix-env --version' output: " <> output
in case versioning verStr of
Left _ -> Left err
Right ver
| verStr == "" -> Left err
| ver < Ideal (SemVer 2 0 1 [] []) -> Left "Nix 2.0.2 or lower is not supported. Please upgrade: https://nixos.org/nix/"
| otherwise -> Right ()