| 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: |
| # Somehow one test flakes on 24.04 for unknown reasons, this is the only GHA left on 22.04 |
| runs-on: ubuntu-22.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 the dashboard feature when running manually OR merging to master |
| USE_DASHBOARD: ${{ github.event.inputs.use_dashboard == 'true'|| (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@v4 |
| 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@v4 |
| 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@v4 |
| 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: "20" |
| - 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 }} |
| NODE_OPTIONS: "--max-old-space-size=4096" |
| 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 }} |