diff --git a/agora-bench/Main.hs b/agora-bench/Main.hs index f15e73f..1e6e8d2 100644 --- a/agora-bench/Main.hs +++ b/agora-bench/Main.hs @@ -4,6 +4,7 @@ import Bench (specificationTreeToBenchmarks) import Data.Csv (encodeDefaultOrderedByName) import Data.Text.Lazy.Encoding (decodeUtf8) import Data.Text.Lazy.IO as I (writeFile) +import Options (Options (..), parseOptions) import Prettyprinter (defaultLayoutOptions, layoutPretty, pretty) import Prettyprinter.Render.String (renderString) import Spec.AuthorityToken qualified as AuthorityToken @@ -20,7 +21,9 @@ import Prelude main :: IO () main = do - I.writeFile "bench.csv" $ + options <- parseOptions + + I.writeFile options.output $ (decodeUtf8 . encodeDefaultOrderedByName) res mapM_ (putStrLn . renderString . layoutPretty defaultLayoutOptions . pretty) res diff --git a/agora-bench/Options.hs b/agora-bench/Options.hs new file mode 100644 index 0000000..d032999 --- /dev/null +++ b/agora-bench/Options.hs @@ -0,0 +1,31 @@ +module Options (Options (..), parseOptions) where + +import Options.Applicative ((<**>)) +import Options.Applicative qualified as Opt + +newtype Options = Options + { output :: FilePath + } + +outputOpt :: Opt.Parser FilePath +outputOpt = + Opt.strOption + ( Opt.long "output-path" + <> Opt.short 'o' + <> Opt.metavar "OUTPUT_PATH" + <> Opt.value "./bench.csv" + <> Opt.help "The path of the bench report file." + ) + +benchOpt :: Opt.Parser Options +benchOpt = Options <$> outputOpt + +parseOptions :: IO Options +parseOptions = Opt.execParser p + where + p = + Opt.info + (benchOpt <**> Opt.helper) + ( Opt.fullDesc + <> Opt.progDesc "Generate benchmark report of agora scripts" + ) diff --git a/agora.cabal b/agora.cabal index 8797761..b101fea 100644 --- a/agora.cabal +++ b/agora.cabal @@ -212,13 +212,17 @@ benchmark agora-bench import: lang, deps hs-source-dirs: agora-bench main-is: Main.hs - other-modules: Bench + other-modules: + Bench + Options + type: exitcode-stdio-1.0 build-depends: , agora , agora-sample , agora-spec , cassava + , optparse-applicative executable agora-scripts import: lang, deps, exe-opts