cachix-1.7.5: src/Cachix/Client.hs
module Cachix.Client
( main,
)
where
import Cachix.Client.Command qualified as Command
import Cachix.Client.Config qualified as Config
import Cachix.Client.Env (cachixoptions, mkEnv)
import Cachix.Client.Exception (CachixException (DeprecatedCommand))
import Cachix.Client.OptionsParser
( CachixCommand (..),
DaemonCommand (..),
PushArguments (..),
getOpts,
)
import Cachix.Client.Version (cachixVersion)
import Cachix.Daemon qualified as Daemon
import Cachix.Daemon.Client qualified as Daemon.Client
import Cachix.Deploy.ActivateCommand as ActivateCommand
import Cachix.Deploy.Agent qualified as AgentCommand
import Cachix.Deploy.OptionsParser qualified as DeployOptions
import Hercules.CNix qualified as CNix
import Hercules.CNix.Util qualified as CNix.Util
import Protolude
import System.Console.AsciiProgress (displayConsoleRegions)
import System.Posix.Signals qualified as Signal
main :: IO ()
main = displayConsoleRegions $ do
(flags, command) <- getOpts
env <- mkEnv flags
initNixStore
installSignalHandlers
let cachixOptions = cachixoptions env
case command of
AuthToken token -> Command.authtoken env token
Config configCommand -> Config.run cachixOptions configCommand
Daemon (DaemonRun daemonOptions pushOptions mcacheName) -> Daemon.start env daemonOptions pushOptions mcacheName
Daemon (DaemonStop daemonOptions) -> Daemon.Client.stop env daemonOptions
Daemon (DaemonPushPaths daemonOptions storePaths) -> Daemon.Client.push env daemonOptions storePaths
Daemon (DaemonWatchExec pushOptions cacheName cmd args) -> Command.watchExecDaemon env pushOptions cacheName cmd args
DeployCommand (DeployOptions.Agent opts) -> AgentCommand.run cachixOptions opts
DeployCommand (DeployOptions.Activate opts) -> ActivateCommand.run env opts
GenerateKeypair name -> Command.generateKeypair env name
Import pushOptions name uri -> Command.import' env pushOptions name uri
Pin pingArgs -> Command.pin env pingArgs
Push (PushPaths opts name cliPaths) -> Command.push env opts name cliPaths
Push (PushWatchStore _ _) ->
throwIO $ DeprecatedCommand "DEPRECATED: cachix watch-store has replaced cachix push --watch-store."
Remove name -> Command.remove env name
Use name useOptions -> Command.use env name useOptions
Version -> putText cachixVersion
WatchExec watchExecMode pushArgs name cmd args ->
Command.watchExec env watchExecMode pushArgs name cmd args
WatchStore watchArgs name -> Command.watchStore env watchArgs name
-- | Install client-wide signal handlers.
installSignalHandlers :: IO ()
installSignalHandlers = do
-- Ignore sigPIPE.
-- The default handler terminates the process.
-- WARN: may be reset to SIG_DFL when initializing the Nix library.
_ <- Signal.installHandler Signal.sigPIPE Signal.Ignore Nothing
return ()
-- | Initialize the Nix library via CNix.
initNixStore :: IO ()
initNixStore = do
signalset <- Signal.getSignalMask
-- Initialize the Nix library
CNix.init
-- darwin: restore the signal mask modified by Nix
-- https://github.com/cachix/cachix/issues/501
Signal.setSignalMask signalset
-- Interrupt Nix before throwing UserInterrupt
CNix.Util.installDefaultSigINTHandler