feat: manually refresh folder list #19499
Workflow file for this run
This file contains hidden or 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: 2019-2024 Nextcloud GmbH and Nextcloud contributors | |
| # SPDX-License-Identifier: MIT | |
| name: Test | |
| on: pull_request | |
| permissions: | |
| contents: read | |
| env: | |
| E2E_NODE_VERSION: "20" # TODO: Extract automatically using another action | |
| jobs: | |
| unit-tests: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| php-versions: ['8.2', '8.3'] | |
| nextcloud-versions: ['master', 'stable31'] | |
| include: | |
| - php-versions: '8.1' | |
| nextcloud-versions: 'stable32' | |
| - php-versions: '8.4' | |
| nextcloud-versions: 'stable32' | |
| - php-versions: '8.5' | |
| nextcloud-versions: 'master' | |
| name: Nextcloud ${{ matrix.nextcloud-versions }} php${{ matrix.php-versions }} unit tests | |
| steps: | |
| - name: Set up Nextcloud env | |
| uses: ChristophWurst/setup-nextcloud@fc0790385c175d97e88a7cb0933490de6e990374 # v0.3.2 | |
| with: | |
| nextcloud-version: ${{ matrix.nextcloud-versions }} | |
| php-version: ${{ matrix.php-versions }} | |
| php-coverage: 'xdebug' | |
| patch-php-version-check: ${{ matrix.php-versions == '8.5' }} | |
| node-version: 'false' | |
| install: true | |
| - name: Checkout Mail | |
| uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4 | |
| with: | |
| path: nextcloud/apps/mail | |
| fetch-depth: 2 | |
| - name: Install dependencies | |
| working-directory: nextcloud/apps/mail | |
| run: composer install | |
| - name: Run tests | |
| working-directory: nextcloud/apps/mail | |
| run: composer run test:unit | |
| if: ${{ matrix.php-versions == '8.3' }} | |
| env: | |
| XDEBUG_MODE: coverage | |
| - name: Run tests | |
| working-directory: nextcloud/apps/mail | |
| run: composer run test:unit | |
| if: ${{ matrix.php-versions != '8.3' }} | |
| env: | |
| XDEBUG_MODE: off | |
| - name: Report coverage | |
| uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 | |
| if: ${{ always() && matrix.php-versions == '8.3' }} | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| working-directory: nextcloud/apps/mail | |
| files: tests/clover.unit.xml | |
| flags: unittests | |
| fail_ci_if_error: ${{ !github.event.pull_request.head.repo.fork }} | |
| verbose: true | |
| integration-tests: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| php-versions: ['8.4'] | |
| nextcloud-versions: ['master'] | |
| db: ['sqlite', 'mysql', 'pgsql'] | |
| cache: ['nocache'] | |
| include: | |
| - php-versions: 8.1 | |
| nextcloud-versions: 'stable31' | |
| db: 'sqlite' | |
| cache: 'redis' | |
| - php-versions: 8.2 | |
| nextcloud-versions: 'stable31' | |
| db: 'pgsql' | |
| cache: 'redis' | |
| - php-versions: 8.3 | |
| nextcloud-versions: 'stable32' | |
| db: 'mysql' | |
| cache: 'redis' | |
| - php-versions: 8.4 | |
| nextcloud-versions: 'stable32' | |
| db: 'mysql' | |
| cache: 'redis' | |
| - php-versions: 8.5 | |
| nextcloud-versions: 'master' | |
| db: 'mysql' | |
| cache: 'redis' | |
| name: ${{ matrix.nextcloud-versions }} w/ php${{ matrix.php-versions }}-${{ matrix.db }}-${{ matrix.cache }} integration tests | |
| services: | |
| mail-service: | |
| image: ghcr.io/christophwurst/docker-imap-devel:latest | |
| env: | |
| MAILNAME: mail.domain.tld | |
| MAIL_ADDRESS: [email protected] | |
| MAIL_PASS: mypassword | |
| ports: | |
| - 25:25 | |
| - 143:143 | |
| - 993:993 | |
| - 4190:4190 | |
| mariadb-service: | |
| image: ghcr.io/nextcloud/continuous-integration-mariadb-11.4:latest | |
| env: | |
| MARIADB_ROOT_PASSWORD: my-secret-pw | |
| MARIADB_DATABASE: nextcloud | |
| MARIADB_USER: nextcloud | |
| MARIADB_PASSWORD: nextcloud | |
| ports: | |
| - 3306:3306/tcp | |
| options: >- | |
| --health-cmd="mariadb-admin ping" | |
| --health-interval=5s | |
| --health-timeout=2s | |
| --health-retries=5 | |
| postgres-service: | |
| image: ghcr.io/nextcloud/continuous-integration-postgres-15:latest | |
| env: | |
| POSTGRES_USER: nextcloud | |
| POSTGRES_DB: nextcloud | |
| POSTGRES_PASSWORD: nextcloud | |
| ports: | |
| - 5432:5432 | |
| options: >- | |
| --health-cmd pg_isready | |
| --health-interval 10s | |
| --health-timeout 5s | |
| --health-retries 5 | |
| redis: | |
| image: ghcr.io/nextcloud/continuous-integration-redis:latest | |
| options: >- | |
| --health-cmd "redis-cli ping" | |
| --health-interval 10s | |
| --health-timeout 5s | |
| --health-retries 5 | |
| ports: | |
| - 6379:6379 | |
| steps: | |
| - name: Set up Nextcloud env | |
| uses: ChristophWurst/setup-nextcloud@fc0790385c175d97e88a7cb0933490de6e990374 # v0.3.2 | |
| with: | |
| nextcloud-version: ${{ matrix.nextcloud-versions }} | |
| php-version: ${{ matrix.php-versions }} | |
| php-coverage: 'xdebug' | |
| patch-php-version-check: ${{ matrix.php-versions == '8.5' }} | |
| install: true | |
| database: ${{ matrix.db }} | |
| node-version: 'false' | |
| - name: Configure caching | |
| if: ${{ matrix.cache == 'redis' }} | |
| run: | | |
| php -f nextcloud/occ config:system:set memcache.local --value='\OC\Memcache\Redis' | |
| php -f nextcloud/occ config:system:set memcache.distributed --value='\OC\Memcache\Redis' | |
| - name: Checkout Mail | |
| uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4 | |
| with: | |
| path: nextcloud/apps/mail | |
| fetch-depth: 2 | |
| - name: Install dependencies | |
| working-directory: nextcloud/apps/mail | |
| run: composer install | |
| - name: Patch version check for nightly PHP | |
| if: ${{ matrix.php-versions == '8.5' }} | |
| run: sed -i 's/max-version="8.4"/max-version="8.5"/' nextcloud/apps/mail/appinfo/info.xml | |
| - name: Install Mail | |
| run: php -f nextcloud/occ app:enable mail | |
| - name: Configure Nextcloud for testing | |
| run: | | |
| php -f nextcloud/occ config:system:set app.mail.debug --type bool --value true | |
| php -f nextcloud/occ config:system:set app.mail.verify-tls-peer --type bool --value false | |
| - name: Enable slow mysql query logs | |
| if: ${{ matrix.db == 'mysql' }} | |
| run: | | |
| echo "SET GLOBAL log_queries_not_using_indexes = 1;" | mysql -h 127.0.0.1 -u root -pmy-secret-pw | |
| echo "SET GLOBAL slow_query_log=1;" | mysql -h 127.0.0.1 -u root -pmy-secret-pw | |
| echo "SET GLOBAL log_output = 'table';" | mysql -h 127.0.0.1 -u root -pmy-secret-pw | |
| - name: Run tests | |
| working-directory: nextcloud/apps/mail | |
| if: ${{ matrix.db == 'mysql' }} | |
| run: composer run test:integration | |
| env: | |
| XDEBUG_MODE: coverage | |
| - name: Run tests | |
| working-directory: nextcloud/apps/mail | |
| if: ${{ matrix.db != 'mysql' }} | |
| run: composer run test:integration | |
| env: | |
| XDEBUG_MODE: off | |
| - name: Read slow queries | |
| if: ${{ always() }} | |
| run: echo "SELECT * FROM mysql.slow_log WHERE sql_text LIKE '%oc_mail%' AND sql_text NOT LIKE '%information_schema%'" | mysql -h 127.0.0.1 -u root -pmy-secret-pw | |
| - name: Print debug logs | |
| if: ${{ always() }} | |
| run: cat nextcloud/data/mail-*-*-imap.log | |
| - name: Report coverage | |
| uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 | |
| if: ${{ always() && matrix.db == 'mysql' }} | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| working-directory: nextcloud/apps/mail | |
| files: tests/clover.integration.xml | |
| flags: integrationtests | |
| fail_ci_if_error: ${{ !github.event.pull_request.head.repo.fork }} | |
| verbose: true | |
| frontend-unit-test: | |
| runs-on: ubuntu-latest | |
| name: Front-end unit tests | |
| steps: | |
| - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4 | |
| - name: Read package.json node and npm engines version | |
| uses: skjnldsv/read-package-engines-version-actions@8205673bab74a63eb9b8093402fd9e0e018663a1 # v2.2 | |
| id: versions | |
| with: | |
| fallbackNode: '^14' | |
| fallbackNpm: '^7' | |
| - name: Set up node ${{ steps.versions.outputs.nodeVersion }} | |
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 | |
| with: | |
| node-version: ${{ steps.versions.outputs.nodeVersion }} | |
| - name: Set up npm ${{ steps.versions.outputs.npmVersion }} | |
| run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}" | |
| - name: npm install | |
| run: npm install | |
| - name: run tests | |
| run: npm run test:unit | |
| env: | |
| CI: true | |
| matrix: | |
| runs-on: ubuntu-latest-low | |
| outputs: | |
| php-min: ${{ steps.versions.outputs.php-min }} | |
| branches-min: ${{ steps.versions.outputs.branches-min }} | |
| steps: | |
| - name: Checkout app | |
| uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0 | |
| - name: Get version matrix | |
| id: versions | |
| uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1 | |
| frontend-e2e-tests: | |
| runs-on: ubuntu-latest | |
| name: Front-end E2E tests | |
| needs: matrix | |
| steps: | |
| - name: Set up Nextcloud env | |
| uses: ChristophWurst/setup-nextcloud@fc0790385c175d97e88a7cb0933490de6e990374 # v0.3.2 | |
| with: | |
| nextcloud-version: ${{ needs.matrix.outputs.branches-min }} | |
| php-version: ${{ needs.matrix.outputs.php-min }} | |
| node-version: ${{ env.E2E_NODE_VERSION }} | |
| install: true | |
| - name: Configure Nextcloud for testing | |
| run: | | |
| php -f nextcloud/occ config:system:set debug --type=bool --value=true | |
| php -f nextcloud/occ config:system:set overwriteprotocol --value=https | |
| php -f nextcloud/occ config:system:set overwritehost --value=localhost | |
| php -f nextcloud/occ config:system:set overwrite.cli.url --value=https://localhost | |
| php -f nextcloud/occ config:system:set app.mail.debug --type=bool --value=true | |
| php -f nextcloud/occ config:system:set app.mail.verify-tls-peer --type=bool --value=false | |
| - name: Check out the app | |
| uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4 | |
| with: | |
| path: nextcloud/apps/mail | |
| - name: Install php dependencies | |
| working-directory: nextcloud/apps/mail | |
| run: composer install | |
| - name: Install the app | |
| run: php -f nextcloud/occ app:enable mail | |
| - name: Set up node ${{ env.E2E_NODE_VERSION }} | |
| uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 | |
| with: | |
| node-version: ${{ env.E2E_NODE_VERSION }} | |
| - name: Install npm dependencies | |
| working-directory: nextcloud/apps/mail | |
| run: npm ci | |
| - name: Build frontend | |
| working-directory: nextcloud/apps/mail | |
| run: npm run build | |
| - name: Install stunnel (tiny https proxy) | |
| run: sudo apt-get install -y stunnel | |
| - name: Start php server and https proxy | |
| working-directory: nextcloud | |
| run: | | |
| openssl req -new -x509 -days 365 -nodes -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=localhost" -out stunnel.pem -keyout stunnel.pem | |
| php -S 127.0.0.1:8080 & | |
| sudo stunnel3 -p stunnel.pem -d 443 -r 8080 | |
| - name: Test https access | |
| run: curl --insecure -Li https://localhost | |
| - name: Install Playwright browsers | |
| working-directory: nextcloud/apps/mail | |
| run: npx playwright install --with-deps chromium | |
| - name: Run Playwright tests | |
| working-directory: nextcloud/apps/mail | |
| run: DEBUG=pw:api npx playwright test | |
| - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 | |
| if: always() | |
| with: | |
| name: playwright-report-${{ github.event.number }}-nc${{ needs.matrix.outputs.branches-min }}-php${{ needs.matrix.outputs.php-min }}-node${{ env.E2E_NODE_VERSION }} | |
| path: nextcloud/apps/mail/playwright-report/ | |
| retention-days: 14 | |
| - name: Print server logs | |
| if: always() | |
| run: cat nextcloud/data/nextcloud.log* | |
| env: | |
| CI: true | |
| summary: | |
| runs-on: ubuntu-latest-low | |
| needs: | |
| - unit-tests | |
| - integration-tests | |
| - frontend-unit-test | |
| - frontend-e2e-tests | |
| if: always() | |
| name: test-summary | |
| steps: | |
| - name: Unit test status | |
| run: if ${{ needs.unit-tests.result != 'success' && needs.unit-tests.result != 'skipped' }}; then exit 1; fi | |
| - name: Integration test status | |
| run: if ${{ needs.integration-tests.result != 'success' && needs.integration-tests.result != 'skipped' }}; then exit 1; fi | |
| - name: Frontend unit test status | |
| run: if ${{ needs.frontend-unit-test.result != 'success' && needs.frontend-unit-test.result != 'skipped' }}; then exit 1; fi | |
| - name: Frontend E2E test status | |
| run: if ${{ needs.frontend-e2e-tests.result != 'success' && needs.frontend-e2e-tests.result != 'skipped' }}; then exit 1; fi |