ci: Run tests with sharding #3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors | |
# SPDX-License-Identifier: MIT | |
name: Behat | |
on: pull_request | |
permissions: | |
contents: read | |
concurrency: | |
group: behat-mysql-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
env: | |
# Location of the behat.yml file | |
BEHAT_CONFIG: ./tests/Integration/config/behat.yml | |
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/**' | |
- 'appinfo/**' | |
- 'lib/**' | |
- 'templates/**' | |
- 'tests/**' | |
- 'vendor/**' | |
- 'vendor-bin/**' | |
- '.php-cs-fixer.dist.php' | |
- 'composer.json' | |
- 'composer.lock' | |
behat-mysql: | |
runs-on: ubuntu-latest | |
needs: changes | |
if: needs.changes.outputs.src != 'false' | |
strategy: | |
matrix: | |
php-versions: ['8.2'] | |
server-versions: ['stable27', 'master'] | |
mysql-versions: ['8.4'] | |
services: | |
mysql: | |
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest | |
ports: | |
- 4444:3306/tcp | |
env: | |
MYSQL_ROOT_PASSWORD: rootpassword | |
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10 | |
shard1: | |
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest | |
ports: | |
- 5001:3306/tcp | |
env: | |
MYSQL_ROOT_PASSWORD: rootpassword | |
MYSQL_USER: oc_autotest | |
MYSQL_PASSWORD: nextcloud | |
MYSQL_DATABASE: nextcloud | |
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10 | |
shard2: | |
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest | |
ports: | |
- 5002:3306/tcp | |
env: | |
MYSQL_ROOT_PASSWORD: rootpassword | |
MYSQL_USER: oc_autotest | |
MYSQL_PASSWORD: nextcloud | |
MYSQL_DATABASE: nextcloud | |
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10 | |
shard3: | |
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest | |
ports: | |
- 5003:3306/tcp | |
env: | |
MYSQL_ROOT_PASSWORD: rootpassword | |
MYSQL_USER: oc_autotest | |
MYSQL_PASSWORD: nextcloud | |
MYSQL_DATABASE: nextcloud | |
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10 | |
shard4: | |
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest | |
ports: | |
- 5004:3306/tcp | |
env: | |
MYSQL_ROOT_PASSWORD: rootpassword | |
MYSQL_USER: oc_autotest | |
MYSQL_PASSWORD: nextcloud | |
MYSQL_DATABASE: nextcloud | |
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10 | |
steps: | |
- name: Set app env | |
run: | | |
# Split and keep last | |
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV | |
- name: Checkout server | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
submodules: true | |
repository: nextcloud/server | |
ref: ${{ matrix.server-versions }} | |
- name: Checkout circles app | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
repository: nextcloud/circles | |
path: apps/circles | |
ref: ${{ matrix.server-versions }} | |
- name: Checkout app | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
path: apps/${{ env.APP_NAME }} | |
- name: Set up php ${{ matrix.php-versions }} | |
uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # 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, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, mysql, pdo_mysql | |
coverage: none | |
ini-file: development | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install composer dependencies | |
working-directory: apps/${{ env.APP_NAME }} | |
run: composer i | |
- name: Set up Nextcloud | |
env: | |
DB_PORT: 4444 | |
SHARDING: 1 | |
run: | | |
mkdir data | |
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 | |
./occ config:system:set --value="http://localhost:8080" -- overwrite.cli.url | |
./occ app:enable --force ${{ env.APP_NAME }} | |
for user in alice bob jane john; do \ | |
OC_PASS="$user" ./occ user:add --password-from-env "$user"; \ | |
done | |
./occ group:add "Bobs Group" | |
for user in bob jane; do \ | |
OC_PASS="$user" ./occ group:adduser "Bobs Group" "$user"; \ | |
done | |
- name: Run Nextcloud | |
run: php -S localhost:8080 & | |
- name: Behat integration | |
working-directory: apps/${{ env.APP_NAME }} | |
run: ./vendor/bin/behat --config=${{ env.BEHAT_CONFIG }} --profile ci | |
summary: | |
permissions: | |
contents: none | |
runs-on: ubuntu-latest-low | |
needs: [changes, behat-mysql] | |
if: always() | |
name: behat-mysql-summary | |
steps: | |
- name: Summary status | |
run: if ${{ needs.changes.outputs.src != 'false' && needs.behat-mysql.result != 'success' }}; then exit 1; fi |