From 132def33bd239f09c3953e19f008e0a8305e825e Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Sat, 13 Jul 2019 14:08:17 +0300 Subject: [PATCH 1/6] Build macOS binaries with Travis --- .travis.yml | 141 +++++++++++++++++++++------------------------------- 1 file changed, 58 insertions(+), 83 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5872f8816..6e8795e10 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,100 +1,75 @@ -# This file has been generated -- see https://github.com/hvr/multi-ghc-travis -language: c -sudo: false +sudo: required + +language: generic cache: directories: - - $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 + - $HOME/.ghc + - $HOME/.cabal + - $HOME/.stack + - $TRAVIS_BUILD_DIR/.stack-work matrix: include: - - env: CABALVER=1.24 GHCVER=8.0.1 DEPLOY_GITHUB_RELEASE=true - compiler: ": #GHC 8.0.1" - addons: {apt: {packages: [cabal-install-1.24,ghc-8.0.1], sources: [hvr-ghc]}} - - env: CABALVER=1.24 GHCVER=8.0.1 DEPLOY_GITHUB_RELEASE=true - compiler: ": #GHC 8.0.1" - os: osx + # Build only on macOS + - env: BUILD=stack + compiler: ": #stack default osx" + os: osx + +# Build only master and release tags +branches: + only: + - master + - /^\d+\.\d+\.\d+(\.\d+)?$/ + before_install: - - unset CC - - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$PATH - # Work around travis issue by updating Homebrew: https://github.com/travis-ci/travis-ci/issues/8552 - - if [ "$TRAVIS_OS_NAME" = osx ]; - then - brew update; - brew install cabal-install; - brew install gnu-sed --with-default-names; - fi + # Using compiler above sets CC to an invalid value, so unset it + - unset CC + # We want to always allow newer versions of packages when building on GHC HEAD + - CABALARGS="" + - if [ "x$GHCVER" = "xhead" ]; then CABALARGS=--allow-newer; fi + # Download and unpack the stack executable + - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$HOME/.local/bin:/opt/alex/$ALEXVER/bin:/opt/happy/$HAPPYVER/bin:$HOME/.cabal/bin:$PATH + - mkdir -p ~/.local/bin + - travis_retry curl --insecure -L https://get.haskellstack.org/stable/osx-x86_64.tar.gz | tar xz --strip-components=1 --include '*/stack' -C ~/.local/bin + # Use the more reliable S3 mirror of Hackage + - mkdir -p $HOME/.cabal + - echo 'remote-repo: hackage.haskell.org:http://hackage.fpcomplete.com/' > $HOME/.cabal/config + - echo 'remote-repo-cache: $HOME/.cabal/packages' >> $HOME/.cabal/config -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 - - 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 $HOME/.cabsnap/installplan.txt 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 +install: + - echo "$(ghc --version) [$(ghc --print-project-git-commit-id 2> /dev/null || echo '?')]" + - if [ -f configure.ac ]; then autoreconf -i; fi + - set -ex + - stack --no-terminal --install-ghc $ARGS test --bench --only-dependencies + - set +ex -# 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: - - 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") + - export PATH="${PATH}:$(pwd)/artifacts" + - stack build --copy-bins --local-bin-path ./bin; + - get_cabal_version() { cat $1/$1.cabal | grep '^Version: ' | gsed -e 's/^Version: //g'; } + - mk_release_name() { echo "$1-$(get_cabal_version $1)-x86_64-macos.tar.bz2"; } + - tar -jcvf $(mk_release_name dhall) bin/dhall + - tar -jcvf $(mk_release_name dhall-json) bin/dhall-to-json bin/dhall-to-yaml bin/json-to-dhall bin/yaml-to-dhall + - tar -jcvf $(mk_release_name dhall-bash) bin/dhall-to-bash + - tar -jcvf $(mk_release_name dhall-lsp-server) bin/dhall-lsp-server before_deploy: - - tar --create --file "$TRAVIS_OS_NAME.tar" --files-from /dev/null - - tar --append --file "$TRAVIS_OS_NAME.tar" --directory dist/build/dhall dhall - - gzip "$TRAVIS_OS_NAME.tar" + - stack build --copy-bins --local-bin-path ./bin; + # TODO: move the tar operations here + - mkdir -p uploads + - mv *.tar.bz2 uploads/ deploy: - provider: releases - api_key: "$GITHUB_OAUTH_TOKEN" - file: "$TRAVIS_OS_NAME.tar.gz" - on: - condition: $DEPLOY_GITHUB_RELEASE = true - tags: true - skip_cleanup: true - -# EOF + - provider: releases + api_key: $API_KEY + file_glob: true + file: uploads/* + skip_cleanup: true + on: + tags: true + script: + - echo 'done' From ea32a649de929ffacf939336508dac168b47da71 Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Sat, 13 Jul 2019 16:51:00 +0300 Subject: [PATCH 2/6] Update .travis.yml Co-Authored-By: Hardy Jones --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6e8795e10..ef97c1cfb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,7 +32,7 @@ before_install: # Download and unpack the stack executable - export PATH=/opt/ghc/$GHCVER/bin:/opt/cabal/$CABALVER/bin:$HOME/.local/bin:/opt/alex/$ALEXVER/bin:/opt/happy/$HAPPYVER/bin:$HOME/.cabal/bin:$PATH - mkdir -p ~/.local/bin - - travis_retry curl --insecure -L https://get.haskellstack.org/stable/osx-x86_64.tar.gz | tar xz --strip-components=1 --include '*/stack' -C ~/.local/bin + - travis_retry curl --insecure -L https://get.haskellstack.org/stable/osx-x86_64.tar.gz | tar xz --strip-components=1 --include '*/stack' -C ~/.local/bin # Use the more reliable S3 mirror of Hackage - mkdir -p $HOME/.cabal - echo 'remote-repo: hackage.haskell.org:http://hackage.fpcomplete.com/' > $HOME/.cabal/config From 26e88be493e474ae758388d15c3f45f5b606d6c6 Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Sat, 13 Jul 2019 16:52:20 +0300 Subject: [PATCH 3/6] Update .travis.yml Co-Authored-By: Hardy Jones --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index ef97c1cfb..662658835 100644 --- a/.travis.yml +++ b/.travis.yml @@ -58,7 +58,7 @@ script: - tar -jcvf $(mk_release_name dhall-lsp-server) bin/dhall-lsp-server before_deploy: - - stack build --copy-bins --local-bin-path ./bin; + - stack build --copy-bins --local-bin-path ./bin # TODO: move the tar operations here - mkdir -p uploads - mv *.tar.bz2 uploads/ From 8aadcf16e20df0590ac10ce7fa7fc8e275356686 Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Sat, 13 Jul 2019 16:52:28 +0300 Subject: [PATCH 4/6] Update .travis.yml Co-Authored-By: Hardy Jones --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 662658835..3a796c372 100644 --- a/.travis.yml +++ b/.travis.yml @@ -49,7 +49,7 @@ install: script: - export PATH="${PATH}:$(pwd)/artifacts" - - stack build --copy-bins --local-bin-path ./bin; + - stack build --copy-bins --local-bin-path ./bin - get_cabal_version() { cat $1/$1.cabal | grep '^Version: ' | gsed -e 's/^Version: //g'; } - mk_release_name() { echo "$1-$(get_cabal_version $1)-x86_64-macos.tar.bz2"; } - tar -jcvf $(mk_release_name dhall) bin/dhall From e6434dca0a99698ca3eab6b296c703b01465cb18 Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Sat, 13 Jul 2019 22:57:27 +0300 Subject: [PATCH 5/6] =?UTF-8?q?API=5FKEY=20=E2=86=92=20GITHUB=5FOAUTH=5FTO?= =?UTF-8?q?KEN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3a796c372..79ae26302 100644 --- a/.travis.yml +++ b/.travis.yml @@ -65,7 +65,7 @@ before_deploy: deploy: - provider: releases - api_key: $API_KEY + api_key: $GITHUB_OAUTH_TOKEN file_glob: true file: uploads/* skip_cleanup: true From 2ec2c53c727a57b20dba667680e6b22a6de3a025 Mon Sep 17 00:00:00 2001 From: Fabrizio Ferrai Date: Sat, 13 Jul 2019 23:55:35 +0300 Subject: [PATCH 6/6] Move functions to external script --- .travis-functions.sh | 3 +++ .travis.yml | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 .travis-functions.sh diff --git a/.travis-functions.sh b/.travis-functions.sh new file mode 100644 index 000000000..2e23d432d --- /dev/null +++ b/.travis-functions.sh @@ -0,0 +1,3 @@ +get_cabal_version() { cat $1/$1.cabal | grep '^Version: ' | gsed -e 's/^Version: //g'; } + +mk_release_name() { echo "$1-$(get_cabal_version $1)-x86_64-macos.tar.bz2"; } diff --git a/.travis.yml b/.travis.yml index 79ae26302..0b4d5ff80 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,8 +50,7 @@ install: script: - export PATH="${PATH}:$(pwd)/artifacts" - stack build --copy-bins --local-bin-path ./bin - - get_cabal_version() { cat $1/$1.cabal | grep '^Version: ' | gsed -e 's/^Version: //g'; } - - mk_release_name() { echo "$1-$(get_cabal_version $1)-x86_64-macos.tar.bz2"; } + - source .travis-functions.sh - tar -jcvf $(mk_release_name dhall) bin/dhall - tar -jcvf $(mk_release_name dhall-json) bin/dhall-to-json bin/dhall-to-yaml bin/json-to-dhall bin/yaml-to-dhall - tar -jcvf $(mk_release_name dhall-bash) bin/dhall-to-bash