diff --git a/.haskell-ci b/.haskell-ci new file mode 100644 index 0000000..40c9b3d --- /dev/null +++ b/.haskell-ci @@ -0,0 +1,27 @@ +# compiler supported and their equivalent LTS +compiler: ghc-7.8 lts-2.22 +compiler: ghc-7.10 lts-6.35 +compiler: ghc-8.0 lts-9.21 +compiler: ghc-8.2 lts-10.4 +compiler: ghc-8.4 ghc-8.4-alpha2 + +# options +# option: alias x=y z=v +option: testdeps extradep=QuickCheck-2.11.3 extradep=ansi-terminal-0.8.0.1 extradep=async-2.1.1.1 extradep=call-stack-0.1.0 extradep=clock-0.7.2 extradep=optparse-applicative-0.14.0.0 extradep=random-1.1 extradep=tagged-0.8.5 extradep=unbounded-delays-0.1.1.0 extradep=tasty-1.0.0.1 extradep=tasty-hunit-0.10.0.1 extradep=tasty-kat-0.0.3 extradep=tasty-quickcheck-0.9.2 extradep=ansi-wl-pprint-0.6.8.2 extradep=colour-2.3.4 extradep=tf-random-0.5 extradep=transformers-compat-0.5.1.4 extradep=primitive-0.6.3.0 allow-newer +option: gaugedeps extradep=gauge-0.2.1 + +# builds +build: ghc-7.8 nohaddock extradep=basement-0.0.6 extradep=foundation-0.0.19 extradep=memory-0.14.14 gaugedeps +build: ghc-8.2 gaugedeps +build: ghc-7.10 extradep=basement-0.0.6 extradep=foundation-0.0.19 extradep=memory-0.14.14 gaugedeps +build: ghc-8.0 gaugedeps +build: ghc-8.0 os=osx gaugedeps +build: ghc-8.4 extradep=basement-0.0.6 extradep=memory-0.14.14 extradep=foundation-0.0.19 testdeps gaugedeps extradep=vector-0.12.0.1 + +# packages +package: '.' + +# extra builds +hlint: allowed-failure +weeder: allowed-failure +coverall: false diff --git a/.travis.yml b/.travis.yml index d59e217..05bad76 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,41 +1,89 @@ +# ~*~ auto-generated by haskell-ci with config : 808ff5e84bd5804eaf848c1b7027d5fc386efd9edcf8d234090190900b1293df ~*~ + +# Use new container infrastructure to enable caching sudo: false +# Caching so the next build will be fast too. +cache: + directories: + - $HOME/.ghc + - $HOME/.stack + - $HOME/.local + matrix: include: - - env: CABALVER=1.18 GHCVER=7.8.4 - addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.4], sources: [hvr-ghc]}} - - env: CABALVER=1.22 GHCVER=7.10.3 - addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.3],sources: [hvr-ghc]}} - - env: CABALVER=1.24 GHCVER=8.0.2 - addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.2],sources: [hvr-ghc]}} - - env: CABALVER=2.0 GHCVER=8.2.1 - addons: {apt: {packages: [cabal-install-2.0,ghc-8.2.1],sources: [hvr-ghc]}} - - env: CABALVER=head GHCVER=head - addons: {apt: {packages: [cabal-install-head,ghc-head], sources: [hvr-ghc]}} + - { env: BUILD=stack RESOLVER=ghc-7.8, compiler: ghc-7.8, language: generic, addons: { apt: { packages: [ libgmp-dev ] } } } + - { env: BUILD=stack RESOLVER=ghc-8.2, compiler: ghc-8.2, language: generic, addons: { apt: { packages: [ libgmp-dev ] } } } + - { env: BUILD=stack RESOLVER=ghc-7.10, compiler: ghc-7.10, language: generic, addons: { apt: { packages: [ libgmp-dev ] } } } + - { env: BUILD=stack RESOLVER=ghc-8.0, compiler: ghc-8.0, language: generic, addons: { apt: { packages: [ libgmp-dev ] } } } + - { env: BUILD=stack RESOLVER=ghc-8.0, compiler: ghc-8.0, language: generic, addons: { apt: { packages: [ libgmp-dev ] } }, os: osx } + - { env: BUILD=stack RESOLVER=ghc-8.4, compiler: ghc-8.4, language: generic, addons: { apt: { packages: [ libgmp-dev ] } } } + - { env: BUILD=hlint, compiler: hlint, language: generic } + - { env: BUILD=weeder, compiler: weeder, language: generic, addons: { apt: { packages: [ libgmp-dev ] } } } allow_failures: - - env: CABALVER=head GHCVER=head - addons: {apt: {packages: [cabal-install-head,ghc-head], sources: [hvr-ghc]}} - -before_install: - - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH + - { env: BUILD=hlint, compiler: hlint, language: generic } + - { env: BUILD=weeder, compiler: weeder, language: generic, addons: { apt: { packages: [ libgmp-dev ] } } } install: - - cabal --version - - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]" - - travis_retry cabal update - - if [ "${RUNTEST}" != "0" ]; then cabal install --only-dependencies --enable-tests; else cabal install --only-dependencies; fi + - export PATH=$HOME/.local/bin::$HOME/.cabal/bin:$PATH + - mkdir -p ~/.local/bin + - | + case "$BUILD" in + stack|weeder) + if [ `uname` = "Darwin" ] + then + travis_retry curl --insecure -L https://www.stackage.org/stack/osx-x86_64 | tar xz --strip-components=1 --include '*/stack' -C ~/.local/bin + else + travis_retry curl -L https://www.stackage.org/stack/linux-x86_64 | tar xz --wildcards --strip-components=1 -C ~/.local/bin '*/stack' + fi + ;; + cabal) + ;; + esac script: - - if [ "${RUNTEST}" != "0" ]; then cabal configure --enable-tests -v2; else cabal configure -v2; fi - - cabal build - - if [ "${RUNTEST}" != "0" ]; then cabal test; fi; - - cabal check - - cabal sdist - - export SRC_TGZ=$(cabal info . | awk '{print $2 ".tar.gz";exit}') ; - cd dist/; - if [ -f "$SRC_TGZ" ]; then - cabal install --force-reinstalls "$SRC_TGZ"; - else - echo "expected '$SRC_TGZ' not found"; - exit 1; - fi +- | + set -ex + if [ "x${RUNTEST}" = "xfalse" ]; then exit 0; fi + case "$BUILD" in + stack) + # create the build stack.yaml + case "$RESOLVER" in + ghc-7.8) + echo "{ resolver: lts-2.22, packages: [ '.' ], extra-deps: [ basement-0.0.6, foundation-0.0.19, memory-0.14.14, gauge-0.2.1 ], flags: {} }" > stack.yaml + export HADDOCK_OPTs="--no-haddock" + ;; + ghc-8.2) + echo "{ resolver: lts-10.4, packages: [ '.' ], extra-deps: [ gauge-0.2.1 ], flags: {} }" > stack.yaml + export HADDOCK_OPTs="--haddock --no-haddock-deps" + ;; + ghc-7.10) + echo "{ resolver: lts-6.35, packages: [ '.' ], extra-deps: [ basement-0.0.6, foundation-0.0.19, memory-0.14.14, gauge-0.2.1 ], flags: {} }" > stack.yaml + export HADDOCK_OPTs="--haddock --no-haddock-deps" + ;; + ghc-8.0) + echo "{ resolver: lts-9.21, packages: [ '.' ], extra-deps: [ gauge-0.2.1 ], flags: {} }" > stack.yaml + export HADDOCK_OPTs="--haddock --no-haddock-deps" + ;; + ghc-8.0) + echo "{ resolver: lts-9.21, packages: [ '.' ], extra-deps: [ gauge-0.2.1 ], flags: {} }" > stack.yaml + export HADDOCK_OPTs="--haddock --no-haddock-deps" + ;; + ghc-8.4) + echo "{ setup-info: { ghc: { \"linux32-nopie\": { \"8.4.0.20180118\": { url: \"https://downloads.haskell.org/~ghc/8.4.1-alpha2/ghc-8.4.0.20180118-i386-deb8-linux.tar.xz\", sha256: \"be1a3b5de9f671199533d22f2810d9b62c6392b32b39833cd384a094566703c6\" } }, \"windows32\": { \"8.4.0.20180118\": { url: \"https://downloads.haskell.org/~ghc/8.4.1-alpha2/ghc-8.4.0.20180118-i386-unknown-mingw32.tar.xz\", sha256: \"3f4b9291ad35d89ca7b3561312a4329545aedceb5c4c8c5c4cf01550037376a1\" } }, \"linux64\": { \"8.4.0.20180118\": { url: \"https://downloads.haskell.org/~ghc/8.4.1-alpha2/ghc-8.4.0.20180118-x86_64-deb8-linux.tar.xz\", sha256: \"55b54bce14661c19288c3413b8fab95d2b7fae407986323c7f0b6a732bec6a38\" } }, \"linux64-tinfo\": { \"8.4.0.20180118\": { url: \"https://downloads.haskell.org/~ghc/8.4.1-alpha2/ghc-8.4.0.20180118-x86_64-deb8-linux.tar.xz\", sha256: \"55b54bce14661c19288c3413b8fab95d2b7fae407986323c7f0b6a732bec6a38\" } }, \"linux64-tinfo6\": { \"8.4.0.20180118\": { url: \"https://downloads.haskell.org/~ghc/8.4.1-alpha2/ghc-8.4.0.20180118-x86_64-fedora27-linux.tar.xz\", sha256: \"47c7e4350c9560f984bde75b243aa10c91e37494152d87d20f84fcee857338ef\" } }, \"linux64-tinfo-nopie\": { \"8.4.0.20180118\": { url: \"https://downloads.haskell.org/~ghc/8.4.1-alpha2/ghc-8.4.0.20180118-x86_64-fedora27-linux.tar.xz\", sha256: \"47c7e4350c9560f984bde75b243aa10c91e37494152d87d20f84fcee857338ef\" } }, \"linux64-nopie\": { \"8.4.0.20180118\": { url: \"https://downloads.haskell.org/~ghc/8.4.1-alpha2/ghc-8.4.0.20180118-x86_64-deb8-linux.tar.xz\", sha256: \"55b54bce14661c19288c3413b8fab95d2b7fae407986323c7f0b6a732bec6a38\" } }, \"windows64\": { \"8.4.0.20180118\": { url: \"https://downloads.haskell.org/~ghc/8.4.1-alpha2/ghc-8.4.0.20180118-x86_64-unknown-mingw32.tar.xz\", sha256: \"93dd7f80e3c645b79a91f3023046144ec88927961a3443019034e2893de43752\" } }, \"macosx\": { \"8.4.0.20180118\": { url: \"https://downloads.haskell.org/~ghc/8.4.1-alpha2/ghc-8.4.0.20180118-x86_64-apple-darwin.tar.xz\", sha256: \"b3119b255ab3d1a09fcf9919bddbbe2cd77f9175de14e4b23f20b40abe5edea1\" } } } }, resolver: ghc-8.4.0.20180118, compiler: ghc-8.4.0.20180118, compiler-check: match-exact, packages: [ '.' ], extra-deps: [ basement-0.0.6, memory-0.14.14, foundation-0.0.19, vector-0.12.0.1, QuickCheck-2.11.3, ansi-terminal-0.8.0.1, async-2.1.1.1, call-stack-0.1.0, clock-0.7.2, optparse-applicative-0.14.0.0, random-1.1, tagged-0.8.5, unbounded-delays-0.1.1.0, tasty-1.0.0.1, tasty-hunit-0.10.0.1, tasty-kat-0.0.3, tasty-quickcheck-0.9.2, ansi-wl-pprint-0.6.8.2, colour-2.3.4, tf-random-0.5, transformers-compat-0.5.1.4, primitive-0.6.3.0, gauge-0.2.1 ], flags: {}, allow-newer: true }" > stack.yaml + export HADDOCK_OPTs="--haddock --no-haddock-deps" + ;; + esac + # build & run test + stack --no-terminal test --install-ghc --coverage --bench --no-run-benchmarks ${HADDOCK_OPTS} + ;; + hlint) + curl -sL https://raw.github.com/ndmitchell/hlint/master/misc/travis.sh | sh -s . --cpp-define=__GLASGOW_HASKELL__=800 --cpp-define=x86_64_HOST_ARCH=1 --cpp-define=mingw32_HOST_OS=1 + ;; + weeder) + stack --no-terminal build --install-ghc + curl -sL https://raw.github.com/ndmitchell/weeder/master/misc/travis.sh | sh -s . + ;; + esac + set +ex + diff --git a/benchs/Bench.hs b/benchs/Bench.hs index 718f356..50d281b 100644 --- a/benchs/Bench.hs +++ b/benchs/Bench.hs @@ -3,7 +3,7 @@ {-# LANGUAGE FlexibleContexts #-} module Main where -import Criterion.Main +import Gauge.Main import Crypto.Cipher.AES import Crypto.Cipher.Blowfish diff --git a/benchs/Number/F2m.hs b/benchs/Number/F2m.hs index 15a9f04..820e2d3 100644 --- a/benchs/Number/F2m.hs +++ b/benchs/Number/F2m.hs @@ -2,7 +2,7 @@ module Number.F2m (benchF2m) where -import Criterion.Main +import Gauge.Main import System.Random import Crypto.Number.Basic (log2) diff --git a/benchs/PBKDF2.hs b/benchs/PBKDF2.hs index 8daf561..41bfb4a 100644 --- a/benchs/PBKDF2.hs +++ b/benchs/PBKDF2.hs @@ -3,7 +3,7 @@ {-# LANGUAGE PackageImports #-} module Main where -import Criterion.Main +import Gauge.Main import Crypto.Hash.Algorithms as Crypto import "cryptonite" Crypto.KDF.PBKDF2 as Crypto import "fastpbkdf2" Crypto.KDF.PBKDF2 as Fast diff --git a/benchs/Random.hs b/benchs/Random.hs index fbddc90..f6c0a83 100644 --- a/benchs/Random.hs +++ b/benchs/Random.hs @@ -2,7 +2,7 @@ {-# LANGUAGE PackageImports #-} module Main where -import Criterion.Main +import Gauge.Main import Control.Monad import "cryptonite" Crypto.Random diff --git a/cryptonite.cabal b/cryptonite.cabal index 233fc4e..001d917 100644 --- a/cryptonite.cabal +++ b/cryptonite.cabal @@ -436,7 +436,7 @@ Benchmark bench-cryptonite , bytestring , deepseq , memory - , criterion + , gauge , random , cryptonite ghc-options: -Wall -fno-warn-missing-signatures