diff --git a/build/alpine/Dockerfile.builder b/build/alpine/Dockerfile.builder index 482e7aa42af..52203d7a58b 100644 --- a/build/alpine/Dockerfile.builder +++ b/build/alpine/Dockerfile.builder @@ -1,9 +1,7 @@ # Requires docker >= 17.05 (requires support for multi-stage builds) - -ARG prebuilder_tag=latest ARG prebuilder=quay.io/wire/alpine-prebuilder -FROM ${prebuilder}:${prebuilder_tag} +FROM ${prebuilder} WORKDIR / # Download stack indices and compile/cache dependencies to speed up subsequent @@ -13,6 +11,7 @@ WORKDIR / # a Haddock segfault. See https://github.com/haskell/haddock/issues/928 ARG wire_server_branch=develop +ARG THREADS=4 RUN set -x && \ echo ${wire_server_branch} && \ git clone -b ${wire_server_branch} https://github.com/wireapp/wire-server.git && \ @@ -21,7 +20,7 @@ RUN set -x && \ echo "allow-different-user: true" >> /root/.stack/config.yaml && \ stack build --haddock --dependencies-only haskell-src-exts && \ stack build --haddock --no-haddock-hyperlink-source haskell-src-exts && \ - stack build --pedantic --haddock --test --no-run-tests --bench --no-run-benchmarks --dependencies-only && \ + stack build --pedantic --haddock --test --no-run-tests --bench --no-run-benchmarks --dependencies-only -j${THREADS} && \ stack install ormolu && \ cd / && \ # we run the build only to cache the built source in /root/.stack, we can remove the source code itself diff --git a/build/alpine/Dockerfile.deps b/build/alpine/Dockerfile.deps index 96e7804a3cc..212d8df510a 100644 --- a/build/alpine/Dockerfile.deps +++ b/build/alpine/Dockerfile.deps @@ -1,6 +1,6 @@ # Requires docker >= 17.05 (requires support for multi-stage builds) -FROM alpine:3.11 as cryptobox-builder +FROM alpine:3.12 as cryptobox-builder # compile cryptobox-c RUN apk add --no-cache cargo file libsodium-dev git && \ @@ -11,7 +11,7 @@ RUN apk add --no-cache cargo file libsodium-dev git && \ cargo build --release # Minimal dependencies for alpine-compiled, dynamically linked wire-server Haskell services -FROM alpine:3.11 +FROM alpine:3.12 COPY --from=cryptobox-builder /tmp/cryptobox-c/target/release/libcryptobox.so /usr/lib diff --git a/build/alpine/Dockerfile.prebuilder b/build/alpine/Dockerfile.prebuilder index d0a71453238..3f84e00a7a4 100644 --- a/build/alpine/Dockerfile.prebuilder +++ b/build/alpine/Dockerfile.prebuilder @@ -1,6 +1,6 @@ # Requires docker >= 17.05 (requires support for multi-stage builds) -FROM alpine:3.11 as cryptobox-builder +FROM alpine:3.12 as cryptobox-builder # compile cryptobox-c RUN apk add --no-cache cargo file libsodium-dev git && \ @@ -10,7 +10,7 @@ RUN apk add --no-cache cargo file libsodium-dev git && \ export SODIUM_USE_PKG_CONFIG=1 && \ cargo build --release -FROM alpine:3.11 +FROM alpine:3.12 # install cryptobox-c in the new container COPY --from=cryptobox-builder /tmp/cryptobox-c/target/release/libcryptobox.so /usr/lib/libcryptobox.so @@ -22,9 +22,10 @@ RUN apk add --no-cache \ ca-certificates \ linux-headers \ zlib-dev \ - ghc \ - ghc-dev \ - ghc-doc \ + perl \ + gmp-dev \ + libffi-dev \ + make \ libsodium-dev \ openssl-dev \ protobuf \ @@ -37,6 +38,7 @@ RUN apk add --no-cache \ libxml2-dev \ git \ ncurses \ + ncurses-dev \ sed # get static version of Haskell Stack and use system ghc by default @@ -44,3 +46,9 @@ ARG STACK_ALPINE_VERSION=2.3.1 RUN curl -sSfL https://github.com/commercialhaskell/stack/releases/download/v${STACK_ALPINE_VERSION}/stack-${STACK_ALPINE_VERSION}-linux-x86_64-static.tar.gz \ | tar --wildcards -C /usr/local/bin --strip-components=1 -xzvf - '*/stack' && chmod 755 /usr/local/bin/stack && \ stack config set system-ghc --global true + +ARG GHC_VERSION=8.8.4 +RUN curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org \ + | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 BOOTSTRAP_HASKELL_GHC_VERSION=${GHC_VERSION} sh + +ENV PATH=/root/.ghcup/bin:${PATH} diff --git a/libs/api-bot/src/Network/Wire/Bot/Monad.hs b/libs/api-bot/src/Network/Wire/Bot/Monad.hs index da01c668e79..d7fd11ea459 100644 --- a/libs/api-bot/src/Network/Wire/Bot/Monad.hs +++ b/libs/api-bot/src/Network/Wire/Bot/Monad.hs @@ -94,7 +94,6 @@ import Control.Concurrent.Async import Control.Concurrent.STM (retry) import Control.Monad.Base import Control.Monad.Catch hiding (try) -import Control.Monad.Fail (MonadFail) import Control.Monad.Trans.Control import qualified Data.HashMap.Strict as HashMap import Data.Id diff --git a/libs/bilge/src/Bilge/Assert.hs b/libs/bilge/src/Bilge/Assert.hs index 472117d11ff..670d20b19e5 100644 --- a/libs/bilge/src/Bilge/Assert.hs +++ b/libs/bilge/src/Bilge/Assert.hs @@ -38,7 +38,6 @@ import Control.Monad.Writer.Class import Control.Monad.Writer.Strict import qualified Data.ByteString as S import qualified Data.ByteString.Lazy as Lazy -import Data.List (intersperse, isInfixOf) import Imports import Network.HTTP.Client import System.Console.ANSI diff --git a/libs/bilge/src/Bilge/IO.hs b/libs/bilge/src/Bilge/IO.hs index 0a794cb2691..34aa87291b1 100644 --- a/libs/bilge/src/Bilge/IO.hs +++ b/libs/bilge/src/Bilge/IO.hs @@ -72,7 +72,6 @@ import Bilge.Request import Bilge.Response import Control.Monad.Base import Control.Monad.Catch -import Control.Monad.Fail (MonadFail) import Control.Monad.Trans.Control import qualified Data.ByteString.Lazy as LB import qualified Data.ByteString.Lazy as Lazy diff --git a/libs/brig-types/src/Brig/Types/Instances.hs b/libs/brig-types/src/Brig/Types/Instances.hs index f4422aac93a..9e280ad5888 100644 --- a/libs/brig-types/src/Brig/Types/Instances.hs +++ b/libs/brig-types/src/Brig/Types/Instances.hs @@ -33,15 +33,15 @@ instance Cql PrekeyId where ctype = Tagged IntColumn toCql = CqlInt . fromIntegral . keyId fromCql (CqlInt i) = return $ PrekeyId (fromIntegral i) - fromCql _ = fail "PrekeyId: Int expected" + fromCql _ = Left "PrekeyId: Int expected" instance Cql ServiceTag where ctype = Tagged BigIntColumn fromCql (CqlBigInt i) = case intToTag i of Just t -> return t - Nothing -> fail $ "unexpected service tag: " ++ show i - fromCql _ = fail "service tag: int expected" + Nothing -> Left $ "unexpected service tag: " ++ show i + fromCql _ = Left "service tag: int expected" toCql = CqlBigInt . tagToInt @@ -50,10 +50,10 @@ instance Cql ServiceKeyPEM where fromCql (CqlBlob b) = maybe - (fail "service key pem: malformed key") + (Left "service key pem: malformed key") pure (fromByteString' b) - fromCql _ = fail "service key pem: blob expected" + fromCql _ = Left "service key pem: blob expected" toCql = CqlBlob . toByteString @@ -74,15 +74,15 @@ instance Cql ServiceKey where p <- required "pem" case (t :: Int32) of 0 -> return $! ServiceKey RsaServiceKey s p - _ -> fail $ "Unexpected service key type: " ++ show t + _ -> Left $ "Unexpected service key type: " ++ show t where required :: Cql r => Text -> Either String r required f = maybe - (fail ("ServiceKey: Missing required field '" ++ show f ++ "'")) + (Left ("ServiceKey: Missing required field '" ++ show f ++ "'")) fromCql (lookup f fs) - fromCql _ = fail "service key: udt expected" + fromCql _ = Left "service key: udt expected" toCql (ServiceKey RsaServiceKey siz pem) = CqlUdt diff --git a/libs/brig-types/src/Brig/Types/Provider/Tag.hs b/libs/brig-types/src/Brig/Types/Provider/Tag.hs index 12ca5cf3546..f8f351bd5cf 100644 --- a/libs/brig-types/src/Brig/Types/Provider/Tag.hs +++ b/libs/brig-types/src/Brig/Types/Provider/Tag.hs @@ -48,7 +48,6 @@ where import Cassandra.CQL (Cql) import Data.Bits -import Data.List (foldl') import Data.Range import qualified Data.Set as Set import Imports diff --git a/libs/extended/src/Servant/API/Extended.hs b/libs/extended/src/Servant/API/Extended.hs index 5122f4f737f..a4801626d7d 100644 --- a/libs/extended/src/Servant/API/Extended.hs +++ b/libs/extended/src/Servant/API/Extended.hs @@ -21,10 +21,8 @@ -- errors instead of plaintext. module Servant.API.Extended where -import Control.Monad.Trans (liftIO) import qualified Data.ByteString.Lazy as BL import Data.EitherR (fmapL) -import Data.Maybe (fromMaybe) import Data.String.Conversions (cs) import Data.Typeable import GHC.TypeLits diff --git a/libs/galley-types/src/Galley/Types.hs b/libs/galley-types/src/Galley/Types.hs index c3804604311..8b1dd5cd0db 100644 --- a/libs/galley-types/src/Galley/Types.hs +++ b/libs/galley-types/src/Galley/Types.hs @@ -85,7 +85,6 @@ import Wire.API.Conversation.Typing import Wire.API.CustomBackend import Wire.API.Event.Conversation import Wire.API.Message -import Wire.API.User (UserIdList (..)) import Wire.API.User.Client -------------------------------------------------------------------------------- diff --git a/libs/galley-types/src/Galley/Types/Teams.hs b/libs/galley-types/src/Galley/Types/Teams.hs index 7aba8945405..7d77246b7f0 100644 --- a/libs/galley-types/src/Galley/Types/Teams.hs +++ b/libs/galley-types/src/Galley/Types/Teams.hs @@ -138,7 +138,6 @@ import Data.String.Conversions (cs) import Imports import Wire.API.Event.Team import Wire.API.Team -import Wire.API.Team (NewTeam (..), Team (..), TeamBinding (..)) import Wire.API.Team.Conversation import Wire.API.Team.Feature import Wire.API.Team.Member diff --git a/libs/gundeck-types/src/Gundeck/Types/Common.hs b/libs/gundeck-types/src/Gundeck/Types/Common.hs index e49931dbe84..15b7a511066 100644 --- a/libs/gundeck-types/src/Gundeck/Types/Common.hs +++ b/libs/gundeck-types/src/Gundeck/Types/Common.hs @@ -57,5 +57,5 @@ instance ToByteString URI where instance FromByteString URI where parser = takeByteString >>= parse . Bytes.unpack -parse :: Monad m => String -> m URI +parse :: (Monad m, MonadFail m) => String -> m URI parse = maybe (fail "Invalid URI") (return . URI) . Net.parseURI diff --git a/libs/hscim/hscim.cabal b/libs/hscim/hscim.cabal index 95d263a3692..94b6e1dc31c 100644 --- a/libs/hscim/hscim.cabal +++ b/libs/hscim/hscim.cabal @@ -1,10 +1,10 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.31.2. +-- This file has been generated from package.yaml by hpack version 0.33.0. -- -- see: https://github.com/sol/hpack -- --- hash: 1b9add2104b5ee4d50f0d991824c3a07c5c0816d995bb90e64c48ce47717d7c5 +-- hash: 6f50966a204628956d641ded5887d6d680439edc24085d2d5a39ffaa42bb9f48 name: hscim version: 0.3.4 @@ -72,7 +72,7 @@ library aeson >=1.4.5 && <1.5 , aeson-qq >=0.8.2 && <0.9 , attoparsec >=0.13.2 && <0.14 - , base >=4.12 && <4.13 + , base >=4.12 && <4.14 , bytestring >=0.10.8 && <0.11 , email-validate >=2.3.2 && <2.4 , errors >=2.3.0 && <2.4 @@ -97,9 +97,9 @@ library , stm >=2.5.0 && <2.6 , stm-containers >=1.1.0 && <1.2 , string-conversions >=0.4.0 && <0.5 - , template-haskell >=2.14.0 && <2.15 + , template-haskell >=2.14.0 && <2.16 , text >=1.2.3 && <1.3 - , time >=1.8.0 && <1.9 + , time >=1.8.0 && <1.10 , unordered-containers >=0.2.10 && <0.3 , uuid >=1.3.13 && <1.4 , vector >=0.12.0 && <0.13 @@ -121,7 +121,7 @@ executable hscim-server aeson >=1.4.5 && <1.5 , aeson-qq >=0.8.2 && <0.9 , attoparsec >=0.13.2 && <0.14 - , base >=4.12 && <4.13 + , base >=4.12 && <4.14 , bytestring >=0.10.8 && <0.11 , email-validate >=2.3.2 && <2.4 , errors >=2.3.0 && <2.4 @@ -147,9 +147,9 @@ executable hscim-server , stm >=2.5.0 && <2.6 , stm-containers >=1.1.0 && <1.2 , string-conversions >=0.4.0 && <0.5 - , template-haskell >=2.14.0 && <2.15 + , template-haskell >=2.14.0 && <2.16 , text >=1.2.3 && <1.3 - , time >=1.8.0 && <1.9 + , time >=1.8.0 && <1.10 , unordered-containers >=0.2.10 && <0.3 , uuid >=1.3.13 && <1.4 , vector >=0.12.0 && <0.13 @@ -183,7 +183,7 @@ test-suite spec aeson >=1.4.5 && <1.5 , aeson-qq >=0.8.2 && <0.9 , attoparsec >=0.13.2 && <0.14 - , base >=4.12 && <4.13 + , base >=4.12 && <4.14 , bytestring >=0.10.8 && <0.11 , email-validate >=2.3.2 && <2.4 , errors >=2.3.0 && <2.4 @@ -209,9 +209,9 @@ test-suite spec , stm >=2.5.0 && <2.6 , stm-containers >=1.1.0 && <1.2 , string-conversions >=0.4.0 && <0.5 - , template-haskell >=2.14.0 && <2.15 + , template-haskell >=2.14.0 && <2.16 , text >=1.2.3 && <1.3 - , time >=1.8.0 && <1.9 + , time >=1.8.0 && <1.10 , unordered-containers >=0.2.10 && <0.3 , uuid >=1.3.13 && <1.4 , vector >=0.12.0 && <0.13 diff --git a/libs/hscim/package.yaml b/libs/hscim/package.yaml index 1afdc336b6d..af12cfd2281 100644 --- a/libs/hscim/package.yaml +++ b/libs/hscim/package.yaml @@ -38,12 +38,12 @@ dependencies: - aeson >= 1.4.5 && < 1.5 - attoparsec >= 0.13.2 && < 0.14 - bytestring >= 0.10.8 && < 0.11 - - base >= 4.12 && < 4.13 + - base >= 4.12 && < 4.14 - scientific >= 0.3.6 && < 0.4 - hashable >= 1.2.7 && < 1.4 - text >= 1.2.3 && < 1.3 - - time >= 1.8.0 && < 1.9 - - template-haskell >= 2.14.0 && < 2.15 + - time >= 1.8.0 && < 1.10 + - template-haskell >= 2.14.0 && < 2.16 - unordered-containers >= 0.2.10 && < 0.3 - vector >= 0.12.0 && < 0.13 - aeson-qq >= 0.8.2 && < 0.9 diff --git a/libs/hscim/src/Web/Scim/Capabilities/MetaSchema.hs b/libs/hscim/src/Web/Scim/Capabilities/MetaSchema.hs index 42dafbb8731..9549982c371 100644 --- a/libs/hscim/src/Web/Scim/Capabilities/MetaSchema.hs +++ b/libs/hscim/src/Web/Scim/Capabilities/MetaSchema.hs @@ -29,7 +29,6 @@ where import Data.Aeson import qualified Data.HashMap.Lazy as HML import Data.Text (Text) -import GHC.Generics (Generic) import Servant hiding (URI) import Servant.API.Generic import Servant.Server.Generic diff --git a/libs/hscim/src/Web/Scim/Class/Group.hs b/libs/hscim/src/Web/Scim/Class/Group.hs index e206d4b0cd0..6643fc30112 100644 --- a/libs/hscim/src/Web/Scim/Class/Group.hs +++ b/libs/hscim/src/Web/Scim/Class/Group.hs @@ -31,7 +31,6 @@ where import Data.Aeson import qualified Data.Aeson as Aeson import Data.Text -import GHC.Generics (Generic) import Servant import Servant.API.Generic import Servant.Server.Generic diff --git a/libs/hscim/src/Web/Scim/Class/User.hs b/libs/hscim/src/Web/Scim/Class/User.hs index 1e8e5932f8b..d65ad0cecd5 100644 --- a/libs/hscim/src/Web/Scim/Class/User.hs +++ b/libs/hscim/src/Web/Scim/Class/User.hs @@ -27,7 +27,6 @@ module Web.Scim.Class.User where import Data.Aeson.Types (FromJSON) -import GHC.Generics (Generic) import Servant import Servant.API.Generic import Servant.Server.Generic diff --git a/libs/hscim/src/Web/Scim/Schema/PatchOp.hs b/libs/hscim/src/Web/Scim/Schema/PatchOp.hs index b44fe9f7a30..66ddf7c2bb0 100644 --- a/libs/hscim/src/Web/Scim/Schema/PatchOp.hs +++ b/libs/hscim/src/Web/Scim/Schema/PatchOp.hs @@ -18,7 +18,6 @@ module Web.Scim.Schema.PatchOp where import Control.Applicative -import Control.Monad (guard) import Control.Monad.Except import Data.Aeson.Types (FromJSON (parseJSON), ToJSON (toJSON), Value (String), object, withObject, withText, (.:), (.:?), (.=)) import qualified Data.Aeson.Types as Aeson diff --git a/libs/hscim/src/Web/Scim/Schema/User.hs b/libs/hscim/src/Web/Scim/Schema/User.hs index c16aa8709d5..f83b261f0ac 100644 --- a/libs/hscim/src/Web/Scim/Schema/User.hs +++ b/libs/hscim/src/Web/Scim/Schema/User.hs @@ -72,7 +72,6 @@ module Web.Scim.Schema.User ) where -import Control.Monad (foldM) import Control.Monad.Except import Data.Aeson import qualified Data.HashMap.Strict as HM diff --git a/libs/hscim/src/Web/Scim/Server.hs b/libs/hscim/src/Web/Scim/Server.hs index 7e4b866bffc..cc726506ca9 100644 --- a/libs/hscim/src/Web/Scim/Server.hs +++ b/libs/hscim/src/Web/Scim/Server.hs @@ -37,7 +37,6 @@ module Web.Scim.Server ) where -import GHC.Generics (Generic) import Network.Wai import Servant import Servant.API.Generic diff --git a/libs/hscim/src/Web/Scim/Test/Util.hs b/libs/hscim/src/Web/Scim/Test/Util.hs index 38feba2a0ef..ee77c1f6029 100644 --- a/libs/hscim/src/Web/Scim/Test/Util.hs +++ b/libs/hscim/src/Web/Scim/Test/Util.hs @@ -52,8 +52,8 @@ where import qualified Control.Retry as Retry import Data.Aeson -import Data.Aeson.Internal (JSONPathElement (Key), ()) import Data.Aeson.QQ +import Data.Aeson.Types (JSONPathElement (Key)) import Data.ByteString (ByteString) import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as BS8 diff --git a/libs/imports/src/Imports.hs b/libs/imports/src/Imports.hs index 961a96519da..05eed16c996 100644 --- a/libs/imports/src/Imports.hs +++ b/libs/imports/src/Imports.hs @@ -168,7 +168,6 @@ import Data.Text (Text) import qualified Data.Text.Lazy import Data.Traversable import Data.Tuple -import Data.Typeable (Typeable) import Data.Void import Data.Word import GHC.Generics (Generic) diff --git a/libs/metrics-wai/src/Data/Metrics/Middleware/Prometheus.hs b/libs/metrics-wai/src/Data/Metrics/Middleware/Prometheus.hs index b35e502da28..b04c99d11c0 100644 --- a/libs/metrics-wai/src/Data/Metrics/Middleware/Prometheus.hs +++ b/libs/metrics-wai/src/Data/Metrics/Middleware/Prometheus.hs @@ -20,10 +20,8 @@ module Data.Metrics.Middleware.Prometheus ) where -import Data.Maybe (fromMaybe) import Data.Metrics.Types (Paths, treeLookup) import Data.Metrics.WaiRoute (treeToPaths) -import Data.Text (Text) import qualified Data.Text.Encoding as T import Imports import qualified Network.Wai as Wai diff --git a/libs/ssl-util/src/Ssl/Util.hs b/libs/ssl-util/src/Ssl/Util.hs index ef4285e070d..40aa869b657 100644 --- a/libs/ssl-util/src/Ssl/Util.hs +++ b/libs/ssl-util/src/Ssl/Util.hs @@ -39,7 +39,6 @@ import Data.Byteable (constEqBytes) import Data.Dynamic (fromDynamic) import Data.Time.Clock (getCurrentTime) import Imports -import Network.HTTP.Client (defaultRequest) import Network.HTTP.Client.Internal import OpenSSL.BN (integerToMPI) import OpenSSL.EVP.Digest (Digest, digestLBS) diff --git a/libs/tasty-cannon/src/Test/Tasty/Cannon.hs b/libs/tasty-cannon/src/Test/Tasty/Cannon.hs index 368c8a8386c..66be04fbf21 100644 --- a/libs/tasty-cannon/src/Test/Tasty/Cannon.hs +++ b/libs/tasty-cannon/src/Test/Tasty/Cannon.hs @@ -65,7 +65,7 @@ where import Control.Concurrent.Async import Control.Concurrent.Timeout hiding (threadDelay) -import Control.Exception (SomeAsyncException, asyncExceptionFromException, throwIO) +import Control.Exception (asyncExceptionFromException, throwIO) import Control.Monad.Catch hiding (bracket) import qualified Control.Monad.Catch as Catch import Data.Aeson (FromJSON, Value (..), decodeStrict', fromJSON) diff --git a/libs/types-common-aws/src/Util/Test/SQS.hs b/libs/types-common-aws/src/Util/Test/SQS.hs index dddaa98d67d..d19edb7ac97 100644 --- a/libs/types-common-aws/src/Util/Test/SQS.hs +++ b/libs/types-common-aws/src/Util/Test/SQS.hs @@ -25,7 +25,7 @@ module Util.Test.SQS where -import Control.Exception (SomeAsyncException, asyncExceptionFromException) +import Control.Exception (asyncExceptionFromException) import Control.Lens hiding ((.=)) import Control.Monad.Catch hiding (bracket) import Control.Monad.Trans.Control diff --git a/libs/types-common-journal/src/Data/Proto.hs b/libs/types-common-journal/src/Data/Proto.hs index 2bcebc6ed4b..b3445805dd0 100644 --- a/libs/types-common-journal/src/Data/Proto.hs +++ b/libs/types-common-journal/src/Data/Proto.hs @@ -17,7 +17,6 @@ module Data.Proto where -import Data.Time.Clock (getCurrentTime) import Data.Time.Clock.POSIX import Imports diff --git a/libs/types-common/src/Data/Json/Util.hs b/libs/types-common/src/Data/Json/Util.hs index b2479a4e48b..03b79cfbed8 100644 --- a/libs/types-common/src/Data/Json/Util.hs +++ b/libs/types-common/src/Data/Json/Util.hs @@ -151,7 +151,7 @@ instance FromJSON Base64ByteString where stToLbs = L.fromChunks . pure . Data.Text.Encoding.encodeUtf8 handleError = either - (fail "parse Base64ByteString: invalid base64 encoding") + (const $ fail "parse Base64ByteString: invalid base64 encoding") (pure . Base64ByteString) parseJSON _ = fail "parse Base64ByteString: not a string" diff --git a/libs/types-common/src/Data/LegalHold.hs b/libs/types-common/src/Data/LegalHold.hs index 4a866805bf7..1839ebf179b 100644 --- a/libs/types-common/src/Data/LegalHold.hs +++ b/libs/types-common/src/Data/LegalHold.hs @@ -58,8 +58,8 @@ instance Cql UserLegalHoldStatus where 0 -> pure $ UserLegalHoldDisabled 1 -> pure $ UserLegalHoldPending 2 -> pure $ UserLegalHoldEnabled - _ -> fail "fromCql: Invalid UserLegalHoldStatus" - fromCql _ = fail "fromCql: UserLegalHoldStatus: CqlInt expected" + _ -> Left "fromCql: Invalid UserLegalHoldStatus" + fromCql _ = Left "fromCql: UserLegalHoldStatus: CqlInt expected" toCql UserLegalHoldDisabled = CqlInt 0 toCql UserLegalHoldPending = CqlInt 1 diff --git a/libs/types-common/src/Data/List1.hs b/libs/types-common/src/Data/List1.hs index 9426491fb00..3cefeaa6aa0 100644 --- a/libs/types-common/src/Data/List1.hs +++ b/libs/types-common/src/Data/List1.hs @@ -77,6 +77,6 @@ instance (Cql a) => Cql (List1 a) where toCql = CqlList . map toCql . toList - fromCql (CqlList []) = fail "At least 1 element in list required." + fromCql (CqlList []) = Left "At least 1 element in list required." fromCql (CqlList l) = List1 . N.fromList <$> mapM fromCql l fromCql _ = Left "Expected CqlList." diff --git a/libs/types-common/src/Data/Misc.hs b/libs/types-common/src/Data/Misc.hs index bbe736b3950..3a0b6106445 100644 --- a/libs/types-common/src/Data/Misc.hs +++ b/libs/types-common/src/Data/Misc.hs @@ -67,7 +67,6 @@ import Data.ByteString.Char8 (unpack) import Data.ByteString.Conversion import Data.ByteString.Lazy (toStrict) import Data.IP (IP (IPv4, IPv6), toIPv4, toIPv6b) -import Data.Int (Int64) import Data.Range import qualified Data.Swagger.Build.Api as Doc import qualified Data.Text as Text @@ -187,7 +186,7 @@ instance Cql Latitude where toCql (Latitude x) = CqlDouble x fromCql (CqlDouble x) = return (Latitude x) - fromCql _ = fail "Latitude: Expected CqlDouble." + fromCql _ = Left "Latitude: Expected CqlDouble." instance Cql Longitude where ctype = Tagged DoubleColumn @@ -195,7 +194,7 @@ instance Cql Longitude where toCql (Longitude x) = CqlDouble x fromCql (CqlDouble x) = return (Longitude x) - fromCql _ = fail "Longitude: Expected CqlDouble." + fromCql _ = Left "Longitude: Expected CqlDouble." -------------------------------------------------------------------------------- -- Time @@ -225,7 +224,7 @@ instance Cql Milliseconds where toCql = CqlBigInt . msToInt64 fromCql = \case CqlBigInt i -> pure $ int64ToMs i - _ -> fail "Milliseconds: expected CqlBigInt" + _ -> Left "Milliseconds: expected CqlBigInt" -------------------------------------------------------------------------------- -- HttpsUrl @@ -266,7 +265,7 @@ instance Cql HttpsUrl where toCql = CqlBlob . toByteString fromCql (CqlBlob t) = runParser parser (toStrict t) - fromCql _ = fail "HttpsUrl: Expected CqlBlob" + fromCql _ = Left "HttpsUrl: Expected CqlBlob" instance Arbitrary HttpsUrl where arbitrary = pure $ HttpsUrl [URI.QQ.uri|https://example.com|] @@ -296,7 +295,7 @@ instance Cql (Fingerprint a) where toCql = CqlBlob . toByteString fromCql (CqlBlob b) = return (Fingerprint (toStrict b)) - fromCql _ = fail "Fingerprint: Expected CqlBlob" + fromCql _ = Left "Fingerprint: Expected CqlBlob" instance Arbitrary (Fingerprint Rsa) where arbitrary = diff --git a/libs/types-common/src/Util/Options.hs b/libs/types-common/src/Util/Options.hs index bcf8d315e60..33313e9a5ce 100644 --- a/libs/types-common/src/Util/Options.hs +++ b/libs/types-common/src/Util/Options.hs @@ -23,7 +23,6 @@ module Util.Options where import Control.Lens -import Data.Aeson (FromJSON) import Data.Aeson.TH import qualified Data.ByteString.Char8 as BS import Data.ByteString.Conversion @@ -33,7 +32,7 @@ import Imports import Options.Applicative import Options.Applicative.Types import System.Exit (die) -import System.IO (hPutStrLn, stderr) +import System.IO (hPutStrLn) import URI.ByteString import Util.Options.Common diff --git a/libs/wire-api/src/Wire/API/Call/Config.hs b/libs/wire-api/src/Wire/API/Call/Config.hs index e7ccbcd6f5e..9fca13243f0 100644 --- a/libs/wire-api/src/Wire/API/Call/Config.hs +++ b/libs/wire-api/src/Wire/API/Call/Config.hs @@ -253,7 +253,7 @@ parseTurnURI = parseOnly (parser <* endOfInput) parseScheme = parse "parseScheme" parseHost = parse "parseHost" parseTransport = parse "parseTransport" - parse :: (BC.FromByteString b, Monad m) => String -> Text -> m b + parse :: (BC.FromByteString b, Monad m, MonadFail m) => String -> Text -> m b parse err x = case BC.fromByteString (TE.encodeUtf8 x) of Just ok -> return ok Nothing -> fail (err ++ " failed when parsing: " ++ show x) diff --git a/libs/wire-api/src/Wire/API/Event/Conversation.hs b/libs/wire-api/src/Wire/API/Event/Conversation.hs index 491c640b001..e3c7086bb03 100644 --- a/libs/wire-api/src/Wire/API/Event/Conversation.hs +++ b/libs/wire-api/src/Wire/API/Event/Conversation.hs @@ -75,7 +75,6 @@ import qualified Test.QuickCheck as QC import URI.ByteString () import Wire.API.Arbitrary (Arbitrary (arbitrary), GenericUniform (..)) import Wire.API.Conversation -import Wire.API.Conversation (modelConversationAccessUpdate, modelConversationMessageTimerUpdate, modelConversationReceiptModeUpdate, modelConversationUpdateName) import Wire.API.Conversation.Code (ConversationCode (..), modelConversationCode) import Wire.API.Conversation.Role import Wire.API.Conversation.Typing (TypingData (..), modelTyping) diff --git a/libs/wire-api/src/Wire/API/Team/Permission.hs b/libs/wire-api/src/Wire/API/Team/Permission.hs index 4c3e023a7d6..97533cdeb5c 100644 --- a/libs/wire-api/src/Wire/API/Team/Permission.hs +++ b/libs/wire-api/src/Wire/API/Team/Permission.hs @@ -202,4 +202,4 @@ instance Cql.Cql Permissions where d <- Err.note "missing 'copy' permissions" ("copy" `lookup` p) >>= Cql.fromCql r <- Err.note "invalid permissions" (newPermissions (f s) (f d)) pure r - fromCql _ = fail "permissions: udt expected" + fromCql _ = Left "permissions: udt expected" diff --git a/libs/wire-api/src/Wire/API/Team/Role.hs b/libs/wire-api/src/Wire/API/Team/Role.hs index d7fdef5e490..9b6e0f43226 100644 --- a/libs/wire-api/src/Wire/API/Team/Role.hs +++ b/libs/wire-api/src/Wire/API/Team/Role.hs @@ -122,5 +122,5 @@ instance Cql.Cql Role where 2 -> return RoleAdmin 3 -> return RoleMember 4 -> return RoleExternalPartner - n -> fail $ "Unexpected Role value: " ++ show n - fromCql _ = fail "Role value: int expected" + n -> Left $ "Unexpected Role value: " ++ show n + fromCql _ = Left "Role value: int expected" diff --git a/libs/wire-api/src/Wire/API/User/RichInfo.hs b/libs/wire-api/src/Wire/API/User/RichInfo.hs index 91e1a589c81..dfa65cce8e7 100644 --- a/libs/wire-api/src/Wire/API/User/RichInfo.hs +++ b/libs/wire-api/src/Wire/API/User/RichInfo.hs @@ -45,7 +45,6 @@ module Wire.API.User.RichInfo ) where -import Control.Monad.Fail (MonadFail) import Data.Aeson import qualified Data.Aeson.Types as Aeson import Data.CaseInsensitive (CI) @@ -53,7 +52,7 @@ import qualified Data.CaseInsensitive as CI import qualified Data.HashMap.Strict as HM import qualified Data.HashMap.Strict as HashMap import Data.Hashable (Hashable) -import Data.List.Extra (nubOn) +import Data.List.Extra (nubOrdOn) import qualified Data.Map as Map import qualified Data.Swagger.Build.Api as Doc import qualified Data.Text as Text @@ -237,7 +236,7 @@ richInfoAssocListFromObject richinfoObj = do ds -> fail ("duplicate fields: " <> show (map head ds)) instance Arbitrary RichInfoAssocList where - arbitrary = RichInfoAssocList <$> nubOn richFieldType <$> arbitrary + arbitrary = RichInfoAssocList <$> nubOrdOn richFieldType <$> arbitrary emptyRichInfoAssocList :: RichInfoAssocList emptyRichInfoAssocList = RichInfoAssocList [] diff --git a/nix/overlays/wire-server.nix b/nix/overlays/wire-server.nix index 9b1a1e5a983..aeefaa46ffc 100644 --- a/nix/overlays/wire-server.nix +++ b/nix/overlays/wire-server.nix @@ -5,14 +5,15 @@ self: super: { rustPlatform.buildRustPackage rec { name = "cryptobox-c-${version}"; version = "2019-06-17"; - buildInputs = [ pkgconfig libsodium ]; + nativeBuildInputs = [ pkgconfig ]; + buildInputs = [ libsodium ]; src = fetchFromGitHub { owner = "wireapp"; repo = "cryptobox-c"; rev = "4067ad96b125942545dbdec8c1a89f1e1b65d013"; sha256 = "1i9dlhw0xk1viglyhail9fb36v1awrypps8jmhrkz8k1bhx98ci3"; }; - cargoSha256 = "0m85c49hvvxxv7jdipfcaydy4n8iw4h6myzv63v7qc0fxnp1vfm8"; + cargoSha256 = "0zs8ibv7rinrrzp9naxd7yak7kn1gp3pjb3g8i4wf7xw2hkkq81z"; postInstall = '' mkdir -p $out/include cp src/cbox.h $out/include @@ -25,11 +26,12 @@ self: super: { rustPlatform.buildRustPackage rec { name = "libzauth-${version}"; version = "3.0.0"; - buildInputs = [ libsodium pkgconfig ]; + nativeBuildInputs = [ pkgconfig ]; + buildInputs = [ libsodium ]; src = self.nix-gitignore.gitignoreSourcePure [ ../../.gitignore ] ../../libs/libzauth; sourceRoot = "libzauth/libzauth-c"; - cargoSha256 = "01yj1rchqmjnpj5cb9wl7vdzrycjwjhm60xh1jghw02n8jhl51p2"; # self.lib.fakeSha256; + cargoSha256 = "10ijvi3rnnqpy589hhhp8s4p7xfpsbb1c3mzqnf65ra96q4nd6bf"; # self.lib.fakeSha256; postInstall = '' mkdir -p $out/lib/pkgconfig mkdir -p $out/include @@ -37,7 +39,7 @@ self: super: { sed -e "s~<>~${version}~" \ -e "s~<>~$out~" \ src/libzauth.pc > $out/lib/pkgconfig/libzauth.pc - cp target/release/libzauth.so $out/lib/ + cp target/release-tmp/libzauth.so $out/lib/ ''; } ) {}; diff --git a/nix/sources.json b/nix/sources.json index e4ab45d9d5f..370e10743a1 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -5,22 +5,22 @@ "homepage": "https://github.com/nmattia/niv", "owner": "nmattia", "repo": "niv", - "rev": "50600603b51432839c4b6267fd6a0d00ae6b0451", - "sha256": "1rrhlscbqdn9a77ws49acl536n3mz6bai68z08mpg8qqa4ahr2sn", + "rev": "ab9cc41caf44d1f1d465d8028e4bc0096fd73238", + "sha256": "17k52n8zwp832cqifsc4458mhy4044wmk22f807171hf6p7l4xvr", "type": "tarball", - "url": "https://github.com/nmattia/niv/archive/50600603b51432839c4b6267fd6a0d00ae6b0451.tar.gz", + "url": "https://github.com/nmattia/niv/archive/ab9cc41caf44d1f1d465d8028e4bc0096fd73238.tar.gz", "url_template": "https://github.com///archive/.tar.gz" }, "nixpkgs": { - "branch": "nixos-19.09", + "branch": "nixpkgs-unstable", "description": "A read-only mirror of NixOS/nixpkgs tracking the released channels. Send issues and PRs to", "homepage": "https://github.com/NixOS/nixpkgs", "owner": "NixOS", "repo": "nixpkgs-channels", - "rev": "8731aaaf8b30888bc24994096db830993090d7c4", - "sha256": "1hcc89rxi47nb0mpk05nl9rbbb04kfw97xfydhpmmgh57yrp3zqa", + "rev": "6d4b93323e7f78121f8d6db6c59f3889aa1dd931", + "sha256": "0g2j41cx2w2an5d9kkqvgmada7ssdxqz1zvjd7hi5vif8ag0v5la", "type": "tarball", - "url": "https://github.com/NixOS/nixpkgs-channels/archive/8731aaaf8b30888bc24994096db830993090d7c4.tar.gz", + "url": "https://github.com/NixOS/nixpkgs-channels/archive/6d4b93323e7f78121f8d6db6c59f3889aa1dd931.tar.gz", "url_template": "https://github.com///archive/.tar.gz" } } diff --git a/services/brig/src/Brig/API/Error.hs b/services/brig/src/Brig/API/Error.hs index f16e8e0916e..2835c60c57a 100644 --- a/services/brig/src/Brig/API/Error.hs +++ b/services/brig/src/Brig/API/Error.hs @@ -38,7 +38,7 @@ import Imports import Network.HTTP.Types.Header import Network.HTTP.Types.Status import qualified Network.Wai.Utilities.Error as Wai -import Type.Reflection (Typeable, typeRep) +import Type.Reflection (typeRep) data Error where StdError :: !Wai.Error -> Error diff --git a/services/brig/src/Brig/API/Internal.hs b/services/brig/src/Brig/API/Internal.hs index 01daee37123..4c0ec07110e 100644 --- a/services/brig/src/Brig/API/Internal.hs +++ b/services/brig/src/Brig/API/Internal.hs @@ -56,7 +56,6 @@ import Network.Wai (Response) import Network.Wai.Predicate hiding (result, setStatus) import Network.Wai.Routing import Network.Wai.Utilities as Utilities -import Network.Wai.Utilities.Response (json) import Network.Wai.Utilities.ZAuth (zauthConnId, zauthUserId) import Wire.API.User import Wire.API.User.RichInfo diff --git a/services/brig/src/Brig/API/Public.hs b/services/brig/src/Brig/API/Public.hs index 7afead44526..f5d2f51ff0f 100644 --- a/services/brig/src/Brig/API/Public.hs +++ b/services/brig/src/Brig/API/Public.hs @@ -71,7 +71,6 @@ import Network.Wai (Response, lazyRequestBody) import Network.Wai.Predicate hiding (result, setStatus) import Network.Wai.Routing import Network.Wai.Utilities as Utilities -import Network.Wai.Utilities.Response (json) import Network.Wai.Utilities.Swagger (document, mkSwaggerApi) import qualified Network.Wai.Utilities.Swagger as Doc import Network.Wai.Utilities.ZAuth (zauthConnId, zauthUserId) diff --git a/services/brig/src/Brig/AWS.hs b/services/brig/src/Brig/AWS.hs index 745ed6408d7..d4e0f449029 100644 --- a/services/brig/src/Brig/AWS.hs +++ b/services/brig/src/Brig/AWS.hs @@ -56,7 +56,6 @@ import qualified Data.ByteString.Lazy as BL import qualified Data.Text as Text import qualified Data.Text.Encoding as Text import Data.UUID hiding (null) -import Data.Yaml (FromJSON (..)) import Imports hiding (group) import Network.AWS (AWSRequest, Rs) import qualified Network.AWS as AWS diff --git a/services/brig/src/Brig/App.hs b/services/brig/src/Brig/App.hs index 1daf11a86c6..198e2684bf5 100644 --- a/services/brig/src/Brig/App.hs +++ b/services/brig/src/Brig/App.hs @@ -90,7 +90,7 @@ import Control.AutoUpdate import Control.Error import Control.Exception.Enclosed (handleAny) import Control.Lens hiding (index, (.=)) -import Control.Monad.Catch (MonadCatch, MonadMask, MonadThrow) +import Control.Monad.Catch (MonadCatch, MonadMask) import Control.Monad.Trans.Resource import Data.ByteString.Conversion import Data.Default (def) diff --git a/services/brig/src/Brig/Calling/API.hs b/services/brig/src/Brig/Calling/API.hs index b0e393c83c0..1bcb262f42b 100644 --- a/services/brig/src/Brig/Calling/API.hs +++ b/services/brig/src/Brig/Calling/API.hs @@ -26,7 +26,6 @@ import Brig.Calling import qualified Brig.Calling as Calling import Brig.Calling.Internal import Control.Lens -import Control.Monad.Fail (MonadFail) import Control.Monad.Random.Class import Data.ByteString.Conversion (toByteString') import Data.ByteString.Lens diff --git a/services/brig/src/Brig/Code.hs b/services/brig/src/Brig/Code.hs index e2e091bea9c..76475084e7f 100644 --- a/services/brig/src/Brig/Code.hs +++ b/services/brig/src/Brig/Code.hs @@ -127,7 +127,7 @@ instance Cql Scope where fromCql (CqlInt 3) = return PasswordReset fromCql (CqlInt 4) = return AccountLogin fromCql (CqlInt 5) = return AccountApproval - fromCql _ = fail "fromCql: Scope: int expected" + fromCql _ = Left "fromCql: Scope: int expected" newtype Retries = Retries {numRetries :: Word8} deriving (Eq, Show, Ord, Num, Integral, Enum, Real) @@ -136,7 +136,7 @@ instance Cql Retries where ctype = Tagged IntColumn toCql = CqlInt . fromIntegral . numRetries fromCql (CqlInt n) = return (Retries (fromIntegral n)) - fromCql _ = fail "fromCql: Retries: int expected" + fromCql _ = Left "fromCql: Retries: int expected" -------------------------------------------------------------------------------- -- Generation diff --git a/services/brig/src/Brig/Data/Instances.hs b/services/brig/src/Brig/Data/Instances.hs index fa906ab0256..19246eeb378 100644 --- a/services/brig/src/Brig/Data/Instances.hs +++ b/services/brig/src/Brig/Data/Instances.hs @@ -68,8 +68,8 @@ instance Cql Email where fromCql (CqlText t) = case parseEmail t of Just e -> return e - Nothing -> fail "fromCql: Invalid email" - fromCql _ = fail "fromCql: email: CqlText expected" + Nothing -> Left "fromCql: Invalid email" + fromCql _ = Left "fromCql: email: CqlText expected" toCql = toCql . fromEmail @@ -78,8 +78,8 @@ instance Cql UserSSOId where fromCql (CqlText t) = case eitherDecode $ cs t of Right i -> return i - Left msg -> fail $ "fromCql: Invalid UserSSOId: " ++ msg - fromCql _ = fail "fromCql: UserSSOId: CqlText expected" + Left msg -> Left $ "fromCql: Invalid UserSSOId: " ++ msg + fromCql _ = Left "fromCql: UserSSOId: CqlText expected" toCql = toCql . cs @LBS @ST . encode @@ -93,8 +93,8 @@ instance Cql Relation where 3 -> return Ignored 4 -> return Sent 5 -> return Cancelled - n -> fail $ "unexpected relation: " ++ show n - fromCql _ = fail "relation: int expected" + n -> Left $ "unexpected relation: " ++ show n + fromCql _ = Left "relation: int expected" toCql Accepted = CqlInt 0 toCql Blocked = CqlInt 1 @@ -120,7 +120,7 @@ instance Cql AssetSize where fromCql (CqlInt 0) = return AssetPreview fromCql (CqlInt 1) = return AssetComplete - fromCql n = fail $ "Unexpected asset size: " ++ show n + fromCql n = Left $ "Unexpected asset size: " ++ show n toCql AssetPreview = CqlInt 0 toCql AssetComplete = CqlInt 1 @@ -145,16 +145,16 @@ instance Cql Asset where s <- optional "size" case (t :: Int32) of 0 -> return $! ImageAsset k s - _ -> fail $ "unexpected user asset type: " ++ show t + _ -> Left $ "unexpected user asset type: " ++ show t where required :: Cql r => Text -> Either String r required f = maybe - (fail ("Asset: Missing required field '" ++ show f ++ "'")) + (Left ("Asset: Missing required field '" ++ show f ++ "'")) fromCql (lookup f fs) optional f = maybe (Right Nothing) fromCql (lookup f fs) - fromCql _ = fail "UserAsset: UDT expected" + fromCql _ = Left "UserAsset: UDT expected" -- Note: Order must match up with the 'ctype' definition. toCql (ImageAsset k s) = @@ -177,8 +177,8 @@ instance Cql AccountStatus where 1 -> return Suspended 2 -> return Deleted 3 -> return Ephemeral - n -> fail $ "unexpected account status: " ++ show n - fromCql _ = fail "account status: int expected" + n -> Left $ "unexpected account status: " ++ show n + fromCql _ = Left "account status: int expected" instance Cql ClientType where ctype = Tagged IntColumn @@ -189,7 +189,7 @@ instance Cql ClientType where fromCql (CqlInt 0) = return TemporaryClientType fromCql (CqlInt 1) = return PermanentClientType fromCql (CqlInt 2) = return LegalHoldClientType - fromCql _ = fail "ClientType: Int [0, 2] expected" + fromCql _ = Left "ClientType: Int [0, 2] expected" instance Cql ClientClass where ctype = Tagged IntColumn @@ -202,15 +202,15 @@ instance Cql ClientClass where fromCql (CqlInt 1) = return TabletClient fromCql (CqlInt 2) = return DesktopClient fromCql (CqlInt 3) = return LegalHoldClient - fromCql _ = fail "ClientClass: Int [0, 3] expected" + fromCql _ = Left "ClientClass: Int [0, 3] expected" instance Cql PropertyValue where ctype = Tagged BlobColumn toCql = toCql . Blob . JSON.encode . propertyValueJson fromCql (CqlBlob v) = case JSON.eitherDecode v of - Left e -> fail ("Failed to read property value: " <> e) + Left e -> Left ("Failed to read property value: " <> e) Right x -> pure (PropertyValue x) - fromCql _ = fail "PropertyValue: Blob expected" + fromCql _ = Left "PropertyValue: Blob expected" instance Cql Country where ctype = Tagged AsciiColumn @@ -218,8 +218,8 @@ instance Cql Country where fromCql (CqlAscii c) = case parseCountry c of Just c' -> return c' - Nothing -> fail "Country: ISO 3166-1-alpha2 expected." - fromCql _ = fail "Country: ASCII expected" + Nothing -> Left "Country: ISO 3166-1-alpha2 expected." + fromCql _ = Left "Country: ASCII expected" instance Cql Language where ctype = Tagged AsciiColumn @@ -227,15 +227,15 @@ instance Cql Language where fromCql (CqlAscii l) = case parseLanguage l of Just l' -> return l' - Nothing -> fail "Language: ISO 639-1 expected." - fromCql _ = fail "Language: ASCII expected" + Nothing -> Left "Language: ISO 639-1 expected." + fromCql _ = Left "Language: ASCII expected" instance Cql ManagedBy where ctype = Tagged IntColumn fromCql (CqlInt 0) = return ManagedByWire fromCql (CqlInt 1) = return ManagedByScim - fromCql n = fail $ "Unexpected ManagedBy: " ++ show n + fromCql n = Left $ "Unexpected ManagedBy: " ++ show n toCql ManagedByWire = CqlInt 0 toCql ManagedByScim = CqlInt 1 @@ -244,10 +244,10 @@ instance Cql RichInfoAssocList where ctype = Tagged BlobColumn toCql = toCql . Blob . JSON.encode fromCql (CqlBlob v) = JSON.eitherDecode v - fromCql _ = fail "RichInfo: Blob expected" + fromCql _ = Left "RichInfo: Blob expected" instance Cql Domain where ctype = Tagged TextColumn toCql = CqlText . domainText - fromCql (CqlText txt) = either fail pure $ mkDomain txt - fromCql _ = fail "Domain: Text expected" + fromCql (CqlText txt) = mkDomain txt + fromCql _ = Left "Domain: Text expected" diff --git a/services/brig/src/Brig/Data/User.hs b/services/brig/src/Brig/Data/User.hs index b192b8fd8f8..2eb4c9c1d69 100644 --- a/services/brig/src/Brig/Data/User.hs +++ b/services/brig/src/Brig/Data/User.hs @@ -73,7 +73,6 @@ import Brig.Options import Brig.Password import Brig.Types import Brig.Types.Intra -import Brig.Types.User (newUserExpiresIn) import qualified Brig.ZAuth as ZAuth import Cassandra import Control.Error diff --git a/services/brig/src/Brig/Data/UserKey.hs b/services/brig/src/Brig/Data/UserKey.hs index be21c62a357..408973ff0dd 100644 --- a/services/brig/src/Brig/Data/UserKey.hs +++ b/services/brig/src/Brig/Data/UserKey.hs @@ -72,8 +72,8 @@ instance Cql UKHashType where fromCql (CqlInt i) = case i of 0 -> return UKHashPhone 1 -> return UKHashEmail - n -> fail $ "unexpected hashtype: " ++ show n - fromCql _ = fail "userkeyhashtype: int expected" + n -> Left $ "unexpected hashtype: " ++ show n + fromCql _ = Left "userkeyhashtype: int expected" toCql UKHashPhone = CqlInt 0 toCql UKHashEmail = CqlInt 1 @@ -84,9 +84,9 @@ instance Cql UserKeyHash where ctype = Tagged BlobColumn fromCql (CqlBlob lbs) = case MH.decode (toStrict lbs) of - Left e -> fail ("userkeyhash: " ++ e) + Left e -> Left ("userkeyhash: " ++ e) Right h -> return $ UserKeyHash h - fromCql _ = fail "userkeyhash: expected blob" + fromCql _ = Left "userkeyhash: expected blob" toCql (UserKeyHash d) = CqlBlob $ MH.encode (MH.algorithm d) (MH.digest d) diff --git a/services/brig/src/Brig/Index/Migrations.hs b/services/brig/src/Brig/Index/Migrations.hs index 14ea80ebf4e..852ef985932 100644 --- a/services/brig/src/Brig/Index/Migrations.hs +++ b/services/brig/src/Brig/Index/Migrations.hs @@ -26,7 +26,7 @@ import qualified Brig.User.Search.Index as Search import qualified Cassandra as C import qualified Cassandra.Settings as C import Control.Lens (view, (^.)) -import Control.Monad.Catch (Exception, MonadThrow, finally, throwM) +import Control.Monad.Catch (MonadThrow, finally, throwM) import Data.Aeson (Value, object, (.=)) import qualified Data.Metrics as Metrics import qualified Data.Text as Text diff --git a/services/brig/src/Brig/Index/Migrations/Types.hs b/services/brig/src/Brig/Index/Migrations/Types.hs index 920ed007e1d..3327515a134 100644 --- a/services/brig/src/Brig/Index/Migrations/Types.hs +++ b/services/brig/src/Brig/Index/Migrations/Types.hs @@ -23,7 +23,6 @@ module Brig.Index.Migrations.Types where import qualified Brig.User.Search.Index as Search import qualified Cassandra as C import Control.Monad.Catch (MonadThrow) -import Control.Monad.Reader (MonadReader (..), ReaderT, lift, runReaderT) import Data.Aeson (FromJSON (..), ToJSON (..), object, withObject, (.:), (.=)) import Data.Metrics (Metrics) import qualified Database.Bloodhound as ES diff --git a/services/brig/src/Brig/Password.hs b/services/brig/src/Brig/Password.hs index 1b782ac74c6..0f7738e8375 100644 --- a/services/brig/src/Brig/Password.hs +++ b/services/brig/src/Brig/Password.hs @@ -43,7 +43,7 @@ instance Cql Password where ctype = Tagged BlobColumn fromCql (CqlBlob lbs) = return . Password . EncryptedPass $ toStrict lbs - fromCql _ = fail "password: expected blob" + fromCql _ = Left "password: expected blob" toCql = CqlBlob . fromStrict . getEncryptedPass . fromPassword diff --git a/services/brig/src/Brig/Phone.hs b/services/brig/src/Brig/Phone.hs index 41520c0dc41..02379acb2ba 100644 --- a/services/brig/src/Brig/Phone.hs +++ b/services/brig/src/Brig/Phone.hs @@ -44,7 +44,6 @@ import Brig.Types import Control.Lens (view) import Control.Monad.Catch import Control.Retry -import Data.Char (isSpace) import Data.LanguageCodes import qualified Data.Metrics as Metrics import qualified Data.Text as Text diff --git a/services/brig/src/Brig/Provider/DB.hs b/services/brig/src/Brig/Provider/DB.hs index c9adc1089a8..af0313ae037 100644 --- a/services/brig/src/Brig/Provider/DB.hs +++ b/services/brig/src/Brig/Provider/DB.hs @@ -29,7 +29,6 @@ import Brig.Types.Provider.Tag import Cassandra as C import Control.Arrow ((&&&)) import Data.Id -import Data.List (minimumBy, sortOn, uncons, unfoldr) import Data.List1 (List1) import Data.Misc import Data.Range (Range, fromRange, rcast, rnil) diff --git a/services/brig/src/Brig/RPC.hs b/services/brig/src/Brig/RPC.hs index 1bb3a0f9419..4d12ab84065 100644 --- a/services/brig/src/Brig/RPC.hs +++ b/services/brig/src/Brig/RPC.hs @@ -32,7 +32,7 @@ import Data.Id import qualified Data.Text as Text import qualified Data.Text.Lazy as LT import Imports -import Network.HTTP.Client (HttpException (..), HttpExceptionContent (..), checkResponse) +import Network.HTTP.Client (HttpExceptionContent (..), checkResponse) import Network.HTTP.Types.Method import Network.HTTP.Types.Status import System.Logger.Class hiding (name, (.=)) diff --git a/services/brig/src/Brig/SMTP.hs b/services/brig/src/Brig/SMTP.hs index 86d5eb0022e..59818297d81 100644 --- a/services/brig/src/Brig/SMTP.hs +++ b/services/brig/src/Brig/SMTP.hs @@ -20,7 +20,6 @@ module Brig.SMTP where import Control.Lens import Data.Aeson import Data.Aeson.TH -import Data.Char (toLower) import Data.Pool import Data.Text (unpack) import Imports diff --git a/services/brig/src/Brig/User/Auth/Cookie/Limit.hs b/services/brig/src/Brig/User/Auth/Cookie/Limit.hs index 77ca9c71507..d8160d3f03b 100644 --- a/services/brig/src/Brig/User/Auth/Cookie/Limit.hs +++ b/services/brig/src/Brig/User/Auth/Cookie/Limit.hs @@ -19,7 +19,6 @@ module Brig.User.Auth.Cookie.Limit where import Brig.Types.User.Auth import Data.Aeson -import Data.List (sortBy) import Data.Time.Clock import Data.Time.Clock.POSIX import qualified Data.Vector as Vector diff --git a/services/brig/src/Brig/User/Auth/DB/Instances.hs b/services/brig/src/Brig/User/Auth/DB/Instances.hs index 737af407f98..971f8fd2488 100644 --- a/services/brig/src/Brig/User/Auth/DB/Instances.hs +++ b/services/brig/src/Brig/User/Auth/DB/Instances.hs @@ -40,7 +40,7 @@ instance Cql CookieId where toCql = CqlBigInt . fromIntegral . cookieIdNum fromCql (CqlBigInt i) = return (CookieId (fromIntegral i)) - fromCql _ = fail "fromCql: invalid cookie id" + fromCql _ = Left "fromCql: invalid cookie id" instance Cql CookieType where ctype = Tagged IntColumn @@ -50,4 +50,4 @@ instance Cql CookieType where fromCql (CqlInt 0) = return SessionCookie fromCql (CqlInt 1) = return PersistentCookie - fromCql _ = fail "fromCql: invalid cookie type" + fromCql _ = Left "fromCql: invalid cookie type" diff --git a/services/brig/src/Brig/User/Search/Index.hs b/services/brig/src/Brig/User/Search/Index.hs index 95ceb2ec267..d66267f3118 100644 --- a/services/brig/src/Brig/User/Search/Index.hs +++ b/services/brig/src/Brig/User/Search/Index.hs @@ -71,7 +71,6 @@ import Data.Id import qualified Data.Map as Map import Data.Metrics import Data.Range -import Data.Semigroup (Max (..)) import Data.Text.ICU.Translit (trans, transliterate) import Data.Text.Lazy.Builder.Int (decimal) import Data.Text.Lens hiding (text) diff --git a/services/brig/src/Brig/Whitelist.hs b/services/brig/src/Brig/Whitelist.hs index a61e7838844..010412c85b8 100644 --- a/services/brig/src/Brig/Whitelist.hs +++ b/services/brig/src/Brig/Whitelist.hs @@ -35,7 +35,7 @@ import Data.Aeson import Data.Text import Data.Text.Encoding (encodeUtf8) import Imports -import Network.HTTP.Client (HttpException (..), HttpExceptionContent (..), parseRequest) +import Network.HTTP.Client (HttpExceptionContent (..)) -- | A service providing a whitelist of allowed email addresses and phone numbers data Whitelist = Whitelist diff --git a/services/brig/test/integration/API/Calling.hs b/services/brig/test/integration/API/Calling.hs index b36a2182270..1f693223de9 100644 --- a/services/brig/test/integration/API/Calling.hs +++ b/services/brig/test/integration/API/Calling.hs @@ -29,14 +29,12 @@ import Data.Bifunctor (Bifunctor (first)) import Data.ByteString.Conversion import qualified Data.ByteString.Lazy as LB import Data.Id -import Data.List ((\\)) import qualified Data.List.NonEmpty as NonEmpty import Data.List1 (List1) import qualified Data.List1 as List1 import Data.Misc (Port, mkHttpsUrl) import qualified Data.Set as Set import Imports -import Network.HTTP.Client (Manager) import System.FilePath (()) import Test.Tasty import Test.Tasty.HUnit diff --git a/services/brig/test/integration/API/Search.hs b/services/brig/test/integration/API/Search.hs index 7574a5be620..ff669fa11cc 100644 --- a/services/brig/test/integration/API/Search.hs +++ b/services/brig/test/integration/API/Search.hs @@ -30,18 +30,15 @@ import qualified Brig.Options as Opt import Brig.Types import Control.Lens ((.~), (?~), (^.)) import Control.Monad.Catch (MonadCatch, MonadThrow) -import Control.Monad.Fail (MonadFail) import Control.Retry import Data.Aeson (FromJSON, Value, (.=)) import qualified Data.Aeson as Aeson import Data.Handle (fromHandle) import Data.Id -import Data.List (elemIndex) import qualified Data.Text as Text import qualified Database.Bloodhound as ES import qualified Galley.Types.Teams.SearchVisibility as Team import Imports -import Network.HTTP.Client (Manager) import qualified Network.HTTP.Client as HTTP import qualified Network.Wai.Test as WaiTest import Test.Tasty diff --git a/services/brig/test/integration/API/Team.hs b/services/brig/test/integration/API/Team.hs index 1a83cdad7af..26644728549 100644 --- a/services/brig/test/integration/API/Team.hs +++ b/services/brig/test/integration/API/Team.hs @@ -36,7 +36,6 @@ import Brig.Types.User.Auth import Control.Arrow ((&&&)) import Control.Lens hiding ((.=)) import Control.Monad.Catch (MonadCatch, MonadThrow) -import Control.Monad.Fail (MonadFail) import Data.Aeson import Data.ByteString.Conversion import Data.Id hiding (client) @@ -47,7 +46,6 @@ import qualified Data.UUID.V4 as UUID import qualified Galley.Types.Teams as Team import qualified Galley.Types.Teams.Intra as Team import Imports -import Network.HTTP.Client (Manager) import qualified Network.Wai.Test as WaiTest import qualified Network.Wai.Utilities.Error as Error import Numeric.Natural (Natural) diff --git a/services/brig/test/integration/API/Team/Util.hs b/services/brig/test/integration/API/Team/Util.hs index 107ac430dba..0293e682fb7 100644 --- a/services/brig/test/integration/API/Team/Util.hs +++ b/services/brig/test/integration/API/Team/Util.hs @@ -28,7 +28,6 @@ import Brig.Types.Team.Invitation import Brig.Types.User import Control.Lens ((^?)) import Control.Monad.Catch (MonadCatch, MonadThrow) -import Control.Monad.Fail (MonadFail) import Data.Aeson import Data.Aeson.Lens import Data.ByteString.Conversion diff --git a/services/brig/test/integration/Util.hs b/services/brig/test/integration/Util.hs index bade4a50538..f61798825b7 100644 --- a/services/brig/test/integration/Util.hs +++ b/services/brig/test/integration/Util.hs @@ -38,7 +38,6 @@ import Brig.Types.User.Auth import qualified Brig.ZAuth as ZAuth import Control.Lens ((^.), (^?), (^?!)) import Control.Monad.Catch (MonadCatch) -import Control.Monad.Fail (MonadFail) import Control.Retry import Data.Aeson import Data.Aeson.Lens (key, _Integral, _JSON, _String) @@ -557,7 +556,7 @@ mkEmailRandomLocalSuffix e = do uid <- liftIO UUID.nextRandom case parseEmail e of Just (Email loc dom) -> return $ Email (loc <> "+" <> UUID.toText uid) dom - Nothing -> fail $ "Invalid email address: " ++ Text.unpack e + Nothing -> error $ "Invalid email address: " ++ Text.unpack e -- | Generate emails that are in the trusted whitelist of domains whose @+@ suffices count for email -- disambiguation. See also: 'Brig.Email.mkEmailKey'. diff --git a/services/cannon/src/Cannon/API/Internal.hs b/services/cannon/src/Cannon/API/Internal.hs index d9e15604386..b60d6dcdff3 100644 --- a/services/cannon/src/Cannon/API/Internal.hs +++ b/services/cannon/src/Cannon/API/Internal.hs @@ -37,8 +37,6 @@ import Network.Wai import Network.Wai.Predicate import Network.Wai.Routing import Network.Wai.Utilities -import Network.Wai.Utilities.Request (parseBody') -import Network.Wai.Utilities.Response (json) import System.Logger.Class (msg, val) import qualified System.Logger.Class as LC diff --git a/services/cannon/src/Cannon/API/Public.hs b/services/cannon/src/Cannon/API/Public.hs index 1084491e30b..8480c5932f9 100644 --- a/services/cannon/src/Cannon/API/Public.hs +++ b/services/cannon/src/Cannon/API/Public.hs @@ -33,7 +33,6 @@ import Network.Wai.Handler.WebSockets import Network.Wai.Predicate import Network.Wai.Routing import Network.Wai.Utilities -import Network.Wai.Utilities.Response (json) import Network.Wai.Utilities.Swagger import qualified Network.WebSockets as Ws diff --git a/services/cannon/src/Cannon/App.hs b/services/cannon/src/Cannon/App.hs index 74de9451438..428549a4dfc 100644 --- a/services/cannon/src/Cannon/App.hs +++ b/services/cannon/src/Cannon/App.hs @@ -33,7 +33,7 @@ import Data.Id (ClientId) import qualified Data.Text.Lazy as Text import Data.Timeout import Imports hiding (threadDelay) -import Lens.Family hiding (set) +import Lens.Family hiding (reset, set) import Network.HTTP.Types.Status import Network.Wai.Utilities.Error import Network.WebSockets hiding (Request, Response, requestHeaders) diff --git a/services/cargohold/src/CargoHold/API/Public.hs b/services/cargohold/src/CargoHold/API/Public.hs index 73ba7eb5dd4..33950d5c024 100644 --- a/services/cargohold/src/CargoHold/API/Public.hs +++ b/services/cargohold/src/CargoHold/API/Public.hs @@ -43,7 +43,6 @@ import Network.Wai.Conduit (sourceRequestBody) import Network.Wai.Predicate hiding (Error, setStatus) import Network.Wai.Routing import Network.Wai.Utilities hiding (message) -import Network.Wai.Utilities.Response (json) import Network.Wai.Utilities.Swagger (document, mkSwaggerApi) import qualified Network.Wai.Utilities.Swagger as Doc import Network.Wai.Utilities.ZAuth diff --git a/services/federator/src/Federator/App.hs b/services/federator/src/Federator/App.hs index f6dcd763ab2..872aed9e9f4 100644 --- a/services/federator/src/Federator/App.hs +++ b/services/federator/src/Federator/App.hs @@ -31,7 +31,7 @@ import Bilge.RPC (HasRequestId (..)) import Control.Error (ExceptT) import Control.Lens (view) import Control.Monad.Catch (MonadCatch, MonadMask, MonadThrow) -import Control.Monad.Trans.Resource (MonadUnliftIO, ResourceT, runResourceT, transResourceT) +import Control.Monad.Trans.Resource (ResourceT, runResourceT, transResourceT) import Federator.Types (Env, applog, requestId) import Imports import Servant.API.Generic () diff --git a/services/galley/src/Galley/API/Error.hs b/services/galley/src/Galley/API/Error.hs index cd26fe1618e..5e6bd16254a 100644 --- a/services/galley/src/Galley/API/Error.hs +++ b/services/galley/src/Galley/API/Error.hs @@ -30,7 +30,7 @@ import Galley.Types.Teams (IsPerm, hardTruncationLimit) import Imports import Network.HTTP.Types.Status import Network.Wai.Utilities.Error -import Type.Reflection (Typeable, typeRep) +import Type.Reflection (typeRep) internalError :: Error internalError = internalErrorWithDescription "internal error" diff --git a/services/galley/src/Galley/Data.hs b/services/galley/src/Galley/Data.hs index 355a6b09adb..5b54cba20ec 100644 --- a/services/galley/src/Galley/Data.hs +++ b/services/galley/src/Galley/Data.hs @@ -116,7 +116,6 @@ import Data.Bifunctor (first) import Data.ByteString.Conversion hiding (parser) import Data.Coerce (coerce) import Data.Domain (Domain) -import Data.Function (on) import Data.Id as Id import Data.IdMapping (IdMapping (IdMapping), MappedOrLocalId (Local, Mapped), opaqueIdFromMappedOrLocal) import Data.Json.Util (UTCTimeMillis (..)) diff --git a/services/galley/src/Galley/Data/Instances.hs b/services/galley/src/Galley/Data/Instances.hs index d94b533a315..0175d87b5f5 100644 --- a/services/galley/src/Galley/Data/Instances.hs +++ b/services/galley/src/Galley/Data/Instances.hs @@ -51,8 +51,8 @@ instance Cql ConvType where 1 -> return SelfConv 2 -> return One2OneConv 3 -> return ConnectConv - n -> fail $ "unexpected conversation-type: " ++ show n - fromCql _ = fail "conv-type: int expected" + n -> Left $ "unexpected conversation-type: " ++ show n + fromCql _ = Left "conv-type: int expected" instance Cql Access where ctype = Tagged IntColumn @@ -67,8 +67,8 @@ instance Cql Access where 2 -> return InviteAccess 3 -> return LinkAccess 4 -> return CodeAccess - n -> fail $ "Unexpected Access value: " ++ show n - fromCql _ = fail "Access value: int expected" + n -> Left $ "Unexpected Access value: " ++ show n + fromCql _ = Left "Access value: int expected" instance Cql AccessRole where ctype = Tagged IntColumn @@ -83,8 +83,8 @@ instance Cql AccessRole where 2 -> return TeamAccessRole 3 -> return ActivatedAccessRole 4 -> return NonActivatedAccessRole - n -> fail $ "Unexpected AccessRole value: " ++ show n - fromCql _ = fail "AccessRole value: int expected" + n -> Left $ "Unexpected AccessRole value: " ++ show n + fromCql _ = Left "AccessRole value: int expected" instance Cql ConvTeamInfo where ctype = Tagged $ UdtColumn "teaminfo" [("teamid", UuidColumn), ("managed", BooleanColumn)] @@ -95,7 +95,7 @@ instance Cql ConvTeamInfo where t <- note "missing 'teamid' in teaminfo" ("teamid" `lookup` u) >>= fromCql m <- note "missing 'managed' in teaminfo" ("managed" `lookup` u) >>= fromCql pure (ConvTeamInfo t m) - fromCql _ = fail "teaminfo: udt expected" + fromCql _ = Left "teaminfo: udt expected" instance Cql TeamBinding where ctype = Tagged BooleanColumn @@ -105,7 +105,7 @@ instance Cql TeamBinding where fromCql (CqlBoolean True) = pure Binding fromCql (CqlBoolean False) = pure NonBinding - fromCql _ = fail "teambinding: boolean expected" + fromCql _ = Left "teambinding: boolean expected" instance Cql TeamStatus where ctype = Tagged IntColumn @@ -122,8 +122,8 @@ instance Cql TeamStatus where 2 -> return Deleted 3 -> return Suspended 4 -> return PendingActive - n -> fail $ "unexpected team-status: " ++ show n - fromCql _ = fail "team-status: int expected" + n -> Left $ "unexpected team-status: " ++ show n + fromCql _ = Left "team-status: int expected" instance Cql Public.TeamFeatureStatusValue where ctype = Tagged IntColumn @@ -131,8 +131,8 @@ instance Cql Public.TeamFeatureStatusValue where fromCql (CqlInt n) = case n of 0 -> pure $ Public.TeamFeatureDisabled 1 -> pure $ Public.TeamFeatureEnabled - _ -> fail "fromCql: Invalid TeamFeatureStatusValue" - fromCql _ = fail "fromCql: TeamFeatureStatusValue: CqlInt expected" + _ -> Left "fromCql: Invalid TeamFeatureStatusValue" + fromCql _ = Left "fromCql: TeamFeatureStatusValue: CqlInt expected" toCql Public.TeamFeatureDisabled = CqlInt 0 toCql Public.TeamFeatureEnabled = CqlInt 1 @@ -143,8 +143,8 @@ instance Cql TeamSearchVisibility where fromCql (CqlInt n) = case n of 0 -> pure $ SearchVisibilityStandard 1 -> pure $ SearchVisibilityNoNameOutsideTeam - _ -> fail "fromCql: Invalid TeamSearchVisibility" - fromCql _ = fail "fromCql: TeamSearchVisibility: CqlInt expected" + _ -> Left "fromCql: Invalid TeamSearchVisibility" + fromCql _ = Left "fromCql: TeamSearchVisibility: CqlInt expected" toCql SearchVisibilityStandard = CqlInt 0 toCql SearchVisibilityNoNameOutsideTeam = CqlInt 1 @@ -152,5 +152,5 @@ instance Cql TeamSearchVisibility where instance Cql Domain where ctype = Tagged TextColumn toCql = CqlText . domainText - fromCql (CqlText txt) = either fail pure $ mkDomain txt - fromCql _ = fail "Domain: Text expected" + fromCql (CqlText txt) = mkDomain txt + fromCql _ = Left "Domain: Text expected" diff --git a/services/galley/src/Galley/Data/Types.hs b/services/galley/src/Galley/Data/Types.hs index 16a5e9f3f61..19cb9bd2123 100644 --- a/services/galley/src/Galley/Data/Types.hs +++ b/services/galley/src/Galley/Data/Types.hs @@ -100,7 +100,7 @@ instance Cql Scope where toCql ReusableCode = CqlInt 1 fromCql (CqlInt 1) = return ReusableCode - fromCql _ = fail "unknown Scope" + fromCql _ = Left "unknown Scope" toCode :: Key -> Scope -> (Value, Int32, ConvId) -> Code toCode k s (val, ttl, cnv) = diff --git a/services/galley/src/Galley/External.hs b/services/galley/src/Galley/External.hs index 22b76e9a0af..4b8b7994a82 100644 --- a/services/galley/src/Galley/External.hs +++ b/services/galley/src/Galley/External.hs @@ -22,7 +22,6 @@ where import Bilge.Request import Bilge.Retry (httpHandlers) -import Control.Exception (fromException) import Control.Lens import Control.Retry import Data.ByteString.Conversion.To diff --git a/services/galley/src/Galley/Intra/Client.hs b/services/galley/src/Galley/Intra/Client.hs index 9c36265711e..f8f67405579 100644 --- a/services/galley/src/Galley/Intra/Client.hs +++ b/services/galley/src/Galley/Intra/Client.hs @@ -27,7 +27,6 @@ where import Bilge hiding (getHeader, options, statusCode) import Bilge.RPC import Brig.Types.Client -import Brig.Types.Client.Prekey (LastPrekey, Prekey) import Brig.Types.Intra import Brig.Types.Team.LegalHold (LegalHoldClientRequest (..)) import Brig.Types.User.Auth (LegalHoldLogin (..)) diff --git a/services/galley/src/Galley/Intra/Push.hs b/services/galley/src/Galley/Intra/Push.hs index 27a4944fcc1..8e3381e2c9d 100644 --- a/services/galley/src/Galley/Intra/Push.hs +++ b/services/galley/src/Galley/Intra/Push.hs @@ -50,7 +50,7 @@ where import Bilge hiding (options) import Bilge.RPC import Bilge.Retry -import Control.Lens (makeLenses, set, view, (&), (.~), (^.)) +import Control.Lens (makeLenses, set, view, (.~), (^.)) import Control.Monad.Catch import Control.Retry import Data.Aeson (Object) diff --git a/services/galley/src/Galley/Intra/User.hs b/services/galley/src/Galley/Intra/User.hs index 9e2dd2cd3b4..d2ec99fd311 100644 --- a/services/galley/src/Galley/Intra/User.hs +++ b/services/galley/src/Galley/Intra/User.hs @@ -30,7 +30,6 @@ import Bilge hiding (getHeader, options, statusCode) import Bilge.RPC import Brig.Types.Connection (ConnectionsStatusRequest (..), Relation (..), UserIds (..)) import Brig.Types.Intra -import Brig.Types.Intra (ConnectionStatus (..), ReAuthUser (..)) import Brig.Types.User (User) import Control.Monad.Catch (throwM) import Data.ByteString.Char8 (pack) @@ -40,7 +39,7 @@ import Data.Id import Galley.App import Galley.Intra.Util import Imports -import Network.HTTP.Client (HttpException (..), HttpExceptionContent (..)) +import Network.HTTP.Client (HttpExceptionContent (..)) import qualified Network.HTTP.Client.Internal as Http import Network.HTTP.Types.Method import Network.HTTP.Types.Status diff --git a/services/galley/test/integration/API/SQS.hs b/services/galley/test/integration/API/SQS.hs index afd7f1f7663..a52e7dae200 100644 --- a/services/galley/test/integration/API/SQS.hs +++ b/services/galley/test/integration/API/SQS.hs @@ -19,7 +19,7 @@ -- instead. module API.SQS where -import Control.Exception (SomeAsyncException, asyncExceptionFromException) +import Control.Exception (asyncExceptionFromException) import Control.Lens hiding ((.=)) import Control.Monad.Catch hiding (bracket) import qualified Data.ByteString.Base64 as B64 diff --git a/services/galley/test/integration/API/Teams/LegalHold.hs b/services/galley/test/integration/API/Teams/LegalHold.hs index b66c6887d1a..01481bfa563 100644 --- a/services/galley/test/integration/API/Teams/LegalHold.hs +++ b/services/galley/test/integration/API/Teams/LegalHold.hs @@ -36,7 +36,7 @@ import qualified Cassandra.Exec as Cql import qualified Control.Concurrent.Async as Async import Control.Concurrent.Chan import Control.Concurrent.Timeout hiding (threadDelay) -import Control.Exception (SomeAsyncException, asyncExceptionFromException) +import Control.Exception (asyncExceptionFromException) import Control.Lens import Control.Monad.Catch import Control.Retry (RetryPolicy, RetryStatus, exponentialBackoff, limitRetries, retrying) @@ -83,7 +83,6 @@ import Test.QuickCheck.Instances () import Test.Tasty import qualified Test.Tasty.Cannon as WS import Test.Tasty.HUnit -import Test.Tasty.HUnit (assertBool) import TestHelpers import TestSetup import qualified Wire.API.Team.Feature as Public diff --git a/services/galley/test/integration/API/Util.hs b/services/galley/test/integration/API/Util.hs index 8892fa136ee..9f8c2a98c16 100644 --- a/services/galley/test/integration/API/Util.hs +++ b/services/galley/test/integration/API/Util.hs @@ -27,7 +27,6 @@ import Brig.Types.Team.Invitation import Brig.Types.User.Auth (CookieLabel (..)) import Control.Lens hiding (from, to, (#), (.=)) import Control.Monad.Catch (MonadCatch) -import Control.Monad.Fail (MonadFail) import Control.Retry (constantDelay, limitRetries, retrying) import Data.Aeson hiding (json) import Data.Aeson.Lens (key, _String) @@ -1264,7 +1263,7 @@ randomUserWithClient lk = do newNonce :: TestM (Id ()) newNonce = randomId -fromBS :: (HasCallStack, FromByteString a, Monad m) => ByteString -> m a +fromBS :: (HasCallStack, FromByteString a, MonadFail m) => ByteString -> m a fromBS = maybe (fail "fromBS: no parse") return . fromByteString convRange :: Maybe (Either [ConvId] ConvId) -> Maybe Int32 -> Request -> Request diff --git a/services/galley/test/integration/TestSetup.hs b/services/galley/test/integration/TestSetup.hs index 090124ddfd5..2b0dd87a939 100644 --- a/services/galley/test/integration/TestSetup.hs +++ b/services/galley/test/integration/TestSetup.hs @@ -39,7 +39,6 @@ import Bilge (Manager, MonadHttp (..), Request, withResponse) import qualified Cassandra as Cql import Control.Lens (makeLenses, view) import Control.Monad.Catch (MonadCatch, MonadMask, MonadThrow) -import Control.Monad.Fail (MonadFail) import Data.Aeson import qualified Galley.Aws as Aws import Galley.Options (Opts) diff --git a/services/gundeck/src/Gundeck/API/Public.hs b/services/gundeck/src/Gundeck/API/Public.hs index b2457fab223..273dc640e0f 100644 --- a/services/gundeck/src/Gundeck/API/Public.hs +++ b/services/gundeck/src/Gundeck/API/Public.hs @@ -40,7 +40,6 @@ import Network.Wai import Network.Wai.Predicate hiding (setStatus) import Network.Wai.Routing hiding (route) import Network.Wai.Utilities -import Network.Wai.Utilities.Response (json, setStatus) import Network.Wai.Utilities.Swagger import Wire.API.Notification (NotificationId) import qualified Wire.API.Notification as Public diff --git a/services/gundeck/src/Gundeck/Instances.hs b/services/gundeck/src/Gundeck/Instances.hs index e162984af34..b96d011c2ed 100644 --- a/services/gundeck/src/Gundeck/Instances.hs +++ b/services/gundeck/src/Gundeck/Instances.hs @@ -50,8 +50,8 @@ instance Cql Transport where 2 -> return APNSSandbox 3 -> return APNSVoIP 4 -> return APNSVoIPSandbox - n -> fail $ "unexpected transport: " ++ show n - fromCql _ = fail "transport: int expected" + n -> Left $ "unexpected transport: " ++ show n + fromCql _ = Left "transport: int expected" instance Cql ConnId where ctype = Tagged BlobColumn @@ -59,25 +59,25 @@ instance Cql ConnId where toCql (ConnId c) = CqlBlob (Bytes.fromStrict c) fromCql (CqlBlob b) = return . ConnId $ Bytes.toStrict b - fromCql _ = fail "ConnId: Blob expected" + fromCql _ = Left "ConnId: Blob expected" instance Cql EndpointArn where ctype = Tagged TextColumn toCql = CqlText . toText - fromCql (CqlText txt) = either fail return (fromText txt) - fromCql _ = fail "EndpointArn: Text expected" + fromCql (CqlText txt) = either Left return (fromText txt) + fromCql _ = Left "EndpointArn: Text expected" instance Cql Token where ctype = Tagged TextColumn toCql = CqlText . tokenText fromCql (CqlText txt) = Right (Token txt) - fromCql _ = fail "Token: Text expected" + fromCql _ = Left "Token: Text expected" instance Cql AppName where ctype = Tagged TextColumn toCql = CqlText . appNameText fromCql (CqlText txt) = Right (AppName txt) - fromCql _ = fail "App: Text expected" + fromCql _ = Left "App: Text expected" instance ToText (Id a) where toText = Text.decodeUtf8 . Uuid.toASCIIBytes . toUUID diff --git a/services/gundeck/src/Gundeck/Push.hs b/services/gundeck/src/Gundeck/Push.hs index c1f07844c19..a06252abd71 100644 --- a/services/gundeck/src/Gundeck/Push.hs +++ b/services/gundeck/src/Gundeck/Push.hs @@ -67,7 +67,6 @@ import Network.HTTP.Types import Network.Wai.Utilities import System.Logger.Class (msg, val, (+++), (.=), (~~)) import qualified System.Logger.Class as Log -import UnliftIO.Concurrent (forkIO) import qualified Wire.API.Push.Token as Public push :: [Push] -> Gundeck () diff --git a/services/gundeck/src/Gundeck/Push/Native/Types.hs b/services/gundeck/src/Gundeck/Push/Native/Types.hs index 70f391a6c7f..e007bbe2fec 100644 --- a/services/gundeck/src/Gundeck/Push/Native/Types.hs +++ b/services/gundeck/src/Gundeck/Push/Native/Types.hs @@ -44,7 +44,6 @@ import Control.Lens (Lens', makeLenses, view, (^.)) import Data.Id (ClientId, ConnId, UserId) import Gundeck.Aws.Arn import Gundeck.Types -import Gundeck.Types.Push.V2 (PushToken) import Imports -- | Native push address information of a device. diff --git a/services/gundeck/src/Gundeck/Push/Websocket.hs b/services/gundeck/src/Gundeck/Push/Websocket.hs index 6cfdab100ef..df7426efdae 100644 --- a/services/gundeck/src/Gundeck/Push/Websocket.hs +++ b/services/gundeck/src/Gundeck/Push/Websocket.hs @@ -47,7 +47,7 @@ import Gundeck.Types.Notification import Gundeck.Types.Presence import Gundeck.Util import Imports -import Network.HTTP.Client (HttpException (..), HttpExceptionContent (..)) +import Network.HTTP.Client (HttpExceptionContent (..)) import qualified Network.HTTP.Client.Internal as Http import Network.HTTP.Types (StdMethod (POST), status200, status410) import qualified Network.URI as URI diff --git a/services/gundeck/src/Gundeck/Util/DelayQueue.hs b/services/gundeck/src/Gundeck/Util/DelayQueue.hs index 0e9013ac87b..80130fe4580 100644 --- a/services/gundeck/src/Gundeck/Util/DelayQueue.hs +++ b/services/gundeck/src/Gundeck/Util/DelayQueue.hs @@ -32,7 +32,6 @@ where import Data.OrdPSQ (OrdPSQ) import qualified Data.OrdPSQ as PSQ -import Data.Tuple (swap) import Imports hiding (length) data DelayQueue k v = DelayQueue diff --git a/services/gundeck/test/integration/API.hs b/services/gundeck/test/integration/API.hs index 7cc5984ceaa..e995ed9648e 100644 --- a/services/gundeck/test/integration/API.hs +++ b/services/gundeck/test/integration/API.hs @@ -27,7 +27,7 @@ import Bilge.Assert import qualified Cassandra as Cql import Control.Arrow ((&&&)) import Control.Concurrent.Async (Async, async, concurrently_, forConcurrently_, wait) -import Control.Lens (view, (%~), (.~), (<&>), (^.), (^?), _2) +import Control.Lens (view, (%~), (.~), (^.), (^?), _2) import Control.Retry (constantDelay, limitRetries, recoverAll, retrying) import Data.Aeson hiding (json) import Data.Aeson.Lens diff --git a/services/gundeck/test/integration/TestSetup.hs b/services/gundeck/test/integration/TestSetup.hs index 47e41b27ac2..2d31de313a7 100644 --- a/services/gundeck/test/integration/TestSetup.hs +++ b/services/gundeck/test/integration/TestSetup.hs @@ -39,7 +39,6 @@ import Bilge (HttpT (..), Manager, MonadHttp, Request, runHttpT) import qualified Cassandra as Cql import Control.Lens (makeLenses, (^.)) import Control.Monad.Catch (MonadCatch, MonadMask, MonadThrow) -import Control.Monad.Fail (MonadFail) import Imports import qualified System.Logger as Log import Test.Tasty (TestName, TestTree) diff --git a/services/spar/src/Spar/App.hs b/services/spar/src/Spar/App.hs index b9af844e549..521830c0312 100644 --- a/services/spar/src/Spar/App.hs +++ b/services/spar/src/Spar/App.hs @@ -76,7 +76,6 @@ import SAML2.WebSSO import qualified SAML2.WebSSO as SAML import Servant import qualified Servant.Multipart as Multipart -import Servant.Server (errBody, errReasonPhrase) import Spar.API.Swagger () import qualified Spar.Data as Data import Spar.Error diff --git a/services/spar/src/Spar/Data/Instances.hs b/services/spar/src/Spar/Data/Instances.hs index f2d2cb2c57a..28f7623b267 100644 --- a/services/spar/src/Spar/Data/Instances.hs +++ b/services/spar/src/Spar/Data/Instances.hs @@ -46,28 +46,28 @@ instance Cql SAML.XmlText where toCql = CqlText . SAML.unsafeFromXmlText fromCql (CqlText t) = pure $ SAML.mkXmlText t - fromCql _ = fail "XmlText: expected CqlText" + fromCql _ = Left "XmlText: expected CqlText" instance Cql (SignedCertificate) where ctype = Tagged BlobColumn toCql = CqlBlob . cs . renderKeyInfo fromCql (CqlBlob t) = parseKeyInfo False (cs t) - fromCql _ = fail "SignedCertificate: expected CqlBlob" + fromCql _ = Left "SignedCertificate: expected CqlBlob" instance Cql (URIRef Absolute) where ctype = Tagged TextColumn toCql = CqlText . SAML.renderURI fromCql (CqlText t) = parseURI' t - fromCql _ = fail "URI: expected CqlText" + fromCql _ = Left "URI: expected CqlText" instance Cql SAML.NameID where ctype = Tagged TextColumn toCql = CqlText . cs . SAML.encodeElem fromCql (CqlText t) = SAML.decodeElem (cs t) - fromCql _ = fail "NameID: expected CqlText" + fromCql _ = Left "NameID: expected CqlText" deriving instance Cql SAML.Issuer @@ -88,8 +88,8 @@ instance Cql VerdictFormatCon where fromCql (CqlInt i) = case i of 0 -> return VerdictFormatConWeb 1 -> return VerdictFormatConMobile - n -> fail $ "unexpected VerdictFormatCon: " ++ show n - fromCql _ = fail "member-status: int expected" + n -> Left $ "unexpected VerdictFormatCon: " ++ show n + fromCql _ = Left "member-status: int expected" fromVerdictFormat :: VerdictFormat -> VerdictFormatRow fromVerdictFormat VerdictFormatWeb = (VerdictFormatConWeb, Nothing, Nothing) diff --git a/services/spar/src/Spar/Intra/Brig.hs b/services/spar/src/Spar/Intra/Brig.hs index 6685464cf07..46648b0c3f7 100644 --- a/services/spar/src/Spar/Intra/Brig.hs +++ b/services/spar/src/Spar/Intra/Brig.hs @@ -70,7 +70,6 @@ import Data.Id (Id (Id), TeamId, UserId) import Data.Ix import Data.Misc (PlainTextPassword) import Data.String.Conversions -import Data.String.Conversions (cs) import Imports import Network.HTTP.Types.Method import qualified Network.Wai.Utilities.Error as Wai diff --git a/services/spar/src/Spar/Scim/Swagger.hs b/services/spar/src/Spar/Scim/Swagger.hs index 60a20e52df4..2a97cf9824d 100644 --- a/services/spar/src/Spar/Scim/Swagger.hs +++ b/services/spar/src/Spar/Scim/Swagger.hs @@ -30,7 +30,7 @@ module Spar.Scim.Swagger ) where -import Control.Lens (mapped, (&), (.~), (?~)) +import Control.Lens (mapped, (.~), (?~)) import Data.Id (ScimTokenId, TeamId) import Data.Proxy (Proxy (Proxy)) import Data.Swagger hiding (Header (..)) diff --git a/services/spar/src/Spar/Types.hs b/services/spar/src/Spar/Types.hs index efa304135e7..2fc47398a19 100644 --- a/services/spar/src/Spar/Types.hs +++ b/services/spar/src/Spar/Types.hs @@ -32,7 +32,6 @@ import Data.Id (ScimTokenId, TeamId, UserId) import Data.Json.Util import Data.Proxy (Proxy (Proxy)) import Data.String.Conversions -import Data.String.Conversions (ST) import qualified Data.Text as ST import Data.Text.Encoding (encodeUtf8) import Data.Time diff --git a/services/spar/test-integration/Test/Spar/AppSpec.hs b/services/spar/test-integration/Test/Spar/AppSpec.hs index d49246c7b8e..341750a4c1e 100644 --- a/services/spar/test-integration/Test/Spar/AppSpec.hs +++ b/services/spar/test-integration/Test/Spar/AppSpec.hs @@ -30,7 +30,6 @@ import Data.Id import qualified Data.List as List import Data.String.Conversions import Imports -import SAML2.Util ((-/)) import SAML2.WebSSO as SAML import qualified SAML2.WebSSO.Test.MockResponse as SAML import qualified Servant diff --git a/services/spar/test-integration/Test/Spar/DataSpec.hs b/services/spar/test-integration/Test/Spar/DataSpec.hs index 808e1d3f2e9..a49edaba146 100644 --- a/services/spar/test-integration/Test/Spar/DataSpec.hs +++ b/services/spar/test-integration/Test/Spar/DataSpec.hs @@ -27,7 +27,6 @@ import Cassandra import Control.Lens import Control.Monad.Except import Data.Kind (Type) -import Data.Typeable (Typeable) import Data.UUID as UUID import Data.UUID.V4 as UUID import Imports diff --git a/services/spar/test-integration/Util/Core.hs b/services/spar/test-integration/Util/Core.hs index 2f49c730e60..93daf8dbfe0 100644 --- a/services/spar/test-integration/Util/Core.hs +++ b/services/spar/test-integration/Util/Core.hs @@ -135,7 +135,6 @@ import Control.Exception import Control.Lens hiding ((.=)) import Control.Monad.Catch import Control.Monad.Except -import Control.Monad.Fail (MonadFail) import Control.Retry import Crypto.Random.Types (MonadRandom) import Data.Aeson as Aeson hiding (json) diff --git a/services/spar/test-integration/Util/Scim.hs b/services/spar/test-integration/Util/Scim.hs index 5a28a8df5f1..313e4d0af0f 100644 --- a/services/spar/test-integration/Util/Scim.hs +++ b/services/spar/test-integration/Util/Scim.hs @@ -37,7 +37,6 @@ import qualified SAML2.WebSSO as SAML import SAML2.WebSSO.Types (IdPId, idpId) import Spar.Data as Data import qualified Spar.Intra.Brig as Intra -import Spar.Scim (CreateScimToken (..), CreateScimTokenResponse (..), ScimTokenList (..)) import Spar.Scim.Types import Spar.Scim.User (synthesizeScimUser, validateScimUser') import Spar.Types (IdP, IdPMetadataInfo (..), ScimToken (..), ScimTokenInfo (..)) diff --git a/stack-deps.nix b/stack-deps.nix index d29487c53ba..ba6c69fd34a 100644 --- a/stack-deps.nix +++ b/stack-deps.nix @@ -17,5 +17,5 @@ pkgs.haskell.lib.buildStackProject { snappy zlib ]; - ghc = pkgs.haskell.compiler.ghc865; + ghc = pkgs.haskell.compiler.ghc884; } diff --git a/stack.yaml b/stack.yaml index d417313b894..1281ef0a8a4 100644 --- a/stack.yaml +++ b/stack.yaml @@ -1,4 +1,4 @@ -resolver: lts-14.27 +resolver: lts-16.14 packages: - libs/api-bot @@ -55,7 +55,6 @@ nix: allow-newer: true extra-deps: -- swagger2-2.4 - git: https://github.com/fimad/prometheus-haskell commit: 2e3282e5fb27ba8d989c271a0a989823fad7ec43 subdirs: @@ -64,7 +63,7 @@ extra-deps: # a version > 1.0.0 of wai-middleware-prometheus is available # (required: https://github.com/fimad/prometheus-haskell/pull/45) - git: https://github.com/wireapp/saml2-web-sso - commit: 687d9ac8ac2994aff8436189c6ecce29faad8500 # master (May 18, 2020) + commit: 43c74bd44698e062abaa090c56de5272e66cee27 # master (Sep 24, 2020) - git: https://github.com/kim/hs-collectd commit: 885da222be2375f78c7be36127620ed772b677c9 @@ -75,10 +74,6 @@ extra-deps: - git: https://gitlab.com/twittner/wai-routing commit: 7e996a93fec5901767f845a50316b3c18e51a61d -# Includes the changes from -# - git: https://gitlab.com/twittner/cql-io.git -# commit: 8b91d053c469887a427e8c075cef43139fa189c4 - # Our fork of multihash with relaxed upper bounds - git: https://github.com/wireapp/haskell-multihash.git commit: 300a6f46384bfca33e545c8bab52ef3717452d12 @@ -88,7 +83,7 @@ extra-deps: commit: 0a5142cd3ba48116ff059c041348b817fb7bdb25 - git: https://github.com/wireapp/bloodhound - commit: 7d3ccf8039912829b26b8e47cc4eaabc98cb571a # (2020-05-25) branch: feature/reindex + commit: 8c2b6f77bf6cd2506ea0ad3c1cd1251c9f42545b # (2020-05-25) branch: wire-fork-ghc-8.8 # For bloodhound - deriving-aeson-0.2.5@sha256:a1efa4ab7ff94f73e6d2733a9d4414cb4c3526761295722cff28027b5b3da1a4,1277 @@ -124,7 +119,7 @@ extra-deps: commit: 7546a1a25635ef65183e3d44c1052285e8401608 # master (Jul 21, 2016) - git: https://github.com/wireapp/hsaml2 - commit: fe08618e81dee9b7a25f10f5b9d26d1ff1837c79 # master (Mar 25, 2020) + commit: 2ff7b0c11a9d510f1ec411f436bc134b216ebd4a # pull-upstream (Aug 20, 2020) - git: https://github.com/wireapp/http-client commit: 9100baeddbd15d93dc58a826ae812dafff29d5fd # master (Jun 16, 2020) @@ -136,19 +131,13 @@ extra-deps: # Dropped from upstream snapshot - template-0.2.0.10 -- HaskellNet-0.5.1 -- HaskellNet-SSL-0.3.4.1 +- HaskellNet-0.5.2 - snappy-0.2.0.2 - smtp-mail-0.2.0.0 -- stm-containers-1.1.0.4 -- redis-io-1.0.0 +- stm-containers-1.1.0.4 # Latest: lts-15.16 - redis-resp-1.0.0 -- hedgehog-quickcheck-0.1.1 - -# Only in nightly -- stm-hamt-1.2.0.4 -- optics-th-0.2 -- primitive-unlifted-0.1.2.0 +- stm-hamt-1.2.0.4 # Latest: lts-15.16 +- primitive-unlifted-0.1.2.0 # Latest: lts-15.16 # Not on stackage - currency-codes-3.0.0.1 @@ -163,6 +152,7 @@ extra-deps: - base58-bytestring-0.1.0 - stompl-0.5.0 - pattern-trie-0.1.0 +- markov-chain-usage-model-0.0.0 # Not latest as latst one breaks wai-routing - wai-route-0.4.0 @@ -171,8 +161,29 @@ extra-deps: - QuickCheck-2.14 - splitmix-0.0.4 # needed for QuickCheck -# Newer than the one one stackage -- polysemy-1.3.0.0 +- HsOpenSSL-x509-system-0.1.0.3@sha256:f4958ee0eec555c5c213662eff6764bddefe5665e2afcfd32733ce3801a9b687,1774 # Latest: lts-14.27 +- cql-4.0.2@sha256:a0006a5ac13d6f86d5eff28c11be80928246309f217ea6d5f5c8a76a5d16b48b,3157 # Latest: lts-14.27 +- cql-io-1.1.1@sha256:897ef0811b227c8b1a269b29b9c1ebfb09c46f00d66834e2e8c6f19ea7f90f7d,4611 # Latest: lts-14.27 +- primitive-extras-0.8@sha256:fca0310150496867f5b9421fe1541ecda87fae17eae44885a29f9c52dd00c8ff,2963 # Latest: lts-15.16 +- text-format-0.3.2@sha256:2a3fc17cf87120fcfdbca62a0da59759755549285841cdc1483081c35fb3d115,1814 # Latest: lts-14.27 +- hex-0.2.0@sha256:197d2561d2e216c4ead035b4911dabc6e678ac6257cb71b64e324c822f6f9f5a,726 # Latest: lts-14.27 + +# Not in the upstream snapshot and not using latest version on hackage due to +# breaking change +- quickcheck-state-machine-0.6.0 +- servant-multipart-0.11.5@sha256:1633f715b5b53d648a1da69839bdc5046599f4f7244944d4bbf852dba38d8f4b,2319 + +# Dependencies on upstream source + +# Required for GHC 8.8, but not released to hackage yet +- git: https://github.com/dpwright/HaskellNet-SSL + commit: ca84ef29a93eaef7673fa58056cdd8dae1568d2d # master (Sep 14, 2020) + +# Forks with pending PRs +- git: https://gitlab.com/axeman/wai-predicates.git + commit: 999d195b27104b9b39174f5ce18f5214b018a177 # ghc-8.8 (Sep 14, 2020, PR: https://gitlab.com/twittner/wai-predicates/-/merge_requests/1) +- git: https://gitlab.com/axeman/redis-io.git + commit: a0f39b1c517df21ad284ff91ecb062cbe41a4ad1 # ghc-8.8 (Sep 21 , 2020, https://gitlab.com/twittner/redis-io/-/merge_requests/5) ############################################################ # Development tools diff --git a/stack.yaml.lock b/stack.yaml.lock index 1d2d2035253..c85507bf2fc 100644 --- a/stack.yaml.lock +++ b/stack.yaml.lock @@ -4,13 +4,6 @@ # https://docs.haskellstack.org/en/stable/lock_files packages: -- completed: - hackage: swagger2-2.4@sha256:3fde8c2c6bc091738cba62e63c29d690b711848560d86e82615516869f76140b,4415 - pantry-tree: - size: 2192 - sha256: f4ae95200dfc2f44699a39f533dd6889107aff61f52e988c13edad8fcb30faef - original: - hackage: swagger2-2.4 - completed: subdir: wai-middleware-prometheus name: wai-middleware-prometheus @@ -29,12 +22,12 @@ packages: version: '0.18' git: https://github.com/wireapp/saml2-web-sso pantry-tree: - size: 4601 - sha256: 58cd6e1435b4ad530b99de3f9c7ffbf7d8644ebc75f2da22b2521e4347a92701 - commit: 687d9ac8ac2994aff8436189c6ecce29faad8500 + size: 4657 + sha256: c1c5ff18a9c8996aa33dd571662033928cda4ae4ebcda98b6777f8ebd0cc7102 + commit: 43c74bd44698e062abaa090c56de5272e66cee27 original: git: https://github.com/wireapp/saml2-web-sso - commit: 687d9ac8ac2994aff8436189c6ecce29faad8500 + commit: 43c74bd44698e062abaa090c56de5272e66cee27 - completed: name: collectd version: 0.0.0.2 @@ -90,17 +83,6 @@ packages: original: git: https://github.com/wireapp/hspec-wai commit: 0a5142cd3ba48116ff059c041348b817fb7bdb25 -- completed: - name: bloodhound - version: 0.17.0.0 - git: https://github.com/wireapp/bloodhound - pantry-tree: - size: 4343 - sha256: f3d35894f570e67a68303e71134a722909151f4de232093375a63b7935a4b761 - commit: 7d3ccf8039912829b26b8e47cc4eaabc98cb571a - original: - git: https://github.com/wireapp/bloodhound - commit: 7d3ccf8039912829b26b8e47cc4eaabc98cb571a - completed: hackage: deriving-aeson-0.2.5@sha256:a1efa4ab7ff94f73e6d2733a9d4414cb4c3526761295722cff28027b5b3da1a4,1277 pantry-tree: @@ -252,11 +234,11 @@ packages: git: https://github.com/wireapp/hsaml2 pantry-tree: size: 3918 - sha256: a90ad3e25ab6ba579ea4d347c8734f92f73e323303c91d53729ddc8784774f72 - commit: fe08618e81dee9b7a25f10f5b9d26d1ff1837c79 + sha256: c2f2849bc28cc7fb8a4ec843dbc7606df179915dc54c5cc2aa2e30b974ef3d61 + commit: 2ff7b0c11a9d510f1ec411f436bc134b216ebd4a original: git: https://github.com/wireapp/hsaml2 - commit: fe08618e81dee9b7a25f10f5b9d26d1ff1837c79 + commit: 2ff7b0c11a9d510f1ec411f436bc134b216ebd4a - completed: subdir: http-client name: http-client @@ -317,19 +299,12 @@ packages: original: hackage: template-0.2.0.10 - completed: - hackage: HaskellNet-0.5.1@sha256:53f2cfffb140740691296f905a70143c859b571eea3f5cf5f7a4642851d9e38a,1584 + hackage: HaskellNet-0.5.2@sha256:77fb8466fcbeb76f17366ffd7deb37550b6ea08a4d08bf721d0b597c2573336d,2069 pantry-tree: - size: 1437 - sha256: e0806ea13b946dfc785bf9580e126cfcb8d3c6f21e1fbe313374745c3a8a8b99 + size: 1499 + sha256: 20f0361675729e606fb37b8a1865f4bd49d952f2d0148693b62f68fadf5801d5 original: - hackage: HaskellNet-0.5.1 -- completed: - hackage: HaskellNet-SSL-0.3.4.1@sha256:3ca14dd69460a380cf69aed40654fb10c4c03e344632b6a9986568c87feda157,1843 - pantry-tree: - size: 577 - sha256: 33fbfd0d8bbaa689f0169d442861dafcdcd4fe795a4b42aa0bedbfa41aa65b23 - original: - hackage: HaskellNet-SSL-0.3.4.1 + hackage: HaskellNet-0.5.2 - completed: hackage: snappy-0.2.0.2@sha256:2931b03c5fdab2dac8d7eadb3be2f4ef8906666e43f1f1db65a06efd57ea701b,1591 pantry-tree: @@ -351,13 +326,6 @@ packages: sha256: 059c5a2d657d392aca0a887648f57380d6321734dc8879c056a44d4414308ac6 original: hackage: stm-containers-1.1.0.4 -- completed: - hackage: redis-io-1.0.0@sha256:8885d41408ec7305d7503e21bd3f334fb02fb2367d26b9998d8a6fcbccf8339b,2734 - pantry-tree: - size: 855 - sha256: ed28c921459e22410513f00d97c9915bcba7f7b083a8b80d067fc5c5114a9db1 - original: - hackage: redis-io-1.0.0 - completed: hackage: redis-resp-1.0.0@sha256:c134ac23e79d57071fdc8559e2b2e72280ea11786a8ba4118c10ed506dc7d991,1615 pantry-tree: @@ -365,13 +333,6 @@ packages: sha256: c63020c2f2ca4f92c4747959a2e89e84bdd929d1ea1458c75552ee3f7aaa00fc original: hackage: redis-resp-1.0.0 -- completed: - hackage: hedgehog-quickcheck-0.1.1@sha256:7f4d4197d65314b0117857ff7e530d84f456b124e93024952bf9b01d8c1cc1b2,1552 - pantry-tree: - size: 407 - sha256: 2052d8dae458f1832b598a8de139eb91dfb23432a52fec16e9d48f90909fdc17 - original: - hackage: hedgehog-quickcheck-0.1.1 - completed: hackage: stm-hamt-1.2.0.4@sha256:7957497c022554b7599e790696d1a3e56359ad99e5da36a251894c626ca1f60a,3970 pantry-tree: @@ -379,13 +340,6 @@ packages: sha256: d9a8be48da86bd4a2ba9d52ea29b9a74f1b686d439ba1bbfba04ab1a002391da original: hackage: stm-hamt-1.2.0.4 -- completed: - hackage: optics-th-0.2@sha256:b4f6c5a3f134c697837190ed6da969dd284aefe79e43c3ef793093b607bb83b9,1929 - pantry-tree: - size: 653 - sha256: f6b5caed956d3761b35769ac518d3f0f407449dafe33154992386f02d9489bad - original: - hackage: optics-th-0.2 - completed: hackage: primitive-unlifted-0.1.2.0@sha256:9c3df73af54ed19fb3f4874da19334863cc414b22e578e27b5f52beeac4a60dd,1360 pantry-tree: @@ -477,6 +431,13 @@ packages: sha256: 9cf57bcb24b5da4d9ab314750810dce6c28ae082348e0afd60bdb12afdeeca6f original: hackage: pattern-trie-0.1.0 +- completed: + hackage: markov-chain-usage-model-0.0.0@sha256:1afa95faeb9213c4d960a669190078b41b89169462b8edd910472980671ba8c0,2112 + pantry-tree: + size: 432 + sha256: 6871bd9281acf589296d0998a3d62892b036040ab10e74e8a0f356f68c194f4f + original: + hackage: markov-chain-usage-model-0.0.0 - completed: hackage: wai-route-0.4.0@sha256:ee52f13d2945e4a56147e91e515e184f840654f2e3d9071c73bec3d8aa1f4444,2119 pantry-tree: @@ -499,12 +460,94 @@ packages: original: hackage: splitmix-0.0.4 - completed: - hackage: polysemy-1.3.0.0@sha256:fa76e96a883fd1c4bdbad792a0a9d88f59f84817651aea5c71d9b4f74e42c5b6,6141 + hackage: HsOpenSSL-x509-system-0.1.0.3@sha256:f4958ee0eec555c5c213662eff6764bddefe5665e2afcfd32733ce3801a9b687,1774 + pantry-tree: + size: 503 + sha256: 2a097abbccc0382ebb565c8ab9932628f33471607c2174303c3c930d7685bd18 + original: + hackage: HsOpenSSL-x509-system-0.1.0.3@sha256:f4958ee0eec555c5c213662eff6764bddefe5665e2afcfd32733ce3801a9b687,1774 +- completed: + hackage: cql-4.0.2@sha256:a0006a5ac13d6f86d5eff28c11be80928246309f217ea6d5f5c8a76a5d16b48b,3157 + pantry-tree: + size: 1281 + sha256: 8cc6e57c6a794188ae79415cee38bd29e1c07f7426cfa533c9a57523c0a2ed23 + original: + hackage: cql-4.0.2@sha256:a0006a5ac13d6f86d5eff28c11be80928246309f217ea6d5f5c8a76a5d16b48b,3157 +- completed: + hackage: cql-io-1.1.1@sha256:897ef0811b227c8b1a269b29b9c1ebfb09c46f00d66834e2e8c6f19ea7f90f7d,4611 + pantry-tree: + size: 2067 + sha256: 7ced76ae95b51fa1669b4fcaeec3825b5cb8cf1f4e37c53d0bddf6234742eba8 + original: + hackage: cql-io-1.1.1@sha256:897ef0811b227c8b1a269b29b9c1ebfb09c46f00d66834e2e8c6f19ea7f90f7d,4611 +- completed: + hackage: primitive-extras-0.8@sha256:fca0310150496867f5b9421fe1541ecda87fae17eae44885a29f9c52dd00c8ff,2963 + pantry-tree: + size: 1105 + sha256: e7c1d26202b80d1fca2ef780ec7fe76ede1275f4d9a996c6d44c08d8de1c45db + original: + hackage: primitive-extras-0.8@sha256:fca0310150496867f5b9421fe1541ecda87fae17eae44885a29f9c52dd00c8ff,2963 +- completed: + hackage: text-format-0.3.2@sha256:2a3fc17cf87120fcfdbca62a0da59759755549285841cdc1483081c35fb3d115,1814 + pantry-tree: + size: 1029 + sha256: 2db26ddb77184186e0d5b2b020bdfbeb044c168024767b1fa3691682ca618896 + original: + hackage: text-format-0.3.2@sha256:2a3fc17cf87120fcfdbca62a0da59759755549285841cdc1483081c35fb3d115,1814 +- completed: + hackage: hex-0.2.0@sha256:197d2561d2e216c4ead035b4911dabc6e678ac6257cb71b64e324c822f6f9f5a,726 + pantry-tree: + size: 197 + sha256: 1e5aba0165fb8ffa93d1516a87026a59c245750ca5f2ed42bd53b8328620f98e + original: + hackage: hex-0.2.0@sha256:197d2561d2e216c4ead035b4911dabc6e678ac6257cb71b64e324c822f6f9f5a,726 +- completed: + hackage: quickcheck-state-machine-0.6.0@sha256:3e4f8df0f6b5d415e3c8840dc75034a63e37f56f5f8cfa1035ded16345235ac4,3825 + pantry-tree: + size: 1926 + sha256: ae502fd7f4c6680294149bed482d1896904c1259d5ae614093da01e0731ec92e + original: + hackage: quickcheck-state-machine-0.6.0 +- completed: + hackage: servant-multipart-0.11.5@sha256:1633f715b5b53d648a1da69839bdc5046599f4f7244944d4bbf852dba38d8f4b,2319 + pantry-tree: + size: 333 + sha256: b3e1fd2ad2e654475be000c2f0ac6f717b5499436fa73eec50ceccddf352dcec + original: + hackage: servant-multipart-0.11.5@sha256:1633f715b5b53d648a1da69839bdc5046599f4f7244944d4bbf852dba38d8f4b,2319 +- completed: + name: HaskellNet-SSL + version: 0.3.4.2 + git: https://github.com/dpwright/HaskellNet-SSL + pantry-tree: + size: 786 + sha256: c6a64c9e64bc834842756be28eaac2d842f0dde3753542bfa0cfd87ae5cf0bc5 + commit: ca84ef29a93eaef7673fa58056cdd8dae1568d2d + original: + git: https://github.com/dpwright/HaskellNet-SSL + commit: ca84ef29a93eaef7673fa58056cdd8dae1568d2d +- completed: + name: wai-predicates + version: 0.10.0 + git: https://gitlab.com/axeman/wai-predicates.git + pantry-tree: + size: 1585 + sha256: 8675a538bbbfb171b9d565831f333e443118ea5a70b1be8bffa635cb847d04fa + commit: 999d195b27104b9b39174f5ce18f5214b018a177 + original: + git: https://gitlab.com/axeman/wai-predicates.git + commit: 999d195b27104b9b39174f5ce18f5214b018a177 +- completed: + name: redis-io + version: 1.0.0 + git: https://gitlab.com/axeman/redis-io.git pantry-tree: - size: 4309 - sha256: 3d2fb15ddda9053f6bfd4b0810a79a9542505acb5e7e528856ec3cd86d6df066 + size: 912 + sha256: 3e8093b581c621df7ecbf2f6f79686afdea8bfeb56f0e546fff1e9d86de3bf80 + commit: a0f39b1c517df21ad284ff91ecb062cbe41a4ad1 original: - hackage: polysemy-1.3.0.0 + git: https://gitlab.com/axeman/redis-io.git + commit: a0f39b1c517df21ad284ff91ecb062cbe41a4ad1 - completed: hackage: ormolu-0.1.2.0@sha256:24e6512750576978b6f045c1e53a7aad28ab61960f738a3c74fb0bc2beaf4030,6237 pantry-tree: @@ -528,7 +571,7 @@ packages: hackage: headroom-0.2.1.0 snapshots: - completed: - size: 524996 - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/14/27.yaml - sha256: 7ea31a280c56bf36ff591a7397cc384d0dff622e7f9e4225b47d8980f019a0f0 - original: lts-14.27 + size: 532382 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/16/14.yaml + sha256: 1ef27e36f38824abafc43224ca612211b3828fa9ffd31ba0fc2867ae2e19ba90 + original: lts-16.14 diff --git a/tools/bonanza/bonanza.cabal b/tools/bonanza/bonanza.cabal index c49b73b1b88..d504e7f8743 100644 --- a/tools/bonanza/bonanza.cabal +++ b/tools/bonanza/bonanza.cabal @@ -1,10 +1,10 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.31.2. +-- This file has been generated from package.yaml by hpack version 0.33.0. -- -- see: https://github.com/sol/hpack -- --- hash: 8d08766e828f1eb6b5314808808037082ec748509c5640b48410a0691beeaa1a +-- hash: c65bea2c25598cbdee588334b4a36a838abbe0612536a104ef9be32b01c3078b name: bonanza version: 3.6.0 @@ -71,6 +71,7 @@ library , lens-aeson , mtl , network + , network-bsd , optparse-applicative >=0.11 , protobuf >=0.2.1.1 , resourcet @@ -78,7 +79,7 @@ library , snappy , snappy-framing , text - , time >=1.5 && <1.9 + , time >=1.5 , types-common >=0.14.1 , unordered-containers , vector diff --git a/tools/bonanza/package.yaml b/tools/bonanza/package.yaml index b544e420999..82d5320f845 100644 --- a/tools/bonanza/package.yaml +++ b/tools/bonanza/package.yaml @@ -40,12 +40,13 @@ library: - lens-aeson - mtl - network + - network-bsd - optparse-applicative >=0.11 - protobuf >=0.2.1.1 - scientific - snappy - snappy-framing - - time >=1.5 && <1.9 + - time >=1.5 - types-common >=0.14.1 - unordered-containers - vector diff --git a/tools/bonanza/test/unit/Test/Bonanza/Arbitrary.hs b/tools/bonanza/test/unit/Test/Bonanza/Arbitrary.hs index dccf2a3c018..9401e30261c 100644 --- a/tools/bonanza/test/unit/Test/Bonanza/Arbitrary.hs +++ b/tools/bonanza/test/unit/Test/Bonanza/Arbitrary.hs @@ -376,23 +376,24 @@ instance Arbitrary (ParseInput (NginzLogRecord)) where where genFields :: Gen [(Text, CommonLogField)] genFields = - mapM - (\(f, g) -> f <$> g) - [ ((,) "status", genIntField), - ((,) "body_bytes_sent", genIntField), - ((,) "http_referer", genStringField), - ((,) "http_user_agent", genStringField), - ((,) "http_x_forwarded_for", genIPv4Field), - ((,) "separator", genEmptyField), - ((,) "connection", genIntField), - ((,) "request_time", genDoubleField), - ((,) "upstream_response_time", genDoubleField), - ((,) "upstream_cache_status", genStringField), - ((,) "user", genStringField), - ((,) "zconn", genStringField), - ((,) "request", genStringField), - ((,) "proxy_protocol_addr", genIPv4Field) - ] + sequence $ + map + (\(f, g) -> (f,) <$> g) + [ ("status", genIntField), + ("body_bytes_sent", genIntField), + ("http_referer", genStringField), + ("http_user_agent", genStringField), + ("http_x_forwarded_for", genIPv4Field), + ("separator", genEmptyField), + ("connection", genIntField), + ("request_time", genDoubleField), + ("upstream_response_time", genDoubleField), + ("upstream_cache_status", genStringField), + ("user", genStringField), + ("zconn", genStringField), + ("request", genStringField), + ("proxy_protocol_addr", genIPv4Field) + ] genIntField :: Gen CommonLogField genIntField = maybe CEmpty (CField . Number . fromIntegral . getNonNegative) diff --git a/tools/db/find-undead/src/Work.hs b/tools/db/find-undead/src/Work.hs index f60e30f9719..70d1675aa79 100644 --- a/tools/db/find-undead/src/Work.hs +++ b/tools/db/find-undead/src/Work.hs @@ -139,5 +139,5 @@ instance Cql AccountStatus where 1 -> return Suspended 2 -> return Deleted 3 -> return Ephemeral - n -> fail $ "unexpected account status: " ++ show n - fromCql _ = fail "account status: int expected" + n -> Left $ "unexpected account status: " ++ show n + fromCql _ = Left "account status: int expected" diff --git a/tools/makedeb/src/System/MakeDeb.hs b/tools/makedeb/src/System/MakeDeb.hs index 8211c7000a9..6729bcfc71b 100644 --- a/tools/makedeb/src/System/MakeDeb.hs +++ b/tools/makedeb/src/System/MakeDeb.hs @@ -30,10 +30,10 @@ where import Data.Text (pack) import qualified Data.Text as Text import qualified Data.Text.IO as Text -import Filesystem.Path.CurrentOS (decodeString, encodeString) +import Filesystem.Path.CurrentOS (FilePath, decodeString, encodeString) import Imports hiding (FilePath) import Options.Applicative -import Shelly +import Shelly hiding (FilePath) import System.MakeDeb.FileUtils data MakeDebOpts = MakeDebOpts @@ -99,19 +99,19 @@ options = makeDeb :: MakeDebOpts -> IO () makeDeb opts = shelly . silently . withTmpDir $ \tmp -> do - void . escaping False $ cmd "cp" "-R" "-L" (deb opts "*") tmp - let opts' = opts {deb = tmp} + void . escaping False $ run "cp" ["-R", "-L", Text.pack $ encodeString (deb opts) "*", Text.pack tmp] + let opts' = opts {deb = decodeString tmp} substitute opts' package opts' package :: MakeDebOpts -> Sh () package MakeDebOpts {..} = do let f = name <> "_" <> version <> "+" <> build <> "_" <> arch - cmd "dpkg-deb" "-b" deb (out fromText f <.> "deb") + run_ "dpkg-deb" ["-b", Text.pack $ encodeString deb, Text.pack $ encodeString out fromText f <.> "deb"] substitute :: MakeDebOpts -> Sh () substitute MakeDebOpts {..} = flip traverseFiles (encodeString deb) $ \fname -> do - mime <- cmd "file" "--brief" "--mime" (decodeString fname) + mime <- run "file" ["--brief", "--mime", Text.pack fname] when ("text/plain" `Text.isPrefixOf` mime) $ replace [ ("<>", version), diff --git a/tools/stern/src/Stern/API.hs b/tools/stern/src/Stern/API.hs index 4368489f85b..1e20b506dc4 100644 --- a/tools/stern/src/Stern/API.hs +++ b/tools/stern/src/Stern/API.hs @@ -29,13 +29,10 @@ where import Brig.Types import Brig.Types.Intra -import Control.Applicative ((<|>)) import Control.Error import Control.Lens ((^.)) -import Control.Monad (liftM, void, when) import Data.Aeson hiding (Error, json) import Data.Aeson.Types (emptyArray) -import Data.ByteString (ByteString) import Data.ByteString.Conversion import Data.ByteString.Lazy (fromStrict) import Data.Handle (Handle) @@ -45,7 +42,7 @@ import Data.Predicate import Data.Range import Data.Swagger.Build.Api hiding (Response, def, min, response) import qualified Data.Swagger.Build.Api as Doc -import Data.Text (Text, unpack) +import Data.Text (unpack) import qualified Data.Text as T import Data.Text.Encoding (decodeLatin1) import qualified Galley.Types.Teams.SearchVisibility as Team diff --git a/tools/stern/src/Stern/API/Predicates.hs b/tools/stern/src/Stern/API/Predicates.hs index 1d48ddb128d..5992d1254bb 100644 --- a/tools/stern/src/Stern/API/Predicates.hs +++ b/tools/stern/src/Stern/API/Predicates.hs @@ -23,7 +23,6 @@ module Stern.API.Predicates where import Brig.Types -import Data.ByteString (ByteString) import qualified Data.ByteString.Char8 as Char8 import Data.ByteString.Conversion import qualified Data.Char as Char diff --git a/tools/stern/src/Stern/App.hs b/tools/stern/src/Stern/App.hs index fc5132def11..e5fd8e80382 100644 --- a/tools/stern/src/Stern/App.hs +++ b/tools/stern/src/Stern/App.hs @@ -24,7 +24,6 @@ module Stern.App where import qualified Bilge -import qualified Bilge.IO as Bilge (withResponse) import Bilge.RPC (HasRequestId (..)) import Control.Error import Control.Lens (makeLenses, set, view, (^.)) @@ -32,7 +31,6 @@ import Control.Monad.Catch (MonadCatch, MonadThrow) import Control.Monad.IO.Class import Control.Monad.Reader.Class import Control.Monad.Trans.Class -import Control.Monad.Trans.Reader (ReaderT (..), runReaderT) import Data.ByteString.Conversion (toByteString') import Data.Default (def) import Data.Id (UserId) diff --git a/tools/stern/src/Stern/Intra.hs b/tools/stern/src/Stern/Intra.hs index bb8a891512f..8fc0645b991 100644 --- a/tools/stern/src/Stern/Intra.hs +++ b/tools/stern/src/Stern/Intra.hs @@ -67,7 +67,6 @@ import Control.Lens (view, (^.)) import Control.Monad.Reader import Data.Aeson hiding (Error) import Data.Aeson.Types (emptyArray) -import Data.ByteString (ByteString) import qualified Data.ByteString.Char8 as BS import Data.ByteString.Conversion import Data.Handle (Handle) @@ -75,7 +74,7 @@ import qualified Data.HashMap.Strict as M import Data.Id import Data.Int import Data.List.Split (chunksOf) -import Data.Text (Text, strip) +import Data.Text (strip) import Data.Text.Encoding (decodeUtf8, encodeUtf8) import Data.Text.Lazy (pack) import Galley.Types