name: E2E on: push: branches: - "master" - "[0-9].[0-9]*" pull_request: types: [synchronize, opened, reopened, ready_for_review] workflow_dispatch: inputs: use_dashboard: description: 'Use Cypress Dashboard (true/false) [paid service - trigger manually when needed]. You MUST provide a branch and/or PR number below for this to work.' required: false default: 'false' ref: description: 'The branch or tag to checkout' required: false default: '' pr_id: description: 'The pull request ID to checkout' required: false default: '' concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} cancel-in-progress: true jobs: cypress-matrix: runs-on: ubuntu-20.04 permissions: contents: read pull-requests: read strategy: # when one test fails, DO NOT cancel the other # parallel_id, because this will kill Cypress processes # leaving the Dashboard hanging ... # https://github.com/cypress-io/github-action/issues/48 fail-fast: false matrix: parallel_id: [0, 1, 2, 3, 4, 5] browser: ["chrome"] env: SUPERSET_ENV: development SUPERSET_CONFIG: tests.integration_tests.superset_test_config SUPERSET__SQLALCHEMY_DATABASE_URI: postgresql+psycopg2://superset:superset@127.0.0.1:15432/superset PYTHONPATH: ${{ github.workspace }} REDIS_PORT: 16379 GITHUB_TOKEN: ${{ github.token }} USE_DASHBOARD: ${{ github.event.inputs.use_dashboard || (github.ref == 'refs/heads/master' && 'true') || 'false' }} services: postgres: image: postgres:15-alpine env: POSTGRES_USER: superset POSTGRES_PASSWORD: superset ports: - 15432:5432 redis: image: redis:7-alpine ports: - 16379:6379 steps: # ------------------------------------------------------- # Conditional checkout based on context - name: Checkout for push or pull_request event if: github.event_name == 'push' || github.event_name == 'pull_request' uses: actions/checkout@v2 with: persist-credentials: false submodules: recursive - name: Checkout using ref (workflow_dispatch) if: github.event_name == 'workflow_dispatch' && github.event.inputs.ref != '' uses: actions/checkout@v2 with: persist-credentials: false ref: ${{ github.event.inputs.ref }} submodules: recursive - name: Checkout using PR ID (workflow_dispatch) if: github.event_name == 'workflow_dispatch' && github.event.inputs.pr_id != '' uses: actions/checkout@v2 with: persist-credentials: false ref: refs/pull/${{ github.event.inputs.pr_id }}/merge submodules: recursive # ------------------------------------------------------- - name: Check for file changes id: check uses: ./.github/actions/change-detector/ with: token: ${{ secrets.GITHUB_TOKEN }} - name: Setup Python uses: ./.github/actions/setup-backend/ if: steps.check.outputs.python || steps.check.outputs.frontend - name: Setup postgres if: steps.check.outputs.python || steps.check.outputs.frontend uses: ./.github/actions/cached-dependencies with: run: setup-postgres - name: Import test data if: steps.check.outputs.python || steps.check.outputs.frontend uses: ./.github/actions/cached-dependencies with: run: testdata - name: Setup Node.js if: steps.check.outputs.python || steps.check.outputs.frontend uses: actions/setup-node@v4 with: node-version: "18" - name: Install npm dependencies if: steps.check.outputs.python || steps.check.outputs.frontend uses: ./.github/actions/cached-dependencies with: run: npm-install - name: Build javascript packages if: steps.check.outputs.python || steps.check.outputs.frontend uses: ./.github/actions/cached-dependencies with: run: build-instrumented-assets - name: Install cypress if: steps.check.outputs.python || steps.check.outputs.frontend uses: ./.github/actions/cached-dependencies with: run: cypress-install - name: Run Cypress if: steps.check.outputs.python || steps.check.outputs.frontend uses: ./.github/actions/cached-dependencies env: CYPRESS_BROWSER: ${{ matrix.browser }} PARALLEL_ID: ${{ matrix.parallel_id }} PARALLELISM: 6 CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} with: run: cypress-run-all ${{ env.USE_DASHBOARD }} - name: Upload Artifacts uses: actions/upload-artifact@v4 if: github.event_name == 'workflow_dispatch' && (steps.check.outputs.python || steps.check.outputs.frontend) with: path: ${{ github.workspace }}/superset-frontend/cypress-base/cypress/screenshots name: cypress-artifact-${{ github.run_id }}-${{ github.job }}