name: TradeUI CI

on:
  push:
    branches:
      - main
      - ci/**
  pull_request:
    branches:
      - main
  release:
    types: [ published ]

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ ubuntu-22.04 ]
        node: [ "18", "20", "21"]

    steps:
    - uses: actions/checkout@v4

    - uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node }}

    - run: yarn install

    - name: Run Lint
      run: yarn lint-ci

    - name: Run type check
      run: yarn check-types

    - name: Run Tests
      run: yarn test:unit

    # Playwright section
    - name: Install Playwright Browsers
      run: yarn playwright install --with-deps

    - name: Run Playwright tests
      run: yarn playwright test

    - uses: actions/upload-artifact@v4
      if: ${{ !cancelled() }}
      with:
        name: playwright-report-${{ matrix.node }}
        path: playwright-report/
        retention-days: 30

    # End Playwright section

    - name: Run Component tests
      uses: cypress-io/github-action@v6
      with:
        # we have already installed everything
        install: false
        # to run component tests we need to use "cypress run-ct"
        command: yarn cypress run --component

    - name: Cypress run
      uses: cypress-io/github-action@v6
      with:
        # build: yarn build
        start: yarn dev --host
        wait-on: 'http://127.0.0.1:3000'

    - name: Build build
      run: yarn build

    - name: Archive artifacts
      uses: actions/upload-artifact@v4
      # Ideally this would upload the zip file from below - but this action currently does not support this.
      with:
        name: tradeUI-${{ matrix.node }}
        path: |
          dist
          !dist/**/*.map
        retention-days: 10

    - name: Zip files for release
      if: github.event_name == 'release' && matrix.node == '18'
      run: |
        cd dist/
        zip -r ../tradeUI.zip .
        cd ../


    - name: Upload release binaries
      uses: alexellis/upload-assets@0.4.1
      if: github.event_name == 'release' && matrix.node == '18'
      env:
        GITHUB_TOKEN: ${{ github.token }}
      with:
        asset_paths: '["./tradeUI.zip"]'
