282 lines
10 KiB
YAML
282 lines
10 KiB
YAML
name: (CI) Console tests
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
github-sha:
|
|
required: true
|
|
type: string
|
|
workflow_dispatch:
|
|
inputs:
|
|
console-test-branch:
|
|
type: choice
|
|
description: 'main: v0.74.10, develop: v0.75.1'
|
|
options:
|
|
- main
|
|
- develop
|
|
|
|
jobs:
|
|
create-docker-image:
|
|
name: Create docker image for console-test
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 45
|
|
steps:
|
|
#----------------------------------------------
|
|
# check-out frontend-monorepo
|
|
#----------------------------------------------
|
|
- name: Checkout frontend-monorepo
|
|
uses: actions/checkout@v3
|
|
with:
|
|
ref: ${{ inputs.github-sha || github.sha }}
|
|
#----------------------------------------------
|
|
# cache node modules
|
|
#----------------------------------------------
|
|
- name: setup node
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version-file: '.nvmrc'
|
|
cache: yarn
|
|
|
|
- name: Cache node modules
|
|
id: cache
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: node_modules
|
|
key: ${{ runner.os }}-cache-node-modules-${{ hashFiles('yarn.lock') }}
|
|
# comment out "restore-keys" if you need to rebuild yarn from 0
|
|
restore-keys: |
|
|
${{ runner.os }}-cache-node-modules-
|
|
#----------------------------------------------
|
|
# install deps if cache missing
|
|
#----------------------------------------------
|
|
- name: yarn install
|
|
if: steps.cache.outputs.cache-hit != 'true'
|
|
run: yarn install --pure-lockfile
|
|
#----------------------------------------------
|
|
# build trading
|
|
#----------------------------------------------
|
|
- name: Build trading app
|
|
run: |
|
|
ENV_NAME="${{ needs.console-test-branch.outputs.console-branch == 'main' && 'mainnet' || 'stagnet1' }}"
|
|
yarn env-cmd -f ./apps/trading/.env.$ENV_NAME yarn nx export trading
|
|
DIST_LOCATION=dist/apps/trading/exported
|
|
mv $DIST_LOCATION dist-result
|
|
tree dist-result
|
|
#----------------------------------------------
|
|
# export trading app docker image
|
|
#----------------------------------------------
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Build and export to local Docker
|
|
id: docker_build
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: .
|
|
file: docker/node-outside-docker.Dockerfile
|
|
load: true
|
|
build-args: |
|
|
APP=trading
|
|
ENV_NAME=${{ needs.console-test-branch.outputs.console-branch == 'main' && 'mainnet' || 'stagnet1' }}
|
|
tags: ci/trading:local
|
|
outputs: type=docker,dest=/tmp/console-image.tar
|
|
|
|
- name: Verify docker image created
|
|
run: |
|
|
echo ${{ steps.docker_build.outputs.digest }}
|
|
echo ${{ steps.docker_build.outputs.imageid }}
|
|
|
|
- name: Upload docker image for console-test usage
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: console-image
|
|
path: /tmp/console-image.tar
|
|
|
|
console-test-branch:
|
|
name: Choose console-test branch to run on
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 5
|
|
outputs:
|
|
console-branch: ${{ steps.output-step.outputs.branch }}
|
|
steps:
|
|
- name: Workflow dispatch input
|
|
id: dispatch-step
|
|
if: github.event_name == 'workflow_dispatch'
|
|
run: echo "branch=${{ inputs.console-test-branch }}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Print Workflow dispatch input
|
|
if: github.event_name == 'workflow_dispatch'
|
|
run: echo ${{ steps.dispatch-step.outputs.branch }}
|
|
|
|
- name: Workflow_call input
|
|
id: workflow_call-step
|
|
if: github.event_name != 'workflow_dispatch'
|
|
run: |
|
|
if [[ "${{ github.base_ref }}" == "main" ]]; then
|
|
echo "branch=main" >> $GITHUB_OUTPUT
|
|
elif [[ "${{ github.base_ref }}" == "develop" && "${{ github.ref_name }}" == "main" ]]; then
|
|
echo "branch=main" >> $GITHUB_OUTPUT
|
|
elif [[ "${{ github.event_name }}" == "push" && "${{ github.ref_name }}" == *"release/mainnet"* ]]; then
|
|
echo "branch=main" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "branch=develop" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Print Workflow_call input
|
|
if: github.event_name != 'workflow_dispatch'
|
|
run: echo ${{ steps.workflow_call-step.outputs.branch }}
|
|
|
|
- name: Set output
|
|
id: output-step
|
|
run: echo "branch=${{ steps.dispatch-step.outputs.branch || steps.workflow_call-step.outputs.branch }}" >> $GITHUB_OUTPUT
|
|
|
|
- name: Print final output
|
|
run: echo ${{ steps.output-step.outputs.branch }}
|
|
|
|
run-tests:
|
|
name: run-tests
|
|
runs-on: 8-cores
|
|
needs: [create-docker-image, console-test-branch]
|
|
timeout-minutes: 45
|
|
steps:
|
|
#----------------------------------------------
|
|
# load docker image
|
|
#----------------------------------------------
|
|
- name: Download docker image from previous job
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: console-image
|
|
path: /tmp
|
|
|
|
- name: Load Docker image
|
|
run: |
|
|
docker load --input /tmp/console-image.tar
|
|
docker image ls -a
|
|
#----------------------------------------------
|
|
# check-out frontend-monorepo
|
|
#----------------------------------------------
|
|
- name: Checkout frontend-monorepo
|
|
uses: actions/checkout@v3
|
|
with:
|
|
ref: ${{ inputs.github-sha || github.sha }}
|
|
#----------------------------------------------
|
|
# get vega version
|
|
#----------------------------------------------
|
|
- name: Set VEGA_VERSION from .env
|
|
id: set_vega_version
|
|
run: echo "VEGA_VERSION=$(grep VEGA_VERSION apps/trading/e2e/.env | cut -d '=' -f2)" >> $GITHUB_ENV
|
|
#----------------------------------------------
|
|
# ----- Setup python -----
|
|
#----------------------------------------------
|
|
- name: Setup Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.10'
|
|
#----------------------------------------------
|
|
# ----- install & configure poetry -----
|
|
#----------------------------------------------
|
|
- name: Install Poetry
|
|
uses: snok/install-poetry@v1
|
|
with:
|
|
virtualenvs-create: true
|
|
virtualenvs-in-project: true
|
|
virtualenvs-path: .venv
|
|
#----------------------------------------------
|
|
# Set up pyproject.toml based on branch
|
|
#----------------------------------------------
|
|
- name: Create pyproject.toml based on branch
|
|
run: |
|
|
if [ "${{ needs.console-test-branch.outputs.console-branch }}" = "main" ]; then
|
|
mv pyproject.main.toml pyproject.toml
|
|
elif [ "${{ needs.console-test-branch.outputs.console-branch }}" = "develop" ]; then
|
|
mv pyproject.develop.toml pyproject.toml
|
|
fi
|
|
working-directory: apps/trading/e2e
|
|
#----------------------------------------------
|
|
# install python dependencies
|
|
#----------------------------------------------
|
|
- name: Install dependencies
|
|
run: poetry lock && poetry install --no-interaction --no-root
|
|
working-directory: apps/trading/e2e
|
|
#----------------------------------------------
|
|
# install vega binaries
|
|
#----------------------------------------------
|
|
- name: Install vega binaries
|
|
run: poetry run python -m vega_sim.tools.load_binaries --force --version ${{ env.VEGA_VERSION }}
|
|
working-directory: apps/trading/e2e
|
|
#----------------------------------------------
|
|
# install playwrightworking-directory: apps/trading/e2e
|
|
#----------------------------------------------
|
|
- name: install playwright
|
|
run: poetry run playwright install --with-deps chromium
|
|
working-directory: apps/trading/e2e
|
|
#----------------------------------------------
|
|
# run tests
|
|
#----------------------------------------------
|
|
- name: Run tests
|
|
run: CONSOLE_IMAGE_NAME=ci/trading:local poetry run pytest -v --numprocesses 4 --dist loadfile --durations=45
|
|
working-directory: apps/trading/e2e
|
|
#----------------------------------------------
|
|
# upload traces
|
|
#----------------------------------------------
|
|
- name: Upload Playwright Trace
|
|
uses: actions/upload-artifact@v3
|
|
if: always()
|
|
with:
|
|
name: playwright-trace
|
|
path: apps/trading/e2e/traces/
|
|
retention-days: 15
|
|
#----------------------------------------------
|
|
# ----- upload logs -----
|
|
#----------------------------------------------
|
|
- name: Upload worker logs
|
|
uses: actions/upload-artifact@v3
|
|
if: always()
|
|
with:
|
|
name: worker-logs
|
|
path: ./logs/
|
|
retention-days: 15
|
|
#----------------------------------------------
|
|
# ----- upload market-sim logs -----
|
|
#----------------------------------------------
|
|
- name: Prepare and Zip market-sim-logs
|
|
if: always()
|
|
run: |
|
|
parent_dir="/tmp/market-sim-logs"
|
|
echo "Creating parent directory at $parent_dir"
|
|
mkdir -p "$parent_dir"
|
|
|
|
echo "Waiting for vega-sim-* folders to be created..."
|
|
sleep 10 # Waits 10 seconds to ensure all folders are created
|
|
|
|
echo "Before searching for vega-sim-* folders in /tmp..."
|
|
folders=$(find /tmp -mindepth 1 -type d -name 'vega-sim-*' -print) || echo "Find command failed with exit code $?"
|
|
|
|
echo "After searching for vega-sim-* folders in /tmp..."
|
|
|
|
if [ -z "$folders" ]; then
|
|
echo "No vega-sim-* folders found."
|
|
exit 0
|
|
fi
|
|
|
|
echo "Moving vega-sim-* folders to $parent_dir"
|
|
echo "$folders" | xargs -I {} mv {} "$parent_dir/"
|
|
|
|
echo "Checking if $parent_dir is not empty..."
|
|
if [ "$(ls -A $parent_dir)" ]; then
|
|
echo "Zipping the parent directory..."
|
|
zip -r market-sim-logs.zip "$parent_dir" && echo "Zip file created successfully."
|
|
else
|
|
echo "$parent_dir is empty. No zip file created."
|
|
exit 0
|
|
fi
|
|
shell: /usr/bin/bash -e {0}
|
|
|
|
- name: Upload market-sim-logs
|
|
uses: actions/upload-artifact@v3
|
|
if: always()
|
|
with:
|
|
name: market-sim-logs
|
|
path: market-sim-logs.zip
|
|
retention-days: 15
|