aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows/phpunit-nodb.yml
blob: 633c9e06448e489be614ea28d6167b0f47cc379e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
#
# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
#
# This is the testsuite running all non-database agnostic unit tests

name: PHPUnit nodb

on:
  pull_request:
  schedule:
    - cron: "5 2 * * *"

permissions:
  contents: read

concurrency:
  group: phpunit-nodb-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  changes:
    runs-on: ubuntu-latest-low

    outputs:
      src: ${{ steps.changes.outputs.src }}

    steps:
      - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
        id: changes
        continue-on-error: true
        with:
          filters: |
            src:
              - '.github/workflows/**'
              - '3rdparty/**'
              - '**/appinfo/**'
              - '**/lib/**'
              - '**/templates/**'
              - '**/tests/**'
              - 'vendor/**'
              - 'vendor-bin/**'
              - '.php-cs-fixer.dist.php'
              - 'composer.json'
              - 'composer.lock'
              - '**.php'

  phpunit-nodb:
    runs-on: ubuntu-latest

    needs: changes
    if: needs.changes.outputs.src != 'false'

    strategy:
      matrix:
        php-versions: ['8.1', '8.2', '8.3']
        include:
          - php-versions: '8.2'
            coverage: ${{ github.event_name != 'pull_request' }}

    name: No DB unit tests (PHP ${{ matrix.php-versions }})

    services:
      cache:
        image: ghcr.io/nextcloud/continuous-integration-redis:latest
        ports:
          - 6379:6379/tcp
        options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3

    steps:
      - name: Checkout server
        uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          submodules: true

      - name: Set up php ${{ matrix.php-versions }}
        uses: shivammathur/setup-php@7fdd3ece872ec7ec4c098ae5ab7637d5e0a96067 # v2
        with:
          php-version: ${{ matrix.php-versions }}
          # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
          extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, imagick, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
          coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
          ini-file: development
          # Required for tests that use pcntl
          ini-values: disable_functions=""
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Set up dependencies
        run: composer i

      - name: Set up Nextcloud
        run: |
          mkdir data
          cp tests/redis.config.php config/
          cp tests/preseed-config.php config/config.php
          ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
          php -f tests/enable_all.php | grep -i -C9999 error && echo "Error during app setup" && exit 1 || exit 0

      - name: PHPUnit nodb testsuite
        run: composer run test -- --exclude-group DB,SLOWDB ${{ matrix.coverage && ' --coverage-clover ./clover.nodb.xml' || '' }}

      - name: Upload nodb code coverage
        if: ${{ !cancelled() && matrix.coverage }}
        uses: codecov/codecov-action@v4.1.1
        with:
          files: ./clover.nodb.xml
          flags: phpunit-nodb

      - name: Print logs
        if: always()
        run: |
          cat data/nextcloud.log

  summary:
    permissions:
      contents: none
    runs-on: ubuntu-latest-low
    needs: [changes, phpunit-nodb]

    if: always()

    name: phpunit-nodb-summary

    steps:
      - name: Summary status
        run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-nodb.result != 'success' }}; then exit 1; fi