CI gotcha — a red "Github CI - Branch" on a facekom customization branch is almost always the pre-existing audit gate, NOT your change
The “Github CI - Branch” workflow (
.github/workflows/audit.yamlin vuer_oss) is chronically RED on customization branches. The failing step isyarn run improved-yarn-audit --min-severity critical --exclude <GHSAs>(audit.yaml:33), which exits non-zero (exit 4) whenever a critical advisory exists in a transitive dependency that is not in the--excludetriage list. Do not mistake it for a regression you introduced.
Verified 2026-06-04 against the live repo and gh run list history.
Why it’s always red
improved-yarn-audit exits 4 if any critical advisory survives the --exclude allowlist. The base branch customization/raiffeisen has failed this same gate on every push since at least April 2026 — the team merges through it. As of 2026-06-04 it trips on 4 stale-dependency advisories:
| Dependency path | Advisory |
|---|---|
twig → locutus | GHSA-vh9h-29pq-r5m8 |
@techteamer/timestamp → … → basic-ftp | GHSA-5rq4-664w-9x2c |
@kafkajs/confluent-schema-registry → protobufjs | GHSA-xq3m-2v4x-88gg |
request → form-data | GHSA-fjxv-7rqg-78g4 |
These live in transitive deps; the only ways the team clears the gate are to append the triaged GHSA(s) to the --exclude list in audit.yaml (a security-acceptance decision) or to remediate the dependency.
How to tell it’s the gate vs. your change
Two-question check before assuming a regression
- Did your commit touch
package.json/yarn.lock? If no, the audit result is unchanged by you.- Is the base branch (e.g.
customization/raiffeisen) already red on the same gate? If yes (it is), your branch inherits that red.Both pointing away from your change ⇒ it’s the pre-existing audit gate. Move on.
The gates that actually matter per-change
A red audit gate is noise; these are the real signals:
- Lint —
yarn lint(eslint--max-warnings 0; ignorescustomization/test/*). Zero-tolerance on warnings. - Unit tests —
yarn jest <file>.
Treat lint and the relevant Jest runs as the gates that gate your change.
SonarCloud “Security Rating on New Code” can fail on new CI workflow lines
CI gotcha — adding lines to a SonarCloud-scanned GitHub Actions workflow can fail the "Security Rating on New Code" quality gate
SonarCloud scans
.github/workflows/*with GitHub-Actions supply-chain rules. Adding new lines to a workflow in a PR can trip the “Security Rating on New Code” gate — even when the rest of the CI already uses the same patterns. The existing jobs are grandfathered as old code; only the PR’s new lines are evaluated against the new-code gate.
First hit on FKITDEV-8239 (the depcheck-CI rollout): 4 of 5 PRs failed this gate after adding a depcheck job.
What gets flagged (GHA supply-chain rules)
| Construct | Rule rationale |
|---|---|
npx <tool> | ”can install packages on-demand…” (on-demand install). Confirmed sole driver on vuer_css. |
yarn install / npm install | ”lifecycle scripts…” (install can run arbitrary lifecycle scripts) |
actions/foo@v6 (a tag/branch ref) | “Use full commit SHA” (pin actions to a full commit SHA, not a floating tag) |
Quality profiles differ per repo
The flagged set is not uniform — it depends on each project’s SonarCloud quality profile. On FKITDEV-8239:
vuer_cssflagged onlynpx;portal_cssflagged all three. Don’t assume one repo’s findings carry to another.
Resolutions
- Exclude
.github/**from analysis (used on FKITDEV-8239) — append.github/**tosonar.exclusionsinsonar-project.properties. TechTeamer repos already list.github/**undersonar.coverage.exclusions, so this just extends the existing exclusion to the analysis scope. Lowest-friction fix. - Make the new lines compliant — run CLI tools via a pinned devDependency (e.g.
yarn depcheck) instead ofnpx, and pin every action to a full commit SHA. More invasive but keeps.github/**under Sonar’s eye.
Reading the per-PR findings without a SonarCloud token
The SonarCloud issue/rule REST APIs require auth for these private projects (no anonymous read). But the per-PR findings are still readable through GitHub alone: SonarCloud posts each issue as a GitHub check-run annotation on the PR head commit —
gh api repos/<org>/<repo>/check-runs/<check-run-id>/annotationsFull recipe (find the “SonarCloud Code Analysis” check + head SHA → check-run id → annotations) is documented at Reading SonarCloud PR issues WITHOUT a Sonar token (gh check-run annotations).
Related
- vuer_oss — the service whose CI this concerns.
- FKITDEV-8827 — Raiffeisen PION face-comparison export task; surfaced on a
customization/raiffeisen-based branch where this gate reads red regardless of the change. - customization-branches — the per-client customization branches that all inherit this red audit gate.
- release-process — CI/CD overview (
audit.yamllisted under GitHub Actions). - security-audit — FaceKom vulnerability findings (separate from this CI-gate triage).
- FKITDEV-8239 — depcheck-CI rollout; first hit of the SonarCloud “Security Rating on New Code” GHA supply-chain gate, fixed via
.github/**insonar.exclusions. - FKITDEV-8887 — full tokenless SonarCloud check-run-annotation read recipe + the “passing gate ≠ zero issues” gotcha.
- cve-2025-7783-form-data-via-request — deep-dive on the
request→form-dataGHSA-fjxv-7rqg-78g4row in the table above: theresolutionsfix pattern, and theUnable to parse yarn audit output/DEP0169lines are cosmetic debugging trap (they appear on green runs too). - customization-branch-ci-pipeline-inheritance — why partner branches that never ran an
auditjob suddenly start failing it after their first devel-merge.