Skip to content

Commit

Permalink
travis: switch CI builds from Stack to cabal-install
Browse files Browse the repository at this point in the history
 - Add license file.
 - Add Setup.lhs file.
 - Drop obsolete dependency on pretty-show.
  • Loading branch information
peti committed Jun 15, 2016
1 parent db640d6 commit 1b9ba52
Show file tree
Hide file tree
Showing 6 changed files with 181 additions and 15 deletions.
86 changes: 75 additions & 11 deletions .travis.yml
@@ -1,21 +1,85 @@
# .travis.yml

language: haskell
# This file has been generated -- see https://github.com/hvr/multi-ghc-travis
language: c
sudo: false

cache:
directories:
- $HOME/.stack
- $HOME/.cabsnap
- $HOME/.cabal/packages

before_cache:
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.tar

matrix:
include:
- env: CABALVER=1.22 GHCVER=7.10.1
compiler: ": #GHC 7.10.1"
addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.1], sources: [hvr-ghc]}}
- env: CABALVER=1.22 GHCVER=7.10.2
compiler: ": #GHC 7.10.2"
addons: {apt: {packages: [cabal-install-1.22,ghc-7.10.2], 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], 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], sources: [hvr-ghc]}}

before_install:
- curl -L https://github.com/commercialhaskell/stack/releases/download/v1.1.2/stack-1.1.2-linux-x86_64.tar.gz | tar xfz -
- install -m 555 -D stack-1.1.2-linux-x86_64/stack $HOME/.local/bin/stack
- export PATH=$HOME/.local/bin:$PATH
- stack setup
- unset CC
- export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH

install:
- stack build hscolour --copy-bins
- stack build --only-snapshot --flag=nix-paths:allow-relative-paths
- 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
- 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

# 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:
- stack build --pedantic --test --haddock
- 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

# 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")

# EOF
30 changes: 30 additions & 0 deletions LICENSE
@@ -0,0 +1,30 @@
Redistribution and use in source and binary forms, with or
without modification, are permitted provided that the
following conditions are met:

* Redistributions of source code must retain the above
copyright notice, this list of conditions and the
following disclaimer.

* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other
materials provided with the distribution.

* The names of its contributors may not be used to endorse
or promote products derived from this software without
specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40 changes: 40 additions & 0 deletions Setup.lhs
@@ -0,0 +1,40 @@
#! /usr/bin/env runhaskell

> module Main ( main ) where
>
> import Data.Char
> import Data.Maybe
> import Distribution.PackageDescription
> import Distribution.Simple
> import Distribution.Simple.LocalBuildInfo
> import Distribution.Simple.Program
> import Distribution.Simple.Setup
>
> main :: IO ()
> main = defaultMainWithHooks simpleUserHooks
> { hookedPrograms = map simpleProgram programs
> , confHook = configure
> }
>
> programs :: [String]
> programs = ["nix-instantiate", "nix-build", "nix-env", "nix-store"]
>
> configure :: (GenericPackageDescription, HookedBuildInfo) -> ConfigFlags -> IO LocalBuildInfo
> configure (gpd, hbi) flags = do
> lbi' <- confHook simpleUserHooks (gpd, hbi) flags
> let paths = map (\p -> (p, maybe p programPath (lookupProgram (simpleProgram p) (withPrograms lbi)))) programs
> descr = localPkgDescr lbi'
> lib = fromJust (library descr)
> libbi = libBuildInfo lib
> lbi = lbi' { localPkgDescr = descr
> { library = Just (lib { libBuildInfo = libbi { cppOptions = cppOptions libbi ++ map fmtCppArg paths } })
> }
> }
> return lbi
>
> fmtCppArg :: (String, FilePath) -> String
> fmtCppArg (prg, path) = "-DPATH_TO_" ++ map mangle prg ++ "=" ++ show path
> where
> mangle :: Char -> Char
> mangle '-' = '_'
> mangle c = toUpper c
36 changes: 34 additions & 2 deletions cabal2nix.cabal
Expand Up @@ -11,6 +11,8 @@ homepage: https://github.com/nixos/cabal2nix#readme
bug-reports: https://github.com/nixos/cabal2nix/issues
maintainer: Peter Simons <simons@cryp.to>
license: BSD3
license-file: LICENSE
tested-with: GHC > 7.10 && < 8.1
build-type: Simple
cabal-version: >= 1.10

Expand Down Expand Up @@ -38,7 +40,6 @@ library
, lens
, optparse-applicative
, pretty >= 1.1.2
, pretty-show
, process
, SHA
, split
Expand All @@ -65,6 +66,38 @@ library
Paths_cabal2nix
default-language: Haskell2010

executable cabal2nix
main-is: Main.hs
hs-source-dirs:
cabal2nix
ghc-options: -Wall
build-depends:
aeson
, ansi-wl-pprint
, base < 5
, bytestring
, Cabal > 1.24
, containers
, deepseq >= 1.4
, directory
, distribution-nixpkgs
, filepath
, hackage-db
, language-nix
, lens
, optparse-applicative
, pretty >= 1.1.2
, process
, SHA
, split
, text
, transformers
, yaml
, cabal2nix
other-modules:
Paths_cabal2nix
default-language: Haskell2010

executable hackage2nix
main-is: Main.hs
hs-source-dirs:
Expand All @@ -86,7 +119,6 @@ executable hackage2nix
, lens
, optparse-applicative
, pretty >= 1.1.2
, pretty-show
, process
, SHA
, split
Expand Down
1 change: 0 additions & 1 deletion cabal2nix/Main.hs
Expand Up @@ -153,7 +153,6 @@ main = bracket (return ()) (\() -> hFlush stdout >> hFlush stderr) $ \() -> do
, text " if pkgs.lib.inNixShell then drv.env else drv"
]

-- putStrLn $ ppShow deriv
print (if optNixShellOutput then shell else pPrint deriv)

readFlagList :: [String] -> FlagAssignment
Expand Down
3 changes: 2 additions & 1 deletion package.yaml
Expand Up @@ -4,8 +4,10 @@ synopsis: Convert Cabal files into Nix build instructions.
description: Convert Cabal files into Nix build instructions.
maintainer: Peter Simons <simons@cryp.to>
license: BSD3
license-file: LICENSE
github: nixos/cabal2nix
category: Distribution
tested-with: GHC > 7.10 && < 8.1

ghc-options: -Wall

Expand All @@ -25,7 +27,6 @@ dependencies:
- lens
- optparse-applicative
- pretty >= 1.1.2
- pretty-show
- process
- SHA
- split
Expand Down

0 comments on commit 1b9ba52

Please sign in to comment.