From f97d429ef9d9739089299c64161dc966bd7f5a12 Mon Sep 17 00:00:00 2001 From: Craigory Coppola Date: Wed, 17 Apr 2024 18:10:15 -0400 Subject: [PATCH] fix(nx-cloud): ensure root .env files are loaded during dte (#22859) --- packages/nx/bin/nx.ts | 25 +++++-------------- .../nx/src/tasks-runner/init-tasks-runner.ts | 2 ++ packages/nx/src/utils/dotenv.ts | 19 ++++++++++++++ 3 files changed, 27 insertions(+), 19 deletions(-) create mode 100644 packages/nx/src/utils/dotenv.ts diff --git a/packages/nx/bin/nx.ts b/packages/nx/bin/nx.ts index 263100b56755cb..cecd6acd499c38 100644 --- a/packages/nx/bin/nx.ts +++ b/packages/nx/bin/nx.ts @@ -4,8 +4,7 @@ import { WorkspaceTypeAndRoot, } from '../src/utils/find-workspace-root'; import * as chalk from 'chalk'; -import { config as loadDotEnvFile } from 'dotenv'; -import { expand } from 'dotenv-expand'; +import { loadRootEnvFiles } from '../src/utils/dotenv'; import { initLocal } from './init-local'; import { output } from '../src/utils/output'; import { @@ -34,8 +33,12 @@ function main() { require('nx/src/utils/perf-logging'); + const workspace = findWorkspaceRoot(process.cwd()); + performance.mark('loading dotenv files:start'); - loadDotEnvFiles(); + if (workspace) { + loadRootEnvFiles(workspace.dir); + } performance.mark('loading dotenv files:end'); performance.measure( 'loading dotenv files', @@ -43,7 +46,6 @@ function main() { 'loading dotenv files:end' ); - const workspace = findWorkspaceRoot(process.cwd()); // new is a special case because there is no local workspace to load if ( process.argv[2] === 'new' || @@ -106,21 +108,6 @@ function main() { } } -/** - * This loads dotenv files from: - * - .env - * - .local.env - * - .env.local - */ -function loadDotEnvFiles() { - for (const file of ['.local.env', '.env.local', '.env']) { - const myEnv = loadDotEnvFile({ - path: file, - }); - expand(myEnv); - } -} - function handleNoWorkspace(globalNxVersion?: string) { output.log({ title: `The current directory isn't part of an Nx workspace.`, diff --git a/packages/nx/src/tasks-runner/init-tasks-runner.ts b/packages/nx/src/tasks-runner/init-tasks-runner.ts index 68e7653ae2ab71..db849980beb626 100644 --- a/packages/nx/src/tasks-runner/init-tasks-runner.ts +++ b/packages/nx/src/tasks-runner/init-tasks-runner.ts @@ -7,9 +7,11 @@ import { invokeTasksRunner } from './run-command'; import { InvokeRunnerTerminalOutputLifeCycle } from './life-cycles/invoke-runner-terminal-output-life-cycle'; import { performance } from 'perf_hooks'; import { getOutputs } from './utils'; +import { loadRootEnvFiles } from '../utils/dotenv'; export async function initTasksRunner(nxArgs: NxArgs) { performance.mark('init-local'); + loadRootEnvFiles(); workspaceConfigurationCheck(); const nxJson = readNxJson(); if (nxArgs.verbose) { diff --git a/packages/nx/src/utils/dotenv.ts b/packages/nx/src/utils/dotenv.ts new file mode 100644 index 00000000000000..2187d46a15564d --- /dev/null +++ b/packages/nx/src/utils/dotenv.ts @@ -0,0 +1,19 @@ +import { config as loadDotEnvFile } from 'dotenv'; +import { expand } from 'dotenv-expand'; +import { workspaceRoot } from './workspace-root'; +import { join } from 'path'; + +/** + * This loads dotenv files from: + * - .env + * - .local.env + * - .env.local + */ +export function loadRootEnvFiles(root = workspaceRoot) { + for (const file of ['.local.env', '.env.local', '.env']) { + const myEnv = loadDotEnvFile({ + path: join(root, file), + }); + expand(myEnv); + } +}