diff --git a/Dockerfile b/Dockerfile index 5b316802..e69ccaf2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -42,12 +42,10 @@ COPY package.json yarn.lock* .yarnrc.yml ./ COPY .yarn ./.yarn COPY ./packages/db ./packages/db COPY ./packages/schemas ./packages/schemas -COPY ./packages/error ./packages/error COPY ./packages/shared ./packages/shared RUN yarn workspace @sourcebot/db install RUN yarn workspace @sourcebot/schemas install -RUN yarn workspace @sourcebot/error install RUN yarn workspace @sourcebot/shared install # ------------------------------------ @@ -93,7 +91,6 @@ COPY ./packages/web ./packages/web COPY --from=shared-libs-builder /app/node_modules ./node_modules COPY --from=shared-libs-builder /app/packages/db ./packages/db COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas -COPY --from=shared-libs-builder /app/packages/error ./packages/error COPY --from=shared-libs-builder /app/packages/shared ./packages/shared # Fixes arm64 timeouts @@ -132,7 +129,6 @@ COPY ./packages/backend ./packages/backend COPY --from=shared-libs-builder /app/node_modules ./node_modules COPY --from=shared-libs-builder /app/packages/db ./packages/db COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas -COPY --from=shared-libs-builder /app/packages/error ./packages/error COPY --from=shared-libs-builder /app/packages/shared ./packages/shared RUN yarn workspace @sourcebot/backend install RUN yarn workspace @sourcebot/backend build @@ -217,7 +213,6 @@ COPY --from=backend-builder /app/packages/backend ./packages/backend COPY --from=shared-libs-builder /app/node_modules ./node_modules COPY --from=shared-libs-builder /app/packages/db ./packages/db COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas -COPY --from=shared-libs-builder /app/packages/error ./packages/error COPY --from=shared-libs-builder /app/packages/shared ./packages/shared # Configure dependencies diff --git a/package.json b/package.json index 06b07c90..a70bab99 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "packages/*" ], "scripts": { - "build": "cross-env SKIP_ENV_VALIDATION=1 yarn workspaces foreach -A run build", - "test": "yarn workspaces foreach -A run test", + "build": "cross-env SKIP_ENV_VALIDATION=1 yarn workspaces foreach --all --topological run build", + "test": "yarn workspaces foreach --all --topological run test", "dev": "concurrently --kill-others --names \"zoekt,worker,web,mcp,schemas\" 'yarn dev:zoekt' 'yarn dev:backend' 'yarn dev:web' 'yarn watch:mcp' 'yarn watch:schemas'", "with-env": "cross-env PATH=\"$PWD/bin:$PATH\" dotenv -e .env.development -c --", "dev:zoekt": "yarn with-env zoekt-webserver -index .sourcebot/index -rpc", @@ -18,7 +18,7 @@ "dev:prisma:studio": "yarn with-env yarn workspace @sourcebot/db prisma:studio", "dev:prisma:migrate:reset": "yarn with-env yarn workspace @sourcebot/db prisma:migrate:reset", "dev:prisma:db:push": "yarn with-env yarn workspace @sourcebot/db prisma:db:push", - "build:deps": "yarn workspaces foreach -R --from '{@sourcebot/schemas,@sourcebot/error,@sourcebot/db,@sourcebot/shared}' run build" + "build:deps": "yarn workspaces foreach --recursive --topological --from '{@sourcebot/schemas,@sourcebot/db,@sourcebot/shared}' run build" }, "devDependencies": { "concurrently": "^9.2.1", diff --git a/packages/backend/package.json b/packages/backend/package.json index d3105606..e2eea1f5 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -30,7 +30,6 @@ "@sentry/node": "^9.3.0", "@sentry/profiling-node": "^9.3.0", "@sourcebot/db": "workspace:*", - "@sourcebot/error": "workspace:*", "@sourcebot/schemas": "workspace:*", "@sourcebot/shared": "workspace:*", "@t3-oss/env-core": "^0.12.0", diff --git a/packages/backend/src/azuredevops.ts b/packages/backend/src/azuredevops.ts index 31b543bb..0714276e 100644 --- a/packages/backend/src/azuredevops.ts +++ b/packages/backend/src/azuredevops.ts @@ -2,7 +2,6 @@ import { AzureDevOpsConnectionConfig } from "@sourcebot/schemas/v3/azuredevops.t import { createLogger } from "@sourcebot/shared"; import { measure, fetchWithRetry } from "./utils.js"; import micromatch from "micromatch"; -import { BackendException, BackendError } from "@sourcebot/error"; import { processPromiseResults, throwIfAnyFailed } from "./connectionUtils.js"; import * as Sentry from "@sentry/node"; import * as azdev from "azure-devops-node-api"; @@ -36,9 +35,7 @@ export const getAzureDevOpsReposFromConfig = async ( undefined; if (!token) { - const e = new BackendException(BackendError.CONNECTION_SYNC_INVALID_TOKEN, { - message: 'Azure DevOps requires a Personal Access Token', - }); + const e = new Error('Azure DevOps requires a Personal Access Token'); Sentry.captureException(e); throw e; } diff --git a/packages/backend/src/gerrit.ts b/packages/backend/src/gerrit.ts index 70862600..34feb208 100644 --- a/packages/backend/src/gerrit.ts +++ b/packages/backend/src/gerrit.ts @@ -1,11 +1,8 @@ -import fetch from 'cross-fetch'; -import { GerritConnectionConfig } from "@sourcebot/schemas/v3/index.type" +import { GerritConnectionConfig } from "@sourcebot/schemas/v3/index.type"; import { createLogger } from '@sourcebot/shared'; +import fetch from 'cross-fetch'; import micromatch from "micromatch"; -import { measure, fetchWithRetry } from './utils.js'; -import { BackendError } from '@sourcebot/error'; -import { BackendException } from '@sourcebot/error'; -import * as Sentry from "@sentry/node"; +import { fetchWithRetry, measure } from './utils.js'; // https://gerrit-review.googlesource.com/Documentation/rest-api.html interface GerritProjects { @@ -39,26 +36,10 @@ export const getGerritReposFromConfig = async (config: GerritConnectionConfig): const url = config.url.endsWith('/') ? config.url : `${config.url}/`; let { durationMs, data: projects } = await measure(async () => { - try { - const fetchFn = () => fetchAllProjects(url); - return fetchWithRetry(fetchFn, `projects from ${url}`, logger); - } catch (err) { - Sentry.captureException(err); - if (err instanceof BackendException) { - throw err; - } - - logger.error(`Failed to fetch projects from ${url}`, err); - return null; - } + const fetchFn = () => fetchAllProjects(url); + return fetchWithRetry(fetchFn, `projects from ${url}`, logger); }); - if (!projects) { - const e = new Error(`Failed to fetch projects from ${url}`); - Sentry.captureException(e); - throw e; - } - // include repos by glob if specified in config if (config.projects) { projects = projects.filter((project) => { @@ -91,27 +72,9 @@ const fetchAllProjects = async (url: string): Promise => { logger.debug(`Fetching projects from Gerrit at ${endpointWithParams}`); let response: Response; - try { - response = await fetch(endpointWithParams); - if (!response.ok) { - logger.error(`Failed to fetch projects from Gerrit at ${endpointWithParams} with status ${response.status}`); - const e = new BackendException(BackendError.CONNECTION_SYNC_FAILED_TO_FETCH_GERRIT_PROJECTS, { - status: response.status, - }); - Sentry.captureException(e); - throw e; - } - } catch (err) { - Sentry.captureException(err); - if (err instanceof BackendException) { - throw err; - } - - const status = (err as any).code; - logger.error(`Failed to fetch projects from Gerrit at ${endpointWithParams} with status ${status}`); - throw new BackendException(BackendError.CONNECTION_SYNC_FAILED_TO_FETCH_GERRIT_PROJECTS, { - status: status, - }); + response = await fetch(endpointWithParams); + if (!response.ok) { + throw new Error(`Failed to fetch projects from Gerrit at ${endpointWithParams} with status ${response.status}`); } const text = await response.text(); @@ -151,11 +114,11 @@ const shouldExcludeProject = ({ const shouldExclude = (() => { if ([ - 'All-Projects', - 'All-Users', - 'All-Avatars', - 'All-Archived-Projects' - ].includes(project.name)) { + 'All-Projects', + 'All-Users', + 'All-Avatars', + 'All-Archived-Projects' + ].includes(project.name)) { reason = `Project is a special project.`; return true; } diff --git a/packages/error/package.json b/packages/error/package.json deleted file mode 100644 index 8b97d5f1..00000000 --- a/packages/error/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "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" - } -} diff --git a/packages/error/src/index.ts b/packages/error/src/index.ts deleted file mode 100644 index f18f4005..00000000 --- a/packages/error/src/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -export enum BackendError { - CONNECTION_SYNC_SECRET_DNE = 'CONNECTION_SYNC_SECRET_DNE', - CONNECTION_SYNC_INVALID_TOKEN = 'CONNECTION_SYNC_INVALID_TOKEN', - CONNECTION_SYNC_SYSTEM_ERROR = 'CONNECTION_SYNC_SYSTEM_ERROR', - CONNECTION_SYNC_FAILED_TO_FETCH_GERRIT_PROJECTS = 'CONNECTION_SYNC_FAILED_TO_FETCH_GERRIT_PROJECTS', - CONNECTION_SYNC_CONNECTION_NOT_FOUND = 'CONNECTION_SYNC_CONNECTION_NOT_FOUND', -} - -export class BackendException extends Error { - constructor( - public readonly code: BackendError, - public readonly metadata: Record = {} - ) { - super(code); - this.name = 'BackendException'; - } -} \ No newline at end of file diff --git a/packages/error/tsconfig.json b/packages/error/tsconfig.json deleted file mode 100644 index a27277b9..00000000 --- a/packages/error/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "CommonJS", - "lib": ["ES6"], - "outDir": "dist", - "rootDir": "src", - "declaration": true, - "declarationMap": true, - "sourceMap": true, - "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "moduleResolution": "node", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true, - "isolatedModules": true - }, - "include": ["src/**/*"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/web/package.json b/packages/web/package.json index 0580c931..710feaeb 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -91,7 +91,6 @@ "@shopify/lang-jsonc": "^1.0.0", "@sourcebot/codemirror-lang-tcl": "^1.0.12", "@sourcebot/db": "workspace:*", - "@sourcebot/error": "workspace:*", "@sourcebot/schemas": "workspace:*", "@sourcebot/shared": "workspace:*", "@ssddanbrown/codemirror-lang-twig": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index 6b26f1ae..2b962b78 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7894,7 +7894,6 @@ __metadata: "@sentry/node": "npm:^9.3.0" "@sentry/profiling-node": "npm:^9.3.0" "@sourcebot/db": "workspace:*" - "@sourcebot/error": "workspace:*" "@sourcebot/schemas": "workspace:*" "@sourcebot/shared": "workspace:*" "@t3-oss/env-core": "npm:^0.12.0" @@ -7959,15 +7958,6 @@ __metadata: languageName: unknown linkType: soft -"@sourcebot/error@workspace:*, @sourcebot/error@workspace:packages/error": - version: 0.0.0-use.local - resolution: "@sourcebot/error@workspace:packages/error" - dependencies: - "@types/node": "npm:^22.7.5" - typescript: "npm:^5.7.3" - languageName: unknown - linkType: soft - "@sourcebot/mcp@workspace:packages/mcp": version: 0.0.0-use.local resolution: "@sourcebot/mcp@workspace:packages/mcp" @@ -8107,7 +8097,6 @@ __metadata: "@shopify/lang-jsonc": "npm:^1.0.0" "@sourcebot/codemirror-lang-tcl": "npm:^1.0.12" "@sourcebot/db": "workspace:*" - "@sourcebot/error": "workspace:*" "@sourcebot/schemas": "workspace:*" "@sourcebot/shared": "workspace:*" "@ssddanbrown/codemirror-lang-twig": "npm:^1.0.0"