From 704cc13b09d7bb39f464166e787dbe88054641b4 Mon Sep 17 00:00:00 2001 From: Lamine Gueye <51838776+lamine2000@users.noreply.github.com> Date: Tue, 9 Jun 2026 14:59:54 +0000 Subject: [PATCH 1/2] fix(cli): create output directory if it doesn't exist (#1445) The compile and collections commands threw ENOENT when --output-path pointed to a directory that hadn't been created yet. Add mkdir({ recursive: true }) before writeFile in both handlers, matching the pattern already used in the execute command's serialize-output.ts. Fixes #859 --- packages/cli/src/collections/handler.ts | 3 ++- packages/cli/src/compile/handler.ts | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/collections/handler.ts b/packages/cli/src/collections/handler.ts index 33494b757..8ea8cc72d 100644 --- a/packages/cli/src/collections/handler.ts +++ b/packages/cli/src/collections/handler.ts @@ -1,5 +1,5 @@ import path from 'node:path'; -import { readFile, writeFile } from 'node:fs/promises'; +import { mkdir, readFile, writeFile } from 'node:fs/promises'; import { Logger } from '../util/logger'; import request from './request'; @@ -94,6 +94,7 @@ export const get = async (options: GetOptions, logger: Logger) => { null, options.pretty ? 2 : undefined ); + await mkdir(path.dirname(options.outputPath!), { recursive: true }); await writeFile(options.outputPath!, content); logger.always(`Wrote items to ${options.outputPath}`); } else { diff --git a/packages/cli/src/compile/handler.ts b/packages/cli/src/compile/handler.ts index c92c62f80..4c75415cc 100644 --- a/packages/cli/src/compile/handler.ts +++ b/packages/cli/src/compile/handler.ts @@ -1,4 +1,5 @@ -import { writeFile } from 'node:fs/promises'; +import { mkdir, writeFile } from 'node:fs/promises'; +import { dirname } from 'node:path'; import type { CompileOptions } from './command'; import type { Logger } from '../util/logger'; @@ -22,6 +23,7 @@ const compileHandler = async (options: CompileOptions, logger: Logger) => { if (options.outputStdout) { logger.success('Result:\n\n' + result); } else { + await mkdir(dirname(options.outputPath!), { recursive: true }); await writeFile(options.outputPath!, result as string); logger.success(`Compiled to ${options.outputPath}`); } From f376b4ba7fa5e8aaf23f2cb66ceab80865dd829b Mon Sep 17 00:00:00 2001 From: Joe Clark Date: Tue, 9 Jun 2026 16:00:27 +0100 Subject: [PATCH 2/2] changeset --- .changeset/green-knives-knock.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/green-knives-knock.md diff --git a/.changeset/green-knives-knock.md b/.changeset/green-knives-knock.md new file mode 100644 index 000000000..0560c462a --- /dev/null +++ b/.changeset/green-knives-knock.md @@ -0,0 +1,5 @@ +--- +'@openfn/cli': patch +--- + +Ensure output path exists on compile and collections commands