Skip to content

Commit 62c5d57

Browse files
authored
Merge pull request #450 from haskell-CI/docspec-2
Add cabal-docspec support
2 parents f782267 + 944bcb7 commit 62c5d57

File tree

9 files changed

+127
-18
lines changed

9 files changed

+127
-18
lines changed

.github/workflows/haskell-ci.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,15 @@ jobs:
138138
rm -f cabal-plan.xz
139139
chmod a+x $HOME/.cabal/bin/cabal-plan
140140
cabal-plan --version
141+
- name: install cabal-docspec
142+
run: |
143+
mkdir -p $HOME/.cabal/bin
144+
curl -sL https://github.com/phadej/cabal-extras/releases/download/cabal-docspec-0.0.0.20201230.1/cabal-docspec-0.0.0.20201230.1.xz > cabal-docspec.xz
145+
echo '18caf4f361fadd978782f08e78f42d21d4f177567419055ffccae19b8214852d cabal-docspec.xz' | sha256sum -c -
146+
xz -d < cabal-docspec.xz > $HOME/.cabal/bin/cabal-docspec
147+
rm -f cabal-docspec.xz
148+
chmod a+x $HOME/.cabal/bin/cabal-docspec
149+
cabal-docspec --version
141150
- name: install doctest
142151
run: |
143152
$CABAL --store-dir=$HOME/.haskell-ci-tools/store v2-install $ARG_COMPILER --ignore-project -j2 doctest --constraint='doctest ^>=0.17'
@@ -220,6 +229,10 @@ jobs:
220229
doctest --fast -XNoImplicitPrelude -XBangPatterns -XDeriveAnyClass -XDeriveFoldable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XDerivingStrategies -XGeneralizedNewtypeDeriving -XScopedTypeVariables src
221230
cd ${PKGDIR_cabal_install_parsers} || false
222231
doctest --fast src
232+
- name: docspec
233+
run: |
234+
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH all
235+
cabal-docspec $ARG_COMPILER --verbose --timeout 2
223236
- name: hlint
224237
run: |
225238
if [ $((HCNUMVER >= 81000 && HCNUMVER < 81004)) -ne 0 ] ; then (cd ${PKGDIR_haskell_ci} && hlint -h ${GITHUB_WORKSPACE}/source/.hlint.yaml -XNoImplicitPrelude -XBangPatterns -XDeriveAnyClass -XDeriveFoldable -XDeriveFunctor -XDeriveGeneric -XDeriveTraversable -XDerivingStrategies -XGeneralizedNewtypeDeriving -XScopedTypeVariables src) ; fi

cabal.haskell-ci

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ doctest-options: --fast
7373
-- doctest-version: ==0.13.*
7474
doctest-filter-packages: base-compat-batteries
7575

76+
-- Run cabal-docspec
77+
docspec: True
78+
docspec-options: --verbose --timeout 2
79+
7680
-- macOS job
7781
osx: 8.4.4 8.6.5
7882

haskell-ci.cabal

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
cabal-version: 2.2
22
name: haskell-ci
3-
version: 0.11.20201227
3+
version: 0.11.20201230
44
synopsis: Cabal package script generator for Travis-CI
55
description:
66
Script generator (@haskell-ci@) for [Travis-CI](https://travis-ci.org/) for continuous-integration testing of Haskell Cabal packages.
@@ -77,6 +77,7 @@ library haskell-ci-internal
7777
HaskellCI.Config
7878
HaskellCI.Config.ConstraintSet
7979
HaskellCI.Config.CopyFields
80+
HaskellCI.Config.Docspec
8081
HaskellCI.Config.Doctest
8182
HaskellCI.Config.Dump
8283
HaskellCI.Config.Folds

src/HaskellCI/Auxiliary.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import HaskellCI.Compiler
2727
import HaskellCI.Config
2828
import HaskellCI.Config.CopyFields
2929
import HaskellCI.Config.Doctest
30+
import HaskellCI.Config.Docspec
3031
import HaskellCI.Jobs
3132
import HaskellCI.List
3233
import HaskellCI.Package
@@ -37,6 +38,7 @@ data Auxiliary = Auxiliary
3738
, uris :: [URI]
3839
, projectName :: String
3940
, doctestEnabled :: Bool
41+
, docspecEnabled :: Bool
4042
, hasTests :: CompilerRange
4143
, hasLibrary :: Bool
4244
, extraCabalProjectFields :: [C.PrettyField ()]
@@ -51,6 +53,7 @@ auxiliary Config {..} prj JobVersions {..} = Auxiliary {..}
5153
projectName = fromMaybe (pkgName $ Prelude.head pkgs) cfgProjectName
5254

5355
doctestEnabled = any (maybeGHC False (`C.withinRange` cfgDoctestEnabled cfgDoctest)) versions
56+
docspecEnabled = any (maybeGHC False (`C.withinRange` cfgDocspecEnabled cfgDocspec)) versions
5457

5558
testShowDetails
5659
| cfgTestOutputDirect = " --test-show-details=direct"

src/HaskellCI/Config.hs

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import qualified Text.PrettyPrint as PP
2828
import HaskellCI.Config.ConstraintSet
2929
import HaskellCI.Config.CopyFields
3030
import HaskellCI.Config.Doctest
31+
import HaskellCI.Config.Docspec
3132
import HaskellCI.Config.Folds
3233
import HaskellCI.Config.HLint
3334
import HaskellCI.Config.Installed
@@ -84,6 +85,7 @@ data Config = Config
8485
, cfgInsertVersion :: !Bool
8586
, cfgErrorMissingMethods :: !PackageScope
8687
, cfgDoctest :: !DoctestConfig
88+
, cfgDocspec :: !DocspecConfig
8789
, cfgHLint :: !HLintConfig
8890
, cfgConstraintSets :: [ConstraintSet]
8991
, cfgRawProject :: [C.PrettyField ()]
@@ -101,21 +103,9 @@ emptyConfig = Config
101103
, cfgUbuntu = Xenial
102104
, cfgTestedWith = TestedWithUniform
103105
, cfgCopyFields = CopyFieldsSome
104-
, cfgDoctest = DoctestConfig
105-
{ cfgDoctestEnabled = noVersion
106-
, cfgDoctestOptions = []
107-
, cfgDoctestVersion = defaultDoctestVersion
108-
, cfgDoctestFilterEnvPkgs = []
109-
, cfgDoctestFilterSrcPkgs = []
110-
}
111-
, cfgHLint = HLintConfig
112-
{ cfgHLintEnabled = False
113-
, cfgHLintJob = HLintJobLatest
114-
, cfgHLintYaml = Nothing
115-
, cfgHLintVersion = defaultHLintVersion
116-
, cfgHLintOptions = []
117-
, cfgHLintDownload = True
118-
}
106+
, cfgDoctest = defaultDoctestConfig
107+
, cfgDocspec = defaultDocspecConfig
108+
, cfgHLint = defaultHLintConfig
119109
, cfgLocalGhcOptions = []
120110
, cfgConstraintSets = []
121111
, cfgSubmodules = False
@@ -160,7 +150,10 @@ emptyConfig = Config
160150
-------------------------------------------------------------------------------
161151

162152
configGrammar
163-
:: (OptionsGrammar g, Applicative (g Config), Applicative (g DoctestConfig), Applicative (g HLintConfig))
153+
:: ( OptionsGrammar g, Applicative (g Config)
154+
, Applicative (g DoctestConfig)
155+
, Applicative (g DocspecConfig)
156+
, Applicative (g HLintConfig))
164157
=> g Config Config
165158
configGrammar = Config
166159
<$> C.optionalFieldDefAla "cabal-install-version" HeadVersion (field @"cfgCabalInstallVersion") defaultCabalInstallVersion
@@ -242,6 +235,7 @@ configGrammar = Config
242235
<*> C.optionalFieldDef "error-missing-methods" (field @"cfgErrorMissingMethods") PackageScopeLocal
243236
^^^ metahelp "PKGSCOPE" "Insert -Werror=missing-methods for package scope (none, local, all)"
244237
<*> C.blurFieldGrammar (field @"cfgDoctest") doctestConfigGrammar
238+
<*> C.blurFieldGrammar (field @"cfgDocspec") docspecConfigGrammar
245239
<*> C.blurFieldGrammar (field @"cfgHLint") hlintConfigGrammar
246240
<*> pure [] -- constraint sets
247241
<*> pure [] -- raw project fields

src/HaskellCI/Config/Docspec.hs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
{-# LANGUAGE DataKinds #-}
2+
{-# LANGUAGE OverloadedStrings #-}
3+
{-# LANGUAGE TypeApplications #-}
4+
module HaskellCI.Config.Docspec where
5+
6+
import HaskellCI.Prelude
7+
8+
import qualified Distribution.FieldGrammar as C
9+
import qualified Distribution.Parsec.Newtypes as C
10+
11+
import HaskellCI.OptionsGrammar
12+
13+
data DocspecConfig = DocspecConfig
14+
{ cfgDocspecEnabled :: !VersionRange
15+
, cfgDocspecOptions :: [String]
16+
, cfgDocspecUrl :: String
17+
, cfgDocspecHash :: String
18+
}
19+
deriving (Show, Generic, Binary)
20+
21+
-------------------------------------------------------------------------------
22+
-- Default
23+
-------------------------------------------------------------------------------
24+
25+
defaultDocspecConfig :: DocspecConfig
26+
defaultDocspecConfig = DocspecConfig
27+
{ cfgDocspecEnabled = noVersion
28+
, cfgDocspecOptions = []
29+
, cfgDocspecUrl = "https://github.com/phadej/cabal-extras/releases/download/cabal-docspec-0.0.0.20201230.1/cabal-docspec-0.0.0.20201230.1.xz"
30+
, cfgDocspecHash = "18caf4f361fadd978782f08e78f42d21d4f177567419055ffccae19b8214852d"
31+
}
32+
33+
-------------------------------------------------------------------------------
34+
-- Grammar
35+
-------------------------------------------------------------------------------
36+
37+
docspecConfigGrammar
38+
:: (OptionsGrammar g, Applicative (g DocspecConfig))
39+
=> g DocspecConfig DocspecConfig
40+
docspecConfigGrammar = DocspecConfig
41+
<$> rangeField "docspec" (field @"cfgDocspecEnabled") noVersion
42+
^^^ help "Enable Docspec job"
43+
<*> C.monoidalFieldAla "docspec-options" (C.alaList' C.NoCommaFSep C.Token') (field @"cfgDocspecOptions")
44+
^^^ metahelp "OPTS" "Additional Docspec options"
45+
<*> C.optionalFieldDefAla "docspec-url" C.Token' (field @"cfgDocspecUrl") (cfgDocspecUrl defaultDocspecConfig)
46+
^^^ metahelp "URL" "URL to download cabal-docspec"
47+
<*> C.optionalFieldDefAla "docspec-hash" C.Token' (field @"cfgDocspecHash") (cfgDocspecHash defaultDocspecConfig)
48+
^^^ metahelp "HASH" "SHA256 of cabal-docspec"

src/HaskellCI/Config/Doctest.hs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,22 @@ data DoctestConfig = DoctestConfig
2222
}
2323
deriving (Show, Generic, Binary)
2424

25+
-------------------------------------------------------------------------------
26+
-- Default
27+
-------------------------------------------------------------------------------
28+
2529
defaultDoctestVersion :: VersionRange
2630
defaultDoctestVersion = majorBoundVersion (mkVersion [0,17])
2731

32+
defaultDoctestConfig :: DoctestConfig
33+
defaultDoctestConfig = DoctestConfig
34+
{ cfgDoctestEnabled = noVersion
35+
, cfgDoctestOptions = []
36+
, cfgDoctestVersion = defaultDoctestVersion
37+
, cfgDoctestFilterEnvPkgs = []
38+
, cfgDoctestFilterSrcPkgs = []
39+
}
40+
2841
-------------------------------------------------------------------------------
2942
-- Grammar
3043
-------------------------------------------------------------------------------

src/HaskellCI/Config/HLint.hs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,23 @@ data HLintConfig = HLintConfig
2626
}
2727
deriving (Show, Generic, Binary)
2828

29+
-------------------------------------------------------------------------------
30+
-- Default
31+
-------------------------------------------------------------------------------
32+
2933
defaultHLintVersion :: VersionRange
3034
defaultHLintVersion = withinVersion (mkVersion [3,2])
3135

36+
defaultHLintConfig :: HLintConfig
37+
defaultHLintConfig = HLintConfig
38+
{ cfgHLintEnabled = False
39+
, cfgHLintJob = HLintJobLatest
40+
, cfgHLintYaml = Nothing
41+
, cfgHLintVersion = defaultHLintVersion
42+
, cfgHLintOptions = []
43+
, cfgHLintDownload = True
44+
}
45+
3246
-------------------------------------------------------------------------------
3347
-- HLintJob
3448
-------------------------------------------------------------------------------

src/HaskellCI/GitHub.hs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ import HaskellCI.Auxiliary
2929
import HaskellCI.Compiler
3030
import HaskellCI.Config
3131
import HaskellCI.Config.ConstraintSet
32+
import HaskellCI.Config.Docspec
3233
import HaskellCI.Config.Doctest
3334
import HaskellCI.Config.HLint
3435
import HaskellCI.Config.Installed
35-
-- import HaskellCI.Config.Jobs
3636
import HaskellCI.Config.PackageScope
3737
import HaskellCI.GitConfig
3838
import HaskellCI.GitHub.Yaml
@@ -190,6 +190,17 @@ makeGitHub _argv config@Config {..} gitconfig prj jobs@JobVersions {..} = do
190190
sh "chmod a+x $HOME/.cabal/bin/cabal-plan"
191191
sh "cabal-plan --version"
192192

193+
when docspecEnabled $ githubRun "install cabal-docspec" $ do
194+
let hash = cfgDocspecHash cfgDocspec
195+
url = cfgDocspecUrl cfgDocspec
196+
sh "mkdir -p $HOME/.cabal/bin"
197+
sh $ "curl -sL " ++ url ++ " > cabal-docspec.xz"
198+
sh $ "echo '" ++ hash ++ " cabal-docspec.xz' | sha256sum -c -"
199+
sh "xz -d < cabal-docspec.xz > $HOME/.cabal/bin/cabal-docspec"
200+
sh "rm -f cabal-docspec.xz"
201+
sh "chmod a+x $HOME/.cabal/bin/cabal-docspec"
202+
sh "cabal-docspec --version"
203+
193204
when doctestEnabled $ githubRun "install doctest" $ do
194205
let range = Range (cfgDoctestEnabled cfgDoctest) /\ doctestJobVersionRange
195206
sh_if range "$CABAL --store-dir=$HOME/.haskell-ci-tools/store v2-install $ARG_COMPILER --ignore-project -j2 doctest --constraint='doctest ^>=0.17'"
@@ -346,6 +357,14 @@ makeGitHub _argv config@Config {..} gitconfig prj jobs@JobVersions {..} = do
346357
change_dir_if vr $ pkgNameDirVariable pkgName
347358
sh_if vr $ "doctest " ++ doctestOptions ++ " " ++ args'
348359

360+
-- docspec
361+
when docspecEnabled $ githubRun "docspec" $ do
362+
let docspecOptions = cfgDocspecOptions cfgDocspec
363+
let range = Range (cfgDocspecEnabled cfgDocspec)
364+
-- we need to rebuild, if tests screwed something.
365+
sh_if range "$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH all"
366+
sh_if range $ unwords $ "cabal-docspec $ARG_COMPILER" : docspecOptions
367+
349368
-- hlint
350369
when (cfgHLintEnabled cfgHLint) $ githubRun "hlint" $ do
351370
let "" <+> ys = ys

0 commit comments

Comments
 (0)