Skip to content

Commit 51956c0

Browse files
committed
Chairman test running on Windows and Linux.
1 parent d32c8cf commit 51956c0

File tree

4 files changed

+104
-42
lines changed

4 files changed

+104
-42
lines changed

.github/workflows/haskell.yml

+83-39
Original file line numberDiff line numberDiff line change
@@ -4,79 +4,120 @@ on: [push]
44

55
jobs:
66
build:
7-
runs-on: ubuntu-18.04
7+
runs-on: ${{ matrix.os }}
8+
9+
defaults:
10+
run:
11+
shell: bash
12+
13+
strategy:
14+
fail-fast: false
15+
matrix:
16+
ghc: ["8.6.5"]
17+
os: [ubuntu-latest, windows-latest]
818

919
steps:
1020
- uses: actions/checkout@v1
1121

12-
- name: Debugging
13-
env:
14-
BINARY_CACHE_REGION: ${{ secrets.BINARY_CACHE_REGION }}
15-
BINARY_CACHE_THREADS: ${{ secrets.BINARY_CACHE_THREADS }}
16-
BINARY_CACHE_URI: ${{ secrets.BINARY_CACHE_URI }}
22+
- name: Select build directory
23+
run: echo "CABAL_BUILDDIR=dist" >> $GITHUB_ENV
24+
25+
- name: Install pkgconfiglite
26+
if: matrix.os == 'windows-latest'
27+
run: choco install -y pkgconfiglite
28+
29+
- name: Install libsodium
30+
if: matrix.os == 'windows-latest'
1731
run: |
18-
echo "BINARY_CACHE_REGION: $BINARY_CACHE_REGION"
19-
echo "BINARY_CACHE_THREADS: $BINARY_CACHE_THREADS"
20-
echo "BINARY_CACHE_URI: $BINARY_CACHE_URI"
32+
curl -Ls https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-mingw.tar.gz -o libsodium-1.0.18-mingw.tar.gz
33+
tar zxvf libsodium-1.0.18-mingw.tar.gz
34+
35+
sed -i "s|/d/a/1/s/|D:/a/cardano-node/cardano-node/|g" libsodium-win64/lib/pkgconfig/libsodium.pc
36+
37+
export PKG_CONFIG_PATH="$(readlink -f libsodium-win64/lib/pkgconfig)"
38+
echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH" >> $GITHUB_ENV
2139
22-
- uses: actions/[email protected]
40+
export LIBSODIUM_PATH="$(readlink -f libsodium-win64/bin | sed 's|^/d|D:|g' | tr / '\\')"
41+
echo "LIBSODIUM_PATH=$LIBSODIUM_PATH"
42+
echo "$LIBSODIUM_PATH" >> $GITHUB_PATH
43+
44+
- name: Configure to use libsodium
45+
run: |
46+
cat >> cabal.project <<EOF
47+
package cardano-crypto-praos
48+
flags: -external-libsodium-vrf
49+
EOF
50+
51+
- uses: actions/setup-haskell@v1
52+
id: setup-haskell
2353
with:
24-
ghc-version: '8.6.5'
25-
cabal-version: '3.4.0.0'
54+
ghc-version: ${{ matrix.ghc }}
55+
cabal-version: '3.2.0.0'
2656

2757
- name: Install build environment
58+
if: matrix.os == 'ubuntu-latest'
2859
run: |
2960
sudo apt-get update
3061
sudo apt-get -y install libsodium23 libsodium-dev
3162
sudo apt-get -y install libsystemd0 libsystemd-dev
3263
sudo apt-get -y remove --purge software-properties-common
3364
sudo apt-get -y autoremove
3465
35-
cat >> cabal.project <<EOF
36-
package cardano-crypto-praos
37-
flags: -external-libsodium-vrf
38-
EOF
39-
40-
- name: Install cabal-cache tool
41-
run: |
42-
CACHE_TOOL_TAG=$(curl -s -X GET https://api.github.com/repos/haskell-works/cabal-cache/releases/latest | jq -rc .tag_name)
43-
echo "Downloading: https://github.com/haskell-works/cabal-cache/releases/download/${CACHE_TOOL_TAG}/cabal-cache_x86_64_linux.tar.gz"
44-
curl -Ls https://github.com/haskell-works/cabal-cache/releases/download/${CACHE_TOOL_TAG}/cabal-cache_x86_64_linux.tar.gz | tar -xvz -C /tmp/
45-
sudo cp /tmp/cabal-cache /usr/local/bin/cabal-cache
46-
cabal-cache version
47-
4866
- name: Cabal update
4967
run: cabal update
5068

5169
- name: Cabal Configure
52-
run: cabal configure
70+
run: cabal configure --builddir="$CABAL_BUILDDIR" --enable-tests --enable-benchmarks --write-ghc-environment-files=always
5371

5472
- name: Restore cabal cache
73+
uses: haskell-works/cabal-cache-action@v1
5574
env:
5675
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
5776
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
5877
BINARY_CACHE_REGION: ${{ secrets.BINARY_CACHE_REGION }}
5978
BINARY_CACHE_THREADS: ${{ secrets.BINARY_CACHE_THREADS }}
6079
BINARY_CACHE_URI: ${{ secrets.BINARY_CACHE_URI }}
61-
run: |
62-
cabal-cache sync-from-archive \
63-
--threads "$BINARY_CACHE_THREADS" \
64-
--archive-uri "$BINARY_CACHE_URI" \
65-
--region "$BINARY_CACHE_REGION"
80+
with:
81+
args: |
82+
sync-from-archive \
83+
--threads "$BINARY_CACHE_THREADS" \
84+
--archive-uri "$BINARY_CACHE_URI" \
85+
--region "$BINARY_CACHE_REGION" \
86+
--build-path "$CABAL_BUILDDIR" \
87+
--store-path "${{ steps.setup-haskell.outputs.cabal-store }}"
6688
6789
- name: Install dependencies
68-
run: cabal build all --enable-tests --enable-benchmarks --write-ghc-environment-files=always --only-dependencies
90+
run: cabal build all --builddir="$CABAL_BUILDDIR" --only-dependencies
6991

7092
- name: Build
71-
run: cabal build all --enable-tests --enable-benchmarks --write-ghc-environment-files=always
93+
run: cabal build cardano-node cardano-cli cardano-node-chairman --builddir="$CABAL_BUILDDIR"
94+
95+
- name: Save cabal cache
96+
uses: haskell-works/cabal-cache-action@v1
97+
if: ${{ always() }}
98+
env:
99+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
100+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
101+
BINARY_CACHE_REGION: ${{ secrets.BINARY_CACHE_REGION }}
102+
BINARY_CACHE_THREADS: ${{ secrets.BINARY_CACHE_THREADS }}
103+
BINARY_CACHE_URI: ${{ secrets.BINARY_CACHE_URI }}
104+
with:
105+
args: |
106+
sync-to-archive \
107+
--threads "$BINARY_CACHE_THREADS" \
108+
--archive-uri "$BINARY_CACHE_URI" \
109+
--region "$BINARY_CACHE_REGION" \
110+
--build-path "$CABAL_BUILDDIR" \
111+
--store-path "${{ steps.setup-haskell.outputs.cabal-store }}"
72112
73113
- name: Git clone
74114
run: git clone https://github.com/input-output-hk/cardano-mainnet-mirror
75115

76116
- name: Run tests
77-
run: cabal test cardano-cli cardano-node cardano-node-chairman --enable-tests --enable-benchmarks --write-ghc-environment-files=always --test-show-details=direct --test-options='+RTS -g1'
117+
run: cabal test --builddir="$CABAL_BUILDDIR" cardano-node-chairman
78118

79119
- name: Save cabal cache
120+
uses: haskell-works/cabal-cache-action@v1
80121
if: ${{ always() }}
81122
env:
82123
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
@@ -85,8 +126,11 @@ jobs:
85126
BINARY_CACHE_THREADS: ${{ secrets.BINARY_CACHE_THREADS }}
86127
BINARY_CACHE_URI: ${{ secrets.BINARY_CACHE_URI }}
87128
CARDANO_MAINNET_MIRROR: cardano-mainnet-mirror/epoch
88-
run: |
89-
cabal-cache sync-to-archive \
90-
--threads "$BINARY_CACHE_THREADS" \
91-
--archive-uri "$BINARY_CACHE_URI" \
92-
--region "$BINARY_CACHE_REGION"
129+
with:
130+
args: |
131+
sync-to-archive \
132+
--threads "$BINARY_CACHE_THREADS" \
133+
--archive-uri "$BINARY_CACHE_URI" \
134+
--region "$BINARY_CACHE_REGION" \
135+
--build-path "$CABAL_BUILDDIR" \
136+
--store-path "${{ steps.setup-haskell.outputs.cabal-store }}"

ci-shell

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/usr/bin/env bash
2+
3+
env
4+
5+
"$*"

hedgehog-extras/hedgehog-extras.cabal

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ library
1919
, deepseq
2020
, directory
2121
, exceptions
22+
, filepath
2223
, hedgehog
2324
, mmorph
2425
, mtl

hedgehog-extras/src/Hedgehog/Extras/Test/Process.hs

+15-3
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,25 @@ import qualified Data.Text as T
4444
import qualified GHC.Stack as GHC
4545
import qualified Hedgehog as H
4646
import qualified Hedgehog.Extras.Stock.IO.Process as IO
47+
import qualified Hedgehog.Extras.Stock.OS as OS
4748
import qualified Hedgehog.Extras.Test.Base as H
4849
import qualified System.Directory as IO
4950
import qualified System.Environment as IO
5051
import qualified System.Exit as IO
52+
import qualified System.IO.Unsafe as IO
5153
import qualified System.Process as IO
5254

55+
planJsonFile :: String
56+
planJsonFile = IO.unsafePerformIO $ do
57+
maybeBuildDir <- liftIO $ IO.lookupEnv "CABAL_BUILDDIR"
58+
case maybeBuildDir of
59+
Just buildDir -> return $ ".." </> buildDir </> "cache/plan.json"
60+
Nothing -> return "../dist-newstyle/cache/plan.json"
61+
{-# NOINLINE planJsonFile #-}
62+
63+
exeSuffix :: String
64+
exeSuffix = if OS.isWin32 then ".exe" else ""
65+
5366
-- | Create a process returning handles to stdin, stdout, and stderr as well as the process handle.
5467
createProcess
5568
:: (MonadTest m, MonadResource m, HasCallStack)
@@ -157,13 +170,12 @@ procDist
157170
-> m CreateProcess
158171
-- ^ Captured stdout
159172
procDist pkg arguments = do
160-
base <- getProjectBase
161-
contents <- H.evalIO . LBS.readFile $ base </> "dist-newstyle/cache/plan.json"
173+
contents <- H.evalIO . LBS.readFile $ planJsonFile
162174

163175
case eitherDecode contents of
164176
Right plan -> case L.filter matching (plan & installPlan) of
165177
(component:_) -> case component & binFile of
166-
Just bin -> return $ IO.proc (T.unpack bin) arguments
178+
Just bin -> return $ IO.proc (T.unpack bin <> exeSuffix) arguments
167179
Nothing -> error $ "missing bin-file in: " <> show component
168180
[] -> error $ "Cannot find exe:" <> pkg <> " in plan"
169181
Left message -> error $ "Cannot decode plan: " <> message

0 commit comments

Comments
 (0)