# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors # SPDX-License-Identifier: MIT name: Integration Federation on: pull_request: schedule: - cron: "5 2 * * *" permissions: contents: read concurrency: group: integration-federation-${{ 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/**' - 'appinfo/**' - 'lib/**' - 'templates/**' - 'tests/integration/**' - 'vendor/**' - 'vendor-bin/**' - '.php-cs-fixer.dist.php' - 'composer.json' - 'composer.lock' integration-federation: runs-on: ubuntu-latest needs: changes if: needs.changes.outputs.src != 'false' name: Federation ${{ matrix.host-server-versions }} (${{ matrix.host-db }}) -> ${{ matrix.remote-server-versions }} (${{ matrix.remote-db }}) strategy: fail-fast: false matrix: include: - test-suite: 'federation' php-versions: '8.2' host-db: 'oci' host-server-versions: 'stable32' host-spreed-versions: ${{ github.event.pull_request.head.sha }} host-guests-versions: 'main' host-circles-versions: 'stable32' host-notifications-versions: 'stable32' remote-db: 'mysql' remote-server-versions: 'stable31' remote-spreed-versions: 'stable31' remote-guests-versions: 'stable-4.6' remote-circles-versions: 'stable31' remote-notifications-versions: 'stable31' - test-suite: 'federation' php-versions: '8.2' host-db: 'pgsql' host-server-versions: 'stable32' host-spreed-versions: ${{ github.event.pull_request.head.sha }} host-guests-versions: 'main' host-circles-versions: 'stable32' host-notifications-versions: 'stable32' remote-db: 'mysql' remote-server-versions: 'stable31' remote-spreed-versions: 'stable31' remote-guests-versions: 'stable-4.6' remote-circles-versions: 'stable31' remote-notifications-versions: 'stable31' - test-suite: 'federation' php-versions: '8.2' host-db: 'oci' host-server-versions: 'stable31' host-spreed-versions: 'stable31' host-guests-versions: 'stable-4.6' host-circles-versions: 'stable31' host-notifications-versions: 'stable31' remote-db: 'mysql' remote-server-versions: 'stable32' remote-spreed-versions: ${{ github.event.pull_request.head.sha }} remote-guests-versions: 'main' remote-circles-versions: 'stable32' remote-notifications-versions: 'stable32' services: oracle: image: ghcr.io/gvenzl/oracle-xe:11 # Provide passwords and other environment variables to container env: ORACLE_RANDOM_PASSWORD: true APP_USER: autotest APP_USER_PASSWORD: owncloud # Forward Oracle port ports: - 1521:1521/tcp # Provide healthcheck script options for startup options: >- --health-cmd healthcheck.sh --health-interval 10s --health-timeout 5s --health-retries 10 mysql: image: ghcr.io/nextcloud/continuous-integration-mysql-8.4:latest # zizmor: ignore[unpinned-images] ports: - 4444:3306/tcp env: MYSQL_ROOT_PASSWORD: rootpassword options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10 postgres: image: ghcr.io/nextcloud/continuous-integration-postgres-16:latest # zizmor: ignore[unpinned-images] ports: - 4445: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: Set app env run: | # Split and keep last echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV - name: Checkout server - Host uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false path: host submodules: true repository: nextcloud/server ref: ${{ matrix.host-server-versions }} - name: Checkout spreed app - Host uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false path: host/apps/spreed ref: ${{ matrix.host-spreed-versions }} - name: Checkout circles app - Host uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false repository: nextcloud/circles path: host/apps/circles ref: ${{ matrix.host-circles-versions }} - name: Checkout guests app - Host uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false repository: nextcloud/guests path: host/apps/guests ref: ${{ matrix.host-guests-versions }} - name: Checkout notifications app - Host uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false repository: nextcloud/notifications path: host/apps/notifications ref: ${{ matrix.host-notifications-versions }} - name: Checkout server - Remote uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false path: remote submodules: true repository: nextcloud/server ref: ${{ matrix.remote-server-versions }} - name: Checkout spreed app - Remote uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false path: remote/apps/spreed ref: ${{ matrix.remote-spreed-versions }} - name: Checkout circles app - Remote uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false repository: nextcloud/circles path: remote/apps/circles ref: ${{ matrix.remote-circles-versions }} - name: Checkout guests app - Remote uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false repository: nextcloud/guests path: remote/apps/guests ref: ${{ matrix.remote-guests-versions }} - name: Checkout notifications app - Remote uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 with: persist-credentials: false repository: nextcloud/notifications path: remote/apps/notifications ref: ${{ matrix.remote-notifications-versions }} - name: Set up php ${{ matrix.php-versions }} uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 # v2.35.4 with: php-version: ${{ matrix.php-versions }} # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation extensions: apcu, bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, mysql, pdo_mysql, oci8, sqlite, pdo_sqlite coverage: none ini-file: development # Temporary workaround for missing pcntl_* in PHP 8.3: ini-values: apc.enable_cli=on ini-values: apc.enable_cli=on, disable_functions= env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Set up production dependencies - Host working-directory: host/apps/${{ env.APP_NAME }} run: composer i --no-dev - name: Set up production dependencies - Remote working-directory: remote/apps/${{ env.APP_NAME }} run: composer i --no-dev - name: Set up behat dependencies working-directory: host/apps/${{ env.APP_NAME }}/tests/integration run: composer i - name: Set up Nextcloud - Host (Postgres) if: ${{ matrix.host-db == 'pgsql' }} env: DB_PORT: 4445 working-directory: host/ run: | mkdir data ./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 - name: Set up Nextcloud - Host (Oracle) if: ${{ matrix.host-db == 'oci' }} env: DB_PORT: 1521 working-directory: host/ run: | mkdir data ./occ maintenance:install --verbose --database=oci --database-name=XE --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=autotest --database-pass=owncloud --admin-user admin --admin-pass admin - name: Set up Nextcloud - Host (MySQL) if: ${{ matrix.host-db == 'mysql' }} env: DB_PORT: 4444 working-directory: host/ run: | mkdir data ./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 - name: Set up Nextcloud - Remote (Postgres) if: ${{ matrix.remote-db == 'pgsql' }} env: DB_PORT: 4445 working-directory: remote/ run: | mkdir data ./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 - name: Set up Nextcloud - Remote (Oracle) if: ${{ matrix.remote-db == 'oracle' }} env: DB_PORT: 1521 working-directory: remote/ run: | mkdir data ./occ maintenance:install --verbose --database=oci --database-name=XE --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=autotest --database-pass=owncloud --admin-user admin --admin-pass admin - name: Set up Nextcloud - Remote (MySQL) if: ${{ matrix.remote-db == 'mysql' }} env: DB_PORT: 4444 working-directory: remote/ run: | mkdir data ./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 - name: Set up Nextcloud - Host (Shared) working-directory: host/ run: | ./occ config:system:set debug --value=true --type=boolean ./occ config:system:set hashing_default_password --value=true --type=boolean ./occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu" ./occ config:system:set memcache.distributed --value="\\OC\\Memcache\\APCu" ./occ app:enable --force ${{ env.APP_NAME }} ./occ app:enable --force circles ./occ app:enable --force guests ./occ app:enable --force notifications - name: Set up Nextcloud - Remote (Shared) working-directory: remote/ run: | ./occ config:system:set debug --value=true --type=boolean ./occ config:system:set hashing_default_password --value=true --type=boolean ./occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu" ./occ config:system:set memcache.distributed --value="\\OC\\Memcache\\APCu" ./occ app:enable --force ${{ env.APP_NAME }} ./occ app:enable --force circles ./occ app:enable --force guests ./occ app:enable --force notifications echo 'REMOTE_ROOT_DIR='$PWD >> $GITHUB_ENV - name: Run integration working-directory: host/apps/${{ env.APP_NAME }}/tests/integration run: REMOTE_ROOT_DIR=${{ env.REMOTE_ROOT_DIR }} bash run.sh features/${{ matrix.test-suite }} - name: Print logs - Host if: always() working-directory: host/ run: | cat data/nextcloud.log - name: Print logs - Remote if: always() working-directory: remote/ run: | cat data/nextcloud.log summary: permissions: contents: none runs-on: ubuntu-latest-low needs: [changes, integration-federation] if: always() name: integration-federation-summary steps: - name: Summary status run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-federation.result != 'success' }}; then exit 1; fi