Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
e2e-tests.yml 3.65 KiB
name: E2E Tests for PR

on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]
    paths-ignore:
      - "docs/**"
      - "**.md"
      - ".circleci/**"

jobs:

  build:
    if: github.event.pull_request.draft == false
    runs-on: buildjet-2vcpu-ubuntu-2004
    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

    - run: ./bin/build version
    - run: ./bin/build translations
    - run: ./bin/build frontend
    - run: ./bin/build licenses
    - run: ./bin/build drivers
    - run: ./bin/build uberjar

    - name: Prepare uberjar artifact
      uses: ./.github/actions/prepare-uberjar-artifact

  e2e-tests:
    runs-on: buildjet-4vcpu-ubuntu-2004
    timeout-minutes: 30
    needs: build
    name: e2e-tests-${{ matrix.folder }}-${{ matrix.edition }}
    env:
      MB_EDITION: ${{ matrix.edition }}
      DISPLAY: ""
      QA_DB_ENABLED: true
      ENTERPRISE_TOKEN: ${{ secrets.ENTERPRISE_TOKEN }}
      MB_SNOWPLOW_AVAILABLE: true
      MB_SNOWPLOW_URL: "http://localhost:9090"  # Snowplow micro
    strategy:
      fail-fast: false
      matrix:
        java-version: [11]
        edition: [oss, ee]
        folder:
          - "downloads"
          - "moderation"
    services:
      maildev:
        image: maildev/maildev:1.1.0
        ports:
          - "80:80"
          - "25:25"
        credentials:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      postgres-sample:
        image: metabase/qa-databases:postgres-sample-12
        ports:
          - "5432:5432"
        credentials:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      mongo-sample:
        image: metabase/qa-databases:mongo-sample-4.0
        ports:
          - 27017:27017
        credentials:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      mysql-sample:
        image: metabase/qa-databases:mysql-sample-8
        ports:
          - 3306:3306
        credentials:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
    steps:
    - uses: actions/checkout@v3
    - 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
      uses: ./.github/actions/prepare-cypress
    - name: Run Snowplow micro
      uses: ./.github/actions/run-snowplow-micro

    - uses: actions/download-artifact@v2
      name: Retrieve uberjar artifact for ${{ matrix.edition }}
      with:
        name: metabase-${{ matrix.edition }}-uberjar
    - name: Get the version info
      run: |
        jar xf target/uberjar/metabase.jar version.properties
        mv version.properties resources/

    - name: Run Cypress tests on ${{ matrix.folder }}
      run: yarn run test-cypress-no-build --folder ${{ matrix.folder }}
      env:
        TERM: xterm

    - name: Upload Cypress recording upon failure
      uses: actions/upload-artifact@v2
      if: failure()
      with:
        name: cypress-recording-${{ matrix.folder }}-${{ matrix.edition }}
        path: |
          ./cypress
          ./logs/test.log
        if-no-files-found: ignore