diff --git a/README.md b/README.md index bd93988e2da25474715f44d093c005680e242fc1..bb2de0f0dada0554351f6cd161678950ebf686ef 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,18 @@ integration.test: stage: test script: - BUILD=$PWD - - cd `mktemp -d` - git clone https://xgitlab.cels.anl.gov/argo/argotest.git - cd argotest - - nix-shell -A test --run ./integration.hs --arg nrm-src $BUILD + - nix-shell -A test --run "./argotk.hs helloworld" --arg nrm-src ../. + artifacts: + paths: + - argotest/cmd_err.log + - argotest/cmd_out.log + - argotest/daemon_out.log + - argotest/daemon_out.log + - argotest/nrm.log + - argotest/time.log + expire_in: 1 week except: - /^wip\/.*/ - /^WIP\/.*/ diff --git a/argotest/src/Argotest.hs b/argotest/src/Argotest.hs index 5f75388a0000d1cd42577ae29a5f51df4186329a..9cd757cb83e4a9248763a9812acaa068e872e44c 100644 --- a/argotest/src/Argotest.hs +++ b/argotest/src/Argotest.hs @@ -21,7 +21,7 @@ import System.Posix.Signals data StackArgs = StackArgs { dargs :: Text --"Daemon arguments. Properly quote this." - , app :: FilePath --"Input file, target application script" + , app :: Text --"Target application call, sh+path valid" , manifest :: FilePath --"Input file, manifest." , cmd_out :: FilePath --"Output file, application stdout" , cmd_err :: FilePath --"Output file, application stderr" @@ -33,7 +33,7 @@ data StackArgs = StackArgs instance Default StackArgs where def = StackArgs { dargs = "" - , app = "echo \"Dummy app: Hello world!\"" + , app = "echo \"HelloWorld\"" , manifest = "manifests/basic.json" , cmd_out = "cmd_out.log" , cmd_err = "cmd_err.log" @@ -50,7 +50,6 @@ colorShell color s = setC color *> s *> setC White printInfo :: Text -> Shell () printError :: Text -> Shell () printWarning :: Text -> Shell () - printInfo = printf ("Info:"%s) printWarning = colorShell Yellow . printf ("Warning:"%s) printError = colorShell Red . printf ("Error:"%s) @@ -106,6 +105,6 @@ prepareDaemonShell dargs daemon_out daemon_err nrm_log = do ExitFailure n -> do printInfo "Contents of argo_nodeos_config_exit_message: \n" view $ cat ["./argo_nodeos_config_exit_message"] die ("Clean config failed with exit code " <> repr n) - printInfo $ format ("Running the daemon: see main log at "%fp%"\n") nrm_log + printInfo $ format ("Running the daemon, main log at "%fp%", stdout at "%fp%", stderr at "%fp%"\n") nrm_log daemon_out daemon_err export "ARGO_NODEOS_CONFIG" (format fp confPath') return $ sh $ inshell (format (fp%" "%s%" --nrm_log="%fp%" >"%fp%" 2>"%fp) daemonPath dargs nrm_log daemon_out daemon_err) empty diff --git a/argotk.hs b/argotk.hs index ec61fc02c1346dcf3d657669949fe2b80d1d3522..83be9bdbffd29a3ef8c1c3b6e83218b9bbf4bc17 100755 --- a/argotk.hs +++ b/argotk.hs @@ -1,5 +1,4 @@ -#! /usr/bin/env nix-shell -#! nix-shell -i runhaskell -A test +#! /usr/bin/env runhaskell {-# LANGUAGE OverloadedStrings @@ -20,11 +19,20 @@ opts :: Parser (IO ()) opts = subparser ( command "clean" (info (pure $ runClean def) idm)<> help "Target for the greeting" <> command "daemon" (info (pure $ runDaemon def) idm) - <> command "helloworld" (info (pure $ runSimpleStack def) idm) ) + <> command "helloworld" (info (pure $ runHelloWorld def ) idm) ) main :: IO () main = join $ execParser (info (opts <**>helper) idm) +runHelloWorld :: StackArgs -> IO () +runHelloWorld a@StackArgs{..} = do + let passStr = "HelloWorldFromApp" + runSimpleStack $ a {app = format ("echo "%s) passStr} + readTextFile cmd_err >>= \x -> case match (has "HelloWorldFromApp") x of + [] -> die ("Hello world app failed to run.") + _ -> sh $ printInfo "The hello world app executed properly in a \ + \container and its message was received by `cmd`.\n" + runSimpleStack :: StackArgs -> IO () runSimpleStack a@StackArgs{..} = sh $ do cleanLeftovers daemon_out daemon_err cmd_out cmd_err time_file nrm_log @@ -39,7 +47,7 @@ runSimpleStack a@StackArgs{..} = sh $ do printInfo "Launching the application through cmd.\n" (_,t) <- time $ - shell (format ("cmd run -u toto "%fp%" "%fp%" > "%fp%" 2>"%fp) manifest app cmd_out cmd_err) empty >>= \case + shell (format ("cmd run -u toto "%fp%" "%s%" > "%fp%" 2>"%fp) manifest app cmd_out cmd_err) empty >>= \case ExitSuccess -> printInfo "cmd has exited successfuly.\n" ExitFailure n -> die ("cmd failed with exit code " <> repr n <> " . The application logs are at " <> repr cmd_out <> " " <> repr cmd_err ) @@ -54,6 +62,5 @@ runClean StackArgs{..} = sh $ cleanLeftovers daemon_out daemon_err cmd_out cmd_err time_file nrm_log runDaemon :: StackArgs -> IO () -runDaemon StackArgs{..} = sh $ do - daemonShell <- prepareDaemonShell dargs daemon_out daemon_err nrm_log - daemonShell +runDaemon StackArgs{..} = sh $ + prepareDaemonShell dargs daemon_out daemon_err nrm_log >>= id diff --git a/default.nix b/default.nix index 5f9e832548c707a5f4205d328baf75bb76e29ce1..6e0364ccc94d6d4d7114dd04eb522008e8fbfb8c 100644 --- a/default.nix +++ b/default.nix @@ -19,13 +19,36 @@ let in rec { - dev-beforelib = hpkgs.shellFor { + dev-lib = hpkgs.shellFor { packages = p: with p; [ argotest ]; withHoogle = true; buildInputs = with hpkgs; with pkgs; [ cabal-install ghcid hlint sysstat hdevtools]; }; + dev-test = pkgs.stdenv.mkDerivation rec { + name = "env"; + env = pkgs.buildEnv { name = name; paths = buildInputs; }; + buildInputs = [ + (hpkgs.ghcWithPackages (p: [ + p.argotest + p.turtle + p.data-default + p.managed + p.ansi-terminal + p.unix + p.system-filepath + p.async + ])) + containers + hpkgs.hdevtools + hpkgs.hlint + hpkgs.ghcid + amg + nrm + ]; + }; + test = pkgs.stdenv.mkDerivation rec { name = "env"; env = pkgs.buildEnv { name = name; paths = buildInputs; };