name: node on: # Triggers the workflow on push or pull request against main push: branches: [main] pull_request: branches: [main] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: jobs: yarn-install: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: recursive - name: remove submodule locks run: git submodule foreach rm yarn.lock - name: yarn-cache uses: actions/cache@v3 with: path: | **/node_modules .yarn/cache key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: yarn-install run: | yarn install CHANGES=$(git status -s --ignore-submodules) if [[ ! -z $CHANGES ]]; then echo "Changes found: $CHANGES" git diff exit 1 fi yarn-build: runs-on: ubuntu-latest needs: [yarn-install] steps: - uses: actions/checkout@v3 with: submodules: recursive - name: remove submodule locks run: git submodule foreach rm yarn.lock - name: yarn-cache uses: actions/cache@v3 with: path: | **/node_modules .yarn/cache key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: build-cache uses: actions/cache@v3 with: path: ./* key: ${{ github.sha }} - name: build run: yarn build lint-prettier: runs-on: ubuntu-latest needs: [yarn-install] steps: - uses: actions/checkout@v3 - uses: actions/cache@v3 with: path: | **/node_modules .yarn/cache key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: lint-ts run: yarn lint-ts - name: prettier run: | yarn prettier CHANGES=$(git status -s) if [[ ! -z $CHANGES ]]; then echo "Changes found: $CHANGES" exit 1 fi test-ts: runs-on: ubuntu-latest needs: [yarn-build] steps: - uses: actions/checkout@v3 with: submodules: recursive - uses: actions/cache@v3 with: path: ./* key: ${{ github.sha }} - name: sdk run: yarn workspace @hyperlane-xyz/sdk run test - name: infra run: yarn workspace @hyperlane-xyz/infra run test test-sol: env: ETHERSCAN_API_KEY: '' runs-on: ubuntu-latest needs: [yarn-build] steps: - uses: actions/checkout@v3 - uses: actions/cache@v3 with: path: ./* key: ${{ github.sha }} - name: yarn-cache uses: actions/cache@v3 with: path: | **/node_modules .yarn/cache key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: Install Foundry uses: onbjerg/foundry-toolchain@v1 - name: Install dependencies run: cd solidity && forge install - name: Forge build run: cd solidity && forge build --build-info - name: Run Slither uses: crytic/slither-action@main id: slither with: target: 'solidity/' slither-config: 'solidity/slither.config.json' sarif: results.sarif fail-on: none ignore-compile: true - name: Upload SARIF file uses: github/codeql-action/upload-sarif@v2 with: sarif_file: ${{ steps.slither.outputs.sarif }} - name: gas run: yarn workspace @hyperlane-xyz/core run gas-ci - name: forge-test run: yarn workspace @hyperlane-xyz/core run test:forge # Will fail if hardhat tests fail but not if forge tests fail - name: coverage run: | sudo apt-get install lcov yarn workspace @hyperlane-xyz/core run coverage - name: coverage-cache uses: actions/cache@v3 with: path: './solidity/lcov.info' key: ${{ github.sha }} coverage-sol: if: github.event_name == 'pull_request' runs-on: ubuntu-latest needs: [test-sol] steps: - uses: actions/checkout@v3 - uses: actions/cache@v3 with: path: ./* key: ${{ github.sha }} - name: base-coverage-cache uses: actions/cache@v3 with: path: './solidity/lcov.info' key: ${{ github.event.pull_request.base.sha }} - name: persist-base-coverage run: mv ./solidity/lcov.info ./solidity/lcov.base.info - name: ref-coverage-cache uses: actions/cache@v3 with: path: './solidity/lcov.info' key: ${{ github.sha }} - name: check-coverage run: | sudo apt-get install lcov cd ./solidity export BASE=$(lcov --summary ./lcov.base.info | grep "lines" | sed 's/.*lines......:\ //' | sed 's/% (.*//') export REF=$(lcov --summary ./lcov.info | grep "lines" | sed 's/.*lines......:\ //' | sed 's/% (.*//') if [[ $REF < $BASE ]]; then exit 1; fi