mirror of
https://github.com/nextcloud/server.git
synced 2026-04-15 22:11:17 -04:00
Some (well all except sqlite) database platforms support timezone configuration. The problem is that we expect everything in UTC, but some servers might have set some different default (e.g. in database configuration or even just because of `TZ` environment variable). This causes incorrect values when expecting `NOW()` to return the current time in UTC. For PHP we already enforce UTC as timezone, this PR adds a middleware that enforces UTC also as the database connection / session timezone. Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
166 lines
5.4 KiB
YAML
166 lines
5.4 KiB
YAML
# 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 mysql
|
|
|
|
on:
|
|
pull_request:
|
|
schedule:
|
|
- cron: "5 2 * * *"
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: phpunit-mysql-${{ github.head_ref || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
changes:
|
|
runs-on: ubuntu-latest-low
|
|
permissions:
|
|
contents: read
|
|
pull-requests: read
|
|
|
|
outputs:
|
|
src: ${{ steps.changes.outputs.src }}
|
|
|
|
steps:
|
|
- uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
|
|
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-mysql:
|
|
runs-on: ubuntu-latest
|
|
|
|
needs: changes
|
|
if: needs.changes.outputs.src != 'false'
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
php-versions: ['8.2']
|
|
mysql-versions: ['8.0']
|
|
include:
|
|
- mysql-versions: '8.0'
|
|
php-versions: '8.3'
|
|
coverage: ${{ github.event_name != 'pull_request' }}
|
|
- mysql-versions: '8.4'
|
|
php-versions: '8.4'
|
|
- mysql-versions: '8.4'
|
|
php-versions: '8.5'
|
|
|
|
name: MySQL ${{ matrix.mysql-versions }} (PHP ${{ matrix.php-versions }}) - database tests
|
|
|
|
services:
|
|
cache:
|
|
image: ghcr.io/nextcloud/continuous-integration-redis:latest # zizmor: ignore[unpinned-images]
|
|
ports:
|
|
- 6379:6379/tcp
|
|
options: --health-cmd="redis-cli ping" --health-interval=10s --health-timeout=5s --health-retries=3
|
|
|
|
mysql:
|
|
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest # zizmor: ignore[unpinned-images]
|
|
ports:
|
|
- 4444:3306/tcp
|
|
env:
|
|
MYSQL_ROOT_PASSWORD: rootpassword
|
|
MYSQL_USER: oc_autotest
|
|
MYSQL_PASSWORD: nextcloud
|
|
MYSQL_DATABASE: oc_autotest
|
|
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10
|
|
|
|
steps:
|
|
- name: Checkout server
|
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
with:
|
|
persist-credentials: false
|
|
submodules: true
|
|
|
|
- name: Set up php ${{ matrix.php-versions }}
|
|
uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0
|
|
timeout-minutes: 5
|
|
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, mysql, pdo_mysql
|
|
coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
|
|
ini-file: development
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Set up dependencies
|
|
run: composer i
|
|
|
|
- name: Enable ONLY_FULL_GROUP_BY MySQL option
|
|
run: |
|
|
echo "SET GLOBAL sql_mode=(SELECT CONCAT(@@sql_mode,',ONLY_FULL_GROUP_BY'));" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
|
|
echo "SELECT @@sql_mode;" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
|
|
|
|
- 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=mysql --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 -f tests/enable_all.php
|
|
|
|
- name: PHPUnit
|
|
run: composer run test:db -- --log-junit junit.xml ${{ matrix.coverage && '--coverage-clover ./clover.db.xml' || '' }}
|
|
env:
|
|
DB_ROOT_USER: root
|
|
DB_ROOT_PASS: rootpassword
|
|
|
|
- name: Upload db code coverage
|
|
if: ${{ !cancelled() && matrix.coverage }}
|
|
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
|
|
with:
|
|
files: ./clover.db.xml
|
|
flags: phpunit-mysql
|
|
|
|
- name: Upload test results
|
|
if: ${{ !cancelled() }}
|
|
uses: codecov/test-results-action@0fa95f0e1eeaafde2c782583b36b28ad0d8c77d3 # v1.2.1
|
|
with:
|
|
flags: phpunit-mysql
|
|
|
|
- name: Print logs
|
|
if: always()
|
|
run: |
|
|
cat data/nextcloud.log
|
|
|
|
summary:
|
|
permissions:
|
|
contents: none
|
|
runs-on: ubuntu-latest-low
|
|
needs: [changes, phpunit-mysql]
|
|
|
|
if: always()
|
|
|
|
name: phpunit-mysql-summary
|
|
|
|
steps:
|
|
- name: Summary status
|
|
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-mysql.result != 'success' }}; then exit 1; fi
|