name: Test Postgres and MySQL schemas

on:
  schedule:
    - cron: '0 0 * * *'
  workflow_dispatch:
  pull_request:
    paths:
      - packages/cli/src/databases/migrations/**

jobs:
  build:
    name: Install & Build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3.5.3
      - uses: pnpm/action-setup@v2.4.0
      - uses: actions/setup-node@v3.7.0
        with:
          node-version: 18.x
          cache: 'pnpm'
      - run: pnpm install --frozen-lockfile

      - name: Build Backend
        run: pnpm  --filter @n8n/client-oauth2 --filter n8n-workflow --filter n8n-core --filter n8n build

      - name: Cache build artifacts
        uses: actions/cache/save@v3.3.1
        with:
          path: ./packages/**/dist
          key: ${{ github.sha }}:db-tests

  mysql:
    name: MySQL
    runs-on: ubuntu-latest
    needs: build
    timeout-minutes: 20
    env:
      DB_MYSQLDB_PASSWORD: password
    steps:
      - uses: actions/checkout@v3.5.3
      - uses: pnpm/action-setup@v2.4.0
      - uses: actions/setup-node@v3.7.0
        with:
          node-version: 18.x
          cache: 'pnpm'
      - run: pnpm install --frozen-lockfile

      - name: Restore cached build artifacts
        uses: actions/cache/restore@v3.3.1
        with:
          path: ./packages/**/dist
          key: ${{ github.sha }}:db-tests

      - name: Start MySQL
        uses: isbang/compose-action@v1.5.1
        with:
          compose-file: ./.github/docker-compose.yml
          services: |
            mysql

      - name: Test MySQL
        working-directory: packages/cli
        run: DB_TABLE_PREFIX=test_ pnpm test:mysql --runInBand

  postgres:
    name: Postgres
    runs-on: ubuntu-latest
    needs: build
    timeout-minutes: 20
    env:
      DB_POSTGRESDB_PASSWORD: password
    steps:
      - uses: actions/checkout@v3.5.3
      - uses: pnpm/action-setup@v2.4.0
      - uses: actions/setup-node@v3.7.0
        with:
          node-version: 18.x
          cache: 'pnpm'
      - run: pnpm install --frozen-lockfile

      - name: Restore cached build artifacts
        uses: actions/cache/restore@v3.3.1
        with:
          path: ./packages/**/dist
          key: ${{ github.sha }}:db-tests

      - name: Start Postgres
        uses: isbang/compose-action@v1.5.1
        with:
          compose-file: ./.github/docker-compose.yml
          services: |
            postgres

      - name: Test Postgres
        working-directory: packages/cli
        run: DB_POSTGRESDB_SCHEMA=alt_schema DB_TABLE_PREFIX=test_ pnpm test:postgres --runInBand

  notify-on-failure:
    name: Notify Slack on failure
    runs-on: ubuntu-latest
    needs: [mysql, postgres]
    steps:
      - name: Notify Slack on failure
        uses: act10ns/slack@v2.0.0
        if: failure() && github.ref == 'refs/heads/master'
        with:
          status: ${{ job.status }}
          channel: '#updates-build-alerts'
          webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
          message: Postgres or MySQL tests failed (${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})
