packages feed

stackctl 1.2.0.0 → 1.3.0.0

raw patch · 8 files changed

+86/−61 lines, 8 files

Files

CHANGELOG.md view
@@ -1,4 +1,11 @@-## [_Unreleased_](https://github.com/freckle/stackctl/compare/v1.2.0.0...main)+## [_Unreleased_](https://github.com/freckle/stackctl/compare/v1.3.0.0...main)++## [v1.3.0.0](https://github.com/freckle/stackctl/compare/v1.2.0.1...v1.3.0.0)++- Fix it so commands like `version` don't need a valid AWS environment++  This changes the `Subcommand` interface and so is a major version update for+  the purposes of those using Stackctl as a library.  ## [v1.2.0.0](https://github.com/freckle/stackctl/compare/v1.1.3.1...v1.2.0.0) 
src/Stackctl/Commands.hs view
@@ -8,10 +8,7 @@  import Stackctl.Prelude -import Stackctl.AWS-import Stackctl.AWS.Scope import Stackctl.Colors-import Stackctl.Config (HasConfig) import Stackctl.DirectoryOption import Stackctl.FilterOption import Stackctl.Spec.Capture@@ -19,70 +16,68 @@ import Stackctl.Spec.Changes import Stackctl.Spec.Deploy import Stackctl.Subcommand+import Stackctl.VerboseOption import Stackctl.Version  cat-  :: ( HasLogger env-     , HasAwsScope env-     , HasConfig env-     , HasDirectoryOption env-     , HasFilterOption env-     , HasColorOption env+  :: ( HasColorOption options+     , HasVerboseOption options+     , HasDirectoryOption options+     , HasFilterOption options      )-  => Subcommand CatOptions env+  => Subcommand options CatOptions cat = Subcommand   { name = "cat"   , description = "Pretty-print specifications"-  , parse = runCatOptions-  , run = runCat+  , parse = parseCatOptions+  , run = runAppSubcommand runCat   }  capture-  :: (HasAwsScope env, HasAwsEnv env, HasConfig env, HasDirectoryOption env)-  => Subcommand CaptureOptions env+  :: ( HasColorOption options+     , HasVerboseOption options+     , HasDirectoryOption options+     )+  => Subcommand options CaptureOptions capture = Subcommand   { name = "capture"   , description = "Capture deployed Stacks as specifications"-  , parse = runCaptureOptions-  , run = runCapture+  , parse = parseCaptureOptions+  , run = runAppSubcommand runCapture   }  changes-  :: ( HasLogger env-     , HasAwsScope env-     , HasAwsEnv env-     , HasConfig env-     , HasDirectoryOption env-     , HasFilterOption env+  :: ( HasColorOption options+     , HasVerboseOption options+     , HasDirectoryOption options+     , HasFilterOption options      )-  => Subcommand ChangesOptions env+  => Subcommand options ChangesOptions changes = Subcommand   { name = "changes"   , description = "Review changes between specification and deployed state"-  , parse = runChangesOptions-  , run = runChanges+  , parse = parseChangesOptions+  , run = runAppSubcommand runChanges   }  deploy-  :: ( HasLogger env-     , HasAwsScope env-     , HasAwsEnv env-     , HasConfig env-     , HasDirectoryOption env-     , HasFilterOption env+  :: ( HasColorOption options+     , HasVerboseOption options+     , HasDirectoryOption options+     , HasFilterOption options      )-  => Subcommand DeployOptions env+  => Subcommand options DeployOptions deploy = Subcommand   { name = "deploy"   , description = "Deploy specifications"-  , parse = runDeployOptions-  , run = runDeploy+  , parse = parseDeployOptions+  , run = runAppSubcommand runDeploy   } -version :: Subcommand () env+version :: Subcommand options () version = Subcommand   { name = "version"   , description = "Output the version"   , parse = pure ()-  , run = \() -> logVersion+  , run = \() _ -> logVersion   }
src/Stackctl/Spec/Capture.hs view
@@ -1,6 +1,6 @@ module Stackctl.Spec.Capture   ( CaptureOptions(..)-  , runCaptureOptions+  , parseCaptureOptions   , runCapture   ) where @@ -26,8 +26,8 @@  -- brittany-disable-next-binding -runCaptureOptions :: Parser CaptureOptions-runCaptureOptions = CaptureOptions+parseCaptureOptions :: Parser CaptureOptions+parseCaptureOptions = CaptureOptions     <$> optional (strOption       (  short 'n'       <> long "account-name"
src/Stackctl/Spec/Cat.hs view
@@ -1,6 +1,6 @@ module Stackctl.Spec.Cat   ( CatOptions(..)-  , runCatOptions+  , parseCatOptions   , runCat   ) where @@ -36,8 +36,8 @@  -- brittany-disable-next-binding -runCatOptions :: Parser CatOptions-runCatOptions = CatOptions+parseCatOptions :: Parser CatOptions+parseCatOptions = CatOptions   <$> switch     (  long "no-stacks"     <> help "Only show templates/"
src/Stackctl/Spec/Changes.hs view
@@ -1,6 +1,6 @@ module Stackctl.Spec.Changes   ( ChangesOptions(..)-  , runChangesOptions+  , parseChangesOptions   , runChanges   ) where @@ -31,8 +31,8 @@  -- brittany-disable-next-binding -runChangesOptions :: Parser ChangesOptions-runChangesOptions = ChangesOptions+parseChangesOptions :: Parser ChangesOptions+parseChangesOptions = ChangesOptions   <$> formatOption   <*> many parameterOption   <*> many tagOption
src/Stackctl/Spec/Deploy.hs view
@@ -1,7 +1,7 @@ module Stackctl.Spec.Deploy   ( DeployOptions(..)   , DeployConfirmation(..)-  , runDeployOptions+  , parseDeployOptions   , runDeploy   ) where @@ -36,8 +36,8 @@  -- brittany-disable-next-binding -runDeployOptions :: Parser DeployOptions-runDeployOptions = DeployOptions+parseDeployOptions :: Parser DeployOptions+parseDeployOptions = DeployOptions   <$> many parameterOption   <*> many tagOption   <*> optional (strOption
src/Stackctl/Subcommand.hs view
@@ -3,47 +3,70 @@   , subcommand   , runSubcommand   , runSubcommand'+  , runAppSubcommand   ) where  import Stackctl.Prelude  import qualified Env import Options.Applicative-import qualified Stackctl.CLI as CLI-import Stackctl.Colors+import Stackctl.CLI+import Stackctl.ColorOption import Stackctl.Options import Stackctl.VerboseOption -data Subcommand options env = Subcommand+data Subcommand options subOptions = Subcommand   { name :: Text   , description :: Text-  , parse :: Parser options-  , run :: options -> CLI.AppT env IO ()+  , parse :: Parser subOptions+  , run :: subOptions -> options -> IO ()   } -subcommand :: Subcommand options env -> Mod CommandFields (CLI.AppT env IO ())+subcommand+  :: Subcommand options subOptions -> Mod CommandFields (options -> IO ()) subcommand Subcommand {..} =   command (unpack name) (run <$> withInfo description parse) -runSubcommand :: Mod CommandFields (CLI.AppT (CLI.App Options) IO ()) -> IO ()+runSubcommand :: Mod CommandFields (Options -> IO a) -> IO a runSubcommand =   runSubcommand' "Work with Stack specifications" envParser optionsParser  -- brittany-disable-next-binding  runSubcommand'-  :: (Semigroup options, HasVerboseOption options, HasColorOption options)+  :: Semigroup options   => Text   -> Env.Parser Env.Error options   -> Parser options-  -> Mod CommandFields (CLI.AppT (CLI.App options) IO ())-  -> IO ()+  -> Mod CommandFields (options -> IO a)+  -> IO a runSubcommand' title parseEnv parseCLI sp = do   (options, act) <- applyEnv     <$> Env.parse (Env.header $ unpack title) parseEnv     <*> execParser (withInfo title $ (,) <$> parseCLI <*> subparser sp)-  CLI.runAppT options act++  act options   where applyEnv env = first (env <>)++-- | Use this in the 'run' member of a 'Subcommand' that wants 'AppT'+--+-- @+--   -- ...+--   , parse = parseFooOptions+--   , run = 'runAppSubcommand' runFoo+--   }+--+-- runFoo :: (MonadReader env m, HasAws env) => FooOptions -> m ()+-- runFoo = undefined+-- @+--+runAppSubcommand+  :: (HasColorOption options, HasVerboseOption options)+  => (subOptions -> AppT (App options) IO a)+  -> subOptions+  -> options+  -> IO a+runAppSubcommand f subOptions options = runAppT options $ f subOptions  withInfo :: Text -> Parser a -> ParserInfo a withInfo d p = info (p <**> helper) $ progDesc (unpack d) <> fullDesc
stackctl.cabal view
@@ -1,6 +1,6 @@ cabal-version:   1.18 name:            stackctl-version:         1.2.0.0+version:         1.3.0.0 license:         MIT license-file:    LICENSE copyright:       2022 Renaissance Learning Inc