Fork Sync: Update from parent repository #72
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: E2E Tests | |
on: | |
push: | |
branches: | |
- "master" | |
- 'release-**' | |
pull_request: | |
types: [opened, synchronize, reopened, ready_for_review] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
files-changed: | |
name: Check which files changed | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 3 | |
outputs: | |
e2e_all: ${{ steps.changes.outputs.e2e_all }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Test which files changed | |
uses: dorny/[email protected] | |
id: changes | |
with: | |
token: ${{ github.token }} | |
filters: .github/file-paths.yaml | |
e2e-matrix-builder: | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 5 | |
outputs: | |
matrix: ${{ steps.e2e-matrix.outputs.matrix }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Generate matrix for E2E tests | |
id: e2e-matrix | |
uses: ./.github/actions/build-e2e-matrix | |
build: | |
needs: [files-changed, e2e-matrix-builder] | |
if: | | |
!cancelled() && | |
github.event.pull_request.draft == false && | |
needs.e2e-matrix-builder.result == 'success' && | |
needs.files-changed.outputs.e2e_all == 'true' | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 25 | |
strategy: | |
matrix: | |
edition: [oss, ee] | |
env: | |
MB_EDITION: ${{ matrix.edition }} | |
INTERACTIVE: false | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Prepare front-end environment | |
uses: ./.github/actions/prepare-frontend | |
- name: Prepare back-end environment | |
uses: ./.github/actions/prepare-backend | |
with: | |
m2-cache-key: e2e-tests | |
- name: Build uberjar with ./bin/build.sh | |
run: ./bin/build.sh | |
- name: Prepare uberjar artifact | |
uses: ./.github/actions/prepare-uberjar-artifact | |
with: | |
name: metabase-${{ matrix.edition }}-${{ github.event.pull_request.head.sha || github.sha }}-uberjar | |
e2e-tests: | |
needs: [build, e2e-matrix-builder] | |
if: | | |
!cancelled() && needs.build.result == 'success' | |
runs-on: ${{ matrix.runner }} | |
timeout-minutes: 90 | |
name: e2e-tests-${{ matrix.name }}-${{ matrix.edition }} | |
env: | |
MB_EDITION: ${{ matrix.edition }} | |
DISPLAY: "" | |
QA_DB_ENABLED: true | |
# Any env starting with `CYPRESS_` will be available to all Cypress tests via `Cypress.env()` | |
# Example: you can get `CYPRESS_FOO` with `Cypress.env("FOO")` | |
CYPRESS_ALL_FEATURES_TOKEN: ${{ secrets.ENTERPRISE_TOKEN }} | |
CYPRESS_NO_FEATURES_TOKEN: ${{ secrets.E2E_STARTER_TOKEN }} | |
# Record runs using Deploysentinel except for the release branch | |
CYPRESS_DEPLOYSENTINEL_KEY: ${{ !(startsWith(github.event.pull_request.base.ref, 'release')) && secrets.CYPRESS_DEPLOYSENTINEL_KEY || '' }} | |
MB_SNOWPLOW_AVAILABLE: true | |
MB_SNOWPLOW_URL: "http://localhost:9090" # Snowplow micro | |
ELECTRON_EXTRA_LAUNCH_ARGS: "--remote-debugging-port=40500" # deploysentinel | |
TERM: xterm | |
TZ: US/Pacific # to make node match the instance tz | |
strategy: | |
fail-fast: false | |
matrix: ${{ fromJSON(needs.e2e-matrix-builder.outputs.matrix) }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Prepare Docker containers | |
uses: ./.github/actions/e2e-prepare-containers | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
maildev: true | |
openldap: ${{ startsWith(matrix.name, 'admin') }} | |
postgres: ${{ matrix.name != 'mongo'}} | |
mysql: ${{ matrix.name != 'mongo'}} | |
mongo: ${{ matrix.name == 'mongo'}} | |
- name: Retrieve uberjar artifact for ${{ matrix.edition }} | |
uses: actions/download-artifact@v3 | |
with: | |
name: metabase-${{ matrix.edition }}-${{ github.event.pull_request.head.sha || github.sha }}-uberjar | |
- name: Get the version info | |
run: | | |
jar xf target/uberjar/metabase.jar version.properties | |
mv version.properties resources/ | |
- name: Prepare front-end environment | |
uses: ./.github/actions/prepare-frontend | |
- name: Prepare JDK ${{ matrix.java-version }} | |
uses: actions/setup-java@v3 | |
with: | |
java-version: ${{ matrix.java-version }} | |
distribution: "temurin" | |
- name: Prepare Cypress environment | |
id: cypress-prep | |
uses: ./.github/actions/prepare-cypress | |
- name: Run Snowplow micro | |
uses: ./.github/actions/run-snowplow-micro | |
- name: Run OSS-specific Cypress tests | |
if: matrix.edition == 'oss' && github.event_name != 'schedule' | |
run: | | |
yarn run test-cypress-run \ | |
--env grepTags=@OSS,grepOmitFiltered=true \ | |
--spec './e2e/test/scenarios/**/*.cy.spec.js' \ | |
--browser ${{ steps.cypress-prep.outputs.chrome-path }} | |
- name: Run slow and resource-intensive Cypress tests | |
if: matrix.name == 'slow' && github.event_name != 'schedule' | |
run: | | |
yarn run test-cypress-run \ | |
--env grepTags="@slow",grepOmitFiltered=true \ | |
--spec './e2e/test/scenarios/**/*.cy.spec.js' \ | |
--browser ${{ steps.cypress-prep.outputs.chrome-path }} | |
- name: Run Flaky Cypress tests | |
if: matrix.name == 'flaky' && github.event_name != 'schedule' | |
run: | | |
yarn run test-cypress-run \ | |
--env grepTags="@flaky",grepOmitFiltered=true \ | |
--spec './e2e/test/scenarios/**/*.cy.spec.js' \ | |
--browser ${{ steps.cypress-prep.outputs.chrome-path }} | |
- name: Run EE Cypress tests on ${{ matrix.name }} | |
if: matrix.context == 'folder' && github.event_name != 'schedule' | |
run: | | |
yarn run test-cypress-run \ | |
--env grepTags="-@slow+-@mongo+-@flaky --@quarantine",grepOmitFiltered=true \ | |
--folder ${{ matrix.name }} \ | |
--browser ${{ steps.cypress-prep.outputs.chrome-path }} | |
- name: Run E2E tests that depend on Mongo | |
if: matrix.name == 'mongo' | |
run: | | |
yarn run test-cypress-run \ | |
--env grepTags="@mongo --@quarantine",grepOmitFiltered=true \ | |
--spec './e2e/test/scenarios/**/*.cy.spec.js' \ | |
--browser ${{ steps.cypress-prep.outputs.chrome-path }} | |
env: | |
CYPRESS_QA_DB_MONGO: true | |
- name: Upload Cypress Artifacts upon failure | |
uses: actions/upload-artifact@v3 | |
if: failure() | |
with: | |
name: cypress-recording-${{ matrix.name }}-${{ matrix.edition }} | |
path: | | |
./cypress | |
./logs/test.log | |
if-no-files-found: ignore | |
e2e-tests-skipped-stub: | |
needs: [e2e-tests, e2e-matrix-builder] | |
if: | | |
!cancelled() && | |
needs.e2e-tests.result == 'skipped' | |
runs-on: ${{ matrix.runner }} | |
timeout-minutes: 5 | |
name: e2e-tests-${{ matrix.name }}-${{ matrix.edition }} | |
strategy: | |
fail-fast: false | |
matrix: ${{ fromJSON(needs.e2e-matrix-builder.outputs.matrix) }} | |
steps: | |
- run: | | |
echo "Didn't run due to conditional filtering" | |
visual-regression-tests: | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 60 | |
needs: [build] | |
if: | | |
!cancelled() && needs.build.result == 'success' | |
name: percy-visual-regression-tests | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Prepare Docker containers | |
uses: ./.github/actions/e2e-prepare-containers | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
maildev: true | |
- name: Retrieve uberjar artifact for ${{ matrix.edition }} | |
uses: actions/download-artifact@v3 | |
with: | |
name: metabase-ee-${{ github.event.pull_request.head.sha || github.sha }}-uberjar | |
- name: Get the version info | |
run: | | |
jar xf target/uberjar/metabase.jar version.properties | |
mv version.properties resources/ | |
- name: Prepare front-end environment | |
uses: ./.github/actions/prepare-frontend | |
- name: Prepare JDK 11 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: 11 | |
distribution: 'temurin' | |
- name: Prepare Cypress environment | |
id: cypress-prep | |
uses: ./.github/actions/prepare-cypress | |
- name: Percy Test | |
run: yarn run test-visual-run --browser ${{ steps.cypress-prep.outputs.chrome-path }} | |
env: | |
PERCY_TOKEN: ${{ github.ref == 'refs/heads/master' && secrets.PERCY_TOKEN || ''}} |