diff --git a/apps/server/src/temporal/worker.test.ts b/apps/server/src/temporal/worker.test.ts new file mode 100644 index 0000000..f66b3ca --- /dev/null +++ b/apps/server/src/temporal/worker.test.ts @@ -0,0 +1,12 @@ +import { describe, expect, it } from "vitest" +import { resolveTemporalAddress } from "./worker" + +describe("resolveTemporalAddress", () => { + it("honors TEMPORAL_ADDRESS so the worker reaches Temporal across containers", () => { + expect(resolveTemporalAddress({ TEMPORAL_ADDRESS: "temporal:7233" })).toBe("temporal:7233") + }) + + it("defaults to localhost:7233 when unset", () => { + expect(resolveTemporalAddress({})).toBe("localhost:7233") + }) +}) diff --git a/apps/server/src/temporal/worker.ts b/apps/server/src/temporal/worker.ts index 7ae0ef0..c0c4f45 100644 --- a/apps/server/src/temporal/worker.ts +++ b/apps/server/src/temporal/worker.ts @@ -1,14 +1,27 @@ -import { Worker } from "@temporalio/worker" +import { NativeConnection, Worker } from "@temporalio/worker" import * as activities from "./activities" const TASK_QUEUE = process.env.TEMPORAL_TASK_QUEUE ?? "engineering" +/** + * The Temporal server address. The worker MUST honor `TEMPORAL_ADDRESS` so it can reach Temporal + * across containers (e.g. `temporal:7233` under Docker Compose). Creating the `Worker` without an + * explicit connection silently defaults to `localhost:7233` — which works locally but makes the + * worker unable to reach Temporal in Docker, so it crashes on startup with a connection refused. + */ +export function resolveTemporalAddress(env: NodeJS.ProcessEnv = process.env): string { + return env.TEMPORAL_ADDRESS ?? "localhost:7233" +} + export async function runTemporalWorker(): Promise { + const address = resolveTemporalAddress() + const connection = await NativeConnection.connect({ address }) const worker = await Worker.create({ + connection, workflowsPath: new URL("./workflows.ts", import.meta.url).pathname, activities, taskQueue: TASK_QUEUE, }) - console.log(`[worker] polling task queue "${TASK_QUEUE}"`) + console.log(`[worker] polling task queue "${TASK_QUEUE}" @ ${address}`) await worker.run() } diff --git a/docker-compose.yml b/docker-compose.yml index 910aa24..6426368 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -75,6 +75,7 @@ services: TEMPORAL_TASK_QUEUE: engineering ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-} command: ["pnpm", "--filter", "@eng/server", "start"] + restart: on-failure ports: - "3000:3000" @@ -104,6 +105,7 @@ services: PERSISTENCE_BACKEND: ${PERSISTENCE_BACKEND:-postgres} GITHUB_DOCS_PREFIX: ${GITHUB_DOCS_PREFIX:-docs} command: ["pnpm", "--filter", "@eng/server", "worker"] + restart: on-failure web: build: