🗑️ deprecated notice #222
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Tests | |
# Use Foundry's CI profile | |
env: | |
FOUNDRY_PROFILE: "ci" | |
# This CI workflow is responsible of running the tests. | |
on: | |
workflow_dispatch: | |
pull_request: | |
push: | |
branches: | |
- main | |
jobs: | |
build: | |
runs-on: "ubuntu-latest" | |
steps: | |
- name: "Check out the repo" | |
uses: "actions/checkout@v3" | |
with: | |
submodules: "recursive" | |
- name: "Install Foundry" | |
uses: "foundry-rs/foundry-toolchain@v1" | |
- name: "Show the Foundry config" | |
run: "forge config" | |
- name: "Build the contracts" | |
run: "forge build" | |
- name: "Cache the build so that it can be re-used by the other jobs" | |
uses: "actions/cache/save@v3" | |
with: | |
key: "foundry-build-${{ github.sha }}" | |
path: | | |
cache | |
out | |
out-optimized | |
- name: "Add build summary" | |
run: | | |
echo "## Build result" >> $GITHUB_STEP_SUMMARY | |
echo "✅ Passed" >> $GITHUB_STEP_SUMMARY | |
test: | |
needs: ["build"] | |
runs-on: ubuntu-latest | |
permissions: write-all | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Install Foundry | |
uses: foundry-rs/foundry-toolchain@v1 | |
- name: "Restore the cached build" | |
uses: "actions/cache/restore@v3" | |
with: | |
fail-on-cache-miss: true | |
key: "foundry-build-${{ github.sha }}" | |
path: | | |
cache | |
out | |
out-optimized | |
- name: Generate a fuzz seed that changes weekly to avoid burning through RPC allowance | |
run: > | |
echo "FOUNDRY_FUZZ_SEED=$( | |
echo $(($EPOCHSECONDS - $EPOCHSECONDS % 604800)) | |
)" >> $GITHUB_ENV | |
# required to install our private package from Github Packages | |
- name: Authenticate with GitHub Packages | |
run: echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" > ~/.npmrc | |
# needed because the precomputation scripts used by the ffi tests is a JS dependency | |
- name: Install the Node.js dependencies | |
run: npm ci | |
- name: Run tests | |
run: forge test | |
gas-report: | |
needs: ["test"] | |
runs-on: ubuntu-latest | |
permissions: write-all | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Install Foundry | |
uses: foundry-rs/foundry-toolchain@v1 | |
- name: "Restore the cached build" | |
uses: "actions/cache/restore@v3" | |
with: | |
fail-on-cache-miss: true | |
key: "foundry-build-${{ github.sha }}" | |
path: | | |
cache | |
out | |
out-optimized | |
- name: Generate a fuzz seed that changes weekly to avoid burning through RPC allowance | |
run: > | |
echo "FOUNDRY_FUZZ_SEED=$( | |
echo $(($EPOCHSECONDS - $EPOCHSECONDS % 604800)) | |
)" >> $GITHUB_ENV | |
# required to install our private package from Github Packages | |
- name: Authenticate with GitHub Packages | |
run: echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" > ~/.npmrc | |
# needed because the precomputation scripts used by the ffi tests is a JS dependency | |
- name: Install the Node.js dependencies | |
run: npm ci | |
- name: Run tests with gas reporting | |
run: | |
forge test --gas-report --no-match-test "test.*_ReportSkip|test_RevertWhen|testFuzz_RevertWhen" > | |
gasreport.ansi | |
env: | |
# make fuzzing semi-deterministic to avoid noisy gas cost estimation | |
# due to non-deterministic fuzzing (but still use pseudo-random fuzzing seeds) | |
FOUNDRY_FUZZ_SEED: 0x${{ github.event.pull_request.base.sha || github.sha }} | |
- name: Compare gas reports | |
uses: Rubilmax/foundry-gas-diff@v3.14 | |
with: | |
summaryQuantile: 0.8 # only display the 20% most significant gas diffs in the summary | |
sortCriteria: avg,max # sort diff rows by criteria | |
sortOrders: desc,asc # and directions | |
id: gas_diff | |
- name: Add gas diff to sticky comment | |
if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target' | |
uses: marocchino/sticky-pull-request-comment@v2 | |
with: | |
# delete the comment in case changes no longer impact gas costs | |
delete: ${{ !steps.gas_diff.outputs.markdown }} | |
message: ${{ steps.gas_diff.outputs.markdown }} | |
coverage: | |
needs: ["test"] | |
permissions: write-all | |
runs-on: "ubuntu-latest" | |
steps: | |
- name: "Check out the repo" | |
uses: "actions/checkout@v3" | |
with: | |
submodules: "recursive" | |
- name: "Install Foundry" | |
uses: "foundry-rs/foundry-toolchain@v1" | |
- name: "Restore the cached build" | |
uses: "actions/cache/restore@v3" | |
with: | |
fail-on-cache-miss: true | |
key: "foundry-build-${{ github.sha }}" | |
path: | | |
cache | |
out | |
out-optimized | |
# required to install our private package from Github Packages | |
- name: Authenticate with GitHub Packages | |
run: echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" > ~/.npmrc | |
# needed because the precomputation scripts used by the ffi tests is a JS dependency | |
- name: Install the Node.js dependencies | |
run: npm ci | |
- name: Setup lcov | |
uses: hrishikesh-kadam/setup-lcov@v1 | |
- name: "Generate the coverage report" | |
# contracts in the test/ and script/ directory are excluded fron the report | |
# the flag `--ir-minimum` is required as the coverage report is generated without the optimization steps | |
# please remove it as soon as it is no longer needed | |
run: "forge coverage --ir-minimum --report lcov && lcov --remove lcov.info \ | |
-o lcov.info 'test/*' 'script/*'" | |
- name: "Add coverage summary" | |
run: | | |
echo "## Coverage result" >> $GITHUB_STEP_SUMMARY | |
echo "✅ Passed" >> $GITHUB_STEP_SUMMARY | |
- name: Report code coverage | |
uses: zgosalvez/github-actions-report-lcov@v3 | |
with: | |
coverage-files: lcov.info | |
# minimum-coverage: 80 | |
artifact-name: code-coverage-report | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
update-comment: true |