From 5c8b39e98d769c50dbbda9c69e2d590bfe8943ab Mon Sep 17 00:00:00 2001 From: Ferdinand Thiessen Date: Thu, 11 Jun 2026 22:34:17 +0200 Subject: [PATCH] ci(files-external): consolidate workflows Signed-off-by: Ferdinand Thiessen --- .github/workflows/files-external-ftp.yml | 125 ----- .github/workflows/files-external-s3.yml | 193 ------- .github/workflows/files-external-sftp.yml | 114 ---- .../workflows/files-external-smb-kerberos.yml | 128 ----- .github/workflows/files-external-smb.yml | 125 ----- .github/workflows/files-external-webdav.yml | 114 ---- .github/workflows/files-external.yml | 507 +++++++++++++++++- 7 files changed, 489 insertions(+), 817 deletions(-) delete mode 100644 .github/workflows/files-external-ftp.yml delete mode 100644 .github/workflows/files-external-s3.yml delete mode 100644 .github/workflows/files-external-sftp.yml delete mode 100644 .github/workflows/files-external-smb-kerberos.yml delete mode 100644 .github/workflows/files-external-smb.yml delete mode 100644 .github/workflows/files-external-webdav.yml diff --git a/.github/workflows/files-external-ftp.yml b/.github/workflows/files-external-ftp.yml deleted file mode 100644 index 90f728b870282..0000000000000 --- a/.github/workflows/files-external-ftp.yml +++ /dev/null @@ -1,125 +0,0 @@ -# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors -# SPDX-License-Identifier: MIT -name: PHPUnit files_external FTP -on: - pull_request: - schedule: - - cron: "5 2 * * *" - -permissions: - contents: read - -concurrency: - group: files-external-ftp-${{ 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@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 - id: changes - continue-on-error: true - with: - filters: | - src: - - '.github/workflows/**' - - '3rdparty/**' - - 'vendor/**' - - 'vendor-bin/**' - - 'composer.json' - - 'composer.lock' - - 'apps/files/lib/**' - - 'apps/files/tests/**' - - 'apps/files_external/**' - - 'apps/files_sharing/lib/**' - - 'apps/files_sharing/tests/**' - - 'apps/files_trashbin/lib/**' - - 'apps/files_trashbin/tests/**' - - 'apps/files_versions/lib/**' - - 'apps/files_versions/tests/**' - - 'lib/private/Files/**' - - 'lib/public/Files/**' - - 'tests/lib/Files/**' - - files-external-ftp: - runs-on: ubuntu-latest - needs: changes - - if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} - - strategy: - fail-fast: false - matrix: - php-versions: ['8.3', '8.5'] - ftpd: ['proftpd', 'vsftpd', 'pure-ftpd'] - - name: php${{ matrix.php-versions }}-${{ matrix.ftpd }} - - steps: - - name: Checkout server - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - persist-credentials: false - submodules: true - - - name: Set up ftpd - run: | - sudo mkdir /tmp/ftp - sudo chmod -R 0777 /tmp/ftp - if [[ "${{ matrix.ftpd }}" == 'proftpd' ]]; then echo '$6$Q7V2n3q2GRVv5YeQ$/AhLu07H76Asojy7bxGXMY1caKLAbp5Vt82LOZYMkD/8uDzyMAEXwk0c1Bdz1DkBsk2Vh/9SF130mOPavRGMo.' > /tmp/secret.txt; fi - if [[ "${{ matrix.ftpd }}" == 'proftpd' ]]; then echo 'FTP_ROOT=/home/test' > $GITHUB_ENV; fi - if [[ "${{ matrix.ftpd }}" == 'proftpd' ]]; then docker run --name ftp -d --net host -e PASV_ADDRESS=127.0.0.1 -e FTPUSER_NAME=test -v /tmp/secret.txt:/run/secrets/ftp-user-password-secret -v /tmp/ftp:/home/test instantlinux/proftpd; fi - if [[ "${{ matrix.ftpd }}" == 'vsftpd' ]]; then docker run --name ftp -d --net host -e FTP_USER=test -e FTP_PASS=test -e PASV_ADDRESS=127.0.0.1 -v /tmp/ftp:/home/vsftpd/test fauria/vsftpd; fi - if [[ "${{ matrix.ftpd }}" == 'pure-ftpd' ]]; then docker run --name ftp -d --net host -e "PUBLICHOST=localhost" -e FTP_USER_NAME=test -e FTP_USER_PASS=test -e FTP_USER_HOME=/home/test -v /tmp/ftp:/home/test -v /tmp/ftp:/etc/pure-ftpd/passwd stilliard/pure-ftpd; fi - - - name: Set up php ${{ matrix.php-versions }} - uses: shivammathur/setup-php@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc #v2.37.1 - 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, sqlite, pdo_sqlite - coverage: none - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Set up Nextcloud - run: | - composer install - mkdir data - ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password - ./occ app:enable --force files_external - echo " true,'host' => 'localhost','user' => 'test','password' => 'test', 'root' => '${{ env.FTP_ROOT }}'];" > apps/files_external/tests/config.ftp.php - - - name: smoketest ftp - run: | - php -r 'var_dump(file_put_contents("ftp://test:test@localhost${{ env.FTP_ROOT }}/ftp.txt", "asd"));' - php -r 'var_dump(file_get_contents("ftp://test:test@localhost${{ env.FTP_ROOT }}/ftp.txt"));' - php -r 'var_dump(mkdir("ftp://test:test@localhost${{ env.FTP_ROOT }}/asdads"));' - ls -l /tmp/ftp - [ -f /tmp/ftp/ftp.txt ] - - - name: PHPUnit - run: composer run test:files_external -- \ - apps/files_external/tests/Storage/FtpTest.php \ - --log-junit junit.xml - - - name: ftpd logs - if: always() - run: | - docker logs ftp - - ftp-summary: - runs-on: ubuntu-latest-low - needs: [changes, files-external-ftp] - - if: always() - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-ftp.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/files-external-s3.yml b/.github/workflows/files-external-s3.yml deleted file mode 100644 index e06bab1314115..0000000000000 --- a/.github/workflows/files-external-s3.yml +++ /dev/null @@ -1,193 +0,0 @@ -# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors -# SPDX-License-Identifier: MIT -name: PHPUnit files_external S3 -on: - pull_request: - schedule: - - cron: "5 2 * * *" - -permissions: - contents: read - -concurrency: - group: files-external-s3-${{ 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@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 - id: changes - continue-on-error: true - with: - filters: | - src: - - '.github/workflows/**' - - '3rdparty/**' - - 'vendor/**' - - 'vendor-bin/**' - - 'composer.json' - - 'composer.lock' - - 'apps/files/lib/**' - - 'apps/files/tests/**' - - 'apps/files_external/**' - - 'apps/files_sharing/lib/**' - - 'apps/files_sharing/tests/**' - - 'apps/files_trashbin/lib/**' - - 'apps/files_trashbin/tests/**' - - 'apps/files_versions/lib/**' - - 'apps/files_versions/tests/**' - - 'lib/private/Files/**' - - 'lib/public/Files/**' - - 'tests/lib/Files/**' - - files-external-s3-minio: - runs-on: ubuntu-latest - needs: changes - - if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} - - strategy: - fail-fast: false - matrix: - php-versions: ['8.3', '8.5'] - - name: php${{ matrix.php-versions }}-s3-minio - - services: - minio: - image: bitnami/minio@sha256:50cec18ac4184af4671a78aedd5554942c8ae105d51a465fa82037949046da01 # v2025.4.22 - env: - MINIO_ROOT_USER: nextcloud - MINIO_ROOT_PASSWORD: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ= - MINIO_DEFAULT_BUCKETS: nextcloud - ports: - - '9000:9000' - - 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@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc #v2.37.1 - 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, sqlite, pdo_sqlite - coverage: none - ini-file: development - ini-values: disable_functions="" - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Set up Nextcloud - env: - OBJECT_STORE_KEY: nextcloud - OBJECT_STORE_SECRET: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ= - run: | - composer install - ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password - ./occ app:enable --force files_external - echo " true, 'minio' => true, 'secret' => 'actually-not-secret', 'passwordsalt' => 'actually-not-secret', 'hostname' => 'localhost','key' => '$OBJECT_STORE_KEY','secret' => '$OBJECT_STORE_SECRET', 'bucket' => 'bucket', 'port' => 9000, 'use_ssl' => false, 'autocreate' => true, 'use_path_style' => true];" > apps/files_external/tests/config.amazons3.php - - - name: Wait for S3 - run: | - curl -f -m 1 --retry-connrefused --retry 10 --retry-delay 10 http://localhost:9000/minio/health/ready - - - name: PHPUnit - run: | - composer run test:files_external -- \ - --group S3 \ - --log-junit junit.xml \ - apps/files_external/tests/Storage - - - name: Nextcloud logs - if: always() - run: | - cat data/nextcloud.log - - - name: S3 logs - if: always() - run: | - docker ps -a - docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done - - files-external-s3-localstack: - runs-on: ubuntu-latest - needs: changes - - if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} - - strategy: - matrix: - php-versions: ['8.3', '8.5'] - - name: php${{ matrix.php-versions }}-s3-localstack - - services: - localstack: - env: - SERVICES: s3 - DEBUG: 1 - image: localstack/localstack@sha256:9d4253786e0effe974d77fe3c390358391a56090a4fff83b4600d8a64404d95d # v4.5.0 - ports: - - "4566:4566" - - 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@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc #v2.37.1 - 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, sqlite, pdo_sqlite - coverage: none - ini-file: development - ini-values: disable_functions="" - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Set up Nextcloud - run: | - composer install - ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password - ./occ app:enable --force files_external - echo " true, 'localstack' => true, 'hostname' => 'localhost','key' => 'ignored','secret' => 'ignored', 'bucket' => 'bucket', 'port' => 4566, 'use_ssl' => false, 'autocreate' => true, 'use_path_style' => true];" > apps/files_external/tests/config.amazons3.php - - - name: PHPUnit - run: | - composer run test:files_external -- \ - --group S3 \ - --log-junit junit.xml \ - apps/files_external/tests/Storage - - - name: S3 logs - if: always() - run: | - docker ps -a - docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done - - s3-external-summary: - runs-on: ubuntu-latest-low - needs: [changes, files-external-s3-minio, files-external-s3-localstack] - - if: always() - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && (needs.files-external-s3-minio.result != 'success' || needs.files-external-s3-localstack.result != 'success') }}; then exit 1; fi diff --git a/.github/workflows/files-external-sftp.yml b/.github/workflows/files-external-sftp.yml deleted file mode 100644 index 2b7e146d71d46..0000000000000 --- a/.github/workflows/files-external-sftp.yml +++ /dev/null @@ -1,114 +0,0 @@ -# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors -# SPDX-License-Identifier: MIT -name: PHPUnit files_external sFTP -on: - pull_request: - schedule: - - cron: "5 2 * * *" - -permissions: - contents: read - -concurrency: - group: files-external-sftp-${{ 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@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 - id: changes - continue-on-error: true - with: - filters: | - src: - - '.github/workflows/**' - - '3rdparty/**' - - 'vendor/**' - - 'vendor-bin/**' - - 'composer.json' - - 'composer.lock' - - 'apps/files/lib/**' - - 'apps/files/tests/**' - - 'apps/files_external/**' - - 'apps/files_sharing/lib/**' - - 'apps/files_sharing/tests/**' - - 'apps/files_trashbin/lib/**' - - 'apps/files_trashbin/tests/**' - - 'apps/files_versions/lib/**' - - 'apps/files_versions/tests/**' - - 'lib/private/Files/**' - - 'lib/public/Files/**' - - 'tests/lib/Files/**' - - files-external-sftp: - runs-on: ubuntu-latest - needs: changes - - if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} - - strategy: - fail-fast: false - matrix: - php-versions: ['8.3', '8.5'] - sftpd: ['openssh'] - - name: php${{ matrix.php-versions }}-${{ matrix.sftpd }} - - steps: - - name: Checkout server - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - persist-credentials: false - submodules: true - - - name: Set up sftpd - run: | - sudo mkdir /tmp/sftp - sudo chmod -R 0777 /tmp/sftp - if [[ '${{ matrix.sftpd }}' == 'openssh' ]]; then docker run -p 2222:22 --name sftp -d -v /tmp/sftp:/home/test atmoz/sftp 'test:test:::data'; fi - - - name: Set up php ${{ matrix.php-versions }} - uses: shivammathur/setup-php@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc #v2.37.1 - 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, sqlite, pdo_sqlite - coverage: none - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Set up Nextcloud - run: | - composer install - mkdir data - ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password - ./occ app:enable --force files_external - echo " true, 'host' => 'localhost:2222','user' => 'test','password' => 'test', 'root' => 'data'];" > apps/files_external/tests/config.sftp.php - - - name: PHPUnit - run: composer run test:files_external -- \ - apps/files_external/tests/Storage/SftpTest.php \ - --log-junit junit.xml - - - name: sftpd logs - if: always() - run: | - ls -l /tmp/sftp - docker logs sftp - - sftp-summary: - runs-on: ubuntu-latest-low - needs: [changes, files-external-sftp] - - if: always() - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-sftp.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/files-external-smb-kerberos.yml b/.github/workflows/files-external-smb-kerberos.yml deleted file mode 100644 index cc123ff766a0e..0000000000000 --- a/.github/workflows/files-external-smb-kerberos.yml +++ /dev/null @@ -1,128 +0,0 @@ -# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors -# SPDX-License-Identifier: MIT -name: Samba Kerberos SSO -on: - pull_request: - schedule: - - cron: "5 2 * * *" - -permissions: - contents: read - -concurrency: - group: files-external-smb-kerberos-${{ 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@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 - id: changes - continue-on-error: true - with: - filters: | - src: - - '.github/workflows/**' - - '3rdparty/**' - - 'vendor/**' - - 'vendor-bin/**' - - 'composer.json' - - 'composer.lock' - - 'apps/files/lib/**' - - 'apps/files/tests/**' - - 'apps/files_external/**' - - 'apps/files_sharing/lib/**' - - 'apps/files_sharing/tests/**' - - 'apps/files_trashbin/lib/**' - - 'apps/files_trashbin/tests/**' - - 'apps/files_versions/lib/**' - - 'apps/files_versions/tests/**' - - 'lib/private/Files/**' - - 'lib/public/Files/**' - - 'tests/lib/Files/**' - - files-external-smb-kerberos: - runs-on: ubuntu-latest - needs: changes - - if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} - - name: smb-kerberos-sso - - steps: - - name: Checkout server - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - persist-credentials: false - submodules: true - - - name: Checkout user_saml - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - with: - persist-credentials: false - repository: nextcloud/user_saml - path: apps/user_saml - - - name: Install user_saml - run: | - cd apps/user_saml - composer i - cd ../.. - - - name: Pull images - run: | - docker pull ghcr.io/icewind1991/samba-krb-test-dc - docker pull ghcr.io/icewind1991/samba-krb-test-apache-gssapi:8.4 - docker pull ghcr.io/icewind1991/samba-krb-test-client - docker tag ghcr.io/icewind1991/samba-krb-test-dc icewind1991/samba-krb-test-dc - docker tag ghcr.io/icewind1991/samba-krb-test-apache-gssapi:8.4 icewind1991/samba-krb-test-apache-gssapi - docker tag ghcr.io/icewind1991/samba-krb-test-client icewind1991/samba-krb-test-client - - - name: Setup AD-DC - run: | - DC_IP=$(apps/files_external/tests/sso-setup/start-dc.sh) - sleep 1 - apps/files_external/tests/sso-setup/start-apache.sh $DC_IP $PWD - echo "DC_IP=$DC_IP" >> $GITHUB_ENV - - - name: Set up Nextcloud - run: | - apps/files_external/tests/sso-setup/setup-sso-nc.sh - - - name: Test SSO - run: | - apps/files_external/tests/sso-setup/test-sso-smb.sh ${{ env.DC_IP }} - - - name: Show logs DC - if: always() - run: | - docker logs dc - echo "------------" - docker exec dc cat /var/log/samba/log.samba - - - name: Show logs Apache - if: always() - run: | - docker logs apache - - - name: Show logs - if: always() - run: | - FILEPATH=$(docker exec --user 33 apache ./occ log:file | grep "Log file:" | cut -d' ' -f3) - echo "$FILEPATH:" - docker exec --user 33 apache cat $FILEPATH - - smb-kerberos-sso-summary: - runs-on: ubuntu-latest-low - needs: [changes, files-external-smb-kerberos] - - if: always() - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-smb-kerberos.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/files-external-smb.yml b/.github/workflows/files-external-smb.yml deleted file mode 100644 index 7383fd1d8df81..0000000000000 --- a/.github/workflows/files-external-smb.yml +++ /dev/null @@ -1,125 +0,0 @@ -# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors -# SPDX-License-Identifier: MIT -name: PHPUnit files_external SMB -on: - pull_request: - schedule: - - cron: "5 2 * * *" - -permissions: - contents: read - -concurrency: - group: files-external-smb-${{ 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@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 - id: changes - continue-on-error: true - with: - filters: | - src: - - '.github/workflows/**' - - '3rdparty/**' - - 'vendor/**' - - 'vendor-bin/**' - - 'composer.json' - - 'composer.lock' - - 'apps/files/lib/**' - - 'apps/files/tests/**' - - 'apps/files_external/**' - - 'apps/files_sharing/lib/**' - - 'apps/files_sharing/tests/**' - - 'apps/files_trashbin/lib/**' - - 'apps/files_trashbin/tests/**' - - 'apps/files_versions/lib/**' - - 'apps/files_versions/tests/**' - - 'lib/private/Files/**' - - 'lib/public/Files/**' - - 'tests/lib/Files/**' - - files-external-smb: - runs-on: ubuntu-latest - needs: changes - - if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} - - strategy: - fail-fast: false - matrix: - php-versions: ['8.3', '8.5'] - - name: php${{ matrix.php-versions }}-smb - - services: - samba: - image: ghcr.io/servercontainers/samba:smbd-only-a3.18.0-s4.18.2-r0 - env: - ACCOUNT_test: test - UID_test: 1000 - SAMBA_VOLUME_CONFIG_test: "[public]; path=/tmp; valid users = test; guest ok = no; read only = no; browseable = yes" - options: >- - --health-cmd=true - ports: - - 445:445 - - 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@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc #v2.37.1 - 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, smbclient, sqlite, pdo_sqlite - coverage: none - ini-file: development - ini-values: disable_functions="" - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Set up smbclient - # This is needed as icewind/smb php library for notify - run: | - sudo apt-get update - sudo apt-get install -y smbclient - - - name: Set up Nextcloud - run: | - composer install - ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password - ./occ config:system:set --value true --type boolean allow_local_remote_servers - ./occ app:enable --force files_external - echo "true, 'host'=>'localhost', 'user'=>'test', 'password'=>'test', 'root'=>'', 'share'=>'public'];" > apps/files_external/tests/config.smb.php - - - name: Wait for smb - run: | - apps/files_external/tests/env/wait-for-connection 127.0.0.1 445 60 - - - name: PHPUnit - run: composer run test:files_external -- \ - apps/files_external/tests/Storage/SmbTest.php \ - --log-junit junit.xml - - files-external-smb-summary: - runs-on: ubuntu-latest-low - needs: [changes, files-external-smb] - - if: always() - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-smb.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/files-external-webdav.yml b/.github/workflows/files-external-webdav.yml deleted file mode 100644 index 408df4a43ca6d..0000000000000 --- a/.github/workflows/files-external-webdav.yml +++ /dev/null @@ -1,114 +0,0 @@ -# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors -# SPDX-License-Identifier: MIT -name: PHPUnit files_external WebDAV -on: - pull_request: - schedule: - - cron: "5 2 * * *" - -permissions: - contents: read - -concurrency: - group: files-external-webdav-${{ 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@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 - id: changes - continue-on-error: true - with: - filters: | - src: - - '.github/workflows/**' - - '3rdparty/**' - - 'vendor/**' - - 'vendor-bin/**' - - 'composer.json' - - 'composer.lock' - - 'apps/files/lib/**' - - 'apps/files/tests/**' - - 'apps/files_external/**' - - 'apps/files_sharing/lib/**' - - 'apps/files_sharing/tests/**' - - 'apps/files_trashbin/lib/**' - - 'apps/files_trashbin/tests/**' - - 'apps/files_versions/lib/**' - - 'apps/files_versions/tests/**' - - 'lib/private/Files/**' - - 'lib/public/Files/**' - - 'tests/lib/Files/**' - - files-external-webdav-apache: - runs-on: ubuntu-latest - needs: changes - - if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} - - strategy: - fail-fast: false - matrix: - php-versions: ['8.3', '8.5'] - - name: php${{ matrix.php-versions }}-webdav - - services: - apache: - image: ghcr.io/nextcloud/continuous-integration-webdav-apache:latest # zizmor: ignore[unpinned-images] - ports: - - 8081:80 - - 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@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc #v2.37.1 - 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, sqlite, pdo_sqlite - coverage: none - ini-file: development - ini-values: disable_functions="" - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Set up Nextcloud - run: | - composer install - ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password - ./occ config:system:set --value true --type boolean allow_local_remote_servers - ./occ app:enable --force files_external - echo " true, 'host' => 'localhost:8081/webdav/', 'user' => 'test', 'password'=>'pass', 'root' => '', 'wait' => 0];" > apps/files_external/tests/config.webdav.php - - - name: Wait for WebDAV - run: | - sleep 5 - curl -f -m 1 --retry-connrefused --retry 10 --retry-delay 10 http://test:pass@localhost:8081/webdav/ - - - name: PHPUnit - run: composer run test:files_external -- \ - apps/files_external/tests/Storage/WebdavTest.php \ - --log-junit junit.xml - - files-external-webdav-summary: - runs-on: ubuntu-latest-low - needs: [changes, files-external-webdav-apache] - - if: always() - - steps: - - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-webdav-apache.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/files-external.yml b/.github/workflows/files-external.yml index 8334c3fcb0b51..1c82c9f25e5c5 100644 --- a/.github/workflows/files-external.yml +++ b/.github/workflows/files-external.yml @@ -1,6 +1,7 @@ # SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors # SPDX-License-Identifier: MIT -name: PHPUnit files_external generic + +name: PHPUnit files_external on: pull_request: schedule: @@ -10,7 +11,7 @@ permissions: contents: read concurrency: - group: files-external-generic-${{ github.head_ref || github.run_id }} + group: files-external-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: @@ -27,24 +28,15 @@ jobs: with: filters: | src: - - '.github/workflows/**' + - '.github/workflows/files-external*' - '3rdparty/**' - - 'vendor/**' - - 'vendor-bin/**' - - 'composer.json' - - 'composer.lock' - - 'apps/files/lib/**' - - 'apps/files/tests/**' - - 'apps/files_external/**' - - 'apps/files_sharing/lib/**' - - 'apps/files_sharing/tests/**' - - 'apps/files_trashbin/lib/**' - - 'apps/files_trashbin/tests/**' - - 'apps/files_versions/lib/**' - - 'apps/files_versions/tests/**' + - 'apps/files*/lib/**' + - 'apps/files*/tests/**' - 'lib/private/Files/**' - 'lib/public/Files/**' - 'tests/lib/Files/**' + - 'vendor*/**' + - 'composer.*' files-external-generic: runs-on: ubuntu-latest @@ -92,12 +84,491 @@ jobs: run: composer run test:files_external -- \ --log-junit junit.xml + files-external-ftp: + runs-on: ubuntu-latest + needs: changes + + if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} + + strategy: + fail-fast: false + matrix: + php-versions: ['8.3', '8.5'] + ftpd: ['proftpd', 'vsftpd', 'pure-ftpd'] + + name: php${{ matrix.php-versions }}-${{ matrix.ftpd }} + + steps: + - name: Checkout server + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + submodules: true + + - name: Set up ftpd + run: | + sudo mkdir /tmp/ftp + sudo chmod -R 0777 /tmp/ftp + if [[ "${{ matrix.ftpd }}" == 'proftpd' ]]; then echo '$6$Q7V2n3q2GRVv5YeQ$/AhLu07H76Asojy7bxGXMY1caKLAbp5Vt82LOZYMkD/8uDzyMAEXwk0c1Bdz1DkBsk2Vh/9SF130mOPavRGMo.' > /tmp/secret.txt; fi + if [[ "${{ matrix.ftpd }}" == 'proftpd' ]]; then echo 'FTP_ROOT=/home/test' > $GITHUB_ENV; fi + if [[ "${{ matrix.ftpd }}" == 'proftpd' ]]; then docker run --name ftp -d --net host -e PASV_ADDRESS=127.0.0.1 -e FTPUSER_NAME=test -v /tmp/secret.txt:/run/secrets/ftp-user-password-secret -v /tmp/ftp:/home/test instantlinux/proftpd; fi + if [[ "${{ matrix.ftpd }}" == 'vsftpd' ]]; then docker run --name ftp -d --net host -e FTP_USER=test -e FTP_PASS=test -e PASV_ADDRESS=127.0.0.1 -v /tmp/ftp:/home/vsftpd/test fauria/vsftpd; fi + if [[ "${{ matrix.ftpd }}" == 'pure-ftpd' ]]; then docker run --name ftp -d --net host -e "PUBLICHOST=localhost" -e FTP_USER_NAME=test -e FTP_USER_PASS=test -e FTP_USER_HOME=/home/test -v /tmp/ftp:/home/test -v /tmp/ftp:/etc/pure-ftpd/passwd stilliard/pure-ftpd; fi + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc #v2.37.1 + 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, sqlite, pdo_sqlite + coverage: none + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Nextcloud + run: | + composer install + mkdir data + ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password + ./occ app:enable --force files_external + echo " true,'host' => 'localhost','user' => 'test','password' => 'test', 'root' => '${{ env.FTP_ROOT }}'];" > apps/files_external/tests/config.ftp.php + + - name: smoketest ftp + run: | + php -r 'var_dump(file_put_contents("ftp://test:test@localhost${{ env.FTP_ROOT }}/ftp.txt", "asd"));' + php -r 'var_dump(file_get_contents("ftp://test:test@localhost${{ env.FTP_ROOT }}/ftp.txt"));' + php -r 'var_dump(mkdir("ftp://test:test@localhost${{ env.FTP_ROOT }}/asdads"));' + ls -l /tmp/ftp + [ -f /tmp/ftp/ftp.txt ] + + - name: PHPUnit + run: composer run test:files_external -- \ + apps/files_external/tests/Storage/FtpTest.php \ + --log-junit junit.xml + + - name: ftpd logs + if: always() + run: | + docker logs ftp + + files-external-s3-minio: + runs-on: ubuntu-latest + needs: changes + + if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} + + strategy: + fail-fast: false + matrix: + php-versions: ['8.3', '8.5'] + + name: php${{ matrix.php-versions }}-s3-minio + + services: + minio: + image: bitnami/minio@sha256:50cec18ac4184af4671a78aedd5554942c8ae105d51a465fa82037949046da01 # v2025.4.22 + env: + MINIO_ROOT_USER: nextcloud + MINIO_ROOT_PASSWORD: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ= + MINIO_DEFAULT_BUCKETS: nextcloud + ports: + - '9000:9000' + + 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@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc #v2.37.1 + 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, sqlite, pdo_sqlite + coverage: none + ini-file: development + ini-values: disable_functions="" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Nextcloud + env: + OBJECT_STORE_KEY: nextcloud + OBJECT_STORE_SECRET: bWluaW8tc2VjcmV0LWtleS1uZXh0Y2xvdWQ= + run: | + composer install + ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password + ./occ app:enable --force files_external + echo " true, 'minio' => true, 'secret' => 'actually-not-secret', 'passwordsalt' => 'actually-not-secret', 'hostname' => 'localhost','key' => '$OBJECT_STORE_KEY','secret' => '$OBJECT_STORE_SECRET', 'bucket' => 'bucket', 'port' => 9000, 'use_ssl' => false, 'autocreate' => true, 'use_path_style' => true];" > apps/files_external/tests/config.amazons3.php + + - name: Wait for S3 + run: | + curl -f -m 1 --retry-connrefused --retry 10 --retry-delay 10 http://localhost:9000/minio/health/ready + + - name: PHPUnit + run: | + composer run test:files_external -- \ + --group S3 \ + --log-junit junit.xml \ + apps/files_external/tests/Storage + + - name: Nextcloud logs + if: always() + run: | + cat data/nextcloud.log + + - name: S3 logs + if: always() + run: | + docker ps -a + docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done + + files-external-s3-localstack: + runs-on: ubuntu-latest + needs: changes + + if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} + + strategy: + matrix: + php-versions: ['8.3', '8.5'] + + name: php${{ matrix.php-versions }}-s3-localstack + + services: + localstack: + env: + SERVICES: s3 + DEBUG: 1 + image: localstack/localstack@sha256:9d4253786e0effe974d77fe3c390358391a56090a4fff83b4600d8a64404d95d # v4.5.0 + ports: + - "4566:4566" + + 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@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc #v2.37.1 + 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, sqlite, pdo_sqlite + coverage: none + ini-file: development + ini-values: disable_functions="" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Nextcloud + run: | + composer install + ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password + ./occ app:enable --force files_external + echo " true, 'localstack' => true, 'hostname' => 'localhost','key' => 'ignored','secret' => 'ignored', 'bucket' => 'bucket', 'port' => 4566, 'use_ssl' => false, 'autocreate' => true, 'use_path_style' => true];" > apps/files_external/tests/config.amazons3.php + + - name: PHPUnit + run: | + composer run test:files_external -- \ + --group S3 \ + --log-junit junit.xml \ + apps/files_external/tests/Storage + + - name: S3 logs + if: always() + run: | + docker ps -a + docker ps -aq | while read container ; do IMAGE=$(docker inspect --format='{{.Config.Image}}' $container); echo $IMAGE; docker logs $container; echo "\n\n" ; done + + files-external-sftp: + runs-on: ubuntu-latest + needs: changes + + if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} + + strategy: + fail-fast: false + matrix: + php-versions: ['8.3', '8.5'] + sftpd: ['openssh'] + + name: php${{ matrix.php-versions }}-${{ matrix.sftpd }} + + steps: + - name: Checkout server + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + submodules: true + + - name: Set up sftpd + run: | + sudo mkdir /tmp/sftp + sudo chmod -R 0777 /tmp/sftp + if [[ '${{ matrix.sftpd }}' == 'openssh' ]]; then docker run -p 2222:22 --name sftp -d -v /tmp/sftp:/home/test atmoz/sftp 'test:test:::data'; fi + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc #v2.37.1 + 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, sqlite, pdo_sqlite + coverage: none + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Nextcloud + run: | + composer install + mkdir data + ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password + ./occ app:enable --force files_external + echo " true, 'host' => 'localhost:2222','user' => 'test','password' => 'test', 'root' => 'data'];" > apps/files_external/tests/config.sftp.php + + - name: PHPUnit + run: composer run test:files_external -- \ + apps/files_external/tests/Storage/SftpTest.php \ + --log-junit junit.xml + + - name: sftpd logs + if: always() + run: | + ls -l /tmp/sftp + docker logs sftp + + files-external-smb: + runs-on: ubuntu-latest + needs: changes + + if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} + + strategy: + fail-fast: false + matrix: + php-versions: ['8.3', '8.5'] + + name: php${{ matrix.php-versions }}-smb + + services: + samba: + image: ghcr.io/servercontainers/samba:smbd-only-a3.18.0-s4.18.2-r0 + env: + ACCOUNT_test: test + UID_test: 1000 + SAMBA_VOLUME_CONFIG_test: "[public]; path=/tmp; valid users = test; guest ok = no; read only = no; browseable = yes" + options: >- + --health-cmd=true + ports: + - 445:445 + + 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@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc #v2.37.1 + 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, smbclient, sqlite, pdo_sqlite + coverage: none + ini-file: development + ini-values: disable_functions="" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up smbclient + # This is needed as icewind/smb php library for notify + run: | + sudo apt-get update + sudo apt-get install -y smbclient + + - name: Set up Nextcloud + run: | + composer install + ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password + ./occ config:system:set --value true --type boolean allow_local_remote_servers + ./occ app:enable --force files_external + echo "true, 'host'=>'localhost', 'user'=>'test', 'password'=>'test', 'root'=>'', 'share'=>'public'];" > apps/files_external/tests/config.smb.php + + - name: Wait for smb + run: | + apps/files_external/tests/env/wait-for-connection 127.0.0.1 445 60 + + - name: PHPUnit + run: composer run test:files_external -- \ + apps/files_external/tests/Storage/SmbTest.php \ + --log-junit junit.xml + + files-external-smb-kerberos: + runs-on: ubuntu-latest + needs: changes + + if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} + + name: smb-kerberos-sso + + steps: + - name: Checkout server + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + submodules: true + + - name: Checkout user_saml + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + repository: nextcloud/user_saml + path: apps/user_saml + + - name: Install user_saml + run: | + cd apps/user_saml + composer i + cd ../.. + + - name: Pull images + run: | + docker pull ghcr.io/icewind1991/samba-krb-test-dc + docker pull ghcr.io/icewind1991/samba-krb-test-apache-gssapi:8.4 + docker pull ghcr.io/icewind1991/samba-krb-test-client + docker tag ghcr.io/icewind1991/samba-krb-test-dc icewind1991/samba-krb-test-dc + docker tag ghcr.io/icewind1991/samba-krb-test-apache-gssapi:8.4 icewind1991/samba-krb-test-apache-gssapi + docker tag ghcr.io/icewind1991/samba-krb-test-client icewind1991/samba-krb-test-client + + - name: Setup AD-DC + run: | + DC_IP=$(apps/files_external/tests/sso-setup/start-dc.sh) + sleep 1 + apps/files_external/tests/sso-setup/start-apache.sh $DC_IP $PWD + echo "DC_IP=$DC_IP" >> $GITHUB_ENV + + - name: Set up Nextcloud + run: | + apps/files_external/tests/sso-setup/setup-sso-nc.sh + + - name: Test SSO + run: | + apps/files_external/tests/sso-setup/test-sso-smb.sh ${{ env.DC_IP }} + + - name: Show logs DC + if: always() + run: | + docker logs dc + echo "------------" + docker exec dc cat /var/log/samba/log.samba + + - name: Show logs Apache + if: always() + run: | + docker logs apache + + - name: Show logs + if: always() + run: | + FILEPATH=$(docker exec --user 33 apache ./occ log:file | grep "Log file:" | cut -d' ' -f3) + echo "$FILEPATH:" + docker exec --user 33 apache cat $FILEPATH + + files-external-webdav-apache: + runs-on: ubuntu-latest + needs: changes + + if: ${{ github.repository_owner != 'nextcloud-gmbh' && needs.changes.outputs.src != 'false' }} + + strategy: + fail-fast: false + matrix: + php-versions: ['8.3', '8.5'] + + name: php${{ matrix.php-versions }}-webdav + + services: + apache: + image: ghcr.io/nextcloud/continuous-integration-webdav-apache:latest # zizmor: ignore[unpinned-images] + ports: + - 8081:80 + + 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@7c071dfe9dc99bdf297fa79cb49ea005b9fcadbc #v2.37.1 + 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, sqlite, pdo_sqlite + coverage: none + ini-file: development + ini-values: disable_functions="" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Nextcloud + run: | + composer install + ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password + ./occ config:system:set --value true --type boolean allow_local_remote_servers + ./occ app:enable --force files_external + echo " true, 'host' => 'localhost:8081/webdav/', 'user' => 'test', 'password'=>'pass', 'root' => '', 'wait' => 0];" > apps/files_external/tests/config.webdav.php + + - name: Wait for WebDAV + run: | + sleep 5 + curl -f -m 1 --retry-connrefused --retry 10 --retry-delay 10 http://test:pass@localhost:8081/webdav/ + + - name: PHPUnit + run: composer run test:files_external -- \ + apps/files_external/tests/Storage/WebdavTest.php \ + --log-junit junit.xml + files-external-summary: runs-on: ubuntu-latest-low - needs: [changes, files-external-generic ] + needs: + - changes + - files-external-ftp + - files-external-generic + - files-external-s3-localstack + - files-external-s3-minio + - files-external-sftp + - files-external-smb + - files-external-smb-kerberos + - files-external-webdav-apache if: always() steps: - name: Summary status - run: if ${{ needs.changes.outputs.src != 'false' && needs.files-external-generic.result != 'success' }}; then exit 1; fi + run: | + # early return if no workflow run was needed - all ok + if ${{ needs.changes.outputs.src == 'false' }}; then + exit 0; + fi + # check for all required sub-tasks + if ${{ needs.files-external-ftp.result != 'success' }}; then exit 1; fi + if ${{ needs.files-external-generic.result != 'success' }}; then exit 1; fi + if ${{ needs.files-external-s3-localstack.result != 'success' }}; then exit 1; fi + if ${{ needs.files-external-s3-minio.result != 'success' }}; then exit 1; fi + if ${{ needs.files-external-sftp.result != 'success' }}; then exit 1; fi + if ${{ needs.files-external-smb.result != 'success' }}; then exit 1; fi + if ${{ needs.files-external-smb-kerberos.result != 'success' }}; then exit 1; fi + if ${{ needs.files-external-webdav-apache.result != 'success' }}; then exit 1; fi