Skip to content

Commit

Permalink
Merge pull request #4637 from input-output-hk/coot/test-concurrently
Browse files Browse the repository at this point in the history
Run tests in GitHub actions with concurrency
  • Loading branch information
coot authored Aug 17, 2023
2 parents 9c89cd3 + 913b40a commit 7232965
Show file tree
Hide file tree
Showing 9 changed files with 224 additions and 14 deletions.
15 changes: 11 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -97,26 +97,33 @@ jobs:
# Test network packages

- name: ntp-client [test]
run: cabal run ntp-client:test
run: cabal run ntp-client:test -- +RTS -maxN2 -RTS

- name: monoidal-synchronisation [test]
run: cabal run monoidal-synchronisation:test -- +RTS -maxN2 -RTS

- name: network-mux [test]
# TODO: issue #4635 to enable `+RTS -N`
run: cabal run network-mux:test

- name: ourobors-network-testing [test]
run: cabal run ouroboros-network-testing:test
run: cabal run ouroboros-network-testing:test -- +RTS -maxN2 -RTS

- name: ourobors-network-framework [test]
# TODO: enable `+RTS -N`
run: cabal run ouroboros-network-framework:test

# TODO: run CDDL

- name: ouroboros-network-protocols [test]
run: cabal run ouroboros-network-protocols:test
run: cabal run ouroboros-network-protocols:test -- +RTS -maxN2 -RTS

# We don't run cddl in GitHub actions (only on Hydra).
# - name: ouroboros-network-protocols [cddl]
# run: cabal run ouroboros-network-protocols-test:cddl

- name: ouroboros-network [test]
run: cabal run ouroboros-network:test
run: cabal run ouroboros-network:test -- +RTS -maxN2 -RTS

# Uncomment the following back in for debugging. Remember to launch a `pwsh` from
# the tmux session to debug `pwsh` issues. And be reminded that the `/msys2` and
Expand Down
2 changes: 0 additions & 2 deletions .github/workflows/checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ on:
jobs:
check-git-dependencies:
name: Check git dependencies
if: ${{ github.event_name == 'push' || !github.event.pull_request.draft }}
runs-on: ubuntu-latest
defaults:
run:
Expand All @@ -24,7 +23,6 @@ jobs:

check-changelogs:
name: Check changelogs
if: ${{ github.event_name == 'push' || !github.event.pull_request.draft }}
runs-on: ubuntu-latest
defaults:
run:
Expand Down
160 changes: 160 additions & 0 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
name: Nightly Haskell CI

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

on:
schedule:
- cron: 0 3 * * *
workflow_dispatch:

jobs:
build:
runs-on: ${{ matrix.os }}

strategy:
fail-fast: false
matrix:
ghc: ["8.10.7", "9.6.2"]
os: [ubuntu-latest]

env:
# Modify this value to "invalidate" all cabal caches.
CABAL_CACHE_VERSION: "2022-12-30"
# Modify this value to "invalidate" the cabal store cache only.
CACHE_VERSION: "20220919"
# Modify this value to "invalidate" the dist-newstyle cache only.
DIST_CACHE_VERSION: "20221122"

steps:

- name: Install Haskell
uses: input-output-hk/setup-haskell@v1
id: setup-haskell
with:
ghc-version: ${{ matrix.ghc }}
cabal-version: "3.10.1.0"
pacman-packages: >
mingw-w64-x86_64-pkg-config
mingw-w64-x86_64-openssl
mingw-w64-x86_64-sed
base-devel
autoconf-wrapper
autoconf
automake
libtool
make
- name: Set up Ruby
if: runner.os == 'Linux'
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.7

- name: Install cddl
if: runner.os == 'Linux'
run: |
gem install cddl -v 0.8.27
- uses: actions/checkout@v3

- name: "Configure cabal.project.local"
run: |
cp ./scripts/ci/cabal.project.nightly${{ runner.os }} cabal.project.local
- name: Update PATH (Windows)
if: runner.os == 'Windows'
run: |
$env:PATH=("C:\msys64\mingw64\bin;{0}" -f $env:PATH)
echo "PATH=$env:PATH" >> $env:GITHUB_ENV
- name: Update PATH (Linux)
if: runner.os == 'Linux'
run:
echo "$HOME/.local/bin" >> $GITHUB_PATH

- name: Update Hackage and CHaP
run: cabal update

- name: Record dependencies
id: record-deps
run: |
cabal build all --dry-run
cat dist-newstyle/cache/plan.json | jq -L .github/workflows/jq-install-plan | sort | uniq > dependencies.txt
- uses: actions/cache/restore@v3
name: "Restore cache: `cabal store`"
id: restore-cabal-store
with:
path: ${{ steps.setup-haskell.outputs.cabal-store }}
key: cache-dependencies-${{ env.CABAL_CACHE_VERSION }}-${{ env.CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('dependencies.txt') }}
restore-keys: cache-dependencies-${{ env.CABAL_CACHE_VERSION }}-${{ env.CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }}

- uses: actions/cache@v3
name: "Cache `dist-newstyle`"
with:
path: |
dist-newstyle
!dist-newstyle/**/.git
key: cache-dist-${{ env.CABAL_CACHE_VERSION }}-${{ env.DIST_CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('cabal.project') }}
restore-keys: cache-dist-${{ env.CABAL_CACHE_VERSION }}-${{ env.DIST_CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }}

- name: Build dependencies
run: cabal build --only-dependencies all -j

- uses: actions/cache/save@v3
name: "Save cache: `cabal store`"
with:
path: ${{ steps.setup-haskell.outputs.cabal-store }}
key: cache-dependencies-${{ env.CABAL_CACHE_VERSION }}-${{ env.CACHE_VERSION }}-${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('dependencies.txt') }}

- name: Build projects [build]
run: cabal build all -j

# Test network packages

- name: ntp-client [test]
run: cabal run ntp-client:test -- +RTS -maxN2 -RTS

- name: monoidal-synchronisation [test]
run: cabal run monoidal-synchronisation:test -- +RTS -maxN2 -RTS

- name: network-mux [test]
# TODO: issue #4635 to enable `+RTS -N`
run: cabal run network-mux:test

- name: ourobors-network-testing [test]
run: cabal run ouroboros-network-testing:test -- +RTS -maxN2 -RTS

- name: ourobors-network-framework [test]
# TODO: enable `+RTS -N`
run: cabal run ouroboros-network-framework:test

- name: ouroboros-network-protocols [test]
run: cabal run ouroboros-network-protocols:test -- +RTS -maxN2 -RTS

- name: ouroboros-netowrk-protocols [cddl]
if: runner.os == 'Linux'
run: cabal run ouroboros-network-protocols:cddl -- +RTS -maxN2 -RTS

- name: ouroboros-network [test]
run: cabal run ouroboros-network:test -- +RTS -maxN2 -RTS

# Uncomment the following back in for debugging. Remember to launch a `pwsh` from
# the tmux session to debug `pwsh` issues. And be reminded that the `/msys2` and
# `/msys2/mingw64` paths are not in PATH by default for the workflow, but tmate
# will put them in.
# You may also want to run
#
# $env:PATH=("C:\Program Files\PowerShell\7;{0}" -f $env:ORIGINAL_PATH)
#
# to restore the original path. Do note that some test might need msys2
# and will silently fail if msys2 is not in path. See the "Run tests" step.
#
# - name: Set up tmate session
# if: ${{ failure() }}
# uses: mxschmitt/action-tmate@v3
# with:
# limit-access-to-actor: true

1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# [Ouroboros-Network][ouroboros-network]

[![Haskell CI](https://img.shields.io/github/actions/workflow/status/input-output-hk/ouroboros-network/build.yml?branch=master&label=Build&style=for-the-badge)](https://github.com/input-output-hk/ouroboros-network/actions/workflows/build.yml)
[![Nightly CI](https://img.shields.io/github/actions/workflow/status/input-output-hk/ouroboros-network/nightly.yml?branch=master&label=Nightly&style=for-the-badge)](https://github.com/input-output-hk/ouroboros-network/actions/workflows/nightly.yml)
[![Haddocks](https://img.shields.io/github/actions/workflow/status/input-output-hk/ouroboros-network/github-page.yml?branch=master&label=Haddocks&style=for-the-badge)](https://github.com/input-output-hk/ouroboros-network/actions/workflows/github-page.yml)
[![handbook](https://img.shields.io/badge/policy-Cardano%20Engineering%20Handbook-informational?style=for-the-badge)](https://input-output-hk.github.io/cardano-engineering-handbook)

Expand Down
1 change: 1 addition & 0 deletions ntp-client/ntp-client.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ test-suite test
default-language: Haskell2010
ghc-options: -Wall
-Wunused-packages
-threaded

executable demo-ntp-client
hs-source-dirs: demo
Expand Down
6 changes: 4 additions & 2 deletions ouroboros-network-protocols/ouroboros-network-protocols.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,8 @@ test-suite test
ouroboros-network-protocols:testlib,
ouroboros-network-testing ^>= 0.3

ghc-options: -Wall
ghc-options: -threaded
-Wall
-Wunused-packages

test-suite cddl
Expand Down Expand Up @@ -243,7 +244,8 @@ test-suite cddl
ouroboros-network-protocols,
ouroboros-network-protocols:testlib

ghc-options: -Wall
ghc-options: -threaded
-Wall
-Wno-unticked-promoted-constructors
-Wcompat
-Wunused-packages
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DerivingVia #-}
Expand Down Expand Up @@ -175,10 +174,7 @@ tests =

, testGroup "races"
[ nightlyTest $ testProperty "governor no livelock" $ prop_explore_governor_nolivelock
-- `IOSimPOR` is consumes too much RAM on Windows
#if !defined(mingw32_HOST_OS)
, testProperty "governor connection status" $ prop_explore_governor_connstatus
#endif
, nightlyTest $ testProperty "governor connection status" $ prop_explore_governor_connstatus
]
]
--TODO: We should add separate properties to check that we do not overshoot
Expand Down
3 changes: 2 additions & 1 deletion scripts/ci/cabal.project.local.Linux
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@ package ouroboros-network-mock
package ouroboros-network-testing
ghc-options: -fno-ignore-asserts -Werror

-- IPv6 tests are DISABLED
package ouroboros-network-framework
flags: +ipv6
flags: -ipv6
ghc-options: -fno-ignore-asserts -Werror

package ouroboros-network-protocols
Expand Down
44 changes: 44 additions & 0 deletions scripts/ci/cabal.project.nightly.Linux
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
max-backjumps: 5000
reorder-goals: True
tests: True
benchmarks: True

package strict-checked-vars
flags: +checktvarinvariants +checkmvarinvariants

package ntp-client
flags: +demo

package network-mux
flags: +ipv6
ghc-options: -fno-ignore-asserts -Werror

package ouroboros-network-api
flags: +asserts
ghc-options: -fno-ignore-asserts -Werror

package ouroboros-network-mock
ghc-options: -fno-ignore-asserts -Werror

package ouroboros-network-testing
flags: +nightly
ghc-options: -fno-ignore-asserts -Werror

-- IPv6 tests are DISABLED
package ouroboros-network-framework
flags: -ipv6
ghc-options: -fno-ignore-asserts -Werror

package ouroboros-network-protocols
flags: +cddl
ghc-options: -fno-ignore-asserts -Werror

package ouroboros-network
ghc-options: -fno-ignore-asserts -Werror

package cardano-ping
ghc-options: -fno-ignore-asserts -Werror

package cardano-client
ghc-options: -fno-ignore-asserts -Werror

0 comments on commit 7232965

Please sign in to comment.