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 diff --git a/packages/cli-v3/src/commands/deploy.ts b/packages/cli-v3/src/commands/deploy.ts index 5355534a22..581235e325 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 { resolveLocalEnvVars } from "../utilities/localEnvVars.js"; const DeployCommandOptions = CommonCommandOptions.extend({ dryRun: z.boolean().default(false), @@ -207,9 +208,15 @@ async function _deployCommand(dir: string, options: DeployCommandOptions) { } } + const envVars = resolveLocalEnvVars(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..cfb8ba8dca 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 { resolveLocalEnvVars } from "../utilities/localEnvVars.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 = resolveLocalEnvVars(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..970b05e6bd 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,6 +24,7 @@ import { WorkerServerToClientEvents, } from "@trigger.dev/core/v3/workers"; import pLimit from "p-limit"; +import { resolveLocalEnvVars } from "../utilities/localEnvVars.js"; export type WorkerRuntimeOptions = { name: string | undefined; @@ -372,18 +372,16 @@ 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( + ...resolveLocalEnvVars( + this.options.args.envFile, environmentVariablesResponse.success ? environmentVariablesResponse.data.variables : {} ), - ...sanitizeEnvVars(dotEnvVars), + NODE_ENV: "development", TRIGGER_API_URL: this.options.client.apiURL, TRIGGER_SECRET_KEY: this.options.client.accessToken!, OTEL_EXPORTER_OTLP_COMPRESSION: "none", @@ -581,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"; 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/localEnvVars.ts b/packages/cli-v3/src/utilities/localEnvVars.ts new file mode 100644 index 0000000000..225c2dae13 --- /dev/null +++ b/packages/cli-v3/src/utilities/localEnvVars.ts @@ -0,0 +1,25 @@ +import { resolveDotEnvVars } from "./dotEnv.js"; +import { sanitizeEnvVars } from "./sanitizeEnvVars.js"; + +export function resolveLocalEnvVars( + 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, + }; + + // 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: [