diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 96bd87c..cf0d03d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,6 +37,23 @@ jobs: - name: Build env: TURSO_CONNECTION_URL: ${{ secrets.TURSO_CONNECTION_URL }} - UPSTASH_URL: ${{ secrets.UPSTASH_URL }} - UPSTASH_TOKEN: ${{ secrets.UPSTASH_TOKEN }} run: bun run build + + quality: + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: Setup Biome + uses: biomejs/setup-biome@v2 + with: + version: latest + + - name: Run Biome + run: biome ci . diff --git a/app/about/page.tsx b/app/about/page.tsx index a20a8a8..3c24982 100644 --- a/app/about/page.tsx +++ b/app/about/page.tsx @@ -1,9 +1,9 @@ -import Link from "next/link"; -import { Metadata } from "next"; import { GitPullRequestArrowIcon } from "lucide-react"; -import { Alert, AlertDescription } from "@/components/ui/alert"; -import { Navbar } from "@/components/navbar"; +import type { Metadata } from "next"; +import Link from "next/link"; import { Footer } from "@/components/footer"; +import { Navbar } from "@/components/navbar"; +import { Alert, AlertDescription } from "@/components/ui/alert"; export const metadata: Metadata = { title: "Umedu — About", diff --git a/app/api/posts/route.ts b/app/api/posts/route.ts index a00db6e..8c4adea 100644 --- a/app/api/posts/route.ts +++ b/app/api/posts/route.ts @@ -1,13 +1,13 @@ -import * as z from "zod"; -import type { NextRequest } from "next/server"; -import { desc, lt, and, or, eq } from "drizzle-orm"; +import { and, desc, eq, lt, or } from "drizzle-orm"; import { revalidateTag, unstable_cache } from "next/cache"; +import type { NextRequest } from "next/server"; +import * as z from "zod"; import { db } from "@/db"; -import { getSession } from "@/lib/auth"; +import { postTable, tagsToPostsTable } from "@/db/schema"; import { aesEncrypt } from "@/lib/aes"; +import { getSession } from "@/lib/auth"; import { safeDecrypt } from "@/lib/utils"; -import { tagsToPostsTable, postTable } from "@/db/schema"; export async function GET(request: NextRequest) { try { @@ -22,6 +22,7 @@ export async function GET(request: NextRequest) { const posts = await unstable_cache( async () => { + // biome-ignore lint/suspicious/noImplicitAnyLet: temp let cursorCondition; if (cursor) { diff --git a/app/api/tags/route.ts b/app/api/tags/route.ts index a8d97cd..bf4043e 100644 --- a/app/api/tags/route.ts +++ b/app/api/tags/route.ts @@ -1,10 +1,10 @@ -import { db } from "@/db"; -import { tagTable } from "@/db/schema"; -import { getSession } from "@/lib/auth"; import { eq } from "drizzle-orm"; import { unstable_cache } from "next/cache"; -import { NextRequest } from "next/server"; +import type { NextRequest } from "next/server"; import z from "zod/v4"; +import { db } from "@/db"; +import { tagTable } from "@/db/schema"; +import { getSession } from "@/lib/auth"; export async function GET() { try { diff --git a/app/auth/google/callback/route.ts b/app/auth/google/callback/route.ts index 48e206d..baa8a06 100644 --- a/app/auth/google/callback/route.ts +++ b/app/auth/google/callback/route.ts @@ -1,19 +1,17 @@ -import { z } from "zod/v4"; +import type { OAuth2Tokens } from "arctic"; +import { decodeIdToken } from "arctic"; import { eq } from "drizzle-orm"; import { cookies } from "next/headers"; -import { decodeIdToken } from "arctic"; -import type { OAuth2Tokens } from "arctic"; - +import { z } from "zod/v4"; +import { db } from "@/db"; +import { forumTable } from "@/db/schema"; +import { google } from "@/lib/oauth"; import { - generateSessionToken, createSession, + generateSessionToken, setSessionTokenCookie, } from "@/lib/session"; -import { db } from "@/db"; -import { google } from "@/lib/oauth"; -import { forumTable } from "@/db/schema"; - const claimsSchema = z.object({ sub: z.string(), email: z.email(), diff --git a/app/auth/google/route.ts b/app/auth/google/route.ts index ad1977a..50fac66 100644 --- a/app/auth/google/route.ts +++ b/app/auth/google/route.ts @@ -1,6 +1,6 @@ -import { generateState, generateCodeVerifier } from "arctic"; -import { google } from "@/lib/oauth"; +import { generateCodeVerifier, generateState } from "arctic"; import { cookies } from "next/headers"; +import { google } from "@/lib/oauth"; export async function GET(): Promise { const state = generateState(); diff --git a/app/forum/components/logout-button.tsx b/app/forum/components/logout-button.tsx index 3caff5d..6bf2ac6 100644 --- a/app/forum/components/logout-button.tsx +++ b/app/forum/components/logout-button.tsx @@ -1,13 +1,17 @@ "use client"; -import { useFormStatus } from "react-dom"; import { Loader2Icon, LogOutIcon } from "lucide-react"; +import { useFormStatus } from "react-dom"; export function LogoutButton() { const { pending } = useFormStatus(); return ( -