diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c83ec16..04145f7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,13 +10,13 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: pnpm/action-setup@v4 - with: - version: 11 + # Version is taken from package.json#packageManager; do not also set `version` here + # or action-setup fails with ERR_PNPM_BAD_PM_VERSION ("Multiple versions of pnpm"). + - uses: pnpm/action-setup@v6 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v6 with: node-version: 24 cache: pnpm diff --git a/src/app/api/analyze/route.test.ts b/src/app/api/analyze/route.test.ts index c738a98..2365060 100644 --- a/src/app/api/analyze/route.test.ts +++ b/src/app/api/analyze/route.test.ts @@ -253,7 +253,9 @@ describe("POST /api/analyze", () => { }); it("returns 500 when analyzer throws an error", async () => { - const mockAnalyzeProject = vi.fn().mockRejectedValue(new Error("Parsing failed")); + const mockAnalyzeProject = vi + .fn() + .mockRejectedValue(new Error("Parsing failed")); mockGetAnalyzer.mockReturnValue({ language: "python", @@ -268,7 +270,9 @@ describe("POST /api/analyze", () => { }), }); - const consoleErrorSpy = vi.spyOn(console, "error").mockImplementation(() => {}); + const consoleErrorSpy = vi + .spyOn(console, "error") + .mockImplementation(() => {}); const res = await POST(req); expect(res.status).toBe(500); diff --git a/src/app/globals.css b/src/app/globals.css index a79fb3f..415aebd 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -258,7 +258,9 @@ html.dark .react-flow__attribution { /* ---- React Flow Custom Node & Selection overrides ---- */ .react-flow__node { - transition: border-color 0.25s, box-shadow 0.25s !important; + transition: + border-color 0.25s, + box-shadow 0.25s !important; } .react-flow__node:hover { @@ -278,4 +280,3 @@ html.dark .react-flow__node.selected { border-color: var(--color-brand-dark) !important; box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.4) !important; } - diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx index 5270902..7d19f7a 100644 --- a/src/components/layout/Header.tsx +++ b/src/components/layout/Header.tsx @@ -137,9 +137,7 @@ export default function Header({ ); return ( -
+
{/* ── Left: brand ── */} - {LANGUAGE_NAMES[locale] ?? locale.toUpperCase()} + + {LANGUAGE_NAMES[locale] ?? locale.toUpperCase()} + {active && } ); diff --git a/src/components/sections/TestimonialForm.tsx b/src/components/sections/TestimonialForm.tsx index a6b0f0d..fae3dbc 100644 --- a/src/components/sections/TestimonialForm.tsx +++ b/src/components/sections/TestimonialForm.tsx @@ -2,10 +2,7 @@ import { useActionState, useEffect, useRef, useState } from "react"; import { useRouter } from "next/navigation"; -import { - postTestimonial, - type TestimonialFormState, -} from "@/lib/testimonials"; +import { postTestimonial, type TestimonialFormState } from "@/lib/testimonials"; const INITIAL: TestimonialFormState = { ok: false }; diff --git a/src/components/sections/TestimonialsBoard.tsx b/src/components/sections/TestimonialsBoard.tsx index 2109206..dfb00fc 100644 --- a/src/components/sections/TestimonialsBoard.tsx +++ b/src/components/sections/TestimonialsBoard.tsx @@ -95,7 +95,9 @@ export default function TestimonialsBoard({ featured ? "lg:col-span-2" : "" }`} > - {item.rating ? : null} + {item.rating ? ( + + ) : null}

) { if (gutterRef.current) gutterRef.current.scrollTop = e.currentTarget.scrollTop; @@ -425,7 +432,7 @@ export default function CodeWorkspace({

{i + 1}
))} -