about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/julia-modules/tests/julia-top-n')
-rw-r--r--nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/app/Main.hs89
-rw-r--r--nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/default.nix16
-rw-r--r--nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/julia-top-n.cabal34
-rw-r--r--nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/package.yaml37
-rw-r--r--nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/stack.yaml11
-rw-r--r--nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/stack.yaml.lock13
6 files changed, 200 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/app/Main.hs b/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/app/Main.hs
new file mode 100644
index 000000000000..ed9f8d405b12
--- /dev/null
+++ b/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/app/Main.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DeriveAnyClass #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE ViewPatterns #-}
+
+module Main (main) where
+
+import Control.Exception
+import Control.Monad
+import Data.Aeson as A hiding (Options, defaultOptions)
+import qualified Data.Aeson.Key             as A
+import qualified Data.Aeson.KeyMap          as HM
+import qualified Data.ByteString.Lazy.Char8 as BL8
+import qualified Data.List as L
+import Data.Text as T
+import qualified Data.Vector as V
+import qualified Data.Yaml as Yaml
+import GHC.Generics
+import Options.Applicative
+import System.Exit
+import System.FilePath
+import Test.Sandwich hiding (info)
+import UnliftIO.MVar
+import UnliftIO.Process
+
+
+data Args = Args {
+  countFilePath :: FilePath
+  , topN :: Int
+  , parallelism :: Int
+  }
+
+argsParser :: Parser Args
+argsParser = Args
+  <$> strOption (long "count-file" <> short 'c' <> help "YAML file containing package names and counts")
+  <*> option auto (long "top-n" <> short 'n' <> help "How many of the top packages to build" <> showDefault <> value 100 <> metavar "INT")
+  <*> option auto (long "parallelism" <> short 'p' <> help "How many builds to run at once" <> showDefault <> value 10 <> metavar "INT")
+
+data NameAndCount = NameAndCount {
+  name :: Text
+  , count :: Int
+  , uuid :: Text
+  } deriving (Show, Eq, Generic, FromJSON)
+
+newtype JuliaPath = JuliaPath FilePath
+  deriving Show
+
+julia :: Label "julia" (MVar (Maybe JuliaPath))
+julia = Label
+
+main :: IO ()
+main = do
+  clo <- parseCommandLineArgs argsParser (return ())
+  let Args {..} = optUserOptions clo
+
+  namesAndCounts :: [NameAndCount] <- Yaml.decodeFileEither countFilePath >>= \case
+    Left err -> throwIO $ userError ("Couldn't decode names and counts YAML file: " <> show err)
+    Right x -> pure x
+
+  runSandwichWithCommandLineArgs' defaultOptions argsParser $
+    describe ("Building environments for top " <> show topN <> " Julia packages") $
+      parallelN parallelism $
+        forM_ (L.take topN namesAndCounts) $ \(NameAndCount {..}) ->
+          introduce' (defaultNodeOptions { nodeOptionsVisibilityThreshold = 0 }) (T.unpack name) julia (newMVar Nothing) (const $ return ()) $ do
+            it "Builds" $ do
+              let cp = proc "nix" ["build", "--impure", "--no-link", "--json", "--expr"
+                                  , "with import ../../../../. {}; julia.withPackages [\"" <> T.unpack name <> "\"]"
+                                  ]
+              output <- readCreateProcessWithLogging cp ""
+              juliaPath <- case A.eitherDecode (BL8.pack output) of
+                Right (A.Array ((V.!? 0) -> Just (A.Object (aesonLookup "outputs" -> Just (A.Object (aesonLookup "out" -> Just (A.String t))))))) -> pure (JuliaPath ((T.unpack t) </> "bin" </> "julia"))
+                x -> expectationFailure ("Couldn't parse output: " <> show x)
+
+              getContext julia >>= flip modifyMVar_ (const $ return (Just juliaPath))
+
+            it "Uses" $ do
+              getContext julia >>= readMVar >>= \case
+                Nothing -> expectationFailure "Build step failed."
+                Just (JuliaPath juliaPath) -> do
+                  let cp = proc juliaPath ["-e", "using " <> T.unpack name]
+                  createProcessWithLogging cp >>= waitForProcess >>= (`shouldBe` ExitSuccess)
+
+aesonLookup :: Text -> HM.KeyMap v -> Maybe v
+aesonLookup = HM.lookup . A.fromText
diff --git a/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/default.nix b/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/default.nix
new file mode 100644
index 000000000000..ab8ed948e1ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/default.nix
@@ -0,0 +1,16 @@
+{ mkDerivation, aeson, base, filepath, lib, optparse-applicative
+, sandwich, text, unliftio, yaml
+}:
+mkDerivation {
+  pname = "julia-top-n";
+  version = "0.1.0.0";
+  src = ./.;
+  isLibrary = false;
+  isExecutable = true;
+  executableHaskellDepends = [
+    aeson base filepath optparse-applicative sandwich text unliftio
+    yaml
+  ];
+  license = lib.licenses.bsd3;
+  mainProgram = "julia-top-n-exe";
+}
diff --git a/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/julia-top-n.cabal b/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/julia-top-n.cabal
new file mode 100644
index 000000000000..834adac33f16
--- /dev/null
+++ b/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/julia-top-n.cabal
@@ -0,0 +1,34 @@
+cabal-version: 2.2
+
+-- This file has been generated from package.yaml by hpack version 0.36.0.
+--
+-- see: https://github.com/sol/hpack
+
+name:           julia-top-n
+version:        0.1.0.0
+author:         Tom McLaughlin
+maintainer:     tom@codedown.io
+license:        BSD-3-Clause
+build-type:     Simple
+
+executable julia-top-n-exe
+  main-is: Main.hs
+  other-modules:
+      Paths_julia_top_n
+  autogen-modules:
+      Paths_julia_top_n
+  hs-source-dirs:
+      app
+  ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N
+  build-depends:
+      aeson
+    , base >=4.7 && <5
+    , bytestring
+    , filepath
+    , optparse-applicative
+    , sandwich
+    , text
+    , unliftio
+    , vector
+    , yaml
+  default-language: Haskell2010
diff --git a/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/package.yaml b/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/package.yaml
new file mode 100644
index 000000000000..ffb9ab1d12ea
--- /dev/null
+++ b/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/package.yaml
@@ -0,0 +1,37 @@
+name:                julia-top-n
+version:             0.1.0.0
+license:             BSD-3-Clause
+author:              "Tom McLaughlin"
+maintainer:          "tom@codedown.io"
+
+dependencies:
+- aeson
+- base >= 4.7 && < 5
+- bytestring
+- filepath
+- optparse-applicative
+- sandwich
+- text
+- unliftio
+- vector
+- yaml
+
+ghc-options:
+- -Wall
+- -Wcompat
+- -Widentities
+- -Wincomplete-record-updates
+- -Wincomplete-uni-patterns
+- -Wmissing-export-lists
+- -Wmissing-home-modules
+- -Wpartial-fields
+- -Wredundant-constraints
+
+executables:
+  julia-top-n-exe:
+    main:                Main.hs
+    source-dirs:         app
+    ghc-options:
+    - -threaded
+    - -rtsopts
+    - -with-rtsopts=-N
diff --git a/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/stack.yaml b/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/stack.yaml
new file mode 100644
index 000000000000..28bbc5a5f7ef
--- /dev/null
+++ b/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/stack.yaml
@@ -0,0 +1,11 @@
+
+resolver:
+  url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/22/4.yaml
+
+packages:
+- .
+
+nix:
+  pure: false
+  packages:
+  - zlib
diff --git a/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/stack.yaml.lock b/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/stack.yaml.lock
new file mode 100644
index 000000000000..3e782d80cc43
--- /dev/null
+++ b/nixpkgs/pkgs/development/julia-modules/tests/julia-top-n/stack.yaml.lock
@@ -0,0 +1,13 @@
+# This file was autogenerated by Stack.
+# You should not edit this file by hand.
+# For more information, please see the documentation at:
+#   https://docs.haskellstack.org/en/stable/lock_files
+
+packages: []
+snapshots:
+- completed:
+    sha256: 8b211c5a6aad3787e023dfddaf7de7868968e4f240ecedf14ad1c5b2199046ca
+    size: 714097
+    url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/22/4.yaml
+  original:
+    url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/22/4.yaml