aboutsummaryrefslogtreecommitdiffstats
path: root/.github/workflows/phpunit-oci.yml
blob: 1b607e879bb96f78c481f9547740811dda98c36e (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# 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: 2022-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT

name: PHPUnit OCI

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

permissions:
  contents: read

concurrency:
  group: phpunit-oci-${{ 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-oci:
    runs-on: ubuntu-latest

    needs: changes
    if: needs.changes.outputs.src != 'false' && ${{ github.repository_owner != 'nextcloud-gmbh' }}

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

    name: Oracle ${{ matrix.oracle-versions }} (PHP ${{ matrix.php-versions }}) - database tests

    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

      oracle:
        image: ghcr.io/gvenzl/oracle-xe:${{ matrix.oracle-versions }}

        # Provide passwords and other environment variables to container
        env:
          ORACLE_RANDOM_PASSWORD: true
          APP_USER: oc_autotest
          APP_USER_PASSWORD: nextcloud

        # Forward Oracle port
        ports:
          - 4444:1521/tcp

        # Provide healthcheck script options for startup
        options: >-
          --health-cmd healthcheck.sh
          --health-interval 10s
          --health-timeout 5s
          --health-retries 10

    steps:
      - name: Checkout server
        uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
        with:
          submodules: true

      - name: Set up php ${{ matrix.php-versions }}
        uses: shivammathur/setup-php@2e947f1f6932d141d076ca441d0e1e881775e95b #v2.31.0
        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, intl, json, libxml, mbstring, openssl, pcntl, posix, redis, session, simplexml, xmlreader, xmlwriter, zip, zlib, oci8
          coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
          ini-file: development
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Set up dependencies
        run: composer i

      - name: Set up Nextcloud
        env:
          DB_PORT: 4444
        run: |
          mkdir data
          cp tests/redis.config.php config/
          cp tests/preseed-config.php config/config.php
          ./occ maintenance:install --verbose --database=oci --database-name=XE --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=oc_autotest --database-pass=nextcloud --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
        run: composer run test:db ${{ matrix.coverage && ' -- --coverage-clover ./clover.db.xml' || '' }}

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

      - name: Run repair steps
        run: |
          ./occ maintenance:repair --include-expensive

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

    if: always()

    name: phpunit-oci-summary

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