Link statt a-Element, und check deckt ab, was der CI prueft
All checks were successful
CI / Lint, Typen, Tests, Build (push) Successful in 11m12s
CI / Migrationen auf leerer Datenbank (push) Successful in 10m6s

This commit is contained in:
2026-09-10 10:01:08 +02:00
parent eb25369d1d
commit 6903013548
3 changed files with 9 additions and 4 deletions

View File

@@ -82,7 +82,7 @@ selbst spricht. Ein Docker-Abbild ist damit umgebungsneutral: einmal gebaut,
| `npm run test:integration` | Vitest gegen eine erreichbare Datenbank; überspringt sich ohne `DATABASE_URL` | | `npm run test:integration` | Vitest gegen eine erreichbare Datenbank; überspringt sich ohne `DATABASE_URL` |
| `npm run test:e2e` | Playwright | | `npm run test:e2e` | Playwright |
| `npm run migrate` | Ausstehende Migrationen einspielen (`--dry-run`, `--baseline`) | | `npm run migrate` | Ausstehende Migrationen einspielen (`--dry-run`, `--baseline`) |
| `npm run check` | lint + typecheck + test + build in Folge | | `npm run check` | lint + typecheck + types:check + test + build in Folge — dieselben Schritte wie der CI-Job „check" |
## Sicherheitsprinzipien ## Sicherheitsprinzipien

View File

@@ -1,5 +1,6 @@
"use client"; "use client";
import Link from "next/link";
import { useActionState, useState } from "react"; import { useActionState, useState } from "react";
import { passwortAendern, type WechselZustand } from "@/actions/passwort"; import { passwortAendern, type WechselZustand } from "@/actions/passwort";
import { Button } from "@/components/ui/Button"; import { Button } from "@/components/ui/Button";
@@ -86,14 +87,18 @@ export function PasswortAendernFormular({ erzwungen }: { erzwungen: boolean }) {
Passwort ändern Passwort ändern
</Button> </Button>
{/* `Link` und nicht `<a>`: ein gewöhnlicher Verweis auf eine Seite dieser
Anwendung lädt das Dokument neu und damit das ganze Bündel — der Weg
zurück fühlte sich an wie ein Neustart. eslint-config-next weist das
ab, und zu Recht. */}
{!erzwungen && ( {!erzwungen && (
<a <Link
href="/" href="/"
className="rounded text-center text-xs text-ink-muted underline underline-offset-2 hover:no-underline className="rounded text-center text-xs text-ink-muted underline underline-offset-2 hover:no-underline
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand-500" focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand-500"
> >
Zurück zur Anwendung Zurück zur Anwendung
</a> </Link>
)} )}
</form> </form>
); );

View File

@@ -12,7 +12,7 @@
"test:watch": "vitest", "test:watch": "vitest",
"test:integration": "node --env-file-if-exists=.env.test.local node_modules/vitest/vitest.mjs run --config vitest.integration.config.ts", "test:integration": "node --env-file-if-exists=.env.test.local node_modules/vitest/vitest.mjs run --config vitest.integration.config.ts",
"types:check": "node scripts/check-schema-types.mjs", "types:check": "node scripts/check-schema-types.mjs",
"check": "npm run lint && npm run typecheck && npm run test && npm run build", "check": "npm run lint && npm run typecheck && npm run types:check && npm run test && npm run build",
"migrate": "node scripts/migrate.mjs" "migrate": "node scripts/migrate.mjs"
}, },
"engines": { "engines": {