name: test 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: concurrency: group: e2e-${{ github.ref }} cancel-in-progress: ${{ github.ref_name != 'main' }} env: DEBUG: 'hyperlane:*' CARGO_TERM_COLOR: always RUST_BACKTRACE: full jobs: yarn-install: runs-on: ubuntu-latest steps: - uses: actions/setup-node@v3 with: node-version: 18 - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive - name: yarn-cache uses: actions/cache@v3 with: path: | **/node_modules .yarn 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: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive fetch-depth: 0 - name: yarn-cache uses: actions/cache@v3 with: path: | **/node_modules .yarn key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: build-cache uses: actions/cache@v3 with: path: | ./* !./rust key: ${{ github.event.pull_request.head.sha || github.sha }} - name: build run: yarn build lint-prettier: runs-on: ubuntu-latest needs: [yarn-install] steps: - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} # check out full history fetch-depth: 0 - name: yarn-cache uses: actions/cache@v3 with: path: | **/node_modules .yarn 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 yarn-test: runs-on: ubuntu-latest needs: [yarn-build] steps: - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive fetch-depth: 0 - name: foundry-install uses: onbjerg/foundry-toolchain@v1 - name: build-cache uses: actions/cache@v3 with: path: | ./* !./rust key: ${{ github.event.pull_request.head.sha || github.sha }} - name: Unit Tests run: yarn test:ci metadata-check: runs-on: ubuntu-latest needs: [yarn-build] steps: - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive fetch-depth: 0 - name: yarn-cache uses: actions/cache@v3 with: path: | **/node_modules .yarn key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: build-cache uses: actions/cache@v3 with: path: | ./* !./rust key: ${{ github.event.pull_request.head.sha || github.sha }} - name: Metadata Health Check run: DEBUG=hyperlane yarn workspace @hyperlane-xyz/sdk run test:metadata e2e: runs-on: larger-runner needs: [yarn-build] steps: - uses: actions/setup-node@v3 with: node-version: 18 - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive - name: foundry-install uses: onbjerg/foundry-toolchain@v1 - name: setup rust uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal - name: Free disk space run: | # Based on https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 sudo rm -rf /usr/share/dotnet sudo rm -rf /opt/ghc sudo rm -rf "/usr/local/share/boost" sudo rm -rf "$AGENT_TOOLSDIRECTORY" - name: Install mold linker uses: rui314/setup-mold@v1 with: mold-version: 2.0.0 make-default: true - name: yarn-cache uses: actions/cache@v3 with: path: | **/node_modules .yarn key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: build-cache uses: actions/cache@v3 with: path: | ./* !./rust key: ${{ github.event.pull_request.head.sha || github.sha }} - name: cargo-cache uses: actions/cache@v3 with: path: | ~/.cargo key: ${{ runner.os }}-cargo-cache-${{ hashFiles('./rust/Cargo.lock') }} - name: agent build run: cargo build --release --bin run-locally working-directory: ./rust - name: agent tests with CosmWasm run: RUST_BACKTRACE=1 cargo test --release --package run-locally --bin run-locally --features cosmos -- cosmos::test --nocapture working-directory: ./rust - name: agent tests excluding CosmWasm run: ./target/release/run-locally working-directory: ./rust env: E2E_CI_MODE: 'true' E2E_CI_TIMEOUT_SEC: '600' E2E_KATHY_MESSAGES: '20' cli-e2e: runs-on: larger-runner needs: [yarn-build] strategy: matrix: include: - hook: preset_hook_enabled - hook: configure_hook_enabled steps: - uses: actions/setup-node@v3 with: node-version: 18 - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive - name: foundry-install uses: onbjerg/foundry-toolchain@v1 - name: setup rust uses: actions-rs/toolchain@v1 with: toolchain: stable profile: minimal - name: Free disk space run: | # Based on https://github.com/actions/runner-images/issues/2840#issuecomment-790492173 sudo rm -rf /usr/share/dotnet sudo rm -rf /opt/ghc sudo rm -rf "/usr/local/share/boost" sudo rm -rf "$AGENT_TOOLSDIRECTORY" - name: Install mold linker uses: rui314/setup-mold@v1 with: mold-version: 2.0.0 make-default: true - name: yarn-cache uses: actions/cache@v3 with: path: | **/node_modules .yarn key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: build-cache uses: actions/cache@v3 with: path: | ./* !./rust key: ${{ github.event.pull_request.head.sha || github.sha }} - name: cargo-cache uses: actions/cache@v3 with: path: | ~/.cargo key: ${{ runner.os }}-cargo-cache-${{ hashFiles('./rust/Cargo.lock') }} - name: cli e2e tests with preset hook config run: ./typescript/cli/ci-test.sh false if: matrix.hook == 'preset_hook_enabled' - name: cli e2e tests with configured hook config run: ./typescript/cli/ci-test.sh true if: matrix.hook == 'configure_hook_enabled' env-test: runs-on: ubuntu-latest needs: [yarn-build] strategy: matrix: include: - environment: testnet4 chain: sepolia module: core - environment: mainnet3 chain: arbitrum module: core - environment: mainnet3 chain: inevm module: core - environment: mainnet3 chain: viction module: core - environment: mainnet3 chain: ethereum module: core steps: - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: foundry-install uses: onbjerg/foundry-toolchain@v1 - name: build-cache uses: actions/cache@v3 with: path: | ./* !./rust key: ${{ github.event.pull_request.head.sha || github.sha }} - name: Fork test ${{ matrix.environment }} ${{ matrix.module }} ${{ matrix.chain }} deployment run: cd typescript/infra && ./fork.sh ${{ matrix.environment }} ${{ matrix.module }} ${{ matrix.chain }} coverage: runs-on: ubuntu-latest needs: [yarn-test] steps: - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 - name: yarn-cache uses: actions/cache@v3 with: path: | **/node_modules .yarn key: ${{ runner.os }}-yarn-cache-${{ hashFiles('./yarn.lock') }} - name: build-cache uses: actions/cache@v3 with: path: | ./* !./rust key: ${{ github.event.pull_request.head.sha || github.sha }} - name: foundry-install 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 }}