Skip to content

Commit

Permalink
Merge pull request #108 from phadej/ghc-8.2
Browse files Browse the repository at this point in the history
Support GHC-8.2
  • Loading branch information
phadej committed Jul 14, 2017
2 parents 73c4c77 + c4c904d commit 3e81ba4
Show file tree
Hide file tree
Showing 9 changed files with 147 additions and 84 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
dist
dist-newstyle
.ghc.environment.*
cabal-dev
*.o
*.hi
Expand Down
127 changes: 63 additions & 64 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -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
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
-----

Expand Down
31 changes: 31 additions & 0 deletions Setup.hs
Original file line number Diff line number Diff line change
@@ -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
18 changes: 18 additions & 0 deletions install-hspec-discover.sh
Original file line number Diff line number Diff line change
@@ -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
8 changes: 3 additions & 5 deletions src/Data/Swagger/Internal/Schema.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -729,7 +725,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
Expand Down Expand Up @@ -768,3 +764,5 @@ data Proxy2 a b = Proxy2

data Proxy3 a b c = Proxy3

-- $setup
-- >>> import Data.Swagger
19 changes: 12 additions & 7 deletions swagger2.cabal
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -10,14 +10,18 @@ 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
, 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

custom-setup
setup-depends:
base, Cabal, cabal-doctest >=1.0.2 && <1.1

library
hs-source-dirs: src
Expand All @@ -39,7 +43,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
Expand Down Expand Up @@ -93,11 +97,12 @@ test-suite spec
Data.Swagger.Schema.ValidationSpec
default-language: Haskell2010

test-suite doctest
build-depends: base, doctest, Glob
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
main-is: DocTest.hs
main-is: doctests.hs
type: exitcode-stdio-1.0

source-repository head
Expand Down
8 changes: 0 additions & 8 deletions test/DocTest.hs

This file was deleted.

12 changes: 12 additions & 0 deletions test/doctests.hs
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 3e81ba4

Please sign in to comment.