From 3ed95031128f3c2a60266bfb42bf472497bf3c83 Mon Sep 17 00:00:00 2001 From: Alberto Valverde Date: Fri, 26 May 2017 12:38:19 +0200 Subject: [PATCH 1/7] Builds with 8.2.1. Fixes #95 --- src/Data/Swagger/Internal/Schema.hs | 2 +- swagger2.cabal | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Data/Swagger/Internal/Schema.hs b/src/Data/Swagger/Internal/Schema.hs index 8f56f33..9853536 100644 --- a/src/Data/Swagger/Internal/Schema.hs +++ b/src/Data/Swagger/Internal/Schema.hs @@ -729,7 +729,7 @@ gdeclareNamedSumSchema opts proxy s type AllNullary = All -class GSumToSchema f where +class GSumToSchema (f :: * -> *) where gsumToSchema :: SchemaOptions -> proxy f -> Schema -> WriterT AllNullary (Declare (Definitions Schema)) Schema instance (GSumToSchema f, GSumToSchema g) => GSumToSchema (f :+: g) where diff --git a/swagger2.cabal b/swagger2.cabal index fd3a51d..953b672 100644 --- a/swagger2.cabal +++ b/swagger2.cabal @@ -39,7 +39,7 @@ library Data.Swagger.Internal.ParamSchema Data.Swagger.Internal.Utils Data.Swagger.Internal.AesonUtils - build-depends: base >=4.7 && <4.10 + build-depends: base >=4.7 && <4.11 , base-compat >=0.9.1 && <0.10 , aeson >=0.11.2.1 , bytestring From 4090e88679b35941540ed530d65952f286a5d728 Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Wed, 28 Jun 2017 16:09:49 +0300 Subject: [PATCH 2/7] More GHC-8.2 changes --- .gitignore | 2 + .travis.yml | 127 +++++++++++++++++++------------------- install-hspec-discover.sh | 18 ++++++ swagger2.cabal | 2 +- 4 files changed, 84 insertions(+), 65 deletions(-) create mode 100644 install-hspec-discover.sh diff --git a/.gitignore b/.gitignore index 19fe677..4a27759 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ dist +dist-newstyle +.ghc.environment.* cabal-dev *.o *.hi diff --git a/.travis.yml b/.travis.yml index 50d7e0e..447abfa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,92 +1,91 @@ -# This file has been generated -- see https://github.com/hvr/multi-ghc-travis +# This Travis job script has been generated by a script via +# +# make_travis_yml_2.hs '--branch' 'master' 'swagger2.cabal' +# +# For more information, see https://github.com/hvr/multi-ghc-travis +# language: c sudo: false +git: + submodules: false # whether to recursively clone submodules + +branches: + only: + - master + cache: directories: - - $HOME/.cabsnap - $HOME/.cabal/packages + - $HOME/.cabal/store + - $HOME/.local/bin before_cache: - rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log - - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar + # remove files that are regenerated by 'cabal update' + - rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.* + - rm -fv $HOME/.cabal/packages/hackage.haskell.org/*.json + - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.cache + - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar + - rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar.idx matrix: include: - - env: CABALVER=1.18 GHCVER=7.8.4 - compiler: ": #GHC 7.8.4" - addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.4,happy-1.19.5], sources: [hvr-ghc]}} - - env: CABALVER=1.22 GHCVER=7.10.3 - compiler: ": #GHC 7.10.3" - addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.3,happy-1.19.5], sources: [hvr-ghc]}} - - env: CABALVER=1.24 GHCVER=8.0.1 - compiler: ": #GHC 8.0.1" - addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.1,happy-1.19.5], sources: [hvr-ghc]}} - - env: CABALVER=1.18 GHCVER=7.8.4 CABALCONFIG=aeson-0.11.cabal.config - compiler: ": #GHC 7.8.4 aeson-0.11" - addons: {apt: {packages: [cabal-install-1.18,ghc-7.8.4,happy-1.19.5], sources: [hvr-ghc]}} - - env: CABALVER=1.22 GHCVER=7.10.3 CABALCONFIG=aeson-0.11.cabal.config - compiler: ": #GHC 7.10.3 aeson-0.11" - addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.3,happy-1.19.5], sources: [hvr-ghc]}} - - env: CABALVER=1.24 GHCVER=8.0.1 CABALCONFIG=aeson-0.11.cabal.config - compiler: ": #GHC 8.0.1 aeson-0.11" - addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.1,happy-1.19.5], sources: [hvr-ghc]}} + - compiler: "ghc-7.8.4" + # env: TEST=--disable-tests BENCH=--disable-benchmarks + addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-7.8.4], sources: [hvr-ghc]}} + - compiler: "ghc-7.10.3" + # env: TEST=--disable-tests BENCH=--disable-benchmarks + addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-7.10.3], sources: [hvr-ghc]}} + - compiler: "ghc-8.0.2" + # env: TEST=--disable-tests BENCH=--disable-benchmarks + addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-8.0.2], sources: [hvr-ghc]}} + - compiler: "ghc-8.2.1" + # env: TEST=--disable-tests BENCH=--disable-benchmarks + addons: {apt: {packages: [ghc-ppa-tools,cabal-install-head,ghc-8.2.1], sources: [hvr-ghc]}} before_install: + - HC=${CC} - unset CC - - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:/opt/happy/1.19.5/bin:$PATH - - if [ -f "$CABALCONFIG" ]; then cp $CABALCONFIG cabal.config; fi + - PATH=/opt/ghc/bin:/opt/ghc-ppa-tools/bin:$PATH + - PKGNAME='swagger2' install: - cabal --version - - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]" - - if [ -f $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz ]; - then - zcat $HOME/.cabal/packages/hackage.haskell.org/00-index.tar.gz > - $HOME/.cabal/packages/hackage.haskell.org/00-index.tar; - fi + - echo "$(${HC} --version) [$(${HC} --print-project-git-commit-id 2> /dev/null || echo '?')]" + - BENCH=${BENCH---enable-benchmarks} + - TEST=${TEST---enable-tests} - travis_retry cabal update -v - sed -i 's/^jobs:/-- jobs:/' ${HOME}/.cabal/config - - cabal install --only-dependencies --enable-tests --enable-benchmarks --dry -v > installplan.txt - - sed -i -e '1,/^Resolving /d' installplan.txt; cat installplan.txt - -# check whether current requested install-plan matches cached package-db snapshot - - if diff -u installplan.txt $HOME/.cabsnap/installplan.txt; - then - echo "cabal build-cache HIT"; - rm -rfv .ghc; - cp -a $HOME/.cabsnap/ghc $HOME/.ghc; - cp -a $HOME/.cabsnap/lib $HOME/.cabsnap/share $HOME/.cabsnap/bin $HOME/.cabal/; - else - echo "cabal build-cache MISS"; - rm -rf $HOME/.cabsnap; - mkdir -p $HOME/.ghc $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin; - cabal install --only-dependencies --enable-tests --enable-benchmarks; - fi - -# snapshot package-db on cache miss - - if [ ! -d $HOME/.cabsnap ]; - then - echo "snapshotting package-db to build-cache"; - mkdir $HOME/.cabsnap; - cp -a $HOME/.ghc $HOME/.cabsnap/ghc; - cp -a $HOME/.cabal/lib $HOME/.cabal/share $HOME/.cabal/bin installplan.txt $HOME/.cabsnap/; - fi + - sh install-hspec-discover.sh # TEMP: we should use build-tools-depends + - rm -fv cabal.project.local + - "echo 'packages: .' > cabal.project" + - rm -f cabal.project.freeze + - cabal new-build -w ${HC} ${TEST} ${BENCH} --dep -j2 all + - cabal new-build -w ${HC} --disable-tests --disable-benchmarks --dep -j2 all # Here starts the actual work to be performed for the package under test; # any command which exits with a non-zero exit code causes the build to fail. script: - if [ -f configure.ac ]; then autoreconf -i; fi - - cabal configure --enable-tests --enable-benchmarks -v2 # -v2 provides useful information for debugging - - cabal build # this builds all libraries and executables (including tests/benchmarks) - - cabal test - - cabal check - - cabal sdist # tests that a source-distribution can be generated + - rm -rf .ghc.environment.* dist/ + - cabal sdist # test that a source-distribution can be generated + - cd dist/ + - SRCTAR=(${PKGNAME}-*.tar.gz) + - SRC_BASENAME="${SRCTAR/%.tar.gz}" + - tar -xvf "./$SRC_BASENAME.tar.gz" + - cd "$SRC_BASENAME/" +## from here on, CWD is inside the extracted source-tarball + - rm -fv cabal.project.local + - "echo 'packages: .' > cabal.project" + # this builds all libraries and executables (without tests/benchmarks) + - rm -f cabal.project.freeze + - cabal new-build -w ${HC} --disable-tests --disable-benchmarks all + # this builds all libraries and executables (including tests/benchmarks) + # - rm -rf ./dist-newstyle -# Check that the resulting source distribution can be built & installed. -# If there are no other `.tar.gz` files in `dist`, this can be even simpler: -# `cabal install --force-reinstalls dist/*-*.tar.gz` - - SRC_TGZ=$(cabal info . | awk '{print $2;exit}').tar.gz && - (cd dist && cabal install --force-reinstalls "$SRC_TGZ") + # build & run tests + - cabal new-build -w ${HC} ${TEST} ${BENCH} all + - if [ "x$TEST" = "x--enable-tests" ]; then cabal new-test -w ${HC} ${TEST} all; fi # EOF diff --git a/install-hspec-discover.sh b/install-hspec-discover.sh new file mode 100644 index 0000000..17a3a34 --- /dev/null +++ b/install-hspec-discover.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +set -ex + +if [ ! -e $HOME/.local/bin/hspec-discover ]; then + # Fetch the source + cabal get hspec-discover-2.4.4 + cd hspec-discover-2.4.4 + + # Set-up project + echo 'packages: .' > cabal.project + + # build exe + cabal new-build hspec-discover:exe:hspec-discover + + # copy executable to $HOME/.local/bin + cp $(find dist-newstyle -name hspec-discover -type f) $HOME/.local/bin +fi diff --git a/swagger2.cabal b/swagger2.cabal index 953b672..7fb33fa 100644 --- a/swagger2.cabal +++ b/swagger2.cabal @@ -17,7 +17,7 @@ extra-source-files: , examples/*.hs , include/overlapping-compat.h cabal-version: >=1.10 -tested-with: GHC==7.8.4, GHC==7.10.3, GHC==8.0.1 +tested-with: GHC==7.8.4, GHC==7.10.3, GHC==8.0.2, GHC==8.2.1 library hs-source-dirs: src From d722fa40b24caf2807c4f6c38b56e00c4a70308b Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Thu, 29 Jun 2017 15:32:52 +0300 Subject: [PATCH 3/7] Try Custom build --- Setup.hs | 31 +++++++++++++++++++++++++++++++ swagger2.cabal | 10 +++++++--- test/DocTest.hs | 8 -------- test/doctests.hs | 12 ++++++++++++ 4 files changed, 50 insertions(+), 11 deletions(-) delete mode 100644 test/DocTest.hs create mode 100644 test/doctests.hs diff --git a/Setup.hs b/Setup.hs index 9a994af..8ec54a0 100644 --- a/Setup.hs +++ b/Setup.hs @@ -1,2 +1,33 @@ +{-# LANGUAGE CPP #-} +{-# OPTIONS_GHC -Wall #-} +module Main (main) where + +#ifndef MIN_VERSION_cabal_doctest +#define MIN_VERSION_cabal_doctest(x,y,z) 0 +#endif + +#if MIN_VERSION_cabal_doctest(1,0,0) + +import Distribution.Extra.Doctest ( defaultMainWithDoctests ) +main :: IO () +main = defaultMainWithDoctests "doctests" + +#else + +#ifdef MIN_VERSION_Cabal +-- If the macro is defined, we have new cabal-install, +-- but for some reason we don't have cabal-doctest in package-db +-- +-- Probably we are running cabal sdist, when otherwise using new-build +-- workflow +#warning You are configuring this package without cabal-doctest installed. \ + The doctests test-suite will not work as a result. \ + To fix this, install cabal-doctest before configuring. +#endif + import Distribution.Simple + +main :: IO () main = defaultMain + +#endif diff --git a/swagger2.cabal b/swagger2.cabal index 7fb33fa..77f85b3 100644 --- a/swagger2.cabal +++ b/swagger2.cabal @@ -10,7 +10,7 @@ author: Nickolay Kudasov maintainer: nickolay@getshoptv.com copyright: (c) 2015-2016, GetShopTV category: Web -build-type: Simple +build-type: Custom extra-source-files: README.md , CHANGELOG.md @@ -19,6 +19,10 @@ extra-source-files: cabal-version: >=1.10 tested-with: GHC==7.8.4, GHC==7.10.3, GHC==8.0.2, GHC==8.2.1 +custom-setup + setup-depends: + base, Cabal, cabal-doctest >=1.0.2 && <1.1 + library hs-source-dirs: src include-dirs: include @@ -93,11 +97,11 @@ test-suite spec Data.Swagger.Schema.ValidationSpec default-language: Haskell2010 -test-suite doctest +test-suite doctests build-depends: base, doctest, Glob default-language: Haskell2010 hs-source-dirs: test - main-is: DocTest.hs + main-is: doctests.hs type: exitcode-stdio-1.0 source-repository head diff --git a/test/DocTest.hs b/test/DocTest.hs deleted file mode 100644 index 4d8e011..0000000 --- a/test/DocTest.hs +++ /dev/null @@ -1,8 +0,0 @@ -module Main (main) where - -import System.FilePath.Glob (glob) -import Test.DocTest (doctest) - -main :: IO () -main = glob "src/**/*.hs" >>= doctest' - where doctest' files = doctest $ "-Iinclude/" : "-D__DOCTEST__" : files diff --git a/test/doctests.hs b/test/doctests.hs new file mode 100644 index 0000000..aff961f --- /dev/null +++ b/test/doctests.hs @@ -0,0 +1,12 @@ +module Main where + +import Build_doctests (flags, pkgs, module_sources) +import Data.Foldable (traverse_) +import Test.DocTest + +main :: IO () +main = do + traverse_ putStrLn args + doctest args + where + args = flags ++ pkgs ++ module_sources From e2b5069b82ab93033f38474c6cd709f1252f0a43 Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Thu, 29 Jun 2017 16:57:55 +0300 Subject: [PATCH 4/7] Fix doctests --- src/Data/Swagger/Internal/Schema.hs | 2 ++ swagger2.cabal | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Data/Swagger/Internal/Schema.hs b/src/Data/Swagger/Internal/Schema.hs index 9853536..f4473fa 100644 --- a/src/Data/Swagger/Internal/Schema.hs +++ b/src/Data/Swagger/Internal/Schema.hs @@ -768,3 +768,5 @@ data Proxy2 a b = Proxy2 data Proxy3 a b c = Proxy3 +-- $setup +-- >>> import Data.Swagger diff --git a/swagger2.cabal b/swagger2.cabal index 77f85b3..7438034 100644 --- a/swagger2.cabal +++ b/swagger2.cabal @@ -98,7 +98,7 @@ test-suite spec default-language: Haskell2010 test-suite doctests - build-depends: base, doctest, Glob + build-depends: base, doctest, Glob, QuickCheck default-language: Haskell2010 hs-source-dirs: test main-is: doctests.hs From cc4c8139188330617cf7208fd595c526c7d1d210 Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Fri, 7 Jul 2017 12:42:25 +0300 Subject: [PATCH 5/7] Remove __DOCTEST__ ifdef --- src/Data/Swagger/Internal/Schema.hs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Data/Swagger/Internal/Schema.hs b/src/Data/Swagger/Internal/Schema.hs index f4473fa..d25b07a 100644 --- a/src/Data/Swagger/Internal/Schema.hs +++ b/src/Data/Swagger/Internal/Schema.hs @@ -65,10 +65,6 @@ import Data.Swagger.Lens hiding (name, schema) import qualified Data.Swagger.Lens as Swagger import Data.Swagger.SchemaOptions -#ifdef __DOCTEST__ -import Data.Swagger.Lens (name, schema) -#endif - #if __GLASGOW_HASKELL__ < 800 #else import qualified Data.ByteString as BS From f0c7d678991f6b77eb95b75651d654566965640f Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Fri, 7 Jul 2017 13:13:59 +0300 Subject: [PATCH 6/7] Bump version to 2.1.4.1 --- CHANGELOG.md | 6 ++++++ swagger2.cabal | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index edc1ebe..29f0724 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +2.1.4.1 +------- + +* GHC-8.2 support (see [#95](https://github.com/GetShopTV/swagger2/issues/95)) +* Documentation corrections (see [#105](https://github.com/GetShopTV/swagger2/pull/105)) + 2.1.4 ----- diff --git a/swagger2.cabal b/swagger2.cabal index 7438034..a728494 100644 --- a/swagger2.cabal +++ b/swagger2.cabal @@ -1,5 +1,5 @@ name: swagger2 -version: 2.1.4 +version: 2.1.4.1 synopsis: Swagger 2.0 data model description: Please see README.md homepage: https://github.com/GetShopTV/swagger2 From c4c904d68ad42b1bee43c23ac947e519a60fa1c4 Mon Sep 17 00:00:00 2001 From: Oleg Grenrus Date: Fri, 14 Jul 2017 14:52:48 +0300 Subject: [PATCH 7/7] Add link to cabal-doctest note --- swagger2.cabal | 1 + 1 file changed, 1 insertion(+) diff --git a/swagger2.cabal b/swagger2.cabal index a728494..57c4048 100644 --- a/swagger2.cabal +++ b/swagger2.cabal @@ -98,6 +98,7 @@ test-suite spec default-language: Haskell2010 test-suite doctests + -- See QuickCheck note in https://github.com/phadej/cabal-doctest#notes build-depends: base, doctest, Glob, QuickCheck default-language: Haskell2010 hs-source-dirs: test