Cypress E2E Tests #1652
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }} |