Skip to content

Cypress E2E Tests #1658

Cypress E2E Tests

Cypress E2E Tests #1658

Workflow file for this run

name: Cypress E2E Tests
on:
workflow_call:
inputs:
environment:
type: string
required: true
description: "where to test"
workflow_dispatch:
inputs:
environment:
type: choice
required: true
description: "where to test"
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"
cypress-tests:
environment: ${{ inputs.environment }}
runs-on: ubuntu-latest
needs: define-test-matrix
strategy:
fail-fast: false
matrix:
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
- name: Run Cypress Tests
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 }}"
VITE_UUID="$(uuid)"
export VITE_UUID
export VITE_AUTH_API_URL="https://auth-api.systeminit.com"
export VITE_AUTH_PORTAL_URL="https://auth.systeminit.com"
# Retry loop with 3 attempts
n=0
max_retries=3
until [ $n -ge $max_retries ]
do
unset exit_code || echo "exit_code not set"
# Run the npx task and store exit code in a variable
npx cypress run --spec "cypress/e2e/${{ matrix.tests }}/**" || exit_code=$?
# Check the exit code
if [ -z "$exit_code" ]; then
echo "Cypress Test task succeeded!"
break
fi
n=$((n+1))
echo "Attempt $n/$max_retries failed with exit code $exit_code! Retrying..."
done
if [ $n -ge $max_retries ]; then
echo "All $max_retries attempts failed."
exit 1
fi
- 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
- name: Check Test Results
if: failure()
run: exit 1
on-failure:
runs-on: ubuntu-latest
needs: cypress-tests
if: ${{ failure() && github.ref == 'refs/heads/main' }}
steps:
- run: |
curl --location "${{ secrets.FIREHYDRANT_WEBHOOK_URL }}" \
--header "Content-Type: application/json" \
--data "{
\"summary\": \"E2E ${{ inputs.environment }} Tests Fail\",
\"body\": \"E2E Tests have failed for ${{ inputs.environment }}.\",
\"links\": [
{
\"href\": \"https://github.com/systeminit/si/actions/runs/$GITHUB_RUN_ID\",
\"text\": \"E2E Test Run ${{ inputs.environment }}\"
}
],
\"tags\": [
\"service:github\"
]
}"
- run: |
curl -X POST \
--header '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 }}