Update CI workflow to install Foundry and generate coverage report #98
Workflow file for this run
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: Unified CI Workflow | |
on: | |
push: | |
pull_request: | |
permissions: | |
contents: read | |
pull-requests: write | |
jobs: | |
setup: | |
runs-on: ubuntu-latest | |
outputs: | |
cache-key: ${{ steps.cache-keys.outputs.cache-key }} | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
- name: Get cache key | |
id: cache-keys | |
run: echo "::set-output name=cache-key::$(echo ${{ runner.os }}-node-$(cat yarn.lock | sha256sum | cut -d' ' -f1))" | |
- name: Cache node modules | |
uses: actions/cache@v3 | |
with: | |
path: | | |
**/node_modules | |
key: ${{ steps.cache-keys.outputs.cache-key }} | |
- name: Install dependencies | |
run: yarn install --frozen-lockfile | |
lint: | |
name: Lint sources | |
runs-on: ubuntu-latest | |
needs: setup | |
strategy: | |
matrix: | |
node-version: [18.x] | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
- name: Install Foundry | |
uses: foundry-rs/[email protected] | |
with: | |
version: nightly | |
cache: true | |
- name: Cache node modules | |
uses: actions/cache@v3 | |
with: | |
path: | | |
**/node_modules | |
key: ${{ needs.setup.outputs.cache-key }} | |
- name: Lint sources | |
run: yarn lint:sol | |
unit_test: | |
name: Unit tests | |
runs-on: ubuntu-latest | |
needs: setup | |
strategy: | |
matrix: | |
node-version: [18.x] | |
steps: | |
- name: Checkout | |
uses: actions/[email protected] | |
- name: Cache node modules | |
uses: actions/cache@v3 | |
with: | |
path: | | |
**/node_modules | |
key: ${{ needs.setup.outputs.cache-key }} | |
- name: Create a fake .secret file | |
run: echo "primary twist rack vendor diagram image used route theme frown either will" > .secret | |
- name: Install Foundry | |
uses: foundry-rs/foundry-toolchain@v1 | |
with: | |
version: nightly | |
cache: true | |
- name: Install foundry dependencies | |
run: forge install | |
- name: Build Typechain and Foundry | |
run: yarn build | |
- name: Run Forge and Hardhat Tests | |
run: yarn test | |
coverage: | |
needs: setup | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/[email protected] | |
- name: Cache node modules | |
uses: actions/cache@v3 | |
with: | |
path: | | |
**/node_modules | |
key: ${{ needs.setup.outputs.cache-key }} | |
- name: Install Foundry | |
uses: foundry-rs/[email protected] | |
with: | |
version: nightly | |
cache: true | |
- name: Generate Hardhat & Foundry Coverage Report | |
run: yarn coverage:report | |
- name: Upload Coverage Report to Codecov | |
uses: codecov/[email protected] | |
with: | |
files: ./coverage/foundry/lcov.info,./coverage/lcov.info | |
flags: foundry,hardhat | |
env: | |
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
slither_analysis: | |
needs: setup | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/[email protected] | |
- name: Cache node modules | |
uses: actions/cache@v3 | |
with: | |
path: | | |
**/node_modules | |
key: ${{ needs.setup.outputs.cache-key }} | |
- name: Run Slither | |
uses: crytic/[email protected] | |
with: | |
slither-version: "0.10.0" | |
fail-on: "none" | |
slither-args: '--filter-paths "contracts/mock|node_modules" --checklist --markdown-root ${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/contracts/' | |
- name: Create/update checklist as PR comment | |
uses: actions/[email protected] | |
env: | |
REPORT: ${{ steps.slither_analysis.outputs.stdout }} | |
with: | |
script: | | |
const script = require('.github/scripts/comment') | |
const header = '# Slither report' | |
const body: ${{ steps.slither_analysis.outputs.stdout }} | |
await script({ github, context, header, body }) |