stackctl 1.2.0.0 → 1.3.0.0
raw patch · 8 files changed
+86/−61 lines, 8 files
Files
- CHANGELOG.md +8/−1
- src/Stackctl/Commands.hs +31/−36
- src/Stackctl/Spec/Capture.hs +3/−3
- src/Stackctl/Spec/Cat.hs +3/−3
- src/Stackctl/Spec/Changes.hs +3/−3
- src/Stackctl/Spec/Deploy.hs +3/−3
- src/Stackctl/Subcommand.hs +34/−11
- stackctl.cabal +1/−1
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