# SUCCESS # *INFO* Generating GitHub config for testing for GHC versions: ghc-head 7.8.1 7.8.2 7.8.3 7.8.4 7.10.1 7.10.2 7.10.3 8.0.1 8.0.2 8.2.1 8.2.2 8.4.1 8.4.2 8.4.3 8.4.4 8.6.1 8.6.2 8.6.3 8.6.4 8.6.5 8.8.1 8.8.2 8.8.3 8.8.4 8.10.1 8.10.2 8.10.3 8.10.4 8.10.5 8.10.6 8.10.7 # This GitHub workflow config has been generated by a script via # # haskell-ci '--ghc-head' 'github' 'empty-line.project' # # To regenerate the script (for example after adjusting tested-with) run # # haskell-ci regenerate # # For more information, see https://github.com/haskell-CI/haskell-ci # # REGENDATA ["--ghc-head","github","empty-line.project"] # name: Haskell-CI on: - push - pull_request jobs: linux: name: Haskell-CI - Linux - ${{ matrix.compiler }} runs-on: ubuntu-20.04 timeout-minutes: 60 container: image: buildpack-deps:bionic continue-on-error: ${{ matrix.allow-failure }} strategy: matrix: include: - compiler: ghc-8.10.7 compilerKind: ghc compilerVersion: 8.10.7 setup-method: ghcup allow-failure: false - compiler: ghc-8.10.6 compilerKind: ghc compilerVersion: 8.10.6 setup-method: ghcup allow-failure: false - compiler: ghc-8.10.5 compilerKind: ghc compilerVersion: 8.10.5 setup-method: ghcup allow-failure: false - compiler: ghc-8.10.4 compilerKind: ghc compilerVersion: 8.10.4 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.10.3 compilerKind: ghc compilerVersion: 8.10.3 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.10.2 compilerKind: ghc compilerVersion: 8.10.2 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.10.1 compilerKind: ghc compilerVersion: 8.10.1 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.8.4 compilerKind: ghc compilerVersion: 8.8.4 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.8.3 compilerKind: ghc compilerVersion: 8.8.3 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.8.2 compilerKind: ghc compilerVersion: 8.8.2 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.8.1 compilerKind: ghc compilerVersion: 8.8.1 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.6.5 compilerKind: ghc compilerVersion: 8.6.5 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.6.4 compilerKind: ghc compilerVersion: 8.6.4 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.6.3 compilerKind: ghc compilerVersion: 8.6.3 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.6.2 compilerKind: ghc compilerVersion: 8.6.2 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.6.1 compilerKind: ghc compilerVersion: 8.6.1 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.4.4 compilerKind: ghc compilerVersion: 8.4.4 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.4.3 compilerKind: ghc compilerVersion: 8.4.3 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.4.2 compilerKind: ghc compilerVersion: 8.4.2 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.4.1 compilerKind: ghc compilerVersion: 8.4.1 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.2.2 compilerKind: ghc compilerVersion: 8.2.2 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.2.1 compilerKind: ghc compilerVersion: 8.2.1 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.0.2 compilerKind: ghc compilerVersion: 8.0.2 setup-method: hvr-ppa allow-failure: false - compiler: ghc-8.0.1 compilerKind: ghc compilerVersion: 8.0.1 setup-method: hvr-ppa allow-failure: false - compiler: ghc-7.10.3 compilerKind: ghc compilerVersion: 7.10.3 setup-method: hvr-ppa allow-failure: false - compiler: ghc-7.10.2 compilerKind: ghc compilerVersion: 7.10.2 setup-method: hvr-ppa allow-failure: false - compiler: ghc-7.10.1 compilerKind: ghc compilerVersion: 7.10.1 setup-method: hvr-ppa allow-failure: false - compiler: ghc-7.8.4 compilerKind: ghc compilerVersion: 7.8.4 setup-method: hvr-ppa allow-failure: false - compiler: ghc-7.8.3 compilerKind: ghc compilerVersion: 7.8.3 setup-method: hvr-ppa allow-failure: false - compiler: ghc-7.8.2 compilerKind: ghc compilerVersion: 7.8.2 setup-method: hvr-ppa allow-failure: false - compiler: ghc-7.8.1 compilerKind: ghc compilerVersion: 7.8.1 setup-method: hvr-ppa allow-failure: false fail-fast: false steps: - name: apt run: | apt-get update apt-get install -y --no-install-recommends gnupg ca-certificates dirmngr curl git software-properties-common libtinfo5 if [ "${{ matrix.setup-method }}" = ghcup ]; then mkdir -p "$HOME/.ghcup/bin" curl -sL https://downloads.haskell.org/ghcup/0.1.20.0/x86_64-linux-ghcup-0.1.20.0 > "$HOME/.ghcup/bin/ghcup" chmod a+x "$HOME/.ghcup/bin/ghcup" "$HOME/.ghcup/bin/ghcup" config add-release-channel https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.7.yaml; "$HOME/.ghcup/bin/ghcup" install ghc "$HCVER" || (cat "$HOME"/.ghcup/logs/*.* && false) "$HOME/.ghcup/bin/ghcup" install cabal 3.10.2.0 || (cat "$HOME"/.ghcup/logs/*.* && false) else apt-add-repository -y 'ppa:hvr/ghc' apt-get update apt-get install -y "$HCNAME" mkdir -p "$HOME/.ghcup/bin" curl -sL https://downloads.haskell.org/ghcup/0.1.20.0/x86_64-linux-ghcup-0.1.20.0 > "$HOME/.ghcup/bin/ghcup" chmod a+x "$HOME/.ghcup/bin/ghcup" "$HOME/.ghcup/bin/ghcup" config add-release-channel https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.7.yaml; "$HOME/.ghcup/bin/ghcup" install cabal 3.10.2.0 || (cat "$HOME"/.ghcup/logs/*.* && false) fi env: HCKIND: ${{ matrix.compilerKind }} HCNAME: ${{ matrix.compiler }} HCVER: ${{ matrix.compilerVersion }} - name: Set PATH and environment variables run: | echo "$HOME/.cabal/bin" >> $GITHUB_PATH echo "LANG=C.UTF-8" >> "$GITHUB_ENV" echo "CABAL_DIR=$HOME/.cabal" >> "$GITHUB_ENV" echo "CABAL_CONFIG=$HOME/.cabal/config" >> "$GITHUB_ENV" HCDIR=/opt/$HCKIND/$HCVER if [ "${{ matrix.setup-method }}" = ghcup ]; then HC=$("$HOME/.ghcup/bin/ghcup" whereis ghc "$HCVER") HCPKG=$(echo "$HC" | sed 's#ghc$#ghc-pkg#') HADDOCK=$(echo "$HC" | sed 's#ghc$#haddock#') echo "HC=$HC" >> "$GITHUB_ENV" echo "HCPKG=$HCPKG" >> "$GITHUB_ENV" echo "HADDOCK=$HADDOCK" >> "$GITHUB_ENV" echo "CABAL=$HOME/.ghcup/bin/cabal-3.10.2.0 -vnormal+nowrap" >> "$GITHUB_ENV" else HC=$HCDIR/bin/$HCKIND echo "HC=$HC" >> "$GITHUB_ENV" echo "HCPKG=$HCDIR/bin/$HCKIND-pkg" >> "$GITHUB_ENV" echo "HADDOCK=$HCDIR/bin/haddock" >> "$GITHUB_ENV" echo "CABAL=$HOME/.ghcup/bin/cabal-3.10.2.0 -vnormal+nowrap" >> "$GITHUB_ENV" fi HCNUMVER=$(${HC} --numeric-version|perl -ne '/^(\d+)\.(\d+)\.(\d+)(\.(\d+))?$/; print(10000 * $1 + 100 * $2 + ($3 == 0 ? $5 != 1 : $3))') echo "HCNUMVER=$HCNUMVER" >> "$GITHUB_ENV" echo "ARG_TESTS=--enable-tests" >> "$GITHUB_ENV" echo "ARG_BENCH=--enable-benchmarks" >> "$GITHUB_ENV" if [ $((HCNUMVER > 81007)) -ne 0 ] ; then echo "HEADHACKAGE=true" >> "$GITHUB_ENV" ; else echo "HEADHACKAGE=false" >> "$GITHUB_ENV" ; fi echo "ARG_COMPILER=--$HCKIND --with-compiler=$HC" >> "$GITHUB_ENV" echo "GHCJSARITH=0" >> "$GITHUB_ENV" env: HCKIND: ${{ matrix.compilerKind }} HCNAME: ${{ matrix.compiler }} HCVER: ${{ matrix.compilerVersion }} - name: env run: | env - name: write cabal config run: | mkdir -p $CABAL_DIR cat >> $CABAL_CONFIG <> $CABAL_CONFIG <> $CABAL_CONFIG < cabal-plan.xz echo 'f62ccb2971567a5f638f2005ad3173dba14693a45154c1508645c52289714cb2 cabal-plan.xz' | sha256sum -c - xz -d < cabal-plan.xz > $HOME/.cabal/bin/cabal-plan rm -f cabal-plan.xz chmod a+x $HOME/.cabal/bin/cabal-plan cabal-plan --version - name: checkout uses: actions/checkout@v3 with: path: source - name: initial cabal.project for sdist run: | touch cabal.project echo "packages: $GITHUB_WORKSPACE/source/servant" >> cabal.project echo "packages: $GITHUB_WORKSPACE/source/servant-client" >> cabal.project echo "packages: $GITHUB_WORKSPACE/source/servant-docs" >> cabal.project echo "packages: $GITHUB_WORKSPACE/source/servant-server" >> cabal.project cat cabal.project - name: sdist run: | mkdir -p sdist $CABAL sdist all --output-dir $GITHUB_WORKSPACE/sdist - name: unpack run: | mkdir -p unpacked find sdist -maxdepth 1 -type f -name '*.tar.gz' -exec tar -C $GITHUB_WORKSPACE/unpacked -xzvf {} \; - name: generate cabal.project run: | PKGDIR_servant="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/servant-[0-9.]*')" echo "PKGDIR_servant=${PKGDIR_servant}" >> "$GITHUB_ENV" PKGDIR_servant_client="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/servant-client-[0-9.]*')" echo "PKGDIR_servant_client=${PKGDIR_servant_client}" >> "$GITHUB_ENV" PKGDIR_servant_docs="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/servant-docs-[0-9.]*')" echo "PKGDIR_servant_docs=${PKGDIR_servant_docs}" >> "$GITHUB_ENV" PKGDIR_servant_server="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/servant-server-[0-9.]*')" echo "PKGDIR_servant_server=${PKGDIR_servant_server}" >> "$GITHUB_ENV" rm -f cabal.project cabal.project.local touch cabal.project touch cabal.project.local echo "packages: ${PKGDIR_servant}" >> cabal.project echo "packages: ${PKGDIR_servant_client}" >> cabal.project echo "packages: ${PKGDIR_servant_docs}" >> cabal.project echo "packages: ${PKGDIR_servant_server}" >> cabal.project if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-client" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-docs" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo "package servant-server" >> cabal.project ; fi if [ $((HCNUMVER >= 80200)) -ne 0 ] ; then echo " ghc-options: -Werror=missing-methods" >> cabal.project ; fi cat >> cabal.project <= 0.14 allow-newer: servant-js:servant allow-newer: servant-js:servant-foreign EOF if $HEADHACKAGE; then echo "allow-newer: $($HCPKG list --simple-output | sed -E 's/([a-zA-Z-]+)-[0-9.]+/*:\1,/g')" >> cabal.project fi $HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(servant|servant-client|servant-docs|servant-server)$/; }' >> cabal.project.local cat cabal.project cat cabal.project.local - name: dump install plan run: | $CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dry-run all cabal-plan - name: restore cache uses: actions/cache/restore@v3 with: key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }} path: ~/.cabal/store restore-keys: ${{ runner.os }}-${{ matrix.compiler }}- - name: install dependencies run: | $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks --dependencies-only -j2 all $CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH --dependencies-only -j2 all - name: build w/o tests run: | $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all - name: build run: | $CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --write-ghc-environment-files=always - name: tests run: | $CABAL v2-test $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --test-show-details=direct - name: cabal check run: | cd ${PKGDIR_servant} || false ${CABAL} -vnormal check cd ${PKGDIR_servant_client} || false ${CABAL} -vnormal check cd ${PKGDIR_servant_docs} || false ${CABAL} -vnormal check cd ${PKGDIR_servant_server} || false ${CABAL} -vnormal check - name: haddock run: | $CABAL v2-haddock --disable-documentation --haddock-all $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all - name: unconstrained build run: | rm -f cabal.project.local $CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all - name: save cache uses: actions/cache/save@v3 if: always() with: key: ${{ runner.os }}-${{ matrix.compiler }}-${{ github.sha }} path: ~/.cabal/store