diff options
| -rw-r--r-- | .gitea/workflows/build.yml | 62 | ||||
| -rw-r--r-- | .gitea/workflows/release.yml | 23 | ||||
| -rw-r--r-- | CHANGELOG.md | 6 | ||||
| -rw-r--r-- | graphql.cabal | 6 | ||||
| -rw-r--r-- | src/Language/GraphQL/Error.hs | 35 | ||||
| -rw-r--r-- | tests/Language/GraphQL/AST/Arbitrary.hs | 59 |
6 files changed, 88 insertions, 103 deletions
diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 6851bbd..3cb0475 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -2,67 +2,51 @@ name: Build on: push: + branches: + - '**' pull_request: branches: [master] jobs: audit: - runs-on: alpine + runs-on: haskell steps: - name: Set up environment - shell: ash {0} run: | - apk add --no-cache git bash curl build-base readline-dev openssl-dev zlib-dev libpq-dev gmp-dev - - name: Prepare system - run: | - curl --create-dirs --output-dir \ - ~/.ghcup/bin https://downloads.haskell.org/~ghcup/0.1.19.5/x86_64-linux-ghcup-0.1.19.5 -o ghcup - chmod +x ~/.ghcup/bin/ghcup - ~/.ghcup/bin/ghcup install ghc 9.4.8 - ~/.ghcup/bin/ghcup install cabal 3.6.2.0 + apt-get update -y + apt-get upgrade -y + apt-get install -y nodejs pkg-config - uses: actions/checkout@v4 - name: Install dependencies run: | - ~/.ghcup/bin/ghcup run --ghc 9.4.8 --cabal 3.6.2.0 -- cabal update - ~/.ghcup/bin/ghcup run --ghc 9.4.8 --cabal 3.6.2.0 -- cabal install hlint --constraint="hlint ==3.6.1" - - run: ~/.cabal/bin/hlint -- src tests + cabal update + cabal install hlint "--constraint=hlint ==3.8" + - run: cabal exec hlint -- src tests test: - runs-on: alpine + runs-on: haskell steps: - name: Set up environment - shell: ash {0} - run: | - apk add --no-cache git bash curl build-base readline-dev openssl-dev zlib-dev libpq-dev gmp-dev - - name: Prepare system run: | - curl --create-dirs --output-dir \ - ~/.ghcup/bin https://downloads.haskell.org/~ghcup/0.1.19.5/x86_64-linux-ghcup-0.1.19.5 -o ghcup - chmod +x ~/.ghcup/bin/ghcup - ~/.ghcup/bin/ghcup install ghc 9.4.8 - ~/.ghcup/bin/ghcup install cabal 3.6.2.0 + apt-get update -y + apt-get upgrade -y + apt-get install -y nodejs pkg-config - uses: actions/checkout@v4 - name: Install dependencies - run: | - ~/.ghcup/bin/ghcup run --ghc 9.4.8 --cabal 3.6.2.0 -- cabal update - ~/.ghcup/bin/ghcup run --ghc 9.4.8 --cabal 3.6.2.0 -- cabal build graphql-test - - run: ~/.ghcup/bin/ghcup run --ghc 9.4.8 --cabal 3.6.2.0 -- cabal test --test-show-details=direct + run: cabal update + - name: Prepare system + run: cabal build graphql-test + - run: cabal test --test-show-details=streaming doc: - runs-on: alpine + runs-on: haskell steps: - name: Set up environment - shell: ash {0} - run: | - apk add --no-cache git bash curl build-base readline-dev openssl-dev zlib-dev libpq-dev gmp-dev - - name: Prepare system run: | - curl --create-dirs --output-dir \ - ~/.ghcup/bin https://downloads.haskell.org/~ghcup/0.1.19.5/x86_64-linux-ghcup-0.1.19.5 -o ghcup - chmod +x ~/.ghcup/bin/ghcup - ~/.ghcup/bin/ghcup install ghc 9.4.8 - ~/.ghcup/bin/ghcup install cabal 3.6.2.0 + apt-get update -y + apt-get upgrade -y + apt-get install -y nodejs pkg-config - uses: actions/checkout@v4 - name: Install dependencies - run: ~/.ghcup/bin/ghcup run --ghc 9.4.8 --cabal 3.6.2.0 -- cabal update - - run: ~/.ghcup/bin/ghcup run --ghc 9.4.8 --cabal 3.6.2.0 -- cabal haddock --enable-documentation + run: cabal update + - run: cabal haddock --enable-documentation diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..b815625 --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,23 @@ +name: Release + +on: + push: + tags: + - '**' + +jobs: + release: + runs-on: haskell + steps: + - name: Set up environment + run: | + apt-get update -y + apt-get upgrade -y + apt-get install -y nodejs pkg-config + - uses: actions/checkout@v4 + - name: Upload a candidate + env: + HACKAGE_PASSWORD: ${{ secrets.HACKAGE_PASSWORD }} + run: | + cabal sdist + cabal upload --username belka --password ${HACKAGE_PASSWORD} diff --git a/CHANGELOG.md b/CHANGELOG.md index 15efd13..884d590 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ The format is based on and this project adheres to [Haskell Package Versioning Policy](https://pvp.haskell.org/). +## [1.3.0.0] - 2024-05-01 +### Changed +- Remove deprecated `runCollectErrs`, `Resolution`, `CollectErrsT` from the + `Error` module. + ## [1.2.0.3] - 2024-01-09 ### Fixed - Fix corrupted source distribution. @@ -519,6 +524,7 @@ and this project adheres to ### Added - Data types for the GraphQL language. +[1.3.0.0]: https://git.caraus.tech/OSS/graphql/compare/v1.2.0.3...v1.3.0.0 [1.2.0.3]: https://git.caraus.tech/OSS/graphql/compare/v1.2.0.2...v1.2.0.3 [1.2.0.2]: https://git.caraus.tech/OSS/graphql/compare/v1.2.0.1...v1.2.0.2 [1.2.0.1]: https://git.caraus.tech/OSS/graphql/compare/v1.2.0.0...v1.2.0.1 diff --git a/graphql.cabal b/graphql.cabal index aacb8b0..225ff29 100644 --- a/graphql.cabal +++ b/graphql.cabal @@ -1,7 +1,7 @@ cabal-version: 2.4 name: graphql -version: 1.2.0.3 +version: 1.3.0.0 synopsis: Haskell GraphQL implementation description: Haskell <https://spec.graphql.org/June2018/ GraphQL> implementation. category: Language @@ -60,7 +60,7 @@ library build-depends: base >= 4.7 && < 5, conduit ^>= 1.3.4, - containers ^>= 0.6.2, + containers >= 0.6 && < 0.8, exceptions ^>= 0.10.4, megaparsec >= 9.0 && < 10, parser-combinators >= 1.3 && < 2, @@ -93,7 +93,7 @@ test-suite graphql-test ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall build-depends: - QuickCheck ^>= 2.14.1, + QuickCheck >= 2.14 && < 2.16, base, conduit, exceptions, diff --git a/src/Language/GraphQL/Error.hs b/src/Language/GraphQL/Error.hs index 87ee702..4a406d0 100644 --- a/src/Language/GraphQL/Error.hs +++ b/src/Language/GraphQL/Error.hs @@ -8,28 +8,22 @@ -- | Error handling. module Language.GraphQL.Error - ( CollectErrsT - , Error(..) + ( Error(..) , Path(..) - , Resolution(..) , ResolverException(..) , Response(..) , ResponseEventStream , parseError - , runCollectErrs ) where import Conduit import Control.Exception (Exception(..)) -import Control.Monad.Trans.State (StateT, runStateT) -import Data.HashMap.Strict (HashMap) import Data.Sequence (Seq(..), (|>)) import qualified Data.Sequence as Seq import Data.Text (Text) import qualified Data.Text as Text -import Language.GraphQL.AST (Location(..), Name) +import Language.GraphQL.AST (Location(..)) import Language.GraphQL.Execute.Coerce -import qualified Language.GraphQL.Type.Schema as Schema import Prelude hiding (null) import Text.Megaparsec ( ParseErrorBundle(..) @@ -97,28 +91,3 @@ instance Show ResolverException where show (ResolverException e) = show e instance Exception ResolverException - --- * Deprecated - -{-# DEPRECATED runCollectErrs "runCollectErrs was part of the old executor and isn't used anymore" #-} --- | Runs the given query computation, but collects the errors into an error --- list, which is then sent back with the data. -runCollectErrs :: (Monad m, Serialize a) - => HashMap Name (Schema.Type m) - -> CollectErrsT m a - -> m (Response a) -runCollectErrs types' res = do - (dat, Resolution{..}) <- runStateT res - $ Resolution{ errors = Seq.empty, types = types' } - pure $ Response dat errors - -{-# DEPRECATED Resolution "Resolution was part of the old executor and isn't used anymore" #-} --- | Executor context. -data Resolution m = Resolution - { errors :: Seq Error - , types :: HashMap Name (Schema.Type m) - } - -{-# DEPRECATED CollectErrsT "CollectErrsT was part of the old executor and isn't used anymore" #-} --- | A wrapper to pass error messages around. -type CollectErrsT m = StateT (Resolution m) m diff --git a/tests/Language/GraphQL/AST/Arbitrary.hs b/tests/Language/GraphQL/AST/Arbitrary.hs index 8d0544e..4f74bf3 100644 --- a/tests/Language/GraphQL/AST/Arbitrary.hs +++ b/tests/Language/GraphQL/AST/Arbitrary.hs @@ -7,6 +7,7 @@ import Test.QuickCheck.Arbitrary (Arbitrary (arbitrary)) import Test.QuickCheck (oneof, elements, listOf, resize, NonEmptyList (..)) import Test.QuickCheck.Gen (Gen (..)) import Data.Text (Text, pack) +import Data.Functor ((<&>)) newtype AnyPrintableChar = AnyPrintableChar { getAnyPrintableChar :: Char } deriving (Eq, Show) @@ -59,34 +60,36 @@ instance Arbitrary a => Arbitrary (AnyObjectField a) where location' <- getAnyLocation <$> arbitrary pure $ AnyObjectField $ Doc.ObjectField name' value' location' -newtype AnyValue = AnyValue { getAnyValue :: Doc.Value } deriving (Eq, Show) - -instance Arbitrary AnyValue where - arbitrary = AnyValue <$> oneof - [ variableGen - , Doc.Int <$> arbitrary - , Doc.Float <$> arbitrary - , Doc.String <$> (getAnyPrintableText <$> arbitrary) - , Doc.Boolean <$> arbitrary - , MkGen $ \_ _ -> Doc.Null - , Doc.Enum <$> (getAnyName <$> arbitrary) - , Doc.List <$> listGen - , Doc.Object <$> objectGen - ] - where - variableGen :: Gen Doc.Value - variableGen = Doc.Variable <$> (getAnyName <$> arbitrary) - listGen :: Gen [Doc.Node Doc.Value] - listGen = (resize 5 . listOf) nodeGen - nodeGen = do - node' <- getAnyNode <$> (arbitrary :: Gen (AnyNode AnyValue)) - pure (getAnyValue <$> node') - objectGen :: Gen [Doc.ObjectField Doc.Value] - objectGen = resize 1 $ do - list <- getNonEmpty <$> (arbitrary :: Gen (NonEmptyList (AnyObjectField AnyValue))) - pure $ map (fmap getAnyValue . getAnyObjectField) list - -newtype AnyArgument a = AnyArgument { getAnyArgument :: Doc.Argument } deriving (Eq, Show) +newtype AnyValue = AnyValue { getAnyValue :: Doc.Value } + deriving (Eq, Show) + +instance Arbitrary AnyValue + where + arbitrary = + let variableGen :: Gen Doc.Value + variableGen = Doc.Variable . getAnyName <$> arbitrary + listGen :: Gen [Doc.Node Doc.Value] + listGen = (resize 5 . listOf) nodeGen + nodeGen :: Gen (Doc.Node Doc.Value) + nodeGen = fmap getAnyNode arbitrary <&> fmap getAnyValue + objectGen :: Gen [Doc.ObjectField Doc.Value] + objectGen = resize 1 + $ fmap getNonEmpty arbitrary + <&> map (fmap getAnyValue . getAnyObjectField) + in AnyValue <$> oneof + [ variableGen + , Doc.Int <$> arbitrary + , Doc.Float <$> arbitrary + , Doc.String . getAnyPrintableText <$> arbitrary + , Doc.Boolean <$> arbitrary + , MkGen $ \_ _ -> Doc.Null + , Doc.Enum . getAnyName <$> arbitrary + , Doc.List <$> listGen + , Doc.Object <$> objectGen + ] + +newtype AnyArgument a = AnyArgument { getAnyArgument :: Doc.Argument } + deriving (Eq, Show) instance Arbitrary a => Arbitrary (AnyArgument a) where arbitrary = do |
