Skip to content

Rename fuzz to convention #174

Rename fuzz to convention

Rename fuzz to convention #174

name: Solidity Foundry
on: [pull_request]
env:
FOUNDRY_PROFILE: ci
jobs:
changes:
name: Detect changes
runs-on: ubuntu-latest
outputs:
changes: ${{ steps.changes.outputs.src }}
steps:
- name: Checkout the repo
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
id: changes
with:
# Foundry is only used for Solidity v0.8 contracts, therefore we can ignore
# changes to older contracts.
filters: |
src:
- 'contracts/src/v0.8/**/*'
- '.github/workflows/solidity-foundry.yml'
- 'contacts/foundry.toml'
solhint:
needs: [changes]
name: Solhint
runs-on: ubuntu-latest
steps:
- name: Collect Metrics
if: ${{ needs.changes.outputs.changes == 'true' }}
id: collect-gha-metrics
uses: smartcontractkit/push-gha-metrics-action@8163dcea2f01a0a8fec84b284406ff7af1d2e1c0
with:
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }}
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }}
this-job-name: Solhint
continue-on-error: true
- name: Checkout the repo
uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0
- name: Setup NodeJS
if: ${{ needs.changes.outputs.changes == 'true' }}
uses: ./.github/actions/setup-nodejs
- name: Run Solhint
if: ${{ needs.changes.outputs.changes == 'true' }}
working-directory: contracts
run: pnpm lint:ccip
coverage:
needs: [changes]
name: Coverage
runs-on: ubuntu-latest
env:
FOUNDRY_PROFILE: ccip
steps:
- name: Collect Metrics
if: ${{ needs.changes.outputs.changes == 'true' }}
id: collect-gha-metrics
uses: smartcontractkit/push-gha-metrics-action@8163dcea2f01a0a8fec84b284406ff7af1d2e1c0
with:
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }}
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }}
this-job-name: Coverage
continue-on-error: true
- uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3.4.0
with:
submodules: recursive
# Only needed because we use the NPM versions of packages
# and not native Foundry. This is to make sure the dependencies
# stay in sync.
- name: Setup NodeJS
if: ${{ needs.changes.outputs.changes == 'true' }}
uses: ./.github/actions/setup-nodejs
- name: Install Foundry
if: ${{ needs.changes.outputs.changes == 'true' }}
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly
- name: Run Forge build
if: ${{ needs.changes.outputs.changes == 'true' }}
working-directory: contracts
run: |
forge --version
forge build
id: build
- name: Run coverage
if: ${{ needs.changes.outputs.changes == 'true' }}
working-directory: contracts
run: forge coverage --report lcov
- name: Prune report
if: ${{ needs.changes.outputs.changes == 'true' }}
run: |
sudo apt-get install lcov
./tools/ci/ccip_lcov_prune ./contracts/lcov.info ./lcov.info.pruned
- name: Report code coverage
if: ${{ needs.changes.outputs.changes == 'true' }}
uses: zgosalvez/github-actions-report-lcov@v1
with:
update-comment: true
coverage-files: lcov.info.pruned
minimum-coverage: 98
artifact-name: code-coverage-report
working-directory: ./contracts
github-token: ${{ secrets.GITHUB_TOKEN }}
tests:
strategy:
matrix:
product: [ vrf, automation, llo-feeds, functions, automation-dev, shared, ccip ]
needs: [changes]
if: needs.changes.outputs.changes == 'true'
name: Tests
# See https://github.com/foundry-rs/foundry/issues/3827
runs-on: ubuntu-22.04
steps:
- name: Checkout the repo
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
with:
submodules: recursive
# Only needed because we use the NPM versions of packages
# and not native Foundry. This is to make sure the dependencies
# stay in sync.
- name: Setup NodeJS
uses: ./.github/actions/setup-nodejs
- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly
- name: Run Forge build
run: |
forge --version
forge build
id: build
working-directory: contracts
env:
FOUNDRY_PROFILE: ${{ matrix.product }}
- name: Run Forge tests
run: |
forge test -vvv
id: test
working-directory: contracts
env:
FOUNDRY_PROFILE: ${{ matrix.product }}
- name: Run Forge snapshot
run: |
forge snapshot --check gas-snapshots/${{ matrix.product }}.gas-snapshot
id: snapshot
working-directory: contracts
env:
FOUNDRY_PROFILE: ${{ matrix.product }}
- name: Collect Metrics
if: always()
id: collect-gha-metrics
uses: smartcontractkit/push-gha-metrics-action@2dcc6578752a8949bdabf8d7fb4f0c70b83703cd
with:
basic-auth: ${{ secrets.GRAFANA_CLOUD_BASIC_AUTH }}
hostname: ${{ secrets.GRAFANA_CLOUD_HOST }}
this-job-name: Foundry Tests ${{ matrix.product }}
continue-on-error: true