➕ Add Sonic Test and Main Network Deployments (#159) #925
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 CreateX | |
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 | |
go_version: | |
- 1.23 | |
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: Show the Foundry CI config | |
run: forge config | |
env: | |
FOUNDRY_PROFILE: ci | |
- name: Ensure Solidity version consistency | |
run: | | |
version_foundry=$(forge config --json | jq -r ".solc") | |
version_hh=$(npx hardhat solc) | |
if [[ $version_foundry != "0.8.23" ]] || [[ $version_foundry != $version_hh ]]; then exit 1; fi | |
- name: Ensure `paris` as EVM version | |
run: | | |
version_foundry=$(forge config --json | jq -r ".evm_version") | |
version_hh=$(npx hardhat evm) | |
if [[ $version_foundry != "paris" ]] || [[ $version_foundry != $version_hh ]]; then exit 1; fi | |
- name: Set up Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: ${{ matrix.go_version }} | |
cache: False | |
- name: Install `jd` CLI | |
run: go install github.com/josephburnett/jd@latest | |
- name: Ensure correctness of the `ICreateX` interface | |
run: | | |
pnpm abi | |
diff=$(jd -set abis/src/CreateX.sol/CreateX.json abis/src/ICreateX.sol/ICreateX.json) | |
if [[ -n $diff ]]; then exit 1; fi | |
- name: Foundry tests | |
run: pnpm test | |
env: | |
FOUNDRY_PROFILE: ci | |
- name: Show the Foundry default config | |
run: forge config | |
env: | |
FOUNDRY_PROFILE: default | |
- name: Run snapshot | |
run: NO_COLOR=1 forge snapshot >> $GITHUB_STEP_SUMMARY | |
env: | |
FOUNDRY_PROFILE: default | |
- name: Slither static analyser | |
uses: crytic/slither-action@v0.4.0 | |
id: slither | |
with: | |
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 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install Foundry | |
uses: foundry-rs/foundry-toolchain@v1 | |
with: | |
version: nightly | |
- name: Show the Foundry default config | |
run: forge config | |
env: | |
FOUNDRY_PROFILE: default | |
- name: Run coverage | |
run: NO_COLOR=1 forge coverage --report summary --report lcov >> $GITHUB_STEP_SUMMARY | |
env: | |
FOUNDRY_PROFILE: default | |
- name: Setup LCOV | |
uses: hrishikesh-kadam/setup-lcov@v1 | |
# 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/*' --output-file lcov.info --rc lcov_branch_coverage=1 | |
- name: Post coverage report | |
# See https://github.com/orgs/community/discussions/26829#discussioncomment-3253575. | |
if: ${{ (github.event.pull_request.head.repo.full_name == github.repository && github.event_name == 'pull_request') }} | |
uses: sunsergdev/lcov-reporter-action@v0.3.1-fork | |
with: | |
title: "`CreateX` Test Coverage Report" | |
delete-old-comments: true | |
lcov-file: ./lcov.info | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Verify minimum coverage | |
uses: zgosalvez/github-actions-report-lcov@v4 | |
with: | |
coverage-files: ./lcov.info | |
minimum-coverage: 100 |