packages feed

travis-meta-yaml 0.0.1.1 → 0.1.0.0

raw patch · 14 files changed

+360/−81 lines, 14 filesdep +unordered-containersPVP ok

version bump matches the API change (PVP)

Dependencies added: unordered-containers

API changes (from Hackage documentation)

+ Data.Aeson.Merge: merge :: Value -> Value -> Value

Files

.travis.meta.yml view
@@ -1,35 +1,5 @@-# NB: don't set `language: haskell` here--sudo: false+language: haskell-stack  env:-  - CABALVER=1.18 GHCVER=7.8.4-  - CABALVER=1.22 GHCVER=7.10.1-  - CABALVER=1.22 GHCVER=head--addons:-  apt:-    sources:-      - hvr-ghc-    packages:-      - cabal-install-$CABALVER-      - ghc-$GHCVER--matrix:-  allow_failures:-    - env: CABALVER=1.22 GHCVER=head--before_install:-  # ghc-  - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH-  # versions-  - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"-  - cabal --version--install:-  - cabal update-  - cabal install -j2 --only-dependencies --enable-tests--script:-  - cabal configure --enable-tests-  - cabal test -j2+  - GHCVER=7.8.4 STACKYAML=stack-7.8.yaml+  - GHCVER=7.10.1 STACKYAML=stack-7.10.yaml
.travis.yml view
@@ -1,40 +1,39 @@ script:-- cabal configure --enable-tests-- cabal test -j2+- stack +RTS -N2 -RTS --no-terminal --skip-ghc-check --stack-yaml $STACKYAML test matrix:   include:-  - env: CABALVER=1.18 GHCVER=7.8.4+  - env: GHCVER=7.8.4 STACKYAML=stack-7.8.yaml     addons:       apt:         sources:         - hvr-ghc         packages:-        - cabal-install-1.18         - ghc-7.8.4-  - env: CABALVER=1.22 GHCVER=7.10.1+        - libgmp-dev+  - env: GHCVER=7.10.1 STACKYAML=stack-7.10.yaml     addons:       apt:         sources:         - hvr-ghc         packages:-        - cabal-install-1.22         - ghc-7.10.1-  - env: CABALVER=1.22 GHCVER=head-    addons:-      apt:-        sources:-        - hvr-ghc-        packages:-        - cabal-install-1.22-        - ghc-head-  allow_failures:-  - env: CABALVER=1.22 GHCVER=head+        - libgmp-dev install:-- cabal update-- cabal install -j2 --only-dependencies --enable-tests+- stack +RTS -N2 -RTS --no-terminal --skip-ghc-check --stack-yaml $STACKYAML setup+- stack +RTS -N2 -RTS --no-terminal --skip-ghc-check --stack-yaml $STACKYAML test+  --only-snapshot+cache:+  directories:+  - ~/.stack+  apt: true before_install:-- export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH+- export PATH=/opt/ghc/$GHCVER/bin:$PATH+- export PATH=~/.local/bin:$PATH+- if [ ! -e ~/.local/bin/stack ]; then mkdir -p ~/.local/bin; travis_retry curl -L+  https://github.com/commercialhaskell/stack/releases/download/v0.1.2.0/stack-0.1.2.0-x86_64-linux.gz+  | gunzip > ~/.local/bin/stack; chmod a+x ~/.local/bin/stack; fi - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo   '?')]"-- cabal --version+- stack +RTS -N2 -RTS --version+language: c sudo: false
README.md view
@@ -5,8 +5,62 @@  ## Motivation -Turn+```+language: haskell-stack +env:+  - GHCVER=7.8.4 STACKYAML=stack-7.8.4.yaml+  - GHCVER=7.10.1 STACKYAML=stack-7.10.yaml+```++into++```+script:+- stack +RTS -N2 -RTS --no-terminal --skip-ghc-check --stack-yaml $STACKYAML test+matrix:+  include:+  - env: GHCVER=7.8.4 STACKYAML=stack-7.8.4.yaml+    addons:+      apt:+        sources:+        - hvr-ghc+        packages:+        - ghc-7.8.4+        - libgmp-dev+  - env: GHCVER=7.10.1 STACKYAML=stack-7.10.yaml+    addons:+      apt:+        sources:+        - hvr-ghc+        packages:+        - ghc-7.10.1+        - libgmp-dev+install:+- stack +RTS -N2 -RTS --no-terminal --skip-ghc-check --stack-yaml $STACKYAML setup+- stack +RTS -N2 -RTS --no-terminal --skip-ghc-check --stack-yaml $STACKYAML test+  --only-snapshot+cache:+  directories:+  - ~/.stack+  apt: true+before_install:+- export PATH=/opt/ghc/$GHCVER/bin:$PATH+- export PATH=~/.local/bin:$PATH+- if [ ! -e ~/.local/bin/stack ]; then mkdir -p ~/.local/bin; travis_retry curl -L+  https://github.com/commercialhaskell/stack/releases/download/v0.1.2.0/stack-0.1.2.0-x86_64-linux.gz+  | gunzip > ~/.local/bin/stack; chmod a+x ~/.local/bin/stack; fi+- echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo+  '?')]"+- stack +RTS -N2 -RTS --version+language: c+sudo: false+```++## Features++Interpolate environment variables into `addons` in `matrix.include`:+ ```yaml env:   - CABALVER=1.18 GHCVER=7.8.4@@ -59,6 +113,6 @@   - env: CABALVER=1.22 GHCVER=head ``` -## Features+### Other -Currently only expanding of `addons.apt`. Any feature requests are welcome.+Any feature requests are welcome.
cli/Main.hs view
@@ -11,13 +11,17 @@  sample :: Parser Opts sample = Opts-  <$> strArgument-      ( metavar "SOURCE"+  <$> strOption+      ( short 'i'+     <> long "input"+     <> metavar "SOURCE"      <> value ".travis.meta.yml"      <> showDefault      <> help "Source, travis meta file" )-  <*> strArgument-      ( metavar "TARGET"+  <*> strOption+      ( short 'o'+     <> long "output"+     <> metavar "TARGET"      <> value ".travis.yml"      <> showDefault      <> help "Target, travis yaml" )
+ data/language-haskell-multi-ghc.yml view
@@ -0,0 +1,28 @@+language: c+sudo: false++cache:+  apt: true++addons:+  apt:+    sources:+      - hvr-ghc+    packages:+      - cabal-install-$CABALVER+      - ghc-$GHCVER++before_install:+  # ghc+  - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH+  # versions+  - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"+  - cabal --version++install:+  - cabal update+  - cabal install -j2 --only-dependencies --enable-tests++script:+  - cabal configure --enable-tests+  - cabal test -j2
+ data/language-haskell-stack.yml view
@@ -0,0 +1,33 @@+# NB: don't set `language: haskell` here+language: c+sudo: false++cache:+  apt: true+  directories:+    - ~/.stack++addons:+  apt:+    sources:+      - hvr-ghc+    packages:+      - ghc-$GHCVER+      - libgmp-dev++before_install:+  # ghc+  - export PATH=/opt/ghc/$GHCVER/bin:$PATH+  # stack+  - export PATH=~/.local/bin:$PATH+  - if [ ! -e ~/.local/bin/stack ]; then mkdir -p ~/.local/bin; travis_retry curl -L https://github.com/commercialhaskell/stack/releases/download/v0.1.2.0/stack-0.1.2.0-x86_64-linux.gz | gunzip > ~/.local/bin/stack; chmod a+x ~/.local/bin/stack; fi+  # version+  - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"+  - stack +RTS -N2 -RTS --version++install:+  - stack +RTS -N2 -RTS --no-terminal --skip-ghc-check --stack-yaml $STACKYAML setup+  - stack +RTS -N2 -RTS --no-terminal --skip-ghc-check --stack-yaml $STACKYAML test --only-snapshot++script:+  - stack +RTS -N2 -RTS --no-terminal --skip-ghc-check --stack-yaml $STACKYAML test
+ fixtures/multi-ghc-processed.yml view
@@ -0,0 +1,49 @@+script:+- cabal configure --enable-tests+- cabal test -j2+matrix:+  include:+  - env: GHCVER=7.8.4 CABALVER=1.18+    addons:+      apt:+        sources:+        - hvr-ghc+        packages:+        - cabal-install-1.18+        - ghc-7.8.4+  - env: GHCVER=7.10.1 CABALVER=1.22+    addons:+      apt:+        sources:+        - hvr-ghc+        packages:+        - cabal-install-1.22+        - ghc-7.10.1+  - env: GHCVER=7.10.2 CABALVER=1.22+    addons:+      apt:+        sources:+        - hvr-ghc+        packages:+        - cabal-install-1.22+        - ghc-7.10.2+  - env: GHCVER=head CABALVER=1.23+    addons:+      apt:+        sources:+        - hvr-ghc+        packages:+        - cabal-install-1.23+        - ghc-head+install:+- cabal update+- cabal install -j2 --only-dependencies --enable-tests+cache:+  apt: true+before_install:+- export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH+- echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo+  '?')]"+- cabal --version+language: c+sudo: false
+ fixtures/multi-ghc.yml view
@@ -0,0 +1,7 @@+language: haskell-multi-ghc++env:+  - GHCVER=7.8.4 CABALVER=1.18+  - GHCVER=7.10.1 CABALVER=1.22+  - GHCVER=7.10.2 CABALVER=1.22+  - GHCVER=head CABALVER=1.23
+ fixtures/multi-processed.yml view
@@ -0,0 +1,42 @@+script:+- cabal configure --enable-tests+- cabal test -j2+matrix:+  include:+  - env: CABALVER=1.18 GHCVER=7.8.4+    addons:+      apt:+        sources:+        - hvr-ghc+        packages:+        - cabal-install-1.18+        - ghc-7.8.4+  - env: CABALVER=1.22 GHCVER=7.10.1+    addons:+      apt:+        sources:+        - hvr-ghc+        packages:+        - cabal-install-1.22+        - ghc-7.10.1+  - env: CABALVER=1.22 GHCVER=head+    addons:+      apt:+        sources:+        - hvr-ghc+        packages:+        - cabal-install-1.22+        - ghc-head+  allow_failures:+  - env: CABALVER=1.22 GHCVER=head+install:+- cabal update+- cabal install -j2 --only-dependencies --enable-tests+cache:+  apt: true+before_install:+- export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH+- echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo+  '?')]"+- cabal --version+sudo: false
+ fixtures/multi.yml view
@@ -0,0 +1,38 @@+# NB: don't set `language: haskell` here++sudo: false++env:+  - CABALVER=1.18 GHCVER=7.8.4+  - CABALVER=1.22 GHCVER=7.10.1+  - CABALVER=1.22 GHCVER=head++cache:+  apt: true++addons:+  apt:+    sources:+      - hvr-ghc+    packages:+      - cabal-install-$CABALVER+      - ghc-$GHCVER++matrix:+  allow_failures:+    - env: CABALVER=1.22 GHCVER=head++before_install:+  # ghc+  - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH+  # versions+  - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]"+  - cabal --version++install:+  - cabal update+  - cabal install -j2 --only-dependencies --enable-tests++script:+  - cabal configure --enable-tests+  - cabal test -j2
+ src/Data/Aeson/Merge.hs view
@@ -0,0 +1,15 @@+-- |+-- Module      : Data.Aeson.Merge+-- Description : Simple 'Value' merge.+-- Copyright   : (c) Oleg Grenrus, 2005+-- License     : BSD3+-- Maintainer  : Oleg Grenrus <oleg.grenrus@iki.fi>+module Data.Aeson.Merge (merge) where++import Data.Aeson.Types+import Data.HashMap.Strict as HM++-- | A bit like <http://underscorejs.org/#extend _.extend>, but pure, left-bias and recursive.+merge :: Value -> Value -> Value+merge (Object a) (Object b) = Object (HM.unionWith merge a b)+merge a          _b         = a
src/Travis/Meta.hs view
@@ -1,5 +1,11 @@ {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE TemplateHaskell #-}+-- |+-- Module      : Travis.Meta+-- Description : Travis preprocessor+-- Copyright   : (c) Oleg Grenrus, 2005+-- License     : BSD3+-- Maintainer  : Oleg Grenrus <oleg.grenrus@iki.fi> module Travis.Meta (   -- * High level     preprocessIO@@ -13,10 +19,12 @@  import Control.Lens import Control.Monad hiding (sequence)-import Data.Aeson.Types import Data.Aeson.Lens+import Data.Aeson.Merge+import Data.Aeson.Types import Data.ByteString as BS import Data.Char+import Data.FileEmbed import Data.Maybe import Data.Monoid import Data.Text as T@@ -65,7 +73,10 @@ hoist (Just a) = Right a  preprocessYaml :: Value -> Either String Value-preprocessYaml v = do+preprocessYaml = preprocessYaml' . processLanguage ++preprocessYaml' :: Value -> Either String Value+preprocessYaml' v = do   assertNoMatrixInclude v   matrixInclude <- buildMatrixInclude v   let v' = v & _Object . at "env" .~ Nothing@@ -74,6 +85,13 @@              & key "matrix" . _Object . at "include" ?~ matrixInclude   return v' +processLanguage :: Value -> Value+processLanguage v =+  case v ^? key "language" . _String of+    Just t | t == "haskell-stack"      -> merge (v & _Object . at "language" .~ Nothing) stackTemplate+           | t == "haskell-multi-ghc"  -> merge (v & _Object . at "language" .~ Nothing) multiGhcTemplate+    _                                  -> v+ buildMatrixInclude :: Value -> Either String Value buildMatrixInclude v = toJSON <$> mk `traverse` envs   where addons  = v ^? key "addons"@@ -103,3 +121,9 @@  -- Right v <- decodeEither <$> BS.readFile ".travis.meta.yml"  :: IO (Either String Value) -- BS.putStr $ encode $ preprocessYaml v++stackTemplate :: Value+stackTemplate = fromJust $ decode $(embedFile "data/language-haskell-stack.yml")++multiGhcTemplate :: Value+multiGhcTemplate = fromJust $ decode $(embedFile "data/language-haskell-multi-ghc.yml")
tests/Tests.hs view
@@ -2,6 +2,7 @@ {-# LANGUAGE RankNTypes #-} module Main (main) where +import Data.ByteString import Data.Either.Extra import Data.FileEmbed import Data.Yaml@@ -15,20 +16,23 @@  tests :: TestTree tests = testGroup "Tests"-  [ selfTest-  , withoutMatrix+  [ fixtures   , errorCases   ] -selfTest :: TestTree-selfTest = testProperty "Self test" $ once $ actual === processed-  where actual     = decodeEither $(embedFile ".travis.yml")-        processed  = preprocessYaml =<< decodeEither $(embedFile ".travis.meta.yml")+fixtures :: TestTree+fixtures = testGroup "Fixtures"+  [ f "self" $(embedFile ".travis.yml") $(embedFile ".travis.meta.yml")+  , f "with matrix" $(embedFile "fixtures/multi-processed.yml") $(embedFile "fixtures/multi.yml")+  , f "without matrix" $(embedFile "fixtures/without-matrix-processed.yml") $(embedFile "fixtures/without-matrix.yml")+  , f "multi-ghc" $(embedFile "fixtures/multi-ghc-processed.yml") $(embedFile "fixtures/multi-ghc.yml")+  ]+  where f = fixture -withoutMatrix :: TestTree-withoutMatrix = testProperty "Self test without matrix" $ once $ actual === processed-  where actual     = decodeEither $(embedFile "fixtures/without-matrix-processed.yml")-        processed  = preprocessYaml =<< decodeEither $(embedFile "fixtures/without-matrix.yml")+fixture :: String -> ByteString -> ByteString -> TestTree+fixture name metaBS processedBS = testProperty name $ once $ actual === processed+  where actual     = decodeEither metaBS+        processed  = preprocessYaml =<< decodeEither processedBS  errorCases :: TestTree errorCases = testGroup "Error cases"
travis-meta-yaml.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack  name:           travis-meta-yaml-version:        0.0.1.1+version:        0.1.0.0 synopsis:       .travis.yml preprocessor description:    .travis.yml preprocessor category:       Development@@ -19,7 +19,13 @@ extra-source-files:     .travis.meta.yml     .travis.yml+    data/language-haskell-multi-ghc.yml+    data/language-haskell-stack.yml     fixtures/matrix-include.yml+    fixtures/multi-ghc-processed.yml+    fixtures/multi-ghc.yml+    fixtures/multi-processed.yml+    fixtures/multi.yml     fixtures/without-matrix-processed.yml     fixtures/without-matrix.yml     README.md@@ -36,12 +42,15 @@       base >=4.7 && <4.9     , aeson     , bytestring-    , lens-aeson+    , file-embed     , lens-    , text+    , lens-aeson     , regex-applicative+    , text+    , unordered-containers     , yaml   exposed-modules:+      Data.Aeson.Merge       Travis.Meta   default-language: Haskell2010 @@ -54,10 +63,12 @@       base >=4.7 && <4.9     , aeson     , bytestring-    , lens-aeson+    , file-embed     , lens-    , text+    , lens-aeson     , regex-applicative+    , text+    , unordered-containers     , yaml     , travis-meta-yaml     , optparse-applicative@@ -73,13 +84,14 @@       base >=4.7 && <4.9     , aeson     , bytestring-    , lens-aeson+    , file-embed     , lens-    , text+    , lens-aeson     , regex-applicative+    , text+    , unordered-containers     , yaml     , extra-    , file-embed     , travis-meta-yaml     , tasty     , tasty-quickcheck