From 1011f89d924cde500aaff76bc221138fc991389e Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Tue, 27 May 2025 12:09:29 +0100 Subject: [PATCH 1/4] v4: Can now set project ref using the TRIGGER_PROJECT_REF env var --- packages/cli-v3/src/commands/deploy.ts | 9 +++++++- packages/cli-v3/src/commands/dev.ts | 19 +++++++-------- packages/cli-v3/src/dev/devSupervisor.ts | 8 +++---- .../src/entryPoints/dev-run-controller.ts | 1 + .../src/entryPoints/managed/execution.ts | 5 +++- packages/cli-v3/src/utilities/envVars.ts | 23 +++++++++++++++++++ references/d3-chat/src/trigger/chat.ts | 2 ++ references/d3-chat/trigger.config.ts | 2 +- 8 files changed, 52 insertions(+), 17 deletions(-) create mode 100644 packages/cli-v3/src/utilities/envVars.ts diff --git a/packages/cli-v3/src/commands/deploy.ts b/packages/cli-v3/src/commands/deploy.ts index 5355534a22..d099479fa9 100644 --- a/packages/cli-v3/src/commands/deploy.ts +++ b/packages/cli-v3/src/commands/deploy.ts @@ -36,6 +36,7 @@ import { login } from "./login.js"; import { updateTriggerPackages } from "./update.js"; import { setGithubActionsOutputAndEnvVars } from "../utilities/githubActions.js"; import { isDirectory } from "../utilities/fileSystem.js"; +import { resolveEnvVars } from "../utilities/envVars.js"; const DeployCommandOptions = CommonCommandOptions.extend({ dryRun: z.boolean().default(false), @@ -207,9 +208,15 @@ async function _deployCommand(dir: string, options: DeployCommandOptions) { } } + const envVars = resolveEnvVars(options.envFile); + + if (envVars.TRIGGER_PROJECT_REF) { + logger.debug("Using project ref from env", { ref: envVars.TRIGGER_PROJECT_REF }); + } + const resolvedConfig = await loadConfig({ cwd: projectPath, - overrides: { project: options.projectRef }, + overrides: { project: options.projectRef ?? envVars.TRIGGER_PROJECT_REF }, configFile: options.config, }); diff --git a/packages/cli-v3/src/commands/dev.ts b/packages/cli-v3/src/commands/dev.ts index 94cec75dce..4fbf130185 100644 --- a/packages/cli-v3/src/commands/dev.ts +++ b/packages/cli-v3/src/commands/dev.ts @@ -1,23 +1,18 @@ import { ResolvedConfig } from "@trigger.dev/core/v3/build"; import { Command } from "commander"; import { z } from "zod"; -import { - CommonCommandOptions, - commonOptions, - SkipLoggingError, - wrapCommandAction, -} from "../cli/common.js"; +import { CommonCommandOptions, commonOptions, wrapCommandAction } from "../cli/common.js"; import { watchConfig } from "../config.js"; import { DevSessionInstance, startDevSession } from "../dev/devSession.js"; +import { createLockFile } from "../dev/lock.js"; import { chalkError } from "../utilities/cliOutput.js"; +import { resolveEnvVars } from "../utilities/envVars.js"; import { printDevBanner, printStandloneInitialBanner } from "../utilities/initialBanner.js"; import { logger } from "../utilities/logger.js"; import { runtimeChecks } from "../utilities/runtimeCheck.js"; import { getProjectClient, LoginResultOk } from "../utilities/session.js"; import { login } from "./login.js"; import { updateTriggerPackages } from "./update.js"; -import { createLockFile } from "../dev/lock.js"; -import { BundleError } from "../build/bundle.js"; const DevCommandOptions = CommonCommandOptions.extend({ debugOtel: z.boolean().default(false), @@ -133,6 +128,12 @@ async function startDev(options: StartDevOptions) { printDevBanner(displayedUpdateMessage); + const envVars = resolveEnvVars(options.envFile); + + if (envVars.TRIGGER_PROJECT_REF) { + logger.debug("Using project ref from env", { ref: envVars.TRIGGER_PROJECT_REF }); + } + watcher = await watchConfig({ cwd: options.cwd, async onUpdate(config) { @@ -145,7 +146,7 @@ async function startDev(options: StartDevOptions) { devInstance = await bootDevSession(config); }, overrides: { - project: options.projectRef, + project: options.projectRef ?? envVars.TRIGGER_PROJECT_REF, }, configFile: options.config, }); diff --git a/packages/cli-v3/src/dev/devSupervisor.ts b/packages/cli-v3/src/dev/devSupervisor.ts index 46ed913121..349f86a0b6 100644 --- a/packages/cli-v3/src/dev/devSupervisor.ts +++ b/packages/cli-v3/src/dev/devSupervisor.ts @@ -25,6 +25,7 @@ import { WorkerServerToClientEvents, } from "@trigger.dev/core/v3/workers"; import pLimit from "p-limit"; +import { resolveEnvVars } from "../utilities/envVars.js"; export type WorkerRuntimeOptions = { name: string | undefined; @@ -372,18 +373,15 @@ class DevSupervisor implements WorkerRuntime { this.options.config.project ); - const processEnv = gatherProcessEnv(); - const dotEnvVars = resolveDotEnvVars(undefined, this.options.args.envFile); const OTEL_IMPORT_HOOK_INCLUDES = (this.options.config.instrumentedPackageNames ?? []).join( "," ); return { - ...sanitizeEnvVars(processEnv), - ...sanitizeEnvVars( + ...resolveEnvVars( + this.options.args.envFile, environmentVariablesResponse.success ? environmentVariablesResponse.data.variables : {} ), - ...sanitizeEnvVars(dotEnvVars), TRIGGER_API_URL: this.options.client.apiURL, TRIGGER_SECRET_KEY: this.options.client.accessToken!, OTEL_EXPORTER_OTLP_COMPRESSION: "none", diff --git a/packages/cli-v3/src/entryPoints/dev-run-controller.ts b/packages/cli-v3/src/entryPoints/dev-run-controller.ts index e9c91012ed..2f7ebc83fe 100644 --- a/packages/cli-v3/src/entryPoints/dev-run-controller.ts +++ b/packages/cli-v3/src/entryPoints/dev-run-controller.ts @@ -612,6 +612,7 @@ export class DevRunController { ...sanitizeEnvVars(this.opts.worker.params.env), TRIGGER_WORKER_MANIFEST_PATH: join(this.opts.worker.build.outputPath, "index.json"), RUN_WORKER_SHOW_LOGS: this.opts.logLevel === "debug" ? "true" : "false", + TRIGGER_PROJECT_REF: execution.project.ref, }, serverWorker: { id: "unmanaged", diff --git a/packages/cli-v3/src/entryPoints/managed/execution.ts b/packages/cli-v3/src/entryPoints/managed/execution.ts index 41446cfa35..1a29190d75 100644 --- a/packages/cli-v3/src/entryPoints/managed/execution.ts +++ b/packages/cli-v3/src/entryPoints/managed/execution.ts @@ -586,7 +586,10 @@ export class RunExecution { // To skip this step and eagerly create the task run process, run prepareForExecution first if (!this.taskRunProcess || !this.taskRunProcess.isPreparedForNextRun) { - this.taskRunProcess = this.createTaskRunProcess({ envVars, isWarmStart }); + this.taskRunProcess = this.createTaskRunProcess({ + envVars: { ...envVars, TRIGGER_PROJECT_REF: execution.project.ref }, + isWarmStart, + }); } this.sendDebugLog("executing task run process", { runId: execution.run.id }); diff --git a/packages/cli-v3/src/utilities/envVars.ts b/packages/cli-v3/src/utilities/envVars.ts new file mode 100644 index 0000000000..a84adfb853 --- /dev/null +++ b/packages/cli-v3/src/utilities/envVars.ts @@ -0,0 +1,23 @@ +import { resolveDotEnvVars } from "./dotEnv.js"; +import { sanitizeEnvVars } from "./sanitizeEnvVars.js"; + +export function resolveEnvVars(envFile?: string, additionalVariables?: Record) { + const processEnv = gatherProcessEnv(); + const dotEnvVars = resolveDotEnvVars(undefined, envFile); + + return { + ...sanitizeEnvVars(processEnv), + ...sanitizeEnvVars(additionalVariables ?? {}), + ...sanitizeEnvVars(dotEnvVars), + }; +} + +function gatherProcessEnv() { + const $env = { + ...process.env, + NODE_ENV: "development", + }; + + // Filter out undefined values + return Object.fromEntries(Object.entries($env).filter(([key, value]) => value !== undefined)); +} diff --git a/references/d3-chat/src/trigger/chat.ts b/references/d3-chat/src/trigger/chat.ts index 67654bea9e..891d84457f 100644 --- a/references/d3-chat/src/trigger/chat.ts +++ b/references/d3-chat/src/trigger/chat.ts @@ -27,6 +27,8 @@ const queryApprovalTask = schemaTask({ query: z.string().describe("The SQL query to execute"), }), run: async ({ userId, input, query }) => { + logger.info("queryApproval: starting", { projectRef: process.env.TRIGGER_PROJECT_REF }); + const token = await wait.createToken({ tags: [`user:${userId}`, "approval"], timeout: "5m", // timeout in 5 minutes diff --git a/references/d3-chat/trigger.config.ts b/references/d3-chat/trigger.config.ts index 603909666a..ac84181392 100644 --- a/references/d3-chat/trigger.config.ts +++ b/references/d3-chat/trigger.config.ts @@ -5,7 +5,7 @@ import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http"; import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; export default defineConfig({ - project: "proj_cdmymsrobxmcgjqzhdkq", + project: process.env.TRIGGER_PROJECT_REF!, dirs: ["./src/trigger"], telemetry: { logExporters: [ From f44388706451a4f4a91d506c18423d5c3adcbd9b Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Tue, 27 May 2025 12:10:57 +0100 Subject: [PATCH 2/4] Add changeset --- .changeset/silly-timers-repair.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/silly-timers-repair.md diff --git a/.changeset/silly-timers-repair.md b/.changeset/silly-timers-repair.md new file mode 100644 index 0000000000..711fbc7f2b --- /dev/null +++ b/.changeset/silly-timers-repair.md @@ -0,0 +1,5 @@ +--- +"trigger.dev": patch +--- + +Can now set project ref using the TRIGGER_PROJECT_REF env var From 592cef644e633d499a1f4d5b3d3393d462ea8b1e Mon Sep 17 00:00:00 2001 From: Eric Allam Date: Tue, 27 May 2025 12:18:01 +0100 Subject: [PATCH 3/4] Improve the name of the resolvEnvVars function and move setting NODE_ENV into the dev supervisor --- packages/cli-v3/src/commands/deploy.ts | 4 ++-- packages/cli-v3/src/commands/dev.ts | 4 ++-- packages/cli-v3/src/dev/devSupervisor.ts | 6 +++--- .../cli-v3/src/utilities/{envVars.ts => localEnvVars.ts} | 6 ++++-- 4 files changed, 11 insertions(+), 9 deletions(-) rename packages/cli-v3/src/utilities/{envVars.ts => localEnvVars.ts} (81%) diff --git a/packages/cli-v3/src/commands/deploy.ts b/packages/cli-v3/src/commands/deploy.ts index d099479fa9..581235e325 100644 --- a/packages/cli-v3/src/commands/deploy.ts +++ b/packages/cli-v3/src/commands/deploy.ts @@ -36,7 +36,7 @@ import { login } from "./login.js"; import { updateTriggerPackages } from "./update.js"; import { setGithubActionsOutputAndEnvVars } from "../utilities/githubActions.js"; import { isDirectory } from "../utilities/fileSystem.js"; -import { resolveEnvVars } from "../utilities/envVars.js"; +import { resolveLocalEnvVars } from "../utilities/localEnvVars.js"; const DeployCommandOptions = CommonCommandOptions.extend({ dryRun: z.boolean().default(false), @@ -208,7 +208,7 @@ async function _deployCommand(dir: string, options: DeployCommandOptions) { } } - const envVars = resolveEnvVars(options.envFile); + const envVars = resolveLocalEnvVars(options.envFile); if (envVars.TRIGGER_PROJECT_REF) { logger.debug("Using project ref from env", { ref: envVars.TRIGGER_PROJECT_REF }); diff --git a/packages/cli-v3/src/commands/dev.ts b/packages/cli-v3/src/commands/dev.ts index 4fbf130185..cfb8ba8dca 100644 --- a/packages/cli-v3/src/commands/dev.ts +++ b/packages/cli-v3/src/commands/dev.ts @@ -6,7 +6,7 @@ import { watchConfig } from "../config.js"; import { DevSessionInstance, startDevSession } from "../dev/devSession.js"; import { createLockFile } from "../dev/lock.js"; import { chalkError } from "../utilities/cliOutput.js"; -import { resolveEnvVars } from "../utilities/envVars.js"; +import { resolveLocalEnvVars } from "../utilities/localEnvVars.js"; import { printDevBanner, printStandloneInitialBanner } from "../utilities/initialBanner.js"; import { logger } from "../utilities/logger.js"; import { runtimeChecks } from "../utilities/runtimeCheck.js"; @@ -128,7 +128,7 @@ async function startDev(options: StartDevOptions) { printDevBanner(displayedUpdateMessage); - const envVars = resolveEnvVars(options.envFile); + const envVars = resolveLocalEnvVars(options.envFile); if (envVars.TRIGGER_PROJECT_REF) { logger.debug("Using project ref from env", { ref: envVars.TRIGGER_PROJECT_REF }); diff --git a/packages/cli-v3/src/dev/devSupervisor.ts b/packages/cli-v3/src/dev/devSupervisor.ts index 349f86a0b6..72c3edb708 100644 --- a/packages/cli-v3/src/dev/devSupervisor.ts +++ b/packages/cli-v3/src/dev/devSupervisor.ts @@ -10,7 +10,6 @@ import { import { ResolvedConfig } from "@trigger.dev/core/v3/build"; import { CliApiClient } from "../apiClient.js"; import { DevCommandOptions } from "../commands/dev.js"; -import { resolveDotEnvVars } from "../utilities/dotEnv.js"; import { eventBus } from "../utilities/eventBus.js"; import { logger } from "../utilities/logger.js"; import { sanitizeEnvVars } from "../utilities/sanitizeEnvVars.js"; @@ -25,7 +24,7 @@ import { WorkerServerToClientEvents, } from "@trigger.dev/core/v3/workers"; import pLimit from "p-limit"; -import { resolveEnvVars } from "../utilities/envVars.js"; +import { resolveLocalEnvVars } from "../utilities/localEnvVars.js"; export type WorkerRuntimeOptions = { name: string | undefined; @@ -378,10 +377,11 @@ class DevSupervisor implements WorkerRuntime { ); return { - ...resolveEnvVars( + ...resolveLocalEnvVars( this.options.args.envFile, environmentVariablesResponse.success ? environmentVariablesResponse.data.variables : {} ), + NODE_ENV: "development", TRIGGER_API_URL: this.options.client.apiURL, TRIGGER_SECRET_KEY: this.options.client.accessToken!, OTEL_EXPORTER_OTLP_COMPRESSION: "none", diff --git a/packages/cli-v3/src/utilities/envVars.ts b/packages/cli-v3/src/utilities/localEnvVars.ts similarity index 81% rename from packages/cli-v3/src/utilities/envVars.ts rename to packages/cli-v3/src/utilities/localEnvVars.ts index a84adfb853..225c2dae13 100644 --- a/packages/cli-v3/src/utilities/envVars.ts +++ b/packages/cli-v3/src/utilities/localEnvVars.ts @@ -1,7 +1,10 @@ import { resolveDotEnvVars } from "./dotEnv.js"; import { sanitizeEnvVars } from "./sanitizeEnvVars.js"; -export function resolveEnvVars(envFile?: string, additionalVariables?: Record) { +export function resolveLocalEnvVars( + envFile?: string, + additionalVariables?: Record +) { const processEnv = gatherProcessEnv(); const dotEnvVars = resolveDotEnvVars(undefined, envFile); @@ -15,7 +18,6 @@ export function resolveEnvVars(envFile?: string, additionalVariables?: Record Date: Tue, 27 May 2025 12:22:31 +0100 Subject: [PATCH 4/4] Removed moved function --- packages/cli-v3/src/dev/devSupervisor.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/packages/cli-v3/src/dev/devSupervisor.ts b/packages/cli-v3/src/dev/devSupervisor.ts index 72c3edb708..970b05e6bd 100644 --- a/packages/cli-v3/src/dev/devSupervisor.ts +++ b/packages/cli-v3/src/dev/devSupervisor.ts @@ -579,16 +579,6 @@ class DevSupervisor implements WorkerRuntime { } } -function gatherProcessEnv() { - const $env = { - ...process.env, - NODE_ENV: "development", - }; - - // Filter out undefined values - return Object.fromEntries(Object.entries($env).filter(([key, value]) => value !== undefined)); -} - type ValidationIssue = | { type: "duplicateTaskId";