Skip to content
85 changes: 47 additions & 38 deletions src/command/render/project.ts
Original file line number Diff line number Diff line change
Expand Up @@ -929,52 +929,61 @@ async function runScripts(
quiet: boolean,
env?: { [key: string]: string },
) {
// initialize the environment if needed
if (env) {
env = {
...env,
};
} else {
env = {};
}
if (!env) throw new Error("should never get here");

// Pass some argument as environment
env["QUARTO_PROJECT_SCRIPT_PROGRESS"] = progress ? "1" : "0";
env["QUARTO_PROJECT_SCRIPT_QUIET"] = quiet ? "1" : "0";

for (let i = 0; i < scripts.length; i++) {
const args = parseShellRunCommand(scripts[i]);
const script = args[0];

if (progress && !quiet) {
info(colors.bold(colors.blue(`${script}`)));
info(colors.bold(colors.blue(`Running script '${script}'`)));
}

const handler = handlerForScript(script);
if (handler) {
if (env) {
env = {
...env,
};
} else {
env = {};
}
if (!env) throw new Error("should never get here");
const input = Deno.env.get("QUARTO_USE_FILE_FOR_PROJECT_INPUT_FILES");
const output = Deno.env.get("QUARTO_USE_FILE_FOR_PROJECT_OUTPUT_FILES");
if (input) {
env["QUARTO_USE_FILE_FOR_PROJECT_INPUT_FILES"] = input;
}
if (output) {
env["QUARTO_USE_FILE_FOR_PROJECT_OUTPUT_FILES"] = output;
}
const handler = handlerForScript(script) ?? {
run: async (
script: string,
args: string[],
_stdin?: string,
options?: RunHandlerOptions,
) => {
return await execProcess({
cmd: script,
args: args,
cwd: options?.cwd,
stdout: options?.stdout,
env: options?.env,
});
},
};

const result = await handler.run(script, args.splice(1), undefined, {
cwd: projDir,
stdout: quiet ? "piped" : "inherit",
env,
});
if (!result.success) {
throw new Error();
}
} else {
const result = await execProcess({
cmd: args[0],
args: args.slice(1),
cwd: projDir,
stdout: quiet ? "piped" : "inherit",
env,
});
if (!result.success) {
throw new Error();
}
const input = Deno.env.get("QUARTO_USE_FILE_FOR_PROJECT_INPUT_FILES");
const output = Deno.env.get("QUARTO_USE_FILE_FOR_PROJECT_OUTPUT_FILES");
if (input) {
env["QUARTO_USE_FILE_FOR_PROJECT_INPUT_FILES"] = input;
}
if (output) {
env["QUARTO_USE_FILE_FOR_PROJECT_OUTPUT_FILES"] = output;
}

const result = await handler.run(script, args.splice(1), undefined, {
cwd: projDir,
stdout: quiet ? "piped" : "inherit",
env,
});
if (!result.success) {
throw new Error();
}
}
if (scripts.length > 0) {
Expand Down
Loading