From f9b7e4413ba4c5a96563c194c8a72d466ea13d6c Mon Sep 17 00:00:00 2001 From: patrick brisbin Date: Fri, 14 Feb 2025 07:27:42 -0500 Subject: [PATCH 1/5] chore(style): update fourmolu.yaml for v0.17 I've kept some sorting options as default for now to avoid churn. We're also not totally sure we like them (such as sorting constraints and how it changes type-variable order). We can enable them as later commits if we want. --- fourmolu.yaml | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/fourmolu.yaml b/fourmolu.yaml index 9211e93..292304b 100644 --- a/fourmolu.yaml +++ b/fourmolu.yaml @@ -1,15 +1,30 @@ indentation: 2 -column-limit: 80 # ignored until v12 / ghc-9.6 +column-limit: 80 # needs v0.12 function-arrows: leading comma-style: leading # default import-export-style: leading +import-grouping: # needs v0.17 + - name: "Preludes" + rules: + - glob: Prelude + - glob: "**.Prelude" + - glob: RIO + - glob: Stackctl.Test.App + - name: "Everything else" + rules: + - match: all + priority: 100 indent-wheres: false # default record-brace-space: true newlines-between-decls: 1 # default haddock-style: single-line let-style: mixed in-style: left-align -single-constraint-parens: never # ignored until v12 / ghc-9.6 +single-constraint-parens: never # needs v0.12 +sort-constraints: false # default +sort-derived-classes: false # default +sort-derived-clauses: false # default +trailing-section-operators: false # needs v0.17 unicode: never # default respectful: true # default From 7f5ae292448f608987bceab115ce15985784e87f Mon Sep 17 00:00:00 2001 From: patrick brisbin Date: Fri, 14 Feb 2025 07:37:30 -0500 Subject: [PATCH 2/5] chore(style): group prelude imports --- src/Stackctl/Version.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Stackctl/Version.hs b/src/Stackctl/Version.hs index b768081..f1871df 100644 --- a/src/Stackctl/Version.hs +++ b/src/Stackctl/Version.hs @@ -3,10 +3,10 @@ module Stackctl.Version ) where import Stackctl.Prelude +import Prelude (putStrLn) import Data.Version import qualified Paths_stackctl as Pkg -import Prelude (putStrLn) logVersion :: MonadIO m => m () logVersion = liftIO $ putStrLn $ ("Stackctl v" <>) $ showVersion Pkg.version From d5c966314f535b21d4e81264b4b538d3d8b86250 Mon Sep 17 00:00:00 2001 From: patrick brisbin Date: Fri, 14 Feb 2025 07:37:10 -0500 Subject: [PATCH 3/5] chore(style): reformat with new fourmolu fixities Newer fourmolu understands more fixities, which means it is indenting a few more operators further than others. These could be configured around, but I think less configuration is better and am only leaving the current lens operator fixities we had already. --- app/Main.hs | 10 ++--- src/Stackctl/AWS/CloudFormation.hs | 52 +++++++++++++------------- src/Stackctl/AWS/Core.hs | 8 ++-- src/Stackctl/AWS/Lambda.hs | 10 ++--- src/Stackctl/AWS/Scope.hs | 32 +++++++--------- src/Stackctl/Action.hs | 8 ++-- src/Stackctl/Config.hs | 7 ++-- src/Stackctl/Config/RequiredVersion.hs | 6 +-- src/Stackctl/FilterOption.hs | 4 +- src/Stackctl/Options.hs | 10 ++--- src/Stackctl/Spec/Capture.hs | 5 +-- src/Stackctl/Spec/Cat.hs | 14 +++---- src/Stackctl/Spec/Changes/Format.hs | 45 +++++++++++----------- src/Stackctl/Spec/Deploy.hs | 6 +-- src/Stackctl/Spec/Discover.hs | 23 ++++++------ src/Stackctl/Spec/List.hs | 2 +- src/Stackctl/StackSpec.hs | 6 +-- src/Stackctl/StackSpecPath.hs | 14 +++---- src/Stackctl/StackSpecYaml.hs | 6 +-- test/Stackctl/AWS/EC2Spec.hs | 2 +- test/Stackctl/AWS/LambdaSpec.hs | 8 ++-- test/Stackctl/ConfigSpec.hs | 9 ++--- test/Stackctl/Test/App.hs | 3 +- 23 files changed, 137 insertions(+), 153 deletions(-) diff --git a/app/Main.hs b/app/Main.hs index cecba33..3c4b678 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -11,8 +11,8 @@ main :: IO () main = runSubcommand $ subcommand Commands.cat - <> subcommand Commands.capture - <> subcommand Commands.changes - <> subcommand Commands.deploy - <> subcommand Commands.list - <> subcommand Commands.version + <> subcommand Commands.capture + <> subcommand Commands.changes + <> subcommand Commands.deploy + <> subcommand Commands.list + <> subcommand Commands.version diff --git a/src/Stackctl/AWS/CloudFormation.hs b/src/Stackctl/AWS/CloudFormation.hs index 0e21dc0..728b52b 100644 --- a/src/Stackctl/AWS/CloudFormation.hs +++ b/src/Stackctl/AWS/CloudFormation.hs @@ -194,7 +194,7 @@ awsCloudFormationDescribeStackMaybe stackName = handling_ _ValidationError (pure Nothing) $ awsSilently -- don't log said 400 $ Just - <$> awsCloudFormationDescribeStack stackName + <$> awsCloudFormationDescribeStack stackName awsCloudFormationDescribeStackOutputs :: (MonadIO m, MonadAWS m) @@ -218,10 +218,10 @@ awsCloudFormationDescribeStackEvents stackName mLastId = do runConduit $ AWS.paginate req - .| mapC (fromMaybe [] . (^. describeStackEventsResponse_stackEvents)) - .| concatC - .| takeWhileC (\e -> Just (e ^. stackEvent_eventId) /= mLastId) - .| sinkList + .| mapC (fromMaybe [] . (^. describeStackEventsResponse_stackEvents)) + .| concatC + .| takeWhileC (\e -> Just (e ^. stackEvent_eventId) /= mLastId) + .| sinkList awsCloudFormationGetStackNamesMatching :: (MonadIO m, MonadAWS m) @@ -232,12 +232,12 @@ awsCloudFormationGetStackNamesMatching p = do runConduit $ AWS.paginate req - .| concatMapC (^. listStacksResponse_stackSummaries) - .| concatC - .| mapC (^. stackSummary_stackName) - .| filterC ((p `match`) . unpack) - .| mapC StackName - .| sinkList + .| concatMapC (^. listStacksResponse_stackSummaries) + .| concatC + .| mapC (^. stackSummary_stackName) + .| filterC ((p `match`) . unpack) + .| mapC StackName + .| sinkList awsCloudFormationGetMostRecentStackEventId :: (MonadIO m, MonadAWS m) @@ -258,9 +258,9 @@ awsCloudFormationGetMostRecentStackEventId stackName = do AWS.simple req $ pure - . getFirstEventId - . fromMaybe [] - . (^. describeStackEventsResponse_stackEvents) + . getFirstEventId + . fromMaybe [] + . (^. describeStackEventsResponse_stackEvents) awsCloudFormationDeleteStack :: (MonadIO m, MonadLogger m, MonadAWS m) @@ -314,7 +314,7 @@ awaitStack awaitStack waiter stackName = AWS.await waiter $ newDescribeStacks - & describeStacks_stackName ?~ unStackName stackName + & describeStacks_stackName ?~ unStackName stackName makeParameter :: Text -> Maybe Text -> Parameter makeParameter k v = @@ -424,7 +424,7 @@ awsCloudFormationCreateChangeSet stackName mStackDescription stackTemplate param logInfo $ "Creating changeset..." - :# ["name" .= name, "type" .= changeSetType] + :# ["name" .= name, "type" .= changeSetType] csId <- AWS.simple req (^. createChangeSetResponse_id) logDebug "Awaiting CREATE_COMPLETE" @@ -471,16 +471,16 @@ awsCloudFormationDeleteAllChangeSets stackName = do logInfo "Deleting all changesets" runConduit $ AWS.paginate (newListChangeSets $ unStackName stackName) - .| concatMapC - ( \resp -> fromMaybe [] $ do - ss <- resp ^. listChangeSetsResponse_summaries - pure $ mapMaybe Summary.changeSetId ss - ) - .| mapM_C - ( \csId -> do - logInfo $ "Enqueing delete" :# ["changeSetId" .= csId] - void $ AWS.send $ newDeleteChangeSet csId - ) + .| concatMapC + ( \resp -> fromMaybe [] $ do + ss <- resp ^. listChangeSetsResponse_summaries + pure $ mapMaybe Summary.changeSetId ss + ) + .| mapM_C + ( \csId -> do + logInfo $ "Enqueing delete" :# ["changeSetId" .= csId] + void $ AWS.send $ newDeleteChangeSet csId + ) -- | Did we abandoned this Stack's first ever ChangeSet? -- diff --git a/src/Stackctl/AWS/Core.hs b/src/Stackctl/AWS/Core.hs index dba4001..b0db1f1 100644 --- a/src/Stackctl/AWS/Core.hs +++ b/src/Stackctl/AWS/Core.hs @@ -160,10 +160,10 @@ handlingServiceError = handling _ServiceError $ \e -> do logError $ "Exiting due to AWS Service error" - :# [ "code" .= toText (e ^. serviceError_code) - , "message" .= fmap toText (e ^. serviceError_message) - , "requestId" .= fmap toText (e ^. serviceError_requestId) - ] + :# [ "code" .= toText (e ^. serviceError_code) + , "message" .= fmap toText (e ^. serviceError_message) + , "requestId" .= fmap toText (e ^. serviceError_requestId) + ] exitFailure formatServiceError :: ServiceError -> Text diff --git a/src/Stackctl/AWS/Lambda.hs b/src/Stackctl/AWS/Lambda.hs index 61684ae..c0c9fba 100644 --- a/src/Stackctl/AWS/Lambda.hs +++ b/src/Stackctl/AWS/Lambda.hs @@ -93,11 +93,11 @@ awsLambdaInvoke name payload = do logDebug $ "Function result" - :# [ "name" .= name - , "status" .= status - , "error" .= mError - , "functionError" .= mFunctionError - ] + :# [ "name" .= name + , "status" .= status + , "error" .= mError + , "functionError" .= mFunctionError + ] pure $ if diff --git a/src/Stackctl/AWS/Scope.hs b/src/Stackctl/AWS/Scope.hs index 3d3f72e..909ec8d 100644 --- a/src/Stackctl/AWS/Scope.hs +++ b/src/Stackctl/AWS/Scope.hs @@ -26,20 +26,14 @@ awsScopeSpecPatterns :: AwsScope -> [Pattern] awsScopeSpecPatterns AwsScope {..} = [ compile $ "stacks" - unpack (unAccountId awsAccountId) - <> ".*" - unpack (fromRegion awsRegion) - <> "**" - "*" - <.> "yaml" + unpack (unAccountId awsAccountId) <> ".*" + unpack (fromRegion awsRegion) <> "**" + "*" <.> "yaml" , compile $ "stacks" - "*." - <> unpack (unAccountId awsAccountId) - unpack (fromRegion awsRegion) - <> "**" - "*" - <.> "yaml" + "*." <> unpack (unAccountId awsAccountId) + unpack (fromRegion awsRegion) <> "**" + "*" <.> "yaml" ] awsScopeSpecStackName :: AwsScope -> FilePath -> Maybe StackName @@ -50,13 +44,13 @@ awsScopeSpecStackName scope path = do -- pretty fast and loose with the "parsing" step pure $ path -- stacks/account/region/x/y.yaml - & splitPath -- [stacks/, account/, region/, x/, y.yaml] - & drop 3 -- [x, y.yaml] - & joinPath -- x/y.yaml - & dropExtension -- x/y - & pack - & T.replace "/" "-" -- x-y - & StackName + & splitPath -- [stacks/, account/, region/, x/, y.yaml] + & drop 3 -- [x, y.yaml] + & joinPath -- x/y.yaml + & dropExtension -- x/y + & pack + & T.replace "/" "-" -- x-y + & StackName class HasAwsScope env where awsScopeL :: Lens' env AwsScope diff --git a/src/Stackctl/Action.hs b/src/Stackctl/Action.hs index ffc496a..ed05c0a 100644 --- a/src/Stackctl/Action.hs +++ b/src/Stackctl/Action.hs @@ -128,10 +128,10 @@ runAction stackName Action {on, run} = do Nothing -> do logError $ "Output not found" - :# [ "stackName" .= stackName - , "desiredOutput" .= outputName - , "availableOutputs" .= map (^. output_outputKey) outputs - ] + :# [ "stackName" .= stackName + , "desiredOutput" .= outputName + , "availableOutputs" .= map (^. output_outputKey) outputs + ] throwIO NoSuchOutput Just name -> invoke name InvokeLambdaByName name -> invoke name diff --git a/src/Stackctl/Config.hs b/src/Stackctl/Config.hs index 9cf2148..2092179 100644 --- a/src/Stackctl/Config.hs +++ b/src/Stackctl/Config.hs @@ -75,9 +75,10 @@ loadConfigOrExit = either die pure =<< loadConfig loadConfig :: MonadIO m => m (Either ConfigError Config) loadConfig = - runExceptT $ getConfigFile >>= \case - Nothing -> pure emptyConfig - Just cf -> loadConfigFrom cf + runExceptT + $ getConfigFile >>= \case + Nothing -> pure emptyConfig + Just cf -> loadConfigFrom cf loadConfigFrom :: (MonadIO m, MonadError ConfigError m) => FilePath -> m Config loadConfigFrom path = loadConfigFromBytes =<< liftIO (readFileBinary path) diff --git a/src/Stackctl/Config/RequiredVersion.hs b/src/Stackctl/Config/RequiredVersion.hs index 56e119e..842f2f3 100644 --- a/src/Stackctl/Config/RequiredVersion.hs +++ b/src/Stackctl/Config/RequiredVersion.hs @@ -54,7 +54,7 @@ requiredVersionFromText = fromWords . T.words ws -> Left $ show (unpack $ T.unwords ws) - <> " did not parse as optional operator and version string" + <> " did not parse as optional operator and version string" parseRequiredVersion :: Text -> Text -> Either String RequiredVersion parseRequiredVersion op w = RequiredVersion <$> parseOp op <*> parseVersion w @@ -71,8 +71,8 @@ requiredVersionFromText = fromWords . T.words op -> Left $ "Invalid comparison operator (" - <> unpack op - <> "), may only be =, <, <=, >, >=, or =~" + <> unpack op + <> "), may only be =, <, <=, >, >=, or =~" parseVersion :: Text -> Either String Version parseVersion t = diff --git a/src/Stackctl/FilterOption.hs b/src/Stackctl/FilterOption.hs index 0310e50..90ae154 100644 --- a/src/Stackctl/FilterOption.hs +++ b/src/Stackctl/FilterOption.hs @@ -44,8 +44,8 @@ envFilterOption items = var "FILTERS" <|> var "FILTER" Env.var (first Env.UnreadError . readFilterOption) name $ Env.help $ "Filter " - <> items - <> " by patterns" + <> items + <> " by patterns" filterOption :: String -> Parser FilterOption filterOption items = diff --git a/src/Stackctl/Options.hs b/src/Stackctl/Options.hs index ba3f927..6f472bc 100644 --- a/src/Stackctl/Options.hs +++ b/src/Stackctl/Options.hs @@ -55,11 +55,11 @@ envParser :: Env.Parser Env.Error Options envParser = Env.prefixed "STACKCTL_" $ Options - <$> optional envDirectoryOption - <*> optional (envFilterOption "specifications") - <*> pure mempty -- use LOG_COLOR - <*> pure mempty -- use LOG_LEVEL - <*> optional envAutoSSOOption + <$> optional envDirectoryOption + <*> optional (envFilterOption "specifications") + <*> pure mempty -- use LOG_COLOR + <*> pure mempty -- use LOG_LEVEL + <*> optional envAutoSSOOption -- brittany-disable-next-binding diff --git a/src/Stackctl/Spec/Capture.hs b/src/Stackctl/Spec/Capture.hs index 2332edd..d71d790 100644 --- a/src/Stackctl/Spec/Capture.hs +++ b/src/Stackctl/Spec/Capture.hs @@ -132,9 +132,8 @@ runCapture CaptureOptions {..} = do case results of [] -> do logError - $ "No Active Stacks match " - <> pack (decompile scoStackName) - :# [] + $ "No Active Stacks match " <> pack (decompile scoStackName) + :# [] exitFailure [stackName] -> do stack <- awsCloudFormationDescribeStack stackName diff --git a/src/Stackctl/Spec/Cat.hs b/src/Stackctl/Spec/Cat.hs index bf62dd3..3ef1ffa 100644 --- a/src/Stackctl/Spec/Cat.hs +++ b/src/Stackctl/Spec/Cat.hs @@ -138,11 +138,11 @@ prettyPrintStackSpecYaml Colors {..} name StackSpecYaml {..} = kvs <- f <$> mA pure $ [cyan label <> ":"] - <> map - ( \(k, mV) -> - " " <> cyan k <> ":" <> maybe "" (\v -> " " <> green v) mV - ) - kvs + <> map + ( \(k, mV) -> + " " <> cyan k <> ":" <> maybe "" (\v -> " " <> green v) mV + ) + kvs ppList :: Text -> (a -> [Text]) -> Maybe a -> [Text] ppList label f = maybe [] (((cyan label <> ":") :) . f) @@ -186,8 +186,8 @@ prettyPrintTemplate Colors {..} val = displayObjectProperty = displayPropertyWith @(HashMap Text Value) $ map ((" - " <>) . green) - . sort - . HashMap.keys + . sort + . HashMap.keys displayPropertyWith :: (FromJSON a, ToJSON a) => (a -> [Text]) -> Text -> [Text] diff --git a/src/Stackctl/Spec/Changes/Format.hs b/src/Stackctl/Spec/Changes/Format.hs index ddb5291..359a27c 100644 --- a/src/Stackctl/Spec/Changes/Format.hs +++ b/src/Stackctl/Spec/Changes/Format.hs @@ -76,10 +76,11 @@ formatTTY colors@Colors {..} name mChangeSet = case (mChangeSet, rChanges) of (Nothing, _) -> "No changes for " <> name (_, Nothing) -> "Metadata only changes (e.g. Tags or Outputs)" (_, Just rcs) -> - ("\n" <>) $ (<> "\n") $ mconcat $ ("Changes for " <> cyan name <> ":") - : map - (("\n " <>) . formatResourceChange) - (NE.toList rcs) + ("\n" <>) + $ (<> "\n") + $ mconcat + $ ("Changes for " <> cyan name <> ":") + : map (("\n " <>) . formatResourceChange) (NE.toList rcs) where rChanges = do cs <- mChangeSet @@ -149,20 +150,20 @@ commentBody omitFull cs rcs = , "\n| Action | Logical Id | Physical Id | Type | Replacement | Scope | Details |" , "\n| --- | --- | --- | --- | --- | --- | --- |" ] - <> map commentTableRow (NE.toList rcs) - <> case omitFull of - OmitFull -> [] - IncludeFull -> - [ "\n" - , "\n
" - , "\nFull changes" - , "\n" - , "\n```json" - , "\n" <> changeSetJSON cs - , "\n```" - , "\n" - , "\n
" - ] + <> map commentTableRow (NE.toList rcs) + <> case omitFull of + OmitFull -> [] + IncludeFull -> + [ "\n" + , "\n
" + , "\nFull changes" + , "\n" + , "\n```json" + , "\n" <> changeSetJSON cs + , "\n```" + , "\n" + , "\n
" + ] commentTableRow :: ResourceChange -> Text commentTableRow ResourceChange' {..} = @@ -194,10 +195,10 @@ formatDetail Colors {..} ResourceChangeDetail' {..} = do pure $ toText c - <> maybe "" ((" in " <>) . toText) attr - <> maybe "" (\x -> " (" <> magenta (toText x) <> ")") n - <> maybe "" ((", recreation " <>) . formatRR) rr - <> maybe "" ((", caused by " <>) . toText) causingEntity + <> maybe "" ((" in " <>) . toText) attr + <> maybe "" (\x -> " (" <> magenta (toText x) <> ")") n + <> maybe "" ((", recreation " <>) . formatRR) rr + <> maybe "" ((", caused by " <>) . toText) causingEntity where formatRR = \case x@RequiresRecreation_Always -> red (toText x) diff --git a/src/Stackctl/Spec/Deploy.hs b/src/Stackctl/Spec/Deploy.hs index 08295b6..d8c2913 100644 --- a/src/Stackctl/Spec/Deploy.hs +++ b/src/Stackctl/Spec/Deploy.hs @@ -266,8 +266,7 @@ formatStackEvent Colors {..} e = do timestamp <- liftIO $ formatTime defaultTimeLocale "%F %T %Z" - <$> utcToLocalZonedTime - (e ^. stackEvent_timestamp) + <$> utcToLocalZonedTime (e ^. stackEvent_timestamp) pure $ mconcat @@ -276,8 +275,7 @@ formatStackEvent Colors {..} e = do , maybe "" colorStatus $ e ^. stackEvent_resourceStatus , maybe "" (magenta . (" " <>)) $ e ^. stackEvent_logicalResourceId , maybe "" ((\x -> " (" <> x <> ")") . T.strip) - $ e - ^. stackEvent_resourceStatusReason + $ e ^. stackEvent_resourceStatusReason ] where colorStatus = \case diff --git a/src/Stackctl/Spec/Discover.hs b/src/Stackctl/Spec/Discover.hs index a0b6e2a..bcec218 100644 --- a/src/Stackctl/Spec/Discover.hs +++ b/src/Stackctl/Spec/Discover.hs @@ -105,9 +105,9 @@ checkForDuplicateStackNames = logError $ "Multiple specifications produced the same Stack name" - :# [ "name" .= stackSpecPathStackName (NE.head specPaths) - , "paths" .= collidingPaths - ] + :# [ "name" .= stackSpecPathStackName (NE.head specPaths) + , "paths" .= collidingPaths + ] exitFailure @@ -130,18 +130,17 @@ checkForUnknownDepends known spec = for_ depends $ \depend -> do let (nearest, _distance) = NE.minimumBy1 (comparing snd) - $ (id &&& getDistance depend) - <$> known + $ (id &&& getDistance depend) <$> known logWarn $ "Stack lists dependency that does not exist" - :# [ "dependency" - .= ( unStackName (stackSpecStackName spec) - <> " -> " - <> unStackName depend - ) - , "hint" .= ("Did you mean " <> unStackName nearest <> "?") - ] + :# [ "dependency" + .= ( unStackName (stackSpecStackName spec) + <> " -> " + <> unStackName depend + ) + , "hint" .= ("Did you mean " <> unStackName nearest <> "?") + ] getDistance = levenshtein `on` unStackName diff --git a/src/Stackctl/Spec/List.hs b/src/Stackctl/Spec/List.hs index 90aecac..097717a 100644 --- a/src/Stackctl/Spec/List.hs +++ b/src/Stackctl/Spec/List.hs @@ -79,7 +79,7 @@ runList ListOptions {..} = do when loLegend $ pushLoggerLn $ "\nLegend:\n " - <> T.intercalate ", " (map legendItem [minBound .. maxBound]) + <> T.intercalate ", " (map legendItem [minBound .. maxBound]) data Indicator = Deployed diff --git a/src/Stackctl/StackSpec.hs b/src/Stackctl/StackSpec.hs index 1ea2f17..e2e0300 100644 --- a/src/Stackctl/StackSpec.hs +++ b/src/Stackctl/StackSpec.hs @@ -81,8 +81,7 @@ stackSpecTemplate :: StackSpec -> StackTemplate stackSpecTemplate spec = StackTemplate $ FilePath.normalise - $ ssSpecRoot spec - stackSpecTemplateFile spec + $ ssSpecRoot spec stackSpecTemplateFile spec stackSpecParameters :: StackSpec -> [Parameter] stackSpecParameters = @@ -197,8 +196,7 @@ createChangeSet spec parameters tags = (stackSpecStackName spec) (stackSpecStackDescription spec) (stackSpecTemplate spec) - ( nubOrdOn (^. parameter_parameterKey) $ parameters <> stackSpecParameters spec - ) + (nubOrdOn (^. parameter_parameterKey) $ parameters <> stackSpecParameters spec) (stackSpecCapabilities spec) (nubOrdOn (^. tag_key) $ tags <> stackSpecTags spec) diff --git a/src/Stackctl/StackSpecPath.hs b/src/Stackctl/StackSpecPath.hs index a5ce673..8500b61 100644 --- a/src/Stackctl/StackSpecPath.hs +++ b/src/Stackctl/StackSpecPath.hs @@ -83,16 +83,16 @@ stackSpecPathFromFilePath awsScope@AwsScope {..} path = unless (pathAccountId == awsAccountId) $ Left $ "Unexpected account: " - <> unpack (unAccountId pathAccountId) - <> " != " - <> unpack (unAccountId awsAccountId) + <> unpack (unAccountId pathAccountId) + <> " != " + <> unpack (unAccountId awsAccountId) unless (unpack (fromRegion awsRegion) == pathRegion) $ Left $ "Unexpected region: " - <> pathRegion - <> " != " - <> unpack (fromRegion awsRegion) + <> pathRegion + <> " != " + <> unpack (fromRegion awsRegion) stackName <- maybe (Left "Must end in .yaml") (Right . StackName) @@ -117,6 +117,6 @@ parseAccountPath path = case second (T.drop 1) $ T.breakOn "." $ pack path of _ -> Left $ "Path matches neither {account-id}.{account-name}, nor {account-name}.{account-id}: " - <> path + <> path where isAccountId x = T.length x == 12 && T.all isDigit x diff --git a/src/Stackctl/StackSpecYaml.hs b/src/Stackctl/StackSpecYaml.hs index 7ae052c..7cb0e60 100644 --- a/src/Stackctl/StackSpecYaml.hs +++ b/src/Stackctl/StackSpecYaml.hs @@ -85,8 +85,7 @@ instance Semigroup ParametersYaml where $ KeyMap.toList $ KeyMap.fromListWith (<>) $ map (pyKey &&& pyValue) - $ bs -- flipped to make sure Last-wins - <> as + $ bs <> as -- flipped to make sure Last-wins instance FromJSON ParametersYaml where parseJSON = \case @@ -215,8 +214,7 @@ instance Semigroup TagsYaml where $ HashMap.toList $ HashMap.fromList $ map (toPair . unTagYaml) - $ as - <> bs + $ as <> bs where toPair :: Tag -> (Text, Text) toPair = (^. tag_key) &&& (^. tag_value) diff --git a/test/Stackctl/AWS/EC2Spec.hs b/test/Stackctl/AWS/EC2Spec.hs index df71979..4f1d8a0 100644 --- a/test/Stackctl/AWS/EC2Spec.hs +++ b/test/Stackctl/AWS/EC2Spec.hs @@ -23,7 +23,7 @@ spec = do $ Right $ newDescribeAvailabilityZonesResponse 200 & describeAvailabilityZonesResponse_availabilityZones - ?~ zones + ?~ zones withMatcher matcher awsEc2DescribeFirstAvailabilityZoneRegionName `shouldReturn` "us-east-1" diff --git a/test/Stackctl/AWS/LambdaSpec.hs b/test/Stackctl/AWS/LambdaSpec.hs index bfb3b92..6226718 100644 --- a/test/Stackctl/AWS/LambdaSpec.hs +++ b/test/Stackctl/AWS/LambdaSpec.hs @@ -33,18 +33,16 @@ spec = do [ SendMatcher (isInvocation "lambda-1") $ Right $ newInvokeResponse 200 - & invokeResponse_payload - ?~ "" + & invokeResponse_payload ?~ "" , SendMatcher (isInvocation "lambda-2") $ Right $ newInvokeResponse 200 - & invokeResponse_payload - ?~ BSL.toStrict (encode lambdaError) + & invokeResponse_payload ?~ BSL.toStrict (encode lambdaError) , SendMatcher (isInvocation "lambda-3") $ Right $ newInvokeResponse 500 & (invokeResponse_payload ?~ "") - . (invokeResponse_functionError ?~ "") + . (invokeResponse_functionError ?~ "") ] withMatchers matchers $ do diff --git a/test/Stackctl/ConfigSpec.hs b/test/Stackctl/ConfigSpec.hs index 971c25b..3d25d07 100644 --- a/test/Stackctl/ConfigSpec.hs +++ b/test/Stackctl/ConfigSpec.hs @@ -32,8 +32,7 @@ spec = do case result of Left err -> do expectationFailure - $ "Expected to load a Config, got error: " - <> show err + $ "Expected to load a Config, got error: " <> show err Right config -> do configParameters config `shouldBe` Just (toParametersYaml [("Some", Just "Parameter")]) @@ -56,9 +55,9 @@ spec = do Right config = loadConfigFromBytes $ "defaults:" - <> "\n tags:" - <> "\n From: Defaults" - <> "\n Keep: \"You?\"" + <> "\n tags:" + <> "\n From: Defaults" + <> "\n Keep: \"You?\"" Just tags = ssyTags (applyConfig config specYaml) diff --git a/test/Stackctl/Test/App.hs b/test/Stackctl/Test/App.hs index afa45c9..3e4f436 100644 --- a/test/Stackctl/Test/App.hs +++ b/test/Stackctl/Test/App.hs @@ -92,5 +92,4 @@ testAppStackFilePath base = "stacks" "0123456789.test" "us-east-1" - unpack base - <.> "yaml" + unpack base <.> "yaml" From 83896454af52d2b60fb5d89a279ad497b75be2f3 Mon Sep 17 00:00:00 2001 From: patrick brisbin Date: Fri, 14 Feb 2025 09:13:21 -0500 Subject: [PATCH 4/5] chore(style): use fourmolu v0.17 with restyled --- .restyled.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.restyled.yaml b/.restyled.yaml index 20a1cec..c25b270 100644 --- a/.restyled.yaml +++ b/.restyled.yaml @@ -4,7 +4,7 @@ restylers: enabled: false - fourmolu: image: - tag: v0.14.1.0 + tag: v0.17.0.0 - stylish-haskell: enabled: false - prettier-markdown: From b65226d8bfe9c25ce3a5d2aa5c79f84a3f005af6 Mon Sep 17 00:00:00 2001 From: patrick brisbin Date: Fri, 14 Feb 2025 09:46:58 -0500 Subject: [PATCH 5/5] chore(ci): add restyled workflow --- .github/workflows/restyled.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/restyled.yml diff --git a/.github/workflows/restyled.yml b/.github/workflows/restyled.yml new file mode 100644 index 0000000..72720ab --- /dev/null +++ b/.github/workflows/restyled.yml @@ -0,0 +1,22 @@ +name: Restyled + +on: + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + pull-requests: write + +jobs: + restyled: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: restyled-io/actions/setup@v4 + - uses: restyled-io/actions/run@v4 + with: + suggestions: true