name: Cypress

on:
  pull_request:
  push:
    branches:
      - main
      - stable*

env:
  APP_NAME: deck
  CYPRESS_baseUrl: http://localhost:8081/index.php

jobs:
  cypress:

    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        node-version: [20.x]
        # containers: [1, 2, 3]
        php-versions: [ '8.0' ]
        databases: [ 'sqlite' ]
        server-versions: [ 'stable28' ]

    steps:
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}

      - name: Register text Git reference
        run: |
          text_app_ref="$(if [ "${{ matrix.server-versions }}" = "master" ]; then echo -n "main"; else echo -n "${{ matrix.server-versions }}"; fi)"
          echo "text_app_ref=$text_app_ref" >> $GITHUB_ENV

      - name: Checkout server
        uses: actions/checkout@v4
        with:
          repository: nextcloud/server
          ref: ${{ matrix.server-versions }}

      - name: Checkout submodules
        shell: bash
        run: |
          auth_header="$(git config --local --get http.https://github.com/.extraheader)"
          git submodule sync --recursive
          git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1

      - name: Checkout ${{ env.APP_NAME }}
        uses: actions/checkout@v4
        with:
          path: apps/${{ env.APP_NAME }}

      - name: Checkout text
        uses: actions/checkout@v4
        with:
          repository: nextcloud/text
          ref: ${{ env.text_app_ref }}
          path: apps/text

      - name: Set up php ${{ matrix.php-versions }}
        uses: shivammathur/setup-php@2.27.1
        with:
          php-version: ${{ matrix.php-versions }}
          extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, zip, gd, apcu
          ini-values:
            apc.enable_cli=on
          coverage: none

      - name: Set up Nextcloud
        env:
          DB_PORT: 4444
          PHP_CLI_SERVER_WORKERS: 10
        run: |
          mkdir data
          php occ maintenance:install --verbose --database=${{ matrix.databases }} --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
          php occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu"
          php occ config:system:set debug --value=true --type=boolean
          php -f index.php
          php -S 0.0.0.0:8081 &
          export OC_PASS=1234561
          php occ user:add --password-from-env user1
          php occ user:add --password-from-env user2
          php occ app:enable deck
          php occ app:list
          cd apps/deck
          composer install --no-dev
          npm ci
          npm run build
          cd ../../
          curl -v http://localhost:8081/index.php/login

      - name: Cypress run
        uses: cypress-io/github-action@v6
        with:
          record: false
          parallel: false
          wait-on: '${{ env.CYPRESS_baseUrl }}'
          working-directory: 'apps/${{ env.APP_NAME }}'
          config: defaultCommandTimeout=10000,video=false
        env:
          CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
          npm_package_name: ${{ env.APP_NAME }}

      - name: Upload test failure screenshots
        uses: actions/upload-artifact@v3
        if: failure()
        with:
          name: Upload screenshots
          path: apps/${{ env.APP_NAME }}/cypress/screenshots/
          retention-days: 5

      - name: Upload nextcloud logs
        uses: actions/upload-artifact@v3
        if: failure()
        with:
          name: Upload nextcloud log
          path: data/nextcloud.log
          retention-days: 5
