Add plumemain
npm
Script
#1080
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: 🕵️♂️ Test smart contracts | |
on: [push, pull_request, workflow_dispatch] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
tests: | |
runs-on: ${{ matrix.os }} | |
permissions: | |
contents: read | |
security-events: write | |
strategy: | |
matrix: | |
os: | |
- ubuntu-latest | |
node_version: | |
- 22 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install pnpm | |
uses: pnpm/action-setup@v3 | |
with: | |
version: latest | |
run_install: false | |
- name: Get pnpm cache directory path | |
id: pnpm-cache-dir-path | |
run: echo "dir=$(pnpm store path --silent)" >> $GITHUB_OUTPUT | |
- name: Restore pnpm cache | |
uses: actions/cache@v4 | |
id: pnpm-cache | |
with: | |
path: ${{ steps.pnpm-cache-dir-path.outputs.dir }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-pnpm-store- | |
- name: Use Node.js ${{ matrix.node_version }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node_version }} | |
- name: Install pnpm project with a clean slate | |
run: pnpm install --prefer-offline --frozen-lockfile | |
- name: Install Foundry | |
uses: foundry-rs/foundry-toolchain@v1 | |
with: | |
version: nightly | |
- name: Hardhat tests | |
run: pnpm test:hh | |
- name: Show the Foundry CI config | |
run: forge config | |
env: | |
FOUNDRY_PROFILE: ci | |
- name: Foundry tests | |
run: pnpm test:forge | |
env: | |
FOUNDRY_PROFILE: ci | |
- name: Slither static analyser | |
uses: crytic/[email protected] | |
id: slither | |
with: | |
node-version: ${{ matrix.node_version }} | |
fail-on: config | |
sarif: results.sarif | |
- name: Upload SARIF file | |
uses: github/codeql-action/upload-sarif@v3 | |
with: | |
sarif_file: ${{ steps.slither.outputs.sarif }} | |
coverage: | |
runs-on: ${{ matrix.os }} | |
permissions: | |
pull-requests: write | |
strategy: | |
matrix: | |
os: | |
- ubuntu-latest | |
node_version: | |
- 22 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install pnpm | |
uses: pnpm/action-setup@v3 | |
with: | |
version: latest | |
run_install: false | |
- name: Get pnpm cache directory path | |
id: pnpm-cache-dir-path | |
run: echo "dir=$(pnpm store path --silent)" >> $GITHUB_OUTPUT | |
- name: Restore pnpm cache | |
uses: actions/cache@v4 | |
id: pnpm-cache | |
with: | |
path: ${{ steps.pnpm-cache-dir-path.outputs.dir }} | |
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-pnpm-store- | |
- name: Use Node.js ${{ matrix.node_version }} | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node_version }} | |
- name: Install pnpm project with a clean slate | |
run: pnpm install --prefer-offline --frozen-lockfile | |
- name: Install Foundry | |
uses: foundry-rs/foundry-toolchain@v1 | |
with: | |
version: nightly | |
- name: Set up LCOV | |
uses: hrishikesh-kadam/setup-lcov@v1 | |
with: | |
ref: v2.2 | |
- name: Run coverage | |
run: NO_COLOR=1 forge coverage --report summary --report lcov --lcov-version 2.2 >> $GITHUB_STEP_SUMMARY | |
env: | |
FOUNDRY_PROFILE: default | |
# See https://github.com/ScopeLift/foundry-template/blob/fd3875d2e99a65dec19431723d6516b4ed76746e/.github/workflows/ci.yml#L49-L78. | |
- name: Remove unnecessary directories | |
run: lcov --branch-coverage --remove lcov.info 'test/*' 'script/*' 'node_modules/*' --output-file lcov.info --ignore-errors unused,unused | |
- name: Post coverage report | |
if: ${{ (github.event.pull_request.head.repo.full_name == github.repository && github.event_name == 'pull_request') }} | |
uses: romeovs/[email protected] | |
with: | |
title: "Test Coverage Report" | |
delete-old-comments: true | |
lcov-file: ./lcov.info | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
# The following steps act as a temporary workaround, as LCOV `2.2` is not yet supported | |
# in `zgosalvez/github-actions-report-lcov@v4`: https://github.com/zgosalvez/github-actions-report-lcov/issues/168. | |
- name: Set up LCOV `1.16` | |
run: | | |
wget https://github.com/linux-test-project/lcov/releases/download/v1.16/lcov-1.16.tar.gz | |
tar -xzf lcov-1.16.tar.gz | |
cd lcov-1.16 | |
sudo make install | |
lcov --version | |
sudo rm -rf lcov-1.16.tar.gz lcov-1.16 | |
- name: Run coverage using LCOV `1.16` | |
run: forge coverage --report lcov --lcov-version 1.16 | |
env: | |
FOUNDRY_PROFILE: default | |
# See https://github.com/ScopeLift/foundry-template/blob/fd3875d2e99a65dec19431723d6516b4ed76746e/.github/workflows/ci.yml#L49-L78. | |
- name: Remove unnecessary `test` directory | |
run: lcov --remove lcov.info 'test/*' 'script/*' 'node_modules/*' --output-file lcov.info --rc lcov_branch_coverage=1 | |
- name: Verify minimum coverage | |
uses: zgosalvez/github-actions-report-lcov@v4 | |
with: | |
coverage-files: ./lcov.info | |
# Please specify here the minimum coverage threshold below which any PR will fail. | |
minimum-coverage: 100 |