packages feed

cachix-0.7.0: src/Cachix/Deploy/OptionsParser.hs

module Cachix.Deploy.OptionsParser where

import Options.Applicative
import Protolude

data DeployCommand
  = Activate ActivateOptions
  | Agent AgentOptions
  deriving (Show)

parser :: Parser DeployCommand
parser =
  subparser $
    mconcat
      [ command "activate" $
          info
            (helper <*> activate)
            (progDesc "Deploy a new configuration to agents using CACHIX_ACTIVATE_TOKEN."),
        command "agent" $
          info
            (helper <*> agent)
            (progDesc "Run an agent in foreground using CACHIX_AGENT_TOKEN.")
      ]
  where
    activate = Activate <$> parserActivateOptions
    agent = Agent <$> parserAgentOptions

data AgentOptions = AgentOptions
  { name :: Text,
    profile :: Text
  }
  deriving (Show)

data ActivateOptions = ActivateOptions
  { payloadPath :: FilePath
  }
  deriving (Show)

parserAgentOptions :: Parser AgentOptions
parserAgentOptions =
  AgentOptions
    <$> strArgument
      ( metavar "AGENT-NAME"
          <> help "Unique identifier (usually hostname)."
      )
    <*> strArgument
      ( value ""
          <> metavar "NIX-PROFILE"
          <> help "Nix profile to manage. Defaults to 'system' on NixOS and 'system-profiles/system' on nix-darwin."
      )

parserActivateOptions :: Parser ActivateOptions
parserActivateOptions =
  ActivateOptions
    <$> strArgument
      ( metavar "DEPLOY-SPEC.JSON"
          <> help "https://docs.cachix.org/deploy/reference.html#deploy-json"
      )