chore(ci): point Dependabot at development, where the gates actually run - #445
Merged
Merged
Conversation
Dependabot targeted the DEFAULT branch `main`, which is 729 commits behind `development` and carries a different lockfile. Two consequences, both bad: 1. The alert list measured the wrong tree. Open alerts claimed 5 critical / 51 high; `development` actually had 1 critical / 2 high on npm and ZERO composer advisories (the critical twig/twig <3.26.0 alert is moot there — development is on 3.27.0). 2. The PRs were ungated. #368 and #369 collected no check runs at all beyond a neutral CodeQL, because `main` still carries the old self-contained code-quality workflow. An unverified dependency PR is how this fleet previously shipped an unbuildable image for two months. Also adds the missing composer and github-actions ecosystems — composer had no entry, so its only PRs were security updates against main. Trade-off is stated in the file: security updates only ever target the default branch, so these become version updates. A verified version update on development beats an unmergeable security update on a dead main.
rubenvdlinde
added a commit
that referenced
this pull request
Aug 6, 2026
OS command injection in PHP_CodeSniffer, GHSA-hmqg-cxww-wqhq, reported 2026-08-05. Affected: <3.13.6 | >=4.0.0,<4.0.2. This repo was on 3.13.5. The advisory landed mid-review: this PR's own 'Security (composer)' leg PASSED earlier today and the same leg on #445 then FAILED, on a config-only change. The audit DB is live, so a composer.lock that was clean this morning is not clean now — 'composer audit --locked' returned zero advisories for this repo an hour before it returned this one. Fleet-wide: all 16 checked repos are on 3.13.5 and are equally affected. Verified - composer audit --locked: 'No security vulnerability advisories found' (was 1). - vendor/bin/phpcs --version -> 3.13.6. - composer phpcs: rc=0, unchanged findings. - Positive control: a deliberately non-conforming file under lib/ made phpcs exit 2 with 13 findings, so the green above is a real pass and not a checker that silently no-ops. Probe file removed; only composer.lock is modified.
Contributor
Quality Report — ConductionNL/softwarecatalog @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| check-vue-demi | ✅ | ||||
| test-l10n | ✅ | ||||
| composer | ❌ | ✅ 121/121 | |||
| npm | ✅ | ✅ 849/849 | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-08-06 11:25 UTC
Download the full PDF report from the workflow artifacts.
rubenvdlinde
added a commit
that referenced
this pull request
Aug 6, 2026
…443) * chore(deps): clear all critical + high npm advisories on development Measured state of `development` (npm audit --package-lock-only), NOT the 154 Dependabot alerts, which are computed against the DEFAULT branch `main` — 729 commits behind and carrying a different lockfile entirely. Before: 1 critical, 2 high, 5 moderate, 5 low (13). composer: 0. After: 0 critical, 0 high, 3 moderate, 6 low (9). Bumps - vitest 1.6.1 -> 3.2.7 and @vitest/coverage-v8 to match. Clears the critical (Vitest UI server arbitrary file read/exec, <=3.2.5) and pulls vite 5.4.21 -> 7.3.6, vite-node -> 3.2.4, esbuild 0.21.5 -> 0.28.1, clearing the high (vite path traversal / fs.deny bypass) and two moderates. npm audit proposed vitest@4; 3.2.7 is outside every advisory range and is one major less disruptive. - @cyclonedx/cyclonedx-npm 4.2.1 -> 6.0.0. Clears the high (shell injection via unsanitised --workspace). This repo passes no --workspace, so it was not reachable, but the SBOM step runs the local binary so the bump is exercised. - node-polyfill-webpack-plugin 3.0.0 -> 4.1.0 (maintained line). Drop the blanket `minimatch: ^3.1.2` override That override existed to silence old minimatch advisories. It forced v3 on EVERY consumer, and test-exclude@7 (new, via coverage-v8 3.x) does `const { minimatch } = require('minimatch')` — the v10 named export — so v3's bare-function export destructured to undefined and `npm run test:coverage` died with "minimatch is not a function". Removing the override lets each consumer resolve its own (test-exclude 10.2.6, others 9.0.9, root 3.1.5); nothing in the tree resolves below the 3.1.2 ReDoS fix. Verified (node 22 local; CI is node 20/npm 10.8.2) - npx npm@10.8.2 ci: rc=0; lockfile byte-identical afterwards. npm 11 ci also ok. - vitest 210/210 pass; jest 120/120 pass. - test:coverage rc=0; ratchet rc=0 (vitest baseline is null/unseeded). - npm run build: webpack compiled, 3 pre-existing warnings, 0 errors. - npm run lint: 0 errors (355 pre-existing warnings, unchanged). - check:manifest, check:vue-demi, test:l10n: rc=0. - Exact CI SBOM command under cyclonedx 6.0.0: rc=0, valid CycloneDX specVersion 1.5, 814 components. - Licences read from the LOCKFILE: all bumps MIT except cyclonedx (Apache-2.0). vue3-apexcharts stays 1.8.0 MIT, pinned ~1.8.0 by @conduction/nextcloud-vue, so it cannot drift into the proprietary 1.9.0 line. Untouched by this change. NOT fixed here, deliberately - dompurify (3 moderate): @toast-ui/editor INLINES DOMPurify 2.3.3 into its own dist and never require()s the dompurify package — confirmed in js/softwarecatalog-main.js.LICENSE.txt. The flagged node_modules/@toast-ui/editor/node_modules/dompurify@2.5.9 is installed but never loaded. An npm override would turn the audit green and change nothing that ships. toast-ui 3.2.2 (latest) still depends on dompurify ^2.3.3, so there is no upstream fix. Needs a real remediation, filed separately. - elliptic/browserify-sign/create-ecdh/crypto-browserify/node-stdlib-browser (6 low): reachable only through node-polyfill-webpack-plugin, whose plugin instance is discarded — webpack.config.js REPLACES the plugins array from @nextcloud/webpack-vue-config. No polyfill lands in the bundle (no elliptic in js/*.js). The package cannot simply be dropped: webpack-vue-config require()s it at module load without declaring it. * fix(deps): squizlabs/php_codesniffer 3.13.5 -> 3.13.6 (CVE-2026-67434) OS command injection in PHP_CodeSniffer, GHSA-hmqg-cxww-wqhq, reported 2026-08-05. Affected: <3.13.6 | >=4.0.0,<4.0.2. This repo was on 3.13.5. The advisory landed mid-review: this PR's own 'Security (composer)' leg PASSED earlier today and the same leg on #445 then FAILED, on a config-only change. The audit DB is live, so a composer.lock that was clean this morning is not clean now — 'composer audit --locked' returned zero advisories for this repo an hour before it returned this one. Fleet-wide: all 16 checked repos are on 3.13.5 and are equally affected. Verified - composer audit --locked: 'No security vulnerability advisories found' (was 1). - vendor/bin/phpcs --version -> 3.13.6. - composer phpcs: rc=0, unchanged findings. - Positive control: a deliberately non-conforming file under lib/ made phpcs exit 2 with 13 findings, so the green above is a real pass and not a checker that silently no-ops. Probe file removed; only composer.lock is modified.
…ot-target-development
Contributor
Quality Report — ConductionNL/softwarecatalog @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| check-vue-demi | ✅ | ||||
| test-l10n | ✅ | ||||
| composer | ✅ | ✅ 121/121 | |||
| npm | ✅ | ✅ 853/853 | |||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ✅ | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-08-06 12:08 UTC
Download the full PDF report from the workflow artifacts.
This was referenced Aug 8, 2026
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The problem
Dependabot targets the repository default branch, which here is
main.mainis 729 commits behinddevelopmentand carries a completely different lockfile.Two consequences, both bad:
1. The alert list measures the wrong tree. The reported backlog for this repo was ~151 vulnerabilities / 5 critical. Measured against
development:The critical
twig/twig < 3.26.0alert is moot ondevelopment— it is on 3.27.0. Same story across the fleet: every Conduction repo shows zero composer advisories ondevelopment.2. The PRs were ungated. Dependabot PRs #368 and #369 collected no check runs at all beyond a neutral CodeQL:
mainstill carries the old self-containedcode-quality.yml, whiledevelopmentuses the shared quality workflow. A dependency PR that nothing builds is precisely how this fleet previously shipped an unbuildable image for two months.The change
target-branch: developmenton npm.composerecosystem — it had no entry at all, so its only PRs were security updates againstmain.github-actions.Trade-off, stated explicitly
GitHub only raises Dependabot security updates against the default branch, so
target-branchconverts these into version updates. That is a net gain: a version update ondevelopmentis verified and mergeable; a security update on a 729-commit-deadmainwas neither. The alert list still tracksmainand will shrink asdevelopmentis released forward.Matches the convention already in place on nldesign, decidesk, openbuild, procest and shillinq.
Companion to #443 (which clears every critical and high npm advisory on
development).