Skip to content

Commit

Permalink
Fix spec-haskell CI (#1281)
Browse files Browse the repository at this point in the history
* fix spec-haskell CI

* add ghc944
  • Loading branch information
hellwolf authored Feb 10, 2023
1 parent 493476c commit 401f17a
Show file tree
Hide file tree
Showing 58 changed files with 70 additions and 252 deletions.
218 changes: 30 additions & 188 deletions .github/workflows/call.test-spec-haskell.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,181 +9,25 @@ jobs:

runs-on: ubuntu-latest

container:
image: buildpack-deps:bionic

continue-on-error: ${{ matrix.allow-failure }}

strategy:
matrix:
include:
- compiler: ghc-9.2.4
compilerKind: ghc
compilerVersion: 9.2.4
setup-method: ghcup
- compiler: ghc-9.2.5
devShell: ci-spec-ghc925
allow-failure: false
- compiler: ghc-9.4.4
devShell: ci-spec-ghc944
allow-failure: false
fail-fast: false

steps:
- name: checkout
uses: actions/checkout@v3
with:
path: source

- 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.17.5/x86_64-linux-ghcup-0.1.17.5 > "$HOME/.ghcup/bin/ghcup"
chmod a+x "$HOME/.ghcup/bin/ghcup"
"$HOME/.ghcup/bin/ghcup" install ghc "$HCVER"
"$HOME/.ghcup/bin/ghcup" install cabal 3.6.2.0
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.17.5/x86_64-linux-ghcup-0.1.17.5 > "$HOME/.ghcup/bin/ghcup"
chmod a+x "$HOME/.ghcup/bin/ghcup"
"$HOME/.ghcup/bin/ghcup" install cabal 3.6.2.0
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/$HCKIND-$HCVER
echo "HC=$HC" >> "$GITHUB_ENV"
echo "HCPKG=$HOME/.ghcup/bin/$HCKIND-pkg-$HCVER" >> "$GITHUB_ENV"
echo "HADDOCK=$HOME/.ghcup/bin/haddock-$HCVER" >> "$GITHUB_ENV"
echo "CABAL=$HOME/.ghcup/bin/cabal-3.6.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.6.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"
echo "HEADHACKAGE=false" >> "$GITHUB_ENV"
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 <<EOF
remote-build-reporting: anonymous
write-ghc-environment-files: never
remote-repo-cache: $CABAL_DIR/packages
logs-dir: $CABAL_DIR/logs
world-file: $CABAL_DIR/world
extra-prog-path: $CABAL_DIR/bin
symlink-bindir: $CABAL_DIR/bin
installdir: $CABAL_DIR/bin
build-summary: $CABAL_DIR/logs/build.log
store-dir: $CABAL_DIR/store
install-dirs user
prefix: $CABAL_DIR
repository hackage.haskell.org
url: http://hackage.haskell.org/
EOF
cat >> $CABAL_CONFIG <<EOF
program-default-options
ghc-options: $GHCJOBS +RTS -M3G -RTS
EOF
cat $CABAL_CONFIG
- name: versions
run: |
$HC --version || true
$HC --print-project-git-commit-id || true
$CABAL --version || true
- name: update cabal index
run: |
$CABAL v2-update -v
- uses: actions/checkout@v3

- name: install cabal-plan
run: |
mkdir -p $HOME/.cabal/bin
curl -sL https://github.com/haskell-hvr/cabal-plan/releases/download/v0.6.2.0/cabal-plan-0.6.2.0-x86_64-linux.xz > cabal-plan.xz
echo 'de73600b1836d3f55e32d80385acc055fd97f60eaa0ab68a755302685f5d81bc 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: initial cabal.project for sdist
run: |
touch cabal.project
D=$GITHUB_WORKSPACE/source/packages/spec-haskell/packages
echo "packages: $D/core" >> cabal.project
echo "packages: $D/simple" >> cabal.project
echo "packages: $D/validator" >> 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_superfluid_protocol_spec_core="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/superfluid-protocol-spec-core-[0-9.]*')"
echo "PKGDIR_superfluid_protocol_spec_core=${PKGDIR_superfluid_protocol_spec_core}" >> "$GITHUB_ENV"
PKGDIR_superfluid_protocol_system_simple="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/superfluid-protocol-system-simple-[0-9.]*')"
echo "PKGDIR_superfluid_protocol_system_simple=${PKGDIR_superfluid_protocol_system_simple}" >> "$GITHUB_ENV"
PKGDIR_superfluid_protocol_spec_validator="$(find "$GITHUB_WORKSPACE/unpacked" -maxdepth 1 -type d -regex '.*/superfluid-protocol-spec-validator-[0-9.]*')"
echo "PKGDIR_superfluid_protocol_spec_validator=${PKGDIR_superfluid_protocol_spec_validator}" >> "$GITHUB_ENV"
rm -f cabal.project cabal.project.local
touch cabal.project
touch cabal.project.local
echo "packages: ${PKGDIR_superfluid_protocol_spec_core}" >> cabal.project
echo "packages: ${PKGDIR_superfluid_protocol_system_simple}" >> cabal.project
echo "packages: ${PKGDIR_superfluid_protocol_spec_validator}" >> cabal.project
echo "package superfluid-protocol-spec-core" >> cabal.project
echo " ghc-options: -Werror=missing-methods" >> cabal.project
echo "package superfluid-protocol-system-simple" >> cabal.project
echo " ghc-options: -Werror=missing-methods" >> cabal.project
echo "package superfluid-protocol-spec-validator" >> cabal.project
echo " ghc-options: -Werror=missing-methods" >> cabal.project
cat >> cabal.project <<EOF
EOF
$HCPKG list --simple-output --names-only | perl -ne 'for (split /\s+/) { print "constraints: $_ installed\n" unless /^(superfluid-protocol-spec-core|superfluid-protocol-spec-validator|superfluid-protocol-system-simple)$/; }' >> 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
- uses: cachix/install-nix-action@v19
with:
github_access_token: ${{ secrets.GITHUB_TOKEN }}

- name: cache
uses: actions/cache@v2
Expand All @@ -192,37 +36,35 @@ jobs:
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
- name: Create devShell
run: |
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all
echo 'nix develop .#${{ matrix.devShell }} -c bash $@' > devShell.sh
- name: build
- name: Run cabal update
run: |
$CABAL v2-build $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --write-ghc-environment-files=always
cabal v2-update
shell: sh devShell.sh {0}

- name: tests
- name: Run lint
run: |
$CABAL v2-test $ARG_COMPILER $ARG_TESTS $ARG_BENCH all --test-show-details=direct
cd packages/spec-haskell
make lint
shell: sh devShell.sh {0}

- name: cabal check
- name: Run build
run: |
cd ${PKGDIR_superfluid_protocol_spec_core} || false
${CABAL} -vnormal check
cd ${PKGDIR_superfluid_protocol_system_simple} || false
${CABAL} -vnormal check
cd ${PKGDIR_superfluid_protocol_spec_validator} || false
${CABAL} -vnormal check
cd packages/spec-haskell
make build
shell: sh devShell.sh {0}

- name: haddock
- name: Run tests
run: |
$CABAL v2-haddock $ARG_COMPILER --with-haddock $HADDOCK $ARG_TESTS $ARG_BENCH all
cd packages/spec-haskell
make test
shell: sh devShell.sh {0}

- name: unconstrained build
- name: Make haddock docs
run: |
rm -f cabal.project.local
$CABAL v2-build $ARG_COMPILER --disable-tests --disable-benchmarks all
cd packages/spec-haskell
make docs-haddock
shell: sh devShell.sh {0}
20 changes: 15 additions & 5 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@
flakeUtils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
# GHC version selection
ghcVer = "ghc944";
ghc = pkgs.haskell.compiler.${ghcVer};
ghcPackages = pkgs.haskell.packages.${ghcVer};
# minimem development shell
minimumEVMDevInputs = with pkgs; [
# for nodejs ecosystem
Expand All @@ -29,6 +25,9 @@
echidna
];
# for developing specification
ghcVer = "ghc944";
ghc = pkgs.haskell.compiler.${ghcVer};
ghcPackages = pkgs.haskell.packages.${ghcVer};
specInputs = with pkgs; [
# for nodejs ecosystem
yarn
Expand All @@ -55,6 +54,14 @@
collection-fontsrecommended collection-fontsextra;
})
];
ci-spec = ghcVer : with pkgs; mkShell {
buildInputs = [
gnumake
cabal-install
haskell.compiler.${ghcVer}
hlint
];
};
in {
devShells.default = with pkgs; mkShell {
buildInputs = minimumEVMDevInputs;
Expand All @@ -64,13 +71,16 @@
++ whitehatInputs;
};
devShells.spec = with pkgs; mkShell {
buildInputs = specInputs;
buildInputs = minimumEVMDevInputs
++ specInputs;
};
devShells.full = with pkgs; mkShell {
buildInputs = minimumEVMDevInputs
++ whitehatInputs
++ specInputs;
};
devShells.ci-spec-ghc925 = ci-spec "ghc925";
devShells.ci-spec-ghc944 = ci-spec "ghc944";
});
}

21 changes: 12 additions & 9 deletions packages/spec-haskell/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ TEST_OPTIONS = \

default: build

.PHONY: check

#
# Build
#
Expand Down Expand Up @@ -79,7 +81,7 @@ $(YELLOWPAPER_ROOT)/tex/lhsfmt.tex:


.SECONDEXPANSION:
$(YELLOWPAPER_ROOT)/tex/%.lhs.tex: packages/core/src/Money/Theory/%.lhs
$(YELLOWPAPER_ROOT)/tex/%.lhs.tex: pkgs/core/src/Money/Theory/%.lhs
./utils/lhs2tex.sh "$<" > "$@"

.SECONDEXPANSION:
Expand Down Expand Up @@ -135,31 +137,32 @@ freeze:
rm -f cabal.project.freeze
$(CABAL) v2-freeze

hlint:
hlint packages
lint:
for i in $$PWD/pkgs/*/*.cabal;do cd $$(dirname $$i);pwd;cabal -vnormal check || exit 1;done
hlint pkgs

repl-simple:
$(CABAL) repl superfluid-protocol-system-simple

cloc:
@echo '**** Core Source Files ****'
cloc packages/core/src/
cloc pkgs/core/src/
@echo

@echo '**** Simple System Source Files ****'
cloc packages/simple/src/
cloc pkgs/simple/src/
@echo

@echo '**** Validator Source Files ****'
cloc packages/validator/src/
cloc pkgs/validator/src/
@echo

@echo '**** Internal Source ****'
cloc packages/src-internal/
cloc pkgs/src-internal/
@echo

@echo '**** Test Files ****'
cloc packages/*/test
cloc pkgs/*/test
@echo

.PHONY: dev freeze hlint repl-* cloc
.PHONY: dev freeze lint repl-* cloc
2 changes: 0 additions & 2 deletions packages/spec-haskell/Setup.hs

This file was deleted.

6 changes: 3 additions & 3 deletions packages/spec-haskell/cabal.project
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
packages:
packages/core/superfluid-protocol-spec-core.cabal
packages/simple/superfluid-protocol-system-simple.cabal
packages/validator/superfluid-protocol-spec-validator.cabal
pkgs/core/superfluid-protocol-spec-core.cabal
pkgs/simple/superfluid-protocol-system-simple.cabal
pkgs/validator/superfluid-protocol-spec-validator.cabal
Loading

0 comments on commit 401f17a

Please sign in to comment.