From af7a7be63ace5b825f8cf6a9d808e8c407552f9a Mon Sep 17 00:00:00 2001 From: Oleksander Piskun Date: Fri, 31 Jul 2026 10:25:09 +0000 Subject: [PATCH] fix(ci): repair the phpunit matrix and close gaps in CI coverage phpunit-mysql and phpunit-pgsql hardcoded php 8.2 against server master. Nextcloud 35 requires php 8.3 or later, so both have been failing on main with "This version of Nextcloud requires at least PHP 8.3". They now derive the php and server versions from appinfo/info.xml the way phpunit-sqlite already does, so they cannot drift out of range again. No workflow compiled the frontend on pull requests. Only the release workflow ran npm run build, so a dependency update that broke the build would pass every check and only fail at release time. Added the org template node.yml, whose paths filter includes package-lock.json. The stylelint patterns were unquoted, so the shell expanded them and only 7 of the 21 .vue files were linted. All 21 pass once stylelint expands the globs itself. composer.json declared no license, which composer validate warns about. Signed-off-by: Oleksander Piskun --- .github/workflows/node.yml | 107 ++++++++++++++++++++++++++++ .github/workflows/phpunit-mysql.yml | 20 +++++- .github/workflows/phpunit-pgsql.yml | 20 +++++- composer.json | 1 + package.json | 4 +- 5 files changed, 146 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/node.yml diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml new file mode 100644 index 00000000..8bccc01f --- /dev/null +++ b/.github/workflows/node.yml @@ -0,0 +1,107 @@ +# 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: 2021-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Node + +on: pull_request + +permissions: + contents: read + +concurrency: + group: node-${{ 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@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'src/**' + - 'appinfo/info.xml' + - 'package.json' + - 'package-lock.json' + - 'tsconfig.json' + - '**.js' + - '**.ts' + - '**.vue' + + build: + runs-on: ubuntu-latest + + needs: changes + if: needs.changes.outputs.src != 'false' + + name: NPM build + steps: + - name: Checkout + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false + + - name: Read package.json node and npm engines version + uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 + id: versions + with: + fallbackNode: '^20' + fallbackNpm: '^10' + + - name: Set up node ${{ steps.versions.outputs.nodeVersion }} + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + 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: Install dependencies & build + env: + CYPRESS_INSTALL_BINARY: 0 + PUPPETEER_SKIP_DOWNLOAD: true + run: | + npm ci + npm run build --if-present + + - name: Check webpack build changes + run: | + bash -c "[[ ! \"`git status --porcelain `\" ]] || (echo 'Please recompile and commit the assets, see the section \"Show changes on failure\" for details' && exit 1)" + + - name: Show changes on failure + if: failure() + run: | + git status + git --no-pager diff + exit 1 # make it red to grab attention + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, build] + + if: always() + + # This is the summary, we just avoid to rename it so that branch protection rules still match + name: node + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.build.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/phpunit-mysql.yml b/.github/workflows/phpunit-mysql.yml index 177d4278..4dfdbcd5 100644 --- a/.github/workflows/phpunit-mysql.yml +++ b/.github/workflows/phpunit-mysql.yml @@ -33,13 +33,29 @@ concurrency: cancel-in-progress: false jobs: + matrix: + runs-on: ubuntu-latest-low + outputs: + php-version: ${{ steps.versions.outputs.php-available-list }} + server-max: ${{ steps.versions.outputs.branches-max-list }} + steps: + - name: Checkout app + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Get version matrix + id: versions + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 + phpunit-mysql: runs-on: ubuntu-latest + needs: matrix strategy: matrix: - php-versions: ['8.2'] - server-versions: ['master'] + php-versions: ${{ fromJson(needs.matrix.outputs.php-version) }} + server-versions: ${{ fromJson(needs.matrix.outputs.server-max) }} services: mysql: diff --git a/.github/workflows/phpunit-pgsql.yml b/.github/workflows/phpunit-pgsql.yml index 72a6a653..3244321f 100644 --- a/.github/workflows/phpunit-pgsql.yml +++ b/.github/workflows/phpunit-pgsql.yml @@ -33,13 +33,29 @@ concurrency: cancel-in-progress: false jobs: + matrix: + runs-on: ubuntu-latest-low + outputs: + php-version: ${{ steps.versions.outputs.php-available-list }} + server-max: ${{ steps.versions.outputs.branches-max-list }} + steps: + - name: Checkout app + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Get version matrix + id: versions + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 + phpunit-pgsql: runs-on: ubuntu-latest + needs: matrix strategy: matrix: - php-versions: ['8.2'] - server-versions: ['master'] + php-versions: ${{ fromJson(needs.matrix.outputs.php-version) }} + server-versions: ${{ fromJson(needs.matrix.outputs.server-max) }} services: postgres: diff --git a/composer.json b/composer.json index 26975c27..46e0aab3 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,6 @@ { "name": "nextcloud/integration_github", + "license": "AGPL-3.0-or-later", "authors": [ { "name": "Julien Veyssier", diff --git a/package.json b/package.json index 52fd511c..660a4a31 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,8 @@ "watch": "NODE_ENV=development vite --mode development build --watch", "lint": "eslint --ext .js,.vue src", "lint:fix": "eslint --ext .js,.vue src --fix", - "stylelint": "stylelint src/**/*.vue src/**/*.scss src/**/*.css", - "stylelint:fix": "stylelint src/**/*.vue src/**/*.scss src/**/*.css --fix" + "stylelint": "stylelint \"src/**/*.vue\" \"src/**/*.scss\" \"src/**/*.css\"", + "stylelint:fix": "stylelint \"src/**/*.vue\" \"src/**/*.scss\" \"src/**/*.css\" --fix" }, "repository": { "type": "git",