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.2' ] server-versions: [ 'stable30' ] env: extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, zip, gd, apcu key: cache-v1 services: postgres: image: ghcr.io/nextcloud/continuous-integration-postgres-14:latest ports: - 4444:5432/tcp env: POSTGRES_USER: root POSTGRES_PASSWORD: rootpassword POSTGRES_DB: nextcloud options: --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5 steps: - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4.0.3 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.1.7 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.1.7 with: path: apps/${{ env.APP_NAME }} - name: Checkout text uses: actions/checkout@v4.1.7 with: repository: nextcloud/text ref: ${{ env.text_app_ref }} path: apps/text - name: Setup cache environment id: extcache uses: shivammathur/cache-extensions@v1 with: php-version: ${{ matrix.php-versions }} extensions: ${{ env.extensions }} key: ${{ env.key }} - name: Cache extensions uses: actions/cache@v4 with: path: ${{ steps.extcache.outputs.dir }} key: ${{ steps.extcache.outputs.key }} restore-keys: ${{ steps.extcache.outputs.key }} - name: Set up php ${{ matrix.php-versions }} uses: shivammathur/setup-php@2.31.1 with: php-version: ${{ matrix.php-versions }} extensions: ${{ env.extensions }} ini-values: apc.enable_cli=on coverage: none - name: Install composer dependencies working-directory: apps/${{ env.APP_NAME }} run: | composer install --no-dev - name: Set up Nextcloud env: DB_PORT: 4444 PHP_CLI_SERVER_WORKERS: 20 run: | mkdir data echo '"\OC\Memcache\APCu","hashing_default_password"=>true];' > config/config.php php occ maintenance:install --verbose --database=pgsql --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 background:cron 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 curl -v http://localhost:8081/index.php/login - name: Cypress run uses: cypress-io/github-action@v6 with: build: npm run dev record: false parallel: false browser: chrome 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@v4 if: failure() with: name: Upload screenshots path: apps/${{ env.APP_NAME }}/cypress/screenshots/ retention-days: 5 - name: Upload nextcloud logs uses: actions/upload-artifact@v4 if: failure() with: name: Upload nextcloud log path: data/nextcloud.log retention-days: 5