Skip to content

CI Workflow for integration and invariant tests #23

CI Workflow for integration and invariant tests

CI Workflow for integration and invariant tests #23

Workflow file for this run

name: "CI"
concurrency:
cancel-in-progress: true
group: ${{github.workflow}}-${{github.ref}}
env:
MAINNET_RPC_URL: ${{ secrets.MAINNET_RPC_URL }}
API_KEY_INFURA: ${{ secrets.API_KEY_INFURA }}
on:
workflow_dispatch:
pull_request:
push:
branches:
- "main"
jobs:
lint:
runs-on: "ubuntu-latest"
steps:
- name: "Check out the repo"
uses: "actions/checkout@v3"
- name: "Install Foundry"
uses: "foundry-rs/foundry-toolchain@v1"
- name: "Install Pnpm"
uses: "pnpm/action-setup@v2"
with:
version: "8"
- name: "Install Node.js"
uses: "actions/setup-node@v3"
with:
cache: "pnpm"
node-version: "lts/*"
- name: "Install the Node.js dependencies"
run: "pnpm install"
- name: "Lint the contracts"
run: "pnpm lint"
- name: "Add lint summary"
run: |
echo "## Lint result" >> $GITHUB_STEP_SUMMARY
echo "βœ… Passed" >> $GITHUB_STEP_SUMMARY
build:
runs-on: "ubuntu-latest"
steps:
- name: "Check out the repo"
uses: "actions/checkout@v3"
- name: "Install Foundry"
uses: "foundry-rs/foundry-toolchain@v1"
- name: "Install Pnpm"
uses: "pnpm/action-setup@v2"
with:
version: "8"
- name: "Install Node.js"
uses: "actions/setup-node@v3"
with:
cache: "pnpm"
node-version: "lts/*"
- name: "Install the Node.js dependencies"
run: "pnpm install"
- name: "Show the Foundry config"
run: "forge config"
- name: "Build the test contracts"
run: "FOUNDRY_PROFILE=test-optimized forge build"
- name: "Cache the build and the node modules so that they can be re-used by the other jobs"
uses: "actions/cache/save@v3"
with:
key: "build-and-modules-${{ github.sha }}"
path: |
cache
node_modules
out
out-optimized
- name: "Add build summary"
run: |
echo "## Build result" >> $GITHUB_STEP_SUMMARY
echo "βœ… Passed" >> $GITHUB_STEP_SUMMARY
test-integration:
needs: ["lint", "build"]
env:
FOUNDRY_FUZZ_RUNS: "5000"
runs-on: "ubuntu-latest"
steps:
- name: "Check out the repo"
uses: "actions/checkout@v3"
- name: "Install Foundry"
uses: "foundry-rs/foundry-toolchain@v1"
- name: "Restore the cached build and the node modules"
uses: "actions/cache/restore@v3"
with:
fail-on-cache-miss: true
key: "build-and-modules-${{ github.sha }}"
path: |
cache
node_modules
out
out-optimized
- name: "Run the integration tests against the optimized build"
run: "FOUNDRY_PROFILE=test-optimized forge test --match-path \"test/integration/**/*.sol\""
- name: "Add test summary"
run: |
echo "## Integration tests result" >> $GITHUB_STEP_SUMMARY
echo "βœ… Passed" >> $GITHUB_STEP_SUMMARY
test-utils:
needs: ["lint", "build"]
runs-on: "ubuntu-latest"
steps:
- name: "Check out the repo"
uses: "actions/checkout@v3"
- name: "Install Foundry"
uses: "foundry-rs/foundry-toolchain@v1"
- name: "Restore the cached build and the node modules"
uses: "actions/cache/restore@v3"
with:
fail-on-cache-miss: true
key: "build-and-modules-${{ github.sha }}"
path: |
cache
node_modules
out
out-optimized
- name: "Run the utils tests against the optimized build"
run: "FOUNDRY_PROFILE=test-optimized forge test --match-path \"test/utils/**/*.sol\""
- name: "Add test summary"
run: |
echo "## Utils tests result" >> $GITHUB_STEP_SUMMARY
echo "βœ… Passed" >> $GITHUB_STEP_SUMMARY
test-invariant:
needs: ["lint", "build"]
runs-on: "ubuntu-latest"
steps:
- name: "Check out the repo"
uses: "actions/checkout@v3"
- name: "Install Foundry"
uses: "foundry-rs/foundry-toolchain@v1"
- name: "Restore the cached build and the node modules"
uses: "actions/cache/restore@v3"
with:
fail-on-cache-miss: true
key: "build-and-modules-${{ github.sha }}"
path: |
cache
node_modules
out
out-optimized
- name: "Run the invariant tests against the optimized build"
run: "FOUNDRY_PROFILE=test-optimized forge test --match-path \"test/invariant/**/*.sol\""
- name: "Add test summary"
run: |
echo "## Invariant tests result" >> $GITHUB_STEP_SUMMARY
echo "βœ… Passed" >> $GITHUB_STEP_SUMMARY
coverage:
needs: ["lint", "build"]
runs-on: "ubuntu-latest"
steps:
- name: "Check out the repo"
uses: "actions/checkout@v3"
- name: "Install Foundry"
uses: "foundry-rs/foundry-toolchain@v1"
- name: "Restore the cached build and the node modules"
uses: "actions/cache/restore@v3"
with:
fail-on-cache-miss: true
key: "build-and-modules-${{ github.sha }}"
path: |
cache
node_modules
out
out-optimized
- name: "Generate the coverage report using the unit and the integration tests"
run: "forge coverage --match-path \"test/{unit,integration}/**/*.sol\" --report lcov"
- name: "Upload coverage report to Codecov"
uses: "codecov/codecov-action@v3"
with:
files: "./lcov.info"
- name: "Add coverage summary"
run: |
echo "## Coverage result" >> $GITHUB_STEP_SUMMARY
echo "βœ… Uploaded to Codecov" >> $GITHUB_STEP_SUMMARY