Skip to content

Commit

Permalink
Everything should be working. Tidy up.
Browse files Browse the repository at this point in the history
  • Loading branch information
Jimbo4350 committed Oct 2, 2024
1 parent 9a60b88 commit 35fbcbe
Show file tree
Hide file tree
Showing 15 changed files with 462 additions and 24 deletions.
5 changes: 5 additions & 0 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,8 @@ write-ghc-environment-files: always
-- Do NOT add more source-repository-package stanzas here unless they are strictly
-- temporary! Please read the section in CONTRIBUTING about updating dependencies.

source-repository-package
type: git
location: [email protected]:IntersectMBO/cardano-api.git
tag: 00244228575460b58abeb073e1150aa39e89593f
subdir: cardano-api
4 changes: 4 additions & 0 deletions cardano-cli/cardano-cli.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ library
Cardano.CLI.Commands.Debug.TransactionView
Cardano.CLI.Commands.Hash
Cardano.CLI.Commands.Ping
Cardano.CLI.Compatible.Commands
Cardano.CLI.Compatible.Governance
Cardano.CLI.Compatible.Run
Cardano.CLI.Compatible.Transaction
Cardano.CLI.Environment
Cardano.CLI.EraBased.Commands
Cardano.CLI.EraBased.Commands.Address
Expand Down
3 changes: 3 additions & 0 deletions cardano-cli/src/Cardano/CLI/Commands.hs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import Cardano.CLI.Byron.Commands (ByronCommand)
import Cardano.CLI.Commands.Debug
import Cardano.CLI.Commands.Hash (HashCmds)
import Cardano.CLI.Commands.Ping (PingCmd (..))
import Cardano.CLI.Compatible.Commands
import Cardano.CLI.EraBased.Commands
import Cardano.CLI.Legacy.Commands

Expand All @@ -19,6 +20,8 @@ data ClientCommand
= AnyEraCommand AnyEraCommand
| -- | Byron Related Commands
ByronCommand ByronCommand
| -- | Backward compatible commands for testing only
CompatibaleCommands AnyCompatibleCommand
| -- | Era-agnostic hashing commands
HashCmds HashCmds
| -- | Legacy shelley-based Commands
Expand Down
64 changes: 54 additions & 10 deletions cardano-cli/src/Cardano/CLI/Compatible/Commands.hs
Original file line number Diff line number Diff line change
@@ -1,30 +1,74 @@
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}

{-
This module is concerned with providing backwards compatible cli commands for our internal
testing needs. The intention is to restrict as much as possible which functionality we maintain backwards
compatibility for.
-}

module Cardano.CLI.Compatible.Commands
(
( AnyCompatibleCommand (..)
, CompatibleCommand (..)
, pAnyCompatibleCommand
, renderAnyCompatibleCommand
)
where

import Cardano.Api
import Options.Applicative
import Cardano.Api

import Cardano.CLI.Compatible.Governance
import Cardano.CLI.Compatible.Transaction
import Cardano.CLI.Environment
import Cardano.CLI.Parser

import Data.Text
import Options.Applicative
import qualified Options.Applicative as Opt

data AnyCompatibleCommand where
AnyCompatibleCommand :: ShelleyBasedEra era -> CompatibleCommand era -> AnyCompatibleCommand
AnyCompatibleCommand :: CompatibleCommand era -> AnyCompatibleCommand

data CompatibleCommand era
= CompatibleSimpleSignedTransaction
| CompatibleCreateProtocolUpdate
renderAnyCompatibleCommand :: AnyCompatibleCommand -> Text
renderAnyCompatibleCommand = \case
AnyCompatibleCommand cmd -> renderCompatibleCommand cmd

data CompatibleCommand era
= CompatibleTransactionCmd (CompatibleTransactionCmds era)
| CompatibleGovernanceCmds (CompatibleGovernanceCmds era)

pAnyCompatibleCommand :: EnvCli -> Parser AnyCompatibleCommand
pAnyCompatibleCommand = undefined
renderCompatibleCommand :: CompatibleCommand era -> Text
renderCompatibleCommand = \case
CompatibleTransactionCmd cmd -> renderCompatibleTransactionCmd cmd
CompatibleGovernanceCmds cmd -> renderCompatibleGovernanceCmds cmd

pAnyCompatibleCommand :: EnvCli -> Parser AnyCompatibleCommand
pAnyCompatibleCommand envCli =
asum
[ -- Note, byron is ommitted because there is already a legacy command group for it.
subParser "shelley" $
Opt.info (AnyCompatibleCommand <$> pCompatibleCommand ShelleyBasedEraShelley envCli) $
Opt.progDesc "Shelley era commands"
, subParser "allegra" $
Opt.info (AnyCompatibleCommand <$> pCompatibleCommand ShelleyBasedEraAllegra envCli) $
Opt.progDesc "Allegra era commands"
, subParser "mary" $
Opt.info (AnyCompatibleCommand <$> pCompatibleCommand ShelleyBasedEraMary envCli) $
Opt.progDesc "Mary era commands"
, subParser "alonzo" $
Opt.info (AnyCompatibleCommand <$> pCompatibleCommand ShelleyBasedEraAlonzo envCli) $
Opt.progDesc "Alonzo era commands"
, subParser "babbage" $
Opt.info (AnyCompatibleCommand <$> pCompatibleCommand ShelleyBasedEraBabbage envCli) $
Opt.progDesc "Babbage era commands"
, subParser "conway" $
Opt.info (AnyCompatibleCommand <$> pCompatibleCommand ShelleyBasedEraConway envCli) $
Opt.progDesc "Conway era commands"
]

pCompatibleCommand :: ShelleyBasedEra era -> EnvCli -> Parser (CompatibleCommand era)
pCompatibleCommand era env = undefined
pCompatibleCommand era env =
asum
[ CompatibleTransactionCmd <$> pAllCompatibleTransactionCommands env era
, CompatibleGovernanceCmds <$> pCompatibleGovernanceCmds era
]
38 changes: 38 additions & 0 deletions cardano-cli/src/Cardano/CLI/Compatible/Governance.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE LambdaCase #-}

module Cardano.CLI.Compatible.Governance
( CompatibleGovernanceCmds (..)
, pCompatibleGovernanceCmds
, renderCompatibleGovernanceCmds
, runCompatibleGovernanceCmds
)
where

import Cardano.Api

import Cardano.CLI.EraBased.Options.Governance
import Cardano.CLI.EraBased.Run.Governance
import Cardano.CLI.Types.Errors.CmdError

import Data.Maybe
import Data.Text
import Options.Applicative

pCompatibleGovernanceCmds :: ShelleyBasedEra era -> Parser (CompatibleGovernanceCmds era)
pCompatibleGovernanceCmds sbe =
asum $ catMaybes [fmap CreateCompatibleProtocolUpdateCmd <$> pGovernanceCmds (toCardanoEra sbe)]

-- TODO: After QA confirmms that the new compatibility commands meet their needs
-- we can remove all remaining legacy commands. We can also remove/move the exising
-- byron era commands under the new compatiblilty commands.
newtype CompatibleGovernanceCmds era
= CreateCompatibleProtocolUpdateCmd (GovernanceCmds era)

runCompatibleGovernanceCmds :: CompatibleGovernanceCmds era -> ExceptT CmdError IO ()
runCompatibleGovernanceCmds = \case
CreateCompatibleProtocolUpdateCmd cmd -> runGovernanceCmds cmd

renderCompatibleGovernanceCmds :: CompatibleGovernanceCmds era -> Text
renderCompatibleGovernanceCmds = \case
CreateCompatibleProtocolUpdateCmd cmd -> renderGovernanceCmds cmd
37 changes: 37 additions & 0 deletions cardano-cli/src/Cardano/CLI/Compatible/Run.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{-# LANGUAGE LambdaCase #-}

module Cardano.CLI.Compatible.Run
( CompatibleCmdError
, renderCompatibleCmdError
, runAnyCompatibleCommand
, runCompatibleCommand
)
where

import Cardano.Api

import Cardano.CLI.Compatible.Commands
import Cardano.CLI.Compatible.Governance
import Cardano.CLI.Compatible.Transaction
import Cardano.CLI.Render
import Cardano.CLI.Types.Errors.CmdError

import Data.Text (Text)

data CompatibleCmdError
= CompatibleTransactionError CompatibleTransactionError
| CompatibleGovernanceError CmdError

renderCompatibleCmdError :: Text -> CompatibleCmdError -> Doc ann
renderCompatibleCmdError cmdText = \case
CompatibleTransactionError e -> renderAnyCmdError cmdText prettyError e
CompatibleGovernanceError e -> renderCmdError cmdText e

runAnyCompatibleCommand :: AnyCompatibleCommand -> ExceptT CompatibleCmdError IO ()
runAnyCompatibleCommand (AnyCompatibleCommand cmd) = runCompatibleCommand cmd

runCompatibleCommand :: CompatibleCommand era -> ExceptT CompatibleCmdError IO ()
runCompatibleCommand (CompatibleTransactionCmd txCmd) =
firstExceptT CompatibleTransactionError $ runCompatibleTransactionCmd txCmd
runCompatibleCommand (CompatibleGovernanceCmds govCmd) =
firstExceptT CompatibleGovernanceError $ runCompatibleGovernanceCmds govCmd
Loading

0 comments on commit 35fbcbe

Please sign in to comment.