From 700fa4041672231ed15d193f27268c269177d8b9 Mon Sep 17 00:00:00 2001 From: Taken Date: Fri, 5 Sep 2025 13:35:48 +0200 Subject: [PATCH] Updated code so it doenst build on server --- Dockerfile | 4 +++- bun.lock | 9 +++++++++ package.json | 4 ++-- src/app/(admin)/admin/_components/user-profile.tsx | 2 +- src/lib/env/client.ts | 2 +- src/lib/env/server.ts | 3 ++- src/lib/gravatar.ts | 2 +- src/lib/schema/url.ts | 6 +++--- 8 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9ead5bd..8473dc7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,6 +7,8 @@ RUN bun i --frozen-lockfile COPY . . ENV NEXT_TELEMETRY_DISABLED=1 ENV NODE_ENV=production +ENV DOCKER=1 +RUN bun run build RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjs && chown -R nextjs:nodejs . @@ -15,4 +17,4 @@ EXPOSE 3000 ENV PORT=3000 ENV HOSTNAME="0.0.0.0" -CMD ["bun", "container:build"] +CMD ["bun", "container"] diff --git a/bun.lock b/bun.lock index bf572fc..d55dcba 100644 --- a/bun.lock +++ b/bun.lock @@ -23,6 +23,7 @@ "date-fns": "^4.1.0", "drizzle-orm": "^0.44.4", "lucide-react": "^0.539.0", + "motion": "^12.23.12", "next": "15.4.6", "next-themes": "^0.4.6", "postgres": "^3.4.7", @@ -674,6 +675,8 @@ "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], + "framer-motion": ["framer-motion@12.23.12", "", { "dependencies": { "motion-dom": "^12.23.12", "motion-utils": "^12.23.6", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg=="], + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="], @@ -860,6 +863,12 @@ "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], + "motion": ["motion@12.23.12", "", { "dependencies": { "framer-motion": "^12.23.12", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-8jCD8uW5GD1csOoqh1WhH1A6j5APHVE15nuBkFeRiMzYBdRwyAHmSP/oXSuW0WJPZRXTFdBoG4hY9TFWNhhwng=="], + + "motion-dom": ["motion-dom@12.23.12", "", { "dependencies": { "motion-utils": "^12.23.6" } }, "sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw=="], + + "motion-utils": ["motion-utils@12.23.6", "", {}, "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ=="], + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], diff --git a/package.json b/package.json index a222ab2..efd7e5f 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,7 @@ "db:push": "drizzle-kit push", "db:up": "docker compose -f dev-db.yml up -d", "db:down": "docker compose -f dev-db.yml down", - "container": "bun db:migrate && bun start", - "container:build": "bun run build && bun db:migrate && bun start" + "container": "bun db:migrate && bun start" }, "dependencies": { "@hookform/resolvers": "^5.2.1", @@ -37,6 +36,7 @@ "date-fns": "^4.1.0", "drizzle-orm": "^0.44.4", "lucide-react": "^0.539.0", + "motion": "^12.23.12", "next": "15.4.6", "next-themes": "^0.4.6", "postgres": "^3.4.7", diff --git a/src/app/(admin)/admin/_components/user-profile.tsx b/src/app/(admin)/admin/_components/user-profile.tsx index 4714db5..b80affa 100644 --- a/src/app/(admin)/admin/_components/user-profile.tsx +++ b/src/app/(admin)/admin/_components/user-profile.tsx @@ -98,7 +98,7 @@ export default function UserProfile() { const userUpdateSchema = z.object({ name: z.string().min(1), - image: z.string().url().optional() + image: z.url().optional() }) function UserUpdateForm({ name, image, email }: z.infer & { email: string }) { diff --git a/src/lib/env/client.ts b/src/lib/env/client.ts index ae26703..e697c1e 100644 --- a/src/lib/env/client.ts +++ b/src/lib/env/client.ts @@ -3,7 +3,7 @@ import { z } from "zod" export const env = createEnv({ client: { - NEXT_PUBLIC_BASE_URL: z.string().url() + NEXT_PUBLIC_BASE_URL: z.url().default("https://l.mairimashita.org") }, runtimeEnv: { NEXT_PUBLIC_BASE_URL: process.env.NEXT_PUBLIC_BASE_URL diff --git a/src/lib/env/server.ts b/src/lib/env/server.ts index 06da7c3..9d2c53f 100644 --- a/src/lib/env/server.ts +++ b/src/lib/env/server.ts @@ -26,5 +26,6 @@ export const env = createEnv({ }) }, experimental__runtimeEnv: process.env, - emptyStringAsUndefined: true + emptyStringAsUndefined: true, + skipValidation: process.env.DOCKER === "1" }) diff --git a/src/lib/gravatar.ts b/src/lib/gravatar.ts index 77b1e32..ef36d94 100644 --- a/src/lib/gravatar.ts +++ b/src/lib/gravatar.ts @@ -3,7 +3,7 @@ import { z } from "zod" import { env } from "./env/server" const gravatarSchema = z.object({ - avatar_url: z.string().url() + avatar_url: z.url() }) export async function getGravatar(email: string) { diff --git a/src/lib/schema/url.ts b/src/lib/schema/url.ts index 1fd08ec..b01a307 100644 --- a/src/lib/schema/url.ts +++ b/src/lib/schema/url.ts @@ -1,12 +1,12 @@ import { z } from "zod" export const urlFormSchema = z.object({ - url: z.string().url("Please enter a valid URL"), + url: z.url("Please enter a valid URL"), slug: z.string().max(10, "Slug must be 10 characters or less") }) export const advancedUrlSchema = z.object({ - url: z.string().url("Please enter a valid URL"), + url: z.url("Please enter a valid URL"), slug: z.string().max(10, "Slug must be 10 characters or less").transform(v => v.trim() === "" ? null : v).nullable(), title: z.string().max(100, "Title must be 100 characters or less").transform(v => v.trim() === "" ? null : v).nullable(), maxVisits: z.number().int().positive().nullable(), @@ -16,7 +16,7 @@ export const advancedUrlSchema = z.object({ }) export const editUrlSchema = z.object({ - url: z.string().url("Please enter a valid URL"), + url: z.url("Please enter a valid URL"), slug: z.string().min(1).max(10, "Slug must be 10 characters or less"), title: z.string().max(100, "Title must be 100 characters or less").transform(v => v.trim() === "" ? null : v).nullable(), maxVisits: z.number().int().positive().nullable(),