name: Applitools Cypress

on:
  schedule:
    - cron: "0 1 * * *"

jobs:
  config:
    runs-on: "ubuntu-22.04"
    outputs:
      has-secrets: ${{ steps.check.outputs.has-secrets }}
    steps:
      - name: "Check for secrets"
        id: check
        shell: bash
        run: |
          if [ -n "${{ (secrets.APPLITOOLS_API_KEY != '' && secrets.APPLITOOLS_API_KEY != '') || '' }}" ]; then
            echo "has-secrets=1" >> "$GITHUB_OUTPUT"
          fi

  cypress-applitools:
    needs: config
    if: needs.config.outputs.has-secrets
    runs-on: ubuntu-22.04
    strategy:
      fail-fast: false
      matrix:
        browser: ["chrome"]
        node: [18]
    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 }}
      APPLITOOLS_APP_NAME: Superset
      APPLITOOLS_API_KEY: ${{ secrets.APPLITOOLS_API_KEY }}
      APPLITOOLS_BATCH_ID: ${{ github.sha }}
      APPLITOOLS_BATCH_NAME: Superset Cypress
    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:
      - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
        uses: actions/checkout@v4
        with:
          persist-credentials: false
          submodules: recursive
          ref: master
      - name: Setup Python
        uses: ./.github/actions/setup-backend/
      - name: Import test data
        uses: ./.github/actions/cached-dependencies
        with:
          run: testdata
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
      - name: Install npm dependencies
        uses: ./.github/actions/cached-dependencies
        with:
          run: npm-install
      - name: Build javascript packages
        uses: ./.github/actions/cached-dependencies
        with:
          run: build-instrumented-assets
      - name: Setup Postgres
        if: steps.check.outcome == 'failure'
        uses: ./.github/actions/cached-dependencies
        with:
          run: setup-postgres
      - name: Install cypress
        uses: ./.github/actions/cached-dependencies
        with:
          run: cypress-install
      - name: Run Cypress
        uses: ./.github/actions/cached-dependencies
        env:
          CYPRESS_BROWSER: ${{ matrix.browser }}
        with:
          run: cypress-run-applitools
