Skip to content

blocking is correct #14584

blocking is correct

blocking is correct #14584

name: Protocol Foundry tests
on:
push:
branches:
- master
- 'release/**'
- 'feat/l2-epoch-system'
- 'martinvol/**'
- 'pahor167/**'
- 'soloseng/**'
pull_request:
branches:
- master
- 'release/**'
- 'feat/l2-epoch-system'
- 'martinvol/**'
- 'pahor167/**'
- 'soloseng/**'
env:
# Increment these to force cache rebuilding
FOUNDRY_CACHE_KEY: 2
# Supported Foundry version defined at celo-org (GitHub organisation) level, for consistency across workflows. Please contact DevOps to update value.
SUPPORTED_FOUNDRY_VERSION: ${{ vars.SUPPORTED_FOUNDRY_VERSION }}
jobs:
check:
defaults:
run:
working-directory: packages/protocol
name: Run tests
runs-on: ubuntu-latest
steps:
- name: Set Swap Space
uses: pierotofy/set-swap-space@49819abfb41bd9b44fb781159c033dba90353a7c
with:
swap-size-gb: 32
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Fail if there are test with wrong extension
if: success() || failure()
run: |
if tree test-sol | grep -i ".sol" | grep -v ".sol"; then
echo "There are tests with wrong extensions"
tree test-sol | grep -i ".sol" | grep -v ".sol"
exit 1
fi
- name: Foundry cache
id: foundry-cache
uses: actions/cache@v4
with:
path: ./cache
key: ${{ runner.os }}-foundry-cache-${{ env.FOUNDRY_CACHE_KEY }}
- name: Foundry out
id: foundry-out
uses: actions/cache@v4
with:
path: ./out
key: ${{ runner.os }}-foundry-out-${{ env.FOUNDRY_CACHE_KEY }}
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: 'nightly-fa0e0c2ca3ae75895dd19173a02faf88509c0608' # TODO: revert back to env var
- name: Install forge dependencies
run: forge install
# "Run tests" already tries to compile the contracts
# Making it explicit here to have easier to read errors
- name: Compile Contracts
run: forge --version && forge compile
- name: Run unit tests common
# can't use gas limit because some setUp function use more than the limit
run: |
forge test -vvv \
--match-path "test-sol/unit/common/*"
- name: Run unit tests governance/network
if: success() || failure()
run: |
forge test -vvv \
--match-path "test-sol/unit/governance/network/*" \
--block-gas-limit 50000000
- name: Run unit tests governance/validators
if: success() || failure()
run: |
forge test -vvv \
--match-path "test-sol/unit/governance/validators/*" \
--block-gas-limit 50000000
- name: Run unit tests governance/voting
# can't use gas limit because some setUp function use more than the limit
if: success() || failure()
run: |
forge test -vvv \
--match-path "test-sol/unit/governance/voting/*"
- name: Run unit tests stability
if: success() || failure()
run: |
forge test -vvv \
--match-path "test-sol/unit/stability/*" \
--block-gas-limit 50000000
- name: Run unit tests identity
if: success() || failure()
run: |
forge test -vvv \
--match-path "test-sol/unit/identity/*" \
--block-gas-limit 50000000
- name: Fail if there are tests without folder
if: success() || failure()
run: |
if ls test-sol | grep -qi '\.t\.sol'; then
echo "All tests should be in a folder"
exit 1
fi
- name: Run all unit tests in case some were missed (excl. integration and e2e tests)
# can't use gas limit because some setUp function use more than the limit
# Excludes e2e and integration tests, because they require a connection to an anvil devchain
# serving at localhost.
run: |
forge test -vvv \
--match-path "test-sol/unit/*"
- name: Run integration tests (that don't require an anvil devchain)
if: success() || failure()
run: |
forge test -vvv \
--match-path "test-sol/integration/*" \
- name: Generate migrations and run devchain
if: success() || failure()
run: ./scripts/foundry/create_and_migrate_anvil_devchain.sh
- name: Run migration tests against local anvil devchain
run: |
source ./scripts/foundry/constants.sh
FOUNDRY_PROFILE=devchain forge test -vvv \
--match-path "test-sol/devchain/migration/*" \
--fork-url $ANVIL_RPC_URL
- name: Run e2e tests against local anvil devchain
run: |
source ./scripts/foundry/constants.sh
FOUNDRY_PROFILE=devchain forge test -vvv \
--match-path "test-sol/devchain/e2e/*" \
--fork-url $ANVIL_RPC_URL