Skip to content

Upload E2E Test Results to Trunk (Hourly) #38564

Upload E2E Test Results to Trunk (Hourly)

Upload E2E Test Results to Trunk (Hourly) #38564

name: Upload E2E Test Results to Trunk (Hourly)
on:
schedule:
- cron: "*/10 * * * *"
workflow_dispatch: {}
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
cancel-in-progress: true
jobs:
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
env:
MB_EDITION: oss
build:
needs: [e2e-matrix-builder]
runs-on: ubuntu-22.04
timeout-minutes: 25
strategy:
matrix:
edition: [ee, oss]
env:
MB_EDITION: oss
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]
runs-on: ubuntu-22.04
timeout-minutes: 90
name: e2e-tests-${{ matrix.name }}-${{ matrix.edition }}
env:
MB_EDITION: oss
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:
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
- run: mkdir -p cypress/reports/mochareports
- name: Run OSS-specific Cypress tests
if: matrix.edition == 'oss'
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 }}
continue-on-error: true
- run: ls -l ./cypress/reports/mochareports/
- name: Upload results
if: "!cancelled()"
uses: trunk-io/analytics-uploader@main
with:
junit-paths: cypress/reports/**/*junit*.xml
org-slug: trunk-staging-org
token: ${{ secrets.TRUNK_DEBUGGER_TOKEN }}
env:
TRUNK_LOG: info
TRUNK_API_ADDRESS: https://api.trunk-staging.io:5022
continue-on-error: true
- name: Run slow and resource-intensive Cypress tests
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 }}
continue-on-error: true
- run: ls -l ./cypress/reports/mochareports/
- name: Upload results
if: "!cancelled()"
uses: trunk-io/analytics-uploader@main
with:
junit-paths: cypress/reports/**/*junit*.xml
org-slug: trunk-staging-org
token: ${{ secrets.TRUNK_DEBUGGER_TOKEN }}
env:
TRUNK_LOG: info
TRUNK_API_ADDRESS: https://api.trunk-staging.io:5022
continue-on-error: true
- name: Run Flaky Cypress tests
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 }}
continue-on-error: true
- run: ls -l ./cypress/reports/mochareports/
- name: Upload results
if: "!cancelled()"
uses: trunk-io/analytics-uploader@main
with:
junit-paths: cypress/reports/**/*junit*.xml
org-slug: trunk-staging-org
token: ${{ secrets.TRUNK_DEBUGGER_TOKEN }}
env:
TRUNK_LOG: info
TRUNK_API_ADDRESS: https://api.trunk-staging.io:5022
continue-on-error: true
- name: Run EE Cypress tests on ${{ matrix.name }}
if: matrix.context == 'folder'
run: |
yarn run test-cypress-run \
--env grepTags="-@slow+-@mongo+-@flaky --@quarantine",grepOmitFiltered=true \
--folder ${{ matrix.name }} \
--browser ${{ steps.cypress-prep.outputs.chrome-path }}
continue-on-error: true
- run: ls -l ./cypress/reports/mochareports/
- name: Upload results
if: "!cancelled()"
uses: trunk-io/analytics-uploader@main
with:
junit-paths: cypress/reports/**/*junit*.xml
org-slug: trunk-staging-org
token: ${{ secrets.TRUNK_DEBUGGER_TOKEN }}
env:
TRUNK_LOG: info
TRUNK_API_ADDRESS: https://api.trunk-staging.io:5022
continue-on-error: true
- 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
continue-on-error: true
- name: Upload results
if: "!cancelled()"
uses: trunk-io/analytics-uploader@main
with:
junit-paths: cypress/reports/**/*junit*.xml
org-slug: trunk-staging-org
token: ${{ secrets.TRUNK_DEBUGGER_TOKEN }}
env:
TRUNK_LOG: info
TRUNK_API_ADDRESS: https://api.trunk-staging.io:5022
continue-on-error: true
- name: Upload results
if: "!cancelled()"
uses: trunk-io/analytics-uploader@main
with:
junit-paths: cypress/reports/**/*junit*.xml
org-slug: trunk-staging-org
token: ${{ secrets.TRUNK_DEBUGGER_TOKEN }}
tags: tests=e2e
env:
TRUNK_LOG: info
TRUNK_API_ADDRESS: https://api.trunk-staging.io:5022
continue-on-error: true