Skip to content

Cypress E2E Tests #1651

Cypress E2E Tests

Cypress E2E Tests #1651

Workflow file for this run

name: Cypress E2E Tests
on:
workflow_call:
inputs:
environment:
type: string
required: true
description: "where to deploy"
workflow_dispatch:
inputs:
environment:
type: choice
required: true
description: "where to deploy"
default: "tools"
options:
- tools
- production
jobs:
define-test-matrix:
runs-on: ubuntu-latest
outputs:
tests: ${{ steps.tests.outputs.tests }}
steps:
- uses: actions/checkout@v4
- id: tests
working-directory: app/web/cypress/e2e
run: |
# get the names of all test subdirs with out slashes
test_dirs=$(find . -mindepth 1 -maxdepth 1 -type d | sed 's|^\./||')
test_array="[]"
# put them into an array
for d in $test_dirs; do
test_array=$(echo "$test_array" | jq --arg d "$d" '. += [$d]')
done
test_array=$(echo "$test_array" | jq -c '.')
echo "$test_array"
echo "tests=$test_array" >> "$GITHUB_OUTPUT"
sdf-healthcheck:
runs-on: ubuntu-latest
steps:
# we should make sure that SDF is even up before we try
- name: Calculate URL
id: url
run: |
if [ "${{ inputs.environment }}" = "tools" ]; then
echo "url=https://tools.systeminit.com/api/" >> $GITHUB_OUTPUT
else
echo "url=https://app.systeminit.com/api/" >> $GITHUB_OUTPUT
fi
- name: Check to make sure SDF is up
uses: jtalk/url-health-check-action@v4
with:
url: ${{ steps.url.outputs.url }}
follow-redirect: true
max-attempts: 30
retry-delay: 10s
retry-all: true
cypress-tests:
environment: ${{ inputs.environment }}
runs-on: ubuntu-latest
needs: ["define-test-matrix", "sdf-healthcheck"]
strategy:
# don't fail the entire matrix on failure
fail-fast: false
matrix:
# run copies of the current job in parallel split by test dir
# TODO: we really should build once and set it as an
# artifact so we aren't rebuilding for each of these
tests: ${{ fromJSON(needs.define-test-matrix.outputs.tests) }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18.18.2'
- name: Setup pnpm
uses: pnpm/action-setup@v4
- name: Install Cypress
working-directory: app/web
run: |
pnpm i
pnpm install cypress
- name: install uuid
run: |
sudo apt update
sudo apt install uuid -y
- run: |
cd app/web
export VITE_AUTH0_USERNAME=${{ secrets.VITE_AUTH0_USERNAME }}
export VITE_AUTH0_PASSWORD=${{ secrets.VITE_AUTH0_PASSWORD }}
export VITE_SI_CYPRESS_MULTIPLIER=${{ vars.VITE_SI_CYPRESS_MULTIPLIER }}
export VITE_SI_WORKSPACE_URL=${{ vars.VITE_SI_WORKSPACE_URL }}
export VITE_HOST_URL=${{ vars.VITE_SI_WORKSPACE_URL }}
export VITE_SI_WORKSPACE_ID=${{ vars.VITE_SI_WORKSPACE_ID }}
export VITE_UUID=$(uuid)
export VITE_AUTH_API_URL=https://auth-api.systeminit.com
export VITE_AUTH_PORTAL_URL=https://auth.systeminit.com
npx cypress run --spec "cypress/e2e/${{ matrix.tests }}/**"
- name: 'Upload Cypress Recordings to Github'
uses: actions/upload-artifact@v4
if: always()
with:
name: cypress-recordings-run-${{ matrix.tests }}
path: app/web/cypress/videos/**/*.mp4
retention-days: 5
on-failure:
runs-on: ubuntu-latest
needs: cypress-tests
if: ${{ always() && contains(needs.*.result, 'failure') }}
steps:
- run: |
curl -X POST \
-H 'Content-type: application/json' \
--data "{\"text\": \":si: Failed Cypress E2E Test for ${{ inputs.environment }}: <https://github.com/systeminit/si/actions/runs/$GITHUB_RUN_ID|:test_tube: Link>\"}" ${{ secrets.SLACK_WEBHOOK_URL }}