123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- name: End-to-end tests
- on:
- push:
- branches: [main, 4.x]
- paths-ignore:
- - '**.md'
- - '**.d.ts'
- - 'examples/**'
- - 'private/**'
- - 'website/**'
- - '.github/**'
- - '!.github/workflows/e2e.yml'
- pull_request_target:
- types: [opened, synchronize, reopened, labeled]
- paths-ignore:
- - '**.md'
- - '**.d.ts'
- - 'examples/**'
- - 'private/**'
- - 'website/**'
- - '.github/**'
- pull_request:
- types: [opened, synchronize, reopened]
- paths:
- - .github/workflows/e2e.yml
- concurrency: ${{ github.workflow }}--${{ github.ref }}
- env:
- YARN_ENABLE_GLOBAL_CACHE: false
- jobs:
- e2e:
- if:
- ${{ !github.event.pull_request ||
- (contains(github.event.pull_request.labels.*.name, 'safe to test') &&
- github.event.pull_request.state == 'open') ||
- (github.event.pull_request.head.repo.full_name == github.repository &&
- github.event.event_name != 'labeled') }}
- name: Browser tests
- runs-on: ubuntu-latest
- steps:
- - name: Checkout sources
- uses: actions/checkout@v3
- with:
- ref: ${{ github.event.pull_request.head.sha || github.sha }}
- - name: Get yarn cache directory path
- id: yarn-cache-dir-path
- run:
- echo "dir=$(corepack yarn config get cacheFolder)" >> $GITHUB_OUTPUT
- - uses: actions/cache@v3
- id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
- with:
- path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
- key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
- restore-keys: |
- ${{ runner.os }}-yarn-
- - name: Create cache folder for Cypress
- id: cypress-cache-dir-path
- run: echo "dir=$(mktemp -d)" >> $GITHUB_OUTPUT
- - uses: actions/cache@v3
- with:
- path: ${{ steps.cypress-cache-dir-path.outputs.dir }}
- key: ${{ runner.os }}-cypress
- - name: Install Node.js
- uses: actions/setup-node@v3
- with:
- node-version: lts/*
- - name: Start Redis
- uses: supercharge/redis-github-action@1.4.0
- with:
- redis-version: 7
- - name: Install dependencies
- run: corepack yarn install --immutable
- env:
- # https://docs.cypress.io/guides/references/advanced-installation#Binary-cache
- CYPRESS_CACHE_FOLDER: ${{ steps.cypress-cache-dir-path.outputs.dir }}
- - name: Build Uppy packages
- run: corepack yarn build
- - name: Run end-to-end browser tests
- run: corepack yarn run e2e:ci
- env:
- COMPANION_DATADIR: ./output
- COMPANION_DOMAIN: localhost:3020
- COMPANION_PROTOCOL: http
- COMPANION_REDIS_URL: redis://localhost:6379
- COMPANION_UNSPLASH_KEY: ${{secrets.COMPANION_UNSPLASH_KEY}}
- COMPANION_UNSPLASH_SECRET: ${{secrets.COMPANION_UNSPLASH_SECRET}}
- COMPANION_AWS_KEY: ${{secrets.COMPANION_AWS_KEY}}
- COMPANION_AWS_SECRET: ${{secrets.COMPANION_AWS_SECRET}}
- COMPANION_AWS_BUCKET: ${{secrets.COMPANION_AWS_BUCKET}}
- COMPANION_AWS_REGION: ${{secrets.COMPANION_AWS_REGION}}
- VITE_COMPANION_URL: http://localhost:3020
- VITE_TRANSLOADIT_KEY: ${{secrets.TRANSLOADIT_KEY}}
- VITE_TRANSLOADIT_SECRET: ${{secrets.TRANSLOADIT_SECRET}}
- VITE_TRANSLOADIT_TEMPLATE: ${{secrets.TRANSLOADIT_TEMPLATE}}
- VITE_TRANSLOADIT_SERVICE_URL: ${{secrets.TRANSLOADIT_SERVICE_URL}}
- # https://docs.cypress.io/guides/references/advanced-installation#Binary-cache
- CYPRESS_CACHE_FOLDER: ${{ steps.cypress-cache-dir-path.outputs.dir }}
- - name: Upload videos in case of failure
- uses: actions/upload-artifact@v3
- if: failure()
- with:
- name: videos-and-screenshots
- path: |
- e2e/cypress/videos/
- e2e/cypress/screenshots/
- - name: Remove 'pending end-to-end tests' label
- # Remove the 'pending end-to-end tests' label if tests ran successfully
- if:
- github.event.pull_request &&
- contains(github.event.pull_request.labels.*.name, 'pending end-to-end
- tests')
- run: gh pr edit "$NUMBER" --remove-label 'pending end-to-end tests'
- env:
- NUMBER: ${{ github.event.pull_request.number }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- - name: Remove 'safe to test' label
- # Remove the 'safe to test' label to ensure next commit needs approval before re-running this.
- if:
- always() && github.event.pull_request &&
- contains(github.event.pull_request.labels.*.name, 'safe to test')
- run: gh pr edit "$NUMBER" --remove-label 'safe to test'
- env:
- NUMBER: ${{ github.event.pull_request.number }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- add-pending-e2e-label:
- # Add the 'pending end-to-end tests' label for PRs that come from forks.
- # For those PRs, we want to review the code before running e2e tests.
- # See https://securitylab.github.com/research/github-actions-preventing-pwn-requests/.
- if:
- github.event.pull_request.state == 'open' &&
- github.event.pull_request.head.repo.full_name != github.repository &&
- !contains(github.event.pull_request.labels.*.name, 'safe to test') &&
- !contains(github.event.pull_request.labels.*.name, 'pending end-to-end
- tests')
- runs-on: ubuntu-latest
- steps:
- - name: Add label
- env:
- NUMBER: ${{ github.event.pull_request.number }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run:
- gh pr edit "$NUMBER" --repo ${{ github.repository }} --add-label
- 'pending end-to-end tests'
|