diff --git a/.env.development b/.env.development index 4fa97cae..1f054dcf 100644 --- a/.env.development +++ b/.env.development @@ -53,10 +53,6 @@ REDIS_URL="redis://localhost:6379" # Misc -# Set during docker build of application -# Used to disable env var validation at build time -# DOCKER_BUILD=1 - # Generated using: # openssl rand -base64 24 SOURCEBOT_ENCRYPTION_KEY="00000000000000000000000000000000" diff --git a/Dockerfile b/Dockerfile index dad1c27d..e3ac3e1b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -41,7 +41,7 @@ RUN yarn workspace @sourcebot/error install --frozen-lockfile # ------ Build Web ------ FROM node-alpine AS web-builder -ENV DOCKER_BUILD=1 +ENV SKIP_ENV_VALIDATION=1 # ----------- # Global args ARG SOURCEBOT_VERSION @@ -73,12 +73,12 @@ RUN yarn workspace @sourcebot/web install --frozen-lockfile ENV NEXT_TELEMETRY_DISABLED=1 RUN yarn workspace @sourcebot/web build -ENV DOCKER_BUILD=0 +ENV SKIP_ENV_VALIDATION=0 # ------------------------------ # ------ Build Backend ------ FROM node-alpine AS backend-builder -ENV DOCKER_BUILD=1 +ENV SKIP_ENV_VALIDATION=1 WORKDIR /app COPY package.json yarn.lock* ./ @@ -91,7 +91,7 @@ COPY --from=shared-libs-builder /app/packages/crypto ./packages/crypto COPY --from=shared-libs-builder /app/packages/error ./packages/error RUN yarn workspace @sourcebot/backend install --frozen-lockfile RUN yarn workspace @sourcebot/backend build -ENV DOCKER_BUILD=0 +ENV SKIP_ENV_VALIDATION=0 # ------------------------------ # ------ Runner ------ diff --git a/package.json b/package.json index ebc26eb2..26e27063 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "packages/*" ], "scripts": { - "build": "yarn workspaces run build", + "build": "cross-env SKIP_ENV_VALIDATION=1 yarn workspaces run build", "test": "yarn workspaces run test", "dev": "yarn dev:prisma:migrate:dev && npm-run-all --print-label --parallel dev:zoekt dev:backend dev:web", diff --git a/packages/backend/package.json b/packages/backend/package.json index 37055afa..36122e9e 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -8,7 +8,7 @@ "dev:watch": "tsc-watch --preserveWatchOutput --onSuccess \"yarn dev --cacheDir ../../.sourcebot\"", "dev": "node ./dist/index.js", "build": "tsc", - "test": "vitest --config ./vitest.config.ts" + "test": "cross-env SKIP_ENV_VALIDATION=1 vitest --config ./vitest.config.ts" }, "devDependencies": { "@types/argparse": "^2.0.16", @@ -18,6 +18,7 @@ "tsc-watch": "^6.2.0", "tsx": "^4.19.1", "typescript": "^5.6.2", + "cross-env": "^7.0.3", "vitest": "^2.1.9" }, "dependencies": { diff --git a/packages/backend/src/env.ts b/packages/backend/src/env.ts index e513ea6c..db267e8a 100644 --- a/packages/backend/src/env.ts +++ b/packages/backend/src/env.ts @@ -46,6 +46,5 @@ export const env = createEnv({ }, runtimeEnv: process.env, emptyStringAsUndefined: true, - // Skip environment variable validation in Docker builds. - skipValidation: process.env.DOCKER_BUILD === "1", + skipValidation: process.env.SKIP_ENV_VALIDATION === "1", }); \ No newline at end of file diff --git a/packages/error/package.json b/packages/error/package.json index 7a88f762..128a6283 100644 --- a/packages/error/package.json +++ b/packages/error/package.json @@ -1,13 +1,14 @@ { - "name": "@sourcebot/error", - "main": "dist/index.js", - "version": "0.1.0", - "scripts": { - "build": "tsc", - "postinstall": "yarn build" - }, - "devDependencies": { - "@types/node": "^22.7.5", - "typescript": "^5.7.3" - } -} \ No newline at end of file + "name": "@sourcebot/error", + "main": "dist/index.js", + "version": "0.1.0", + "private": true, + "scripts": { + "build": "tsc", + "postinstall": "yarn build" + }, + "devDependencies": { + "@types/node": "^22.7.5", + "typescript": "^5.7.3" + } +} \ No newline at end of file diff --git a/packages/web/src/app/[domain]/layout.tsx b/packages/web/src/app/[domain]/layout.tsx index db4aff6f..693496ba 100644 --- a/packages/web/src/app/[domain]/layout.tsx +++ b/packages/web/src/app/[domain]/layout.tsx @@ -1,5 +1,4 @@ import { prisma } from "@/prisma"; -import { PageNotFound } from "./components/pageNotFound"; import { auth } from "@/auth"; import { getOrgFromDomain } from "@/data/org"; import { isServiceError } from "@/lib/utils"; diff --git a/packages/web/src/app/[domain]/repos/repositoryTable.tsx b/packages/web/src/app/[domain]/repos/repositoryTable.tsx index 14cc6a33..761c5148 100644 --- a/packages/web/src/app/[domain]/repos/repositoryTable.tsx +++ b/packages/web/src/app/[domain]/repos/repositoryTable.tsx @@ -77,7 +77,7 @@ export const RepositoryTable = ({ isAddNewRepoButtonVisible }: RepositoryTablePr } return columns(domain, isAddNewRepoButtonVisible); - }, [reposLoading, domain]); + }, [reposLoading, domain, isAddNewRepoButtonVisible]); if (reposError) { diff --git a/packages/web/src/app/api/(client)/client.ts b/packages/web/src/app/api/(client)/client.ts index 0131da2e..987a0ad7 100644 --- a/packages/web/src/app/api/(client)/client.ts +++ b/packages/web/src/app/api/(client)/client.ts @@ -2,7 +2,6 @@ import { fileSourceResponseSchema, getVersionResponseSchema, listRepositoriesResponseSchema, searchResponseSchema } from "@/lib/schemas"; import { FileSourceRequest, FileSourceResponse, GetVersionResponse, ListRepositoriesResponse, SearchRequest, SearchResponse } from "@/lib/types"; -import assert from "assert"; export const search = async (body: SearchRequest, domain: string): Promise => { const result = await fetch("/api/search", { diff --git a/packages/web/src/app/error.tsx b/packages/web/src/app/error.tsx index 4e084150..379c7302 100644 --- a/packages/web/src/app/error.tsx +++ b/packages/web/src/app/error.tsx @@ -27,7 +27,8 @@ export default function Error({ error, reset }: { error: Error & { digest?: stri statusCode: serviceError.statusCode, } } - } catch { } + /* eslint-disable no-empty */ + } catch {} return { message: error.message, diff --git a/packages/web/src/env.mjs b/packages/web/src/env.mjs index acf41389..4f4e2319 100644 --- a/packages/web/src/env.mjs +++ b/packages/web/src/env.mjs @@ -62,7 +62,6 @@ export const env = createEnv({ NEXT_PUBLIC_SOURCEBOT_VERSION: process.env.NEXT_PUBLIC_SOURCEBOT_VERSION, NEXT_PUBLIC_POLLING_INTERVAL_MS: process.env.NEXT_PUBLIC_POLLING_INTERVAL_MS, }, - // Skip environment variable validation in Docker builds. - skipValidation: process.env.DOCKER_BUILD === "1", + skipValidation: process.env.SKIP_ENV_VALIDATION === "1", emptyStringAsUndefined: true, }); \ No newline at end of file diff --git a/packages/web/src/initialize.ts b/packages/web/src/initialize.ts index e1fbba0e..f7a3f615 100644 --- a/packages/web/src/initialize.ts +++ b/packages/web/src/initialize.ts @@ -134,6 +134,8 @@ const initSingleTenancy = async () => { } } -if (env.SOURCEBOT_TENANCY_MODE === 'single') { - await initSingleTenancy(); -} \ No newline at end of file +(async () => { + if (env.SOURCEBOT_TENANCY_MODE === 'single') { + await initSingleTenancy(); + } +})();