diff --git a/.github/workflows/e2e-test-coverage.yml b/.github/workflows/e2e-test-coverage.yml new file mode 100644 index 0000000000..117024313e --- /dev/null +++ b/.github/workflows/e2e-test-coverage.yml @@ -0,0 +1,108 @@ +name: e2e test Build, Test & Coverage +on: # yamllint disable-line rule:truthy + pull_request: + paths: + - '**' + push: + branches: + - main + - 'wl/**' # e.g. wl/test + paths: + - '**' + +# Ensure only a single instance of this workflow is running, and cancel any that are in-progress +# before this workflow instance starts +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + + +jobs: + setup: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./e2e-testing + + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + + - name: Install Node.js + uses: actions/setup-node@v3 + with: + node-version: 16 + + - name: Install pnpm + run: + npm install -g pnpm@6.34.0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Build and install Indexer + run: | + pnpm install --loglevel warn --frozen-lockfile + pnpm run build:all + working-directory: ./indexer + + - name: Build + run: make e2etest-build-image + working-directory: ./protocol + + build_and_test: + needs: setup + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./e2e-testing + + services: + postgres: + image: postgres:12-alpine + env: + POSTGRES_PASSWORD: dydxserver123 + POSTGRES_USER: dydx_dev + DATADOG_POSTGRES_PASSWORD: dydxserver123 + ports: + - 5435:5432 + redis: + image: redis:5.0.6-alpine + ports: + - 6382:6379 + kafka: + image: blacktop/kafka:2.6 + env: + KAFKA_ADVERTISED_HOST_NAME: kafka + KAFKA_CREATE_TOPICS: + "to-ender:1:1,\ + to-vulcan:1:1,\ + to-websockets-orderbooks:1:1,\ + to-websockets-subaccounts:1:1,\ + to-websockets-trades:1:1,\ + to-websockets-markets:1:1,\ + to-websockets-candles:1:1" + KAFKA_LISTENERS: INTERNAL://:9092,EXTERNAL_SAME_HOST://:29092 + KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,EXTERNAL_SAME_HOST://localhost:29092 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL_SAME_HOST:PLAINTEXT + KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL + ports: + - 9092:9092 + + steps: + - name: Setup database + id: setup-database + env: + DB_PORT: 5435 + NODE_ENV: development + run: cd packages/postgres && pnpm run migrate + working-directory: ./indexer + + - name: Docker Compose + run: docker compose -f docker-compose-e2e-test-remote.yml up -d + working-directory: ./e2e-testing + + - name: Build and Test + run: | + pnpm build + pnpm test diff --git a/e2e-testing/docker-compose-e2e-test-remote.yml b/e2e-testing/docker-compose-e2e-test-remote.yml new file mode 100644 index 0000000000..0cab13055c --- /dev/null +++ b/e2e-testing/docker-compose-e2e-test-remote.yml @@ -0,0 +1,148 @@ +version: '3' +services: + dydxprotocold0: + image: local:e2etest-dydxprotocol + platform: linux/amd64 + entrypoint: + - cosmovisor + - run + - start + - --log_level + # Note that only this validator has a log-level of `info`; other validators use `error` by default. + # Change to `debug` for more verbose log-level. + - info + - --home + - /dydxprotocol/chain/.alice + - --p2p.persistent_peers + - "17e5e45691f0d01449c84fd4ae87279578cdd7ec@dydxprotocold0:26656,47539956aaa8e624e0f1d926040e54908ad0eb44@dydxprotocold2:26656,5882428984d83b03d0c907c1f0af343534987052@dydxprotocold3:26656" + - --bridge-daemon-eth-rpc-endpoint + - "${ETH_RPC_ENDPOINT}" + environment: + - DAEMON_HOME=/dydxprotocol/chain/.alice + volumes: + - ../protocol/localnet/dydxprotocol0:/dydxprotocol/chain/.alice/data + ports: + - "26657:26657" + - "9090:9090" + - "1317:1317" + + # This is the Indexer connected node. + # TODO: remove stake and make this a full node. + dydxprotocold1: + image: local:e2etest-dydxprotocol + platform: linux/amd64 + entrypoint: + - cosmovisor + - run + - start + - --log_level + - error + - --home + - /dydxprotocol/chain/.bob + - --p2p.persistent_peers + - "17e5e45691f0d01449c84fd4ae87279578cdd7ec@dydxprotocold0:26656,b69182310be02559483e42c77b7b104352713166@dydxprotocold1:26656,47539956aaa8e624e0f1d926040e54908ad0eb44@dydxprotocold2:26656,5882428984d83b03d0c907c1f0af343534987052@dydxprotocold3:26656" + - --non-validating-full-node=true + - --bridge-daemon-eth-rpc-endpoint + - "${ETH_RPC_ENDPOINT}" + - --indexer-kafka-conn-str + - "kafka:9092" + environment: + - DAEMON_HOME=/dydxprotocol/chain/.bob + volumes: + - ../protocol/localnet/dydxprotocol1:/dydxprotocol/chain/.bob/data + ports: + - "26658:26657" + + dydxprotocold2: + image: local:e2etest-dydxprotocol + platform: linux/amd64 + entrypoint: + - cosmovisor + - run + - start + - --log_level + - error + - --home + - /dydxprotocol/chain/.carl + - --p2p.persistent_peers + - "17e5e45691f0d01449c84fd4ae87279578cdd7ec@dydxprotocold0:26656,47539956aaa8e624e0f1d926040e54908ad0eb44@dydxprotocold2:26656,5882428984d83b03d0c907c1f0af343534987052@dydxprotocold3:26656" + - --bridge-daemon-eth-rpc-endpoint + - "${ETH_RPC_ENDPOINT}" + environment: + - DAEMON_HOME=/dydxprotocol/chain/.carl + volumes: + - ../protocol/localnet/dydxprotocol2:/dydxprotocol/chain/.carl/data + + dydxprotocold3: + image: local:e2etest-dydxprotocol + platform: linux/amd64 + entrypoint: + - cosmovisor + - run + - start + - --log_level + - error + - --home + - /dydxprotocol/chain/.dave + - --p2p.persistent_peers + - "17e5e45691f0d01449c84fd4ae87279578cdd7ec@dydxprotocold0:26656,47539956aaa8e624e0f1d926040e54908ad0eb44@dydxprotocold2:26656,5882428984d83b03d0c907c1f0af343534987052@dydxprotocold3:26656" + - --bridge-daemon-eth-rpc-endpoint + - "${ETH_RPC_ENDPOINT}" + environment: + - DAEMON_HOME=/dydxprotocol/chain/.dave + volumes: + - ../protocol/localnet/dydxprotocol3:/dydxprotocol/chain/.dave/data + + ender: + build: + context: ../indexer + dockerfile: ../indexer/Dockerfile.service.remote + args: + service: ender + ports: + - 3001:3001 + environment: + - REDIS_URL=redis://redis:6379 + comlink: + build: + context: ../indexer + dockerfile: ../indexer/Dockerfile.service.remote + args: + service: comlink + environment: + - PORT=3002 + - REDIS_URL=redis://redis:6379 + - RATE_LIMIT_REDIS_URL=redis://redis:6379 + - RATE_LIMIT_ENABLED=false + - COMPLIANCE_DATA_CLIENT=PLACEHOLDER + ports: + - 3002:3002 + socks: + build: + context: ../indexer + dockerfile: ../indexer/Dockerfile.service.remote + args: + service: socks + ports: + - 3003:3003 + environment: + - WS_PORT=3003 + - COMLINK_URL=host.docker.internal:3002 + roundtable: + build: + context: ../indexer + dockerfile: ../indexer/Dockerfile.service.remote + args: + service: roundtable + ports: + - 3004:3004 + vulcan: + build: + context: ../indexer + dockerfile: ../indexer/Dockerfile.service.remote + args: + service: vulcan + environment: + - REDIS_URL=redis://redis:6379 + ports: + - 3005:3005