name: test on: # Triggers the workflow on pushes to main branch, ignoring md files push: branches: [main] # Triggers on pull requests, ignoring md files pull_request: branches: - '*' merge_group: workflow_dispatch: concurrency: group: e2e-${{ github.ref }} cancel-in-progress: ${{ github.ref_name != 'main' }} env: LOG_LEVEL: DEBUG LOG_FORMAT: PRETTY CARGO_TERM_COLOR: always RUST_BACKTRACE: full jobs: yarn-install: runs-on: ubuntu-latest steps: - uses: actions/setup-node@v4 with: node-version: 18 - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive - name: yarn-cache uses: buildjet/cache@v4 with: path: | **/node_modules .yarn key: ${{ runner.os }}-yarn-4.5.1-cache-${{ hashFiles('./yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn-4.5.1-cache- - 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 # Check for mismatched dep versions across the monorepo - name: syncpack run: yarn syncpack list-mismatches lint-prettier: runs-on: ubuntu-latest needs: [yarn-install] steps: - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} # check out full history fetch-depth: 0 - name: yarn-cache uses: buildjet/cache@v4 with: path: | **/node_modules .yarn key: ${{ runner.os }}-yarn-4.5.1-cache-${{ hashFiles('./yarn.lock') }} fail-on-cache-miss: true # Build required before linting or the intra-monorepo package cycle checking won't work - name: yarn-build uses: ./.github/actions/yarn-build-with-cache with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - 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-install] steps: - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive fetch-depth: 0 - name: foundry-install uses: foundry-rs/foundry-toolchain@v1 - name: yarn-build uses: ./.github/actions/yarn-build-with-cache with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Checkout registry uses: ./.github/actions/checkout-registry - name: Unit Tests run: yarn test:ci cli-e2e-matrix: runs-on: ubuntu-latest needs: [yarn-install] strategy: fail-fast: false matrix: test: - core - relay - warp-read - warp-apply - warp-deploy steps: - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive fetch-depth: 0 - name: foundry-install uses: foundry-rs/foundry-toolchain@v1 - name: yarn-build uses: ./.github/actions/yarn-build-with-cache with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Checkout registry uses: ./.github/actions/checkout-registry - name: CLI e2e tests (${{ matrix.test }}) run: yarn --cwd typescript/cli test:e2e env: CLI_E2E_TEST: ${{ matrix.test }} cli-e2e: runs-on: ubuntu-latest needs: cli-e2e-matrix if: always() steps: - name: Check cli-e2e matrix status if: ${{ needs.cli-e2e-matrix.result != 'success' }} run: | echo "CLI E2E tests failed" exit 1 agent-configs: runs-on: ubuntu-latest needs: [yarn-install] strategy: fail-fast: false matrix: environment: [mainnet3, testnet4] steps: - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 - name: yarn-build uses: ./.github/actions/yarn-build-with-cache with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Checkout registry uses: ./.github/actions/checkout-registry - name: Generate ${{ matrix.environment }} agent config run: | cd typescript/infra yarn tsx ./scripts/agents/update-agent-config.ts -e ${{ matrix.environment }} CHANGES=$(git status -s) if [[ ! -z $CHANGES ]]; then echo "Changes found in agent config: $CHANGES" exit 1 fi e2e-matrix: runs-on: buildjet-8vcpu-ubuntu-2204 if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.base_ref == 'main' || github.base_ref == 'cli-2.0') || github.event_name == 'merge_group' needs: [yarn-install] strategy: fail-fast: false matrix: e2e-type: [cosmwasm, non-cosmwasm] steps: - uses: actions/setup-node@v4 with: node-version: 18 - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} submodules: recursive fetch-depth: 0 - name: foundry-install uses: foundry-rs/foundry-toolchain@v1 - name: setup rust uses: dtolnay/rust-toolchain@stable - name: rust cache uses: Swatinem/rust-cache@v2 with: prefix-key: 'v2-rust-e2e' shared-key: ${{ matrix.e2e-type }} cache-provider: 'buildjet' save-if: ${{ !startsWith(github.ref, 'refs/heads/gh-readonly-queue') }} workspaces: | ./rust/main ${{ matrix.e2e-type == 'non-cosmwasm' && './rust/sealevel' || '' }} - 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-build uses: ./.github/actions/yarn-build-with-cache with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Install system dependencies run: | sudo apt-get update -qq sudo apt-get install -qq -y libudev-dev pkg-config protobuf-compiler - name: Checkout registry uses: ./.github/actions/checkout-registry - name: agent tests (CosmWasm) run: cargo test --release --package run-locally --bin run-locally --features cosmos test-utils -- cosmos::test --nocapture if: matrix.e2e-type == 'cosmwasm' working-directory: ./rust/main env: RUST_BACKTRACE: 'full' - name: Check for Rust file changes id: check-rust-changes run: | if [[ -n "$(git diff ${{ github.event.pull_request.head.sha || github.sha }} ${{ github.event.pull_request.base.sha }} -- ./rust)" ]]; then echo "rust_changes=true" >> $GITHUB_OUTPUT echo "$(git diff ${{ github.event.pull_request.head.sha || github.sha }} ${{ github.event.pull_request.base.sha }} -- ./rust)" else echo "rust_changes=false" >> $GITHUB_OUTPUT fi - name: agent tests (EVM and Sealevel) run: cargo run --release --bin run-locally --features test-utils if: matrix.e2e-type == 'non-cosmwasm' working-directory: ./rust/main env: E2E_CI_MODE: 'true' E2E_CI_TIMEOUT_SEC: '600' E2E_KATHY_MESSAGES: '20' RUST_BACKTRACE: 'full' SEALEVEL_ENABLED: ${{ steps.check-rust-changes.outputs.rust_changes }} env-test: runs-on: ubuntu-latest env: MAINNET3_ARBITRUM_RPC_URLS: ${{ secrets.MAINNET3_ARBITRUM_RPC_URLS }} MAINNET3_OPTIMISM_RPC_URLS: ${{ secrets.MAINNET3_OPTIMISM_RPC_URLS }} timeout-minutes: 10 needs: [yarn-install] strategy: fail-fast: false matrix: environment: [mainnet3] chain: [ethereum, arbitrum, optimism, inevm, viction] module: [core, igp] include: - environment: testnet4 chain: sepolia module: core steps: - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: foundry-install uses: foundry-rs/foundry-toolchain@v1 - name: yarn-build uses: ./.github/actions/yarn-build-with-cache with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Checkout registry uses: ./.github/actions/checkout-registry - 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-install] steps: - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 - name: yarn-build uses: ./.github/actions/yarn-build-with-cache with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: foundry-install uses: foundry-rs/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@v4 with: token: ${{ secrets.CODECOV_TOKEN }}