diff --git a/src/commands/run.ts b/src/commands/run.ts index 1b0c1dda8..f1e68413a 100644 --- a/src/commands/run.ts +++ b/src/commands/run.ts @@ -15,7 +15,7 @@ */ import { access, readFile, unlink, writeFile } from "node:fs/promises"; -import { resolve } from "node:path"; +import { dirname, resolve } from "node:path"; import { AvmLoglevel, FluencePeer, KeyPair } from "@fluencelabs/fluence"; import { callFunctionImpl } from "@fluencelabs/fluence/dist/internal/compilerSupport/v3impl/callFunction"; @@ -64,6 +64,8 @@ import { getRandomRelayAddr } from "../lib/multiaddr"; import { ensureFluenceTmpAppServiceJsonPath, projectRootDirPromise, + recursivelyFindProjectRootDir, + setProjectRootDir, } from "../lib/paths"; import { input, list } from "../lib/prompt"; @@ -156,8 +158,21 @@ export default class Run extends BaseCommand { ...KEY_PAIR_FLAG, }; async run(): Promise { + const parseResult = await this.parse(Run); + const inputFlag = parseResult.flags[INPUT_FLAG_NAME]; + + if (typeof inputFlag === "string") { + const resolvedInputDirName = resolve(dirname(inputFlag)); + + const projectRootDir = await recursivelyFindProjectRootDir( + resolvedInputDirName + ); + + setProjectRootDir(projectRootDir); + } + const { commandObj, flags, isInteractive, maybeFluenceConfig } = - await initCli(this, await this.parse(Run)); + await initCli(this, parseResult); const logLevelAVM: AvmLoglevel | undefined = await resolveAVMLogLevel({ commandObj: this, diff --git a/src/lib/paths.ts b/src/lib/paths.ts index 51d8b153f..6953eaf5d 100644 --- a/src/lib/paths.ts +++ b/src/lib/paths.ts @@ -128,10 +128,13 @@ export const ensureUserFluenceCargoDir = async ( // cwd is cached in order for paths to be correct even if cwd changes during the // execution (e.g. Marince CLI has to change cwd in order to work correctly) const initialCwd = process.cwd(); -export let projectRootDirPromise = (async (): Promise => { + +export const recursivelyFindProjectRootDir = async ( + initialPath: string +): Promise => { const fluenceConfigPath = await recursivelyFindFile( FLUENCE_CONFIG_FILE_NAME, - initialCwd + initialPath ); if (fluenceConfigPath === null) { @@ -140,7 +143,11 @@ export let projectRootDirPromise = (async (): Promise => { const newProjectRootDir = path.dirname(fluenceConfigPath); return newProjectRootDir; -})().catch((error): never => { +}; + +export let projectRootDirPromise = recursivelyFindProjectRootDir( + initialCwd +).catch((error): never => { throw error; });