Skip to content

chore(ci): SonarCloud-Auto-Snapshot + Playwright-E2E#3

Merged
sebolber merged 2 commits into
mainfrom
claude/setup-sonar-playwright-HVNxK
May 13, 2026
Merged

chore(ci): SonarCloud-Auto-Snapshot + Playwright-E2E#3
sebolber merged 2 commits into
mainfrom
claude/setup-sonar-playwright-HVNxK

Conversation

@sebolber

Copy link
Copy Markdown
Owner

Summary

Zwei Werkzeuge, die kuenftige Aufgaben spuerbar verkleinern:

  • Sonar-Auto-Snapshot: Nach jedem push auf main rendert scripts/fetch-sonar-issues.sh die offenen SonarCloud-Issues in Markdown (Severity > Datei, <details>-Bloecke, Rule-Links). Ein neuer Workflow-Step schreibt das Ergebnis in den Body einer pinned GitHub-Issue mit Label sonar-snapshot. Damit lassen sich Findings ueber mcp__github__list_issues --labels sonar-snapshot ohne Pasten lesen.
  • Playwright-Smoke-Test (Login -> Dashboard): cvm-frontend/e2e/smoke.spec.ts faehrt headless Chromium gegen einen frisch gebauten Stack (Postgres + Keycloak + Backend + Frontend), loggt sich als a.admin@ahs.test per Keycloak ein und verifiziert das Dashboard. Trace/Screenshot/Video als Artefakt bei Failure.

Bonus, weil ohnehin noetig: vorhandene GitLab-CI-Definition (.gitlab-ci.yml) inhaltlich auf GitHub Actions uebersetzt (.github/workflows/ci.yml) - Backend, Frontend und E2E laufen parallel/abhaengig wie vorher.

Was wird wann ausgefuehrt

Trigger backend frontend e2e sonar+snapshot
pull_request x x x -
push: main x x x x (nur wenn SONAR_TOKEN gesetzt)
workflow_dispatch x x x - (manueller Rerun)

Geaenderte/neue Dateien

  • .github/workflows/ci.yml (neu) - 3 Jobs: backend (Maven verify + Sonar-Scan + Snapshot), frontend (Lint + Karma + Build), e2e (Postgres + Keycloak services, Realm-Import, Backend-JAR + http-server, Playwright).
  • scripts/fetch-sonar-issues.sh (neu) - paginiert /api/issues/search, rendert Markdown, optional WAIT_FOR_SCAN=1 (pollt /api/ce/component).
  • pom.xml - sonar.projectKey=sebolber_PortalSecurityScan, sonar.organization=sebolber, sonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml (per-Modul-Default, da kein jacoco-aggregate konfiguriert ist), sonar.exclusions fuer dist/node_modules/generated.
  • cvm-frontend/playwright.config.ts (neu) - baseURL aus env, Chromium-only, retain-on-failure fuer Trace/Screenshot/Video.
  • cvm-frontend/e2e/smoke.spec.ts (neu) - Smoke /queue -> Keycloak -> /dashboard.
  • cvm-frontend/package.json + package-lock.json - @playwright/test als devDependency, neue Scripts e2e und e2e:install.
  • .gitignore - Playwright-Artefakte und PID-Dateien.

Vor dem Merge bitte sicherstellen

  • Secret SONAR_TOKEN ist in den Repo-Secrets gesetzt (sonst skippt der Sonar-Step zur Laufzeit, durch if: env.SONAR_TOKEN != '').
  • SonarCloud-Projekt sebolber_PortalSecurityScan existiert unter Organisation sebolber und die Analysis Method ist auf "GitHub Actions" / CI-basiert gestellt (nicht "Automatic Analysis").

Test plan

  • PR-Run gruen: backend, frontend, e2e laufen ohne Sonar-Step.
  • Nach Merge: erster main-Run erzeugt die SonarCloud-Analyse und legt die GitHub-Issue mit Label sonar-snapshot an.
  • Folge-Run aktualisiert dieselbe Issue (kein Duplikat).
  • Forced Failure des Smoke-Tests (lokal mit falschem Passwort verifizieren) erzeugt Trace + Screenshot + Video als Artefakt.

Folge-Aufgabe (Phase D)

Sobald die Snapshot-Issue auf main existiert: ich lese sie ueber list_issues --labels sonar-snapshot, gruppiere die Findings nach Sonar-Regel und arbeite Regel-Cluster fuer Regel-Cluster ab (ein Commit pro Cluster, lokaler Testlauf zwischen Clustern).

https://claude.ai/code/session_014NNjRKw5bDqRffqCUGe8ud


Generated by Claude Code

claude added 2 commits May 13, 2026 17:34
Erste Playwright-Suite unter cvm-frontend/e2e/. Smoke deckt den
kritischen Pfad ab: gegen geschuetzte Route navigieren, ueber
Keycloak einloggen (a.admin@ahs.test), dashboard pruefen.

- playwright.config.ts: baseURL aus env, trace/screenshot/video
  retain-on-failure, nur Chromium.
- @playwright/test als devDependency, neue Scripts e2e + e2e:install.
- gitignore-Eintraege fuer playwright-report/test-results/PID-Dateien.

https://claude.ai/code/session_014NNjRKw5bDqRffqCUGe8ud
CI ersetzt die bisherige GitLab-Pipeline auf GitHub Actions:
- backend: mvn verify (Tests + JaCoCo), Sonar-Scan via sonar-maven-plugin
  und Snapshot-Issue-Update nur auf push nach main.
- frontend: Lint, Karma-Tests (ChromeHeadlessNoSandbox), Build.
- e2e: Postgres + Keycloak als Service-Container, Backend-JAR und
  Frontend-Dist aus den vorherigen Jobs, Playwright-Smoke gegen
  laufenden Stack. Trace/Screenshot/Video bei Failure als Artefakt.

scripts/fetch-sonar-issues.sh paginiert die offenen Sonar-Issues
(componentKeys=sebolber_PortalSecurityScan, resolved=false) und rendert
sie nach Severity + Datei gruppiert in Markdown. WAIT_FOR_SCAN=1
pollt api/ce/component bis der Scan-Status final ist, damit der
Snapshot frische Daten enthaelt.

Parent-POM: sonar.projectKey/organization auf sebolber_PortalSecurityScan
/ sebolber gesetzt (vorher TBD), jacoco-Pfad auf per-Modul-Default
korrigiert, da kein jacoco-aggregate konfiguriert ist.

https://claude.ai/code/session_014NNjRKw5bDqRffqCUGe8ud
@sebolber sebolber merged commit 2193cba into main May 13, 2026
2 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants