# SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file)
#
# SPDX-License-Identifier: AGPL-3.0-only

name: E2E Tests

on:
  push:
    branches: [ develop ]
  pull_request_target:
    branches: [ develop ]
  pull_request:
    branches: [ develop ]

permissions:
  contents: read

concurrency:
  group: ${{ github.workflow }}-${{ !!github.event.pull_request && github.event.pull_request.head.label || github.ref }}-${{ github.event_name }}-${{ github.job }}
  cancel-in-progress: true

env:
  NODEJS_VERSION: 24
  HEAD_COMMIT_HASH: "${{ !!github.event.pull_request && github.event.pull_request.head.sha || github.sha }}"

jobs:
  backend-sqlite: # This run also collects coverage
    if: "(github.event_name == 'pull_request_target') == github.event.pull_request.head.repo.fork"
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6.0.2
        with:
          fetch-depth: 0
      - name: Setup node
        uses: ./.github/actions/setup-node
        with:
          NODEJS_VERSION: ${{ env.NODEJS_VERSION }}

      - name: Run e2e tests
        run: yarn test:e2e:ci --filter=@hedgedoc/backend
        shell: bash
        env:
          HEDGEDOC_TEST_DB_TYPE: sqlite
          TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
          TURBO_API: ${{ vars.TURBO_API }}
          TURBO_TEAM: ${{ vars.TURBO_TEAM }}

      - name: Upload coverage
        uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
        with:
          directory: backend/coverage-e2e
          flags: backend, e2e-tests, backend-e2e-tests

  backend-mariadb:
    if: "(github.event_name == 'pull_request_target') == github.event.pull_request.head.repo.fork"
    runs-on: ubuntu-latest
    services:
      mariadb:
        # renovate: datasource=docker depName=mariadb
        image: mariadb:11.8.6@sha256:8164f184d16c30e2f159e30518113667b796306dff0fe558876ab1ff521a682f
        env:
          MARIADB_USER: hedgedoc
          MARIADB_PASSWORD: hedgedoc
          MARIADB_DATABASE: hedgedoc
          MARIADB_ROOT_PASSWORD: hedgedoc
          MARIADB_MYSQL_LOCALHOST_USER: 1
          MARIADB_MYSQL_LOCALHOST_GRANTS: USAGE
        options: --health-cmd "healthcheck.sh --su-mysql --connect --innodb_initialized" --health-interval 10s --health-timeout 5s --health-retries 10
        ports:
          - 3306:3306
    steps:
      - uses: actions/checkout@v6.0.2
        with:
          fetch-depth: 0
      - name: Setup node
        uses: ./.github/actions/setup-node
        with:
          NODEJS_VERSION: ${{ env.NODEJS_VERSION }}

      - name: Run e2e tests
        run: yarn test:e2e:ci --filter=@hedgedoc/backend
        shell: bash
        env:
          HEDGEDOC_TEST_DB_TYPE: mariadb
          TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
          TURBO_API: ${{ vars.TURBO_API }}
          TURBO_TEAM: ${{ vars.TURBO_TEAM }}

  backend-postgres:
    if: "(github.event_name == 'pull_request_target') == github.event.pull_request.head.repo.fork"
    runs-on: ubuntu-latest
    services:
      postgres:
        # renovate: datasource=docker depName=postgres
        image: postgres:16.13@sha256:78df81b1442dcc764c1104154da7162635e40cfffe67579c42a1c1b96dfc209c
        env:
          POSTGRES_PASSWORD: hedgedoc
          POSTGRES_USER: hedgedoc
        options: --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
        ports:
          - 5432:5432
    steps:
      - uses: actions/checkout@v6.0.2
        with:
          fetch-depth: 0
      - name: Setup node
        uses: ./.github/actions/setup-node
        with:
          NODEJS_VERSION: ${{ env.NODEJS_VERSION }}

      - name: Run e2e tests
        run: yarn test:e2e:ci --filter=@hedgedoc/backend
        shell: bash
        env:
          HEDGEDOC_TEST_DB_TYPE: postgres
          TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
          TURBO_API: ${{ vars.TURBO_API }}
          TURBO_TEAM: ${{ vars.TURBO_TEAM }}

#  frontend-build:
#    if: "(github.event_name == 'pull_request_target') == github.event.pull_request.head.repo.fork"
#    runs-on: ubuntu-latest
#    name: Build test build of frontend
#    steps:
#      - name: Check out repo
#        uses: actions/checkout@v4.2.2 # v4.2.2
#        with:
#          ref: ${{ env.HEAD_COMMIT_HASH }}
#
#      - name: Setup node
#        uses: ./.github/actions/setup-node
#        with:
#          NODEJS_VERSION: ${{ env.NODEJS_VERSION }}
#
#      - name: Build test production build
#        run: yarn build:test --filter=@hedgedoc/frontend
#        shell: bash
#        env:
#          NODEJS_VERSION: ${{ env.NODEJS_VERSION }}
#          TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
#          TURBO_API: ${{ vars.TURBO_API }}
#          TURBO_TEAM: ${{ vars.TURBO_TEAM }}
#
#      - name: Compress build
#        run: tar --zstd -cf frontend-e2e-build.tar.zst frontend/dist/
#
#      - name: Upload build artifact
#        uses: actions/upload-artifact@v4
#        with:
#          name: frontend-e2e-build
#          retention-days: 1
#          path: frontend-e2e-build.tar.zst
#          overwrite: true
#
#  frontend-cypress:
#    if: "(github.event_name == 'pull_request_target') == github.event.pull_request.head.repo.fork"
#    needs: frontend-build
#    runs-on: ubuntu-latest
#    strategy:
#      fail-fast: false
#      matrix:
#        containers: [ 1, 2, 3 ]
#    steps:
#      - name: Check out repo
#        uses: actions/checkout@v4.2.2 # v4.2.2
#        with:
#          ref: ${{ env.HEAD_COMMIT_HASH }}
#
#      - name: Setup node
#        uses: ./.github/actions/setup-node
#        with:
#          NODEJS_VERSION: ${{ env.NODEJS_VERSION }}
#
#      - name: Show cypress info
#        run: yarn cypress info
#        working-directory: frontend/
#        env:
#          CYPRESS_CACHE_FOLDER: /home/runner/.cache/cypress
#
#      - name: Download build
#        uses: actions/download-artifact@v4
#        with:
#          name: frontend-e2e-build
#          path: .
#          merge-multiple: true
#
#      - name: Decompress build
#        run: tar -xf frontend-e2e-build.tar.zst
#
#      - name: Run server
#        working-directory: frontend/
#        run: screen -dmS server -L yarn start
#        env:
#          NODE_ENV: test
#          HOSTNAME: "127.0.0.1"
#          HD_BASE_URL: "http://127.0.0.1:3001/"
#          PORT: 3001
#
#      - name: Wait for server
#        run: "sleep 3 && curl -L --max-time 120 http://127.0.0.1:3001/"
#
#      - name: Run cypress
#        run: yarn test:e2e:ci --filter=@hedgedoc/frontend
#        shell: bash
#        env:
#          CYPRESS_CACHE_FOLDER: /home/runner/.cache/cypress
#          CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
#          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
#          TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
#          TURBO_API: ${{ vars.TURBO_API }}
#          TURBO_TEAM: ${{ vars.TURBO_TEAM }}
#          CYPRESS_CONTAINER_ID: ${{ matrix.containers }}
#
#      - uses: actions/upload-artifact@v4.6.2 # master
#        if: always()
#        with:
#          name: screenlog-${{ matrix.containers }}
#          path: frontend/screenlog.0
#
#      - uses: actions/upload-artifact@v4.6.2
#        if: always()
#        with:
#          name: screenshots-${{ matrix.containers }}
#          path: cypress/screenshots
