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: env: DEBUG: 'hyperlane:*' jobs: yarn-install: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: recursive - 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 - uses: actions/setup-node@v3 with: node-version: 18 - 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 run: yarn lint - 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: helloworld run: yarn workspace @hyperlane-xyz/helloworld run test - name: token run: yarn workspace @hyperlane-xyz/hyperlane-token run test - name: infra run: yarn workspace @hyperlane-xyz/infra run test test-env: runs-on: ubuntu-latest needs: [yarn-build] strategy: matrix: environment: [testnet3, mainnet2] module: [ism, core, igp, ica, helloworld] steps: - uses: actions/checkout@v3 - uses: actions/cache@v3 with: path: ./* key: ${{ github.sha }} - name: Install Foundry uses: onbjerg/foundry-toolchain@v1 - name: Test ${{ matrix.environment }} ${{ matrix.module }} deployment (check, deploy, govern, check again) run: cd typescript/infra && ./fork.sh ${{ matrix.environment }} ${{ matrix.module }} 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: gas # run: yarn workspace @hyperlane-xyz/core run gas-ci - name: Unit tests run: yarn workspace @hyperlane-xyz/core run test - 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 }} coverage-sol: 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: Run tests with coverage run: yarn coverage env: NODE_OPTIONS: --max_old_space_size=4096 - name: Upload coverage reports to Codecov with GitHub Action uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }}