Skip to content

Commit f5a64f4

Browse files
authored
fix(docker): use next-runtime instead of accessing next_public vars directly (#746)
1 parent 2ae9cbc commit f5a64f4

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

apps/sim/lib/env.ts

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
11
import { createEnv } from '@t3-oss/env-nextjs'
2+
import { env as runtimeEnv } from 'next-runtime-env'
23
import { z } from 'zod'
34

5+
/**
6+
* Universal environment variable getter that works in both client and server contexts.
7+
* - Client-side: Uses next-runtime-env for runtime injection (supports Docker runtime vars)
8+
* - Server-side: Falls back to process.env when runtimeEnv returns undefined
9+
* - Provides seamless Docker runtime variable support for NEXT_PUBLIC_ vars
10+
*/
11+
const getEnv = (variable: string): string | undefined => {
12+
return runtimeEnv(variable) ?? process.env[variable]
13+
}
14+
415
export const env = createEnv({
516
skipValidation: true,
617

@@ -131,18 +142,20 @@ export const env = createEnv({
131142
},
132143

133144
experimental__runtimeEnv: {
134-
NEXT_PUBLIC_APP_URL: process.env.NEXT_PUBLIC_APP_URL,
135-
NEXT_PUBLIC_VERCEL_URL: process.env.VERCEL_URL,
136-
NEXT_PUBLIC_SENTRY_DSN: process.env.NEXT_PUBLIC_SENTRY_DSN,
137-
NEXT_PUBLIC_GOOGLE_CLIENT_ID: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID,
138-
NEXT_PUBLIC_GOOGLE_API_KEY: process.env.NEXT_PUBLIC_GOOGLE_API_KEY,
139-
NEXT_PUBLIC_GOOGLE_PROJECT_NUMBER: process.env.NEXT_PUBLIC_GOOGLE_PROJECT_NUMBER,
140-
NEXT_PUBLIC_SOCKET_URL: process.env.NEXT_PUBLIC_SOCKET_URL,
141-
NODE_ENV: process.env.NODE_ENV,
142-
NEXT_TELEMETRY_DISABLED: process.env.NEXT_TELEMETRY_DISABLED,
145+
NEXT_PUBLIC_APP_URL: getEnv('NEXT_PUBLIC_APP_URL'),
146+
NEXT_PUBLIC_VERCEL_URL: process.env.VERCEL_URL, // Keep as-is (server-only)
147+
NEXT_PUBLIC_SENTRY_DSN: getEnv('NEXT_PUBLIC_SENTRY_DSN'),
148+
NEXT_PUBLIC_GOOGLE_CLIENT_ID: getEnv('NEXT_PUBLIC_GOOGLE_CLIENT_ID'),
149+
NEXT_PUBLIC_GOOGLE_API_KEY: getEnv('NEXT_PUBLIC_GOOGLE_API_KEY'),
150+
NEXT_PUBLIC_GOOGLE_PROJECT_NUMBER: getEnv('NEXT_PUBLIC_GOOGLE_PROJECT_NUMBER'),
151+
NEXT_PUBLIC_SOCKET_URL: getEnv('NEXT_PUBLIC_SOCKET_URL'),
152+
NODE_ENV: process.env.NODE_ENV, // Keep as-is (build-time)
153+
NEXT_TELEMETRY_DISABLED: process.env.NEXT_TELEMETRY_DISABLED, // Keep as-is (build-time)
143154
},
144155
})
145156

146157
// Needing this utility because t3-env is returning string for boolean values.
147158
export const isTruthy = (value: string | boolean | number | undefined) =>
148159
typeof value === 'string' ? value === 'true' || value === '1' : Boolean(value)
160+
161+
export { getEnv }

0 commit comments

Comments
 (0)