@@ -326,18 +326,34 @@ export async function renderProject(
326326
327327 // run pre-render step if we are rendering all files
328328 if ( preRenderScripts . length ) {
329+ // https://github.com/quarto-dev/quarto-cli/issues/10828
330+ // some environments limit the length of environment variables.
331+ // It's hard to know in advance what the limit is, so we will
332+ // instead ask users to configure their environment with
333+ // the names of the files we will write the list of files to.
334+
335+ const filesToRender = projectRenderConfig . filesToRender
336+ . map ( ( fileToRender ) => fileToRender . path )
337+ . map ( ( file ) => relative ( projDir , file ) ) ;
338+ const env : Record < string , string > = {
339+ ...prePostEnv ,
340+ } ;
341+
342+ if ( Deno . env . get ( "QUARTO_USE_FILE_FOR_PROJECT_INPUT_FILES" ) ) {
343+ Deno . writeTextFileSync (
344+ Deno . env . get ( "QUARTO_USE_FILE_FOR_PROJECT_INPUT_FILES" ) ! ,
345+ filesToRender . join ( "\n" ) ,
346+ ) ;
347+ } else {
348+ env . QUARTO_PROJECT_INPUT_FILES = filesToRender . join ( "\n" ) ;
349+ }
350+
329351 await runPreRender (
330352 projDir ,
331353 preRenderScripts ,
332354 progress ,
333355 ! ! projectRenderConfig . options . flags ?. quiet ,
334- {
335- ...prePostEnv ,
336- QUARTO_PROJECT_INPUT_FILES : projectRenderConfig . filesToRender
337- . map ( ( fileToRender ) => fileToRender . path )
338- . map ( ( file ) => relative ( projDir , file ) )
339- . join ( "\n" ) ,
340- } ,
356+ env ,
341357 ) ;
342358
343359 // re-initialize project context
@@ -814,17 +830,34 @@ export async function renderProject(
814830
815831 // run post-render if this isn't incremental
816832 if ( postRenderScripts . length ) {
833+ // https://github.com/quarto-dev/quarto-cli/issues/10828
834+ // some environments limit the length of environment variables.
835+ // It's hard to know in advance what the limit is, so we will
836+ // instead ask users to configure their environment with
837+ // the names of the files we will write the list of files to.
838+
839+ const env : Record < string , string > = {
840+ ...prePostEnv ,
841+ } ;
842+
843+ if ( Deno . env . get ( "QUARTO_USE_FILE_FOR_PROJECT_OUTPUT_FILES" ) ) {
844+ Deno . writeTextFileSync (
845+ Deno . env . get ( "QUARTO_USE_FILE_FOR_PROJECT_OUTPUT_FILES" ) ! ,
846+ outputFiles . map ( ( outputFile ) => relative ( projDir , outputFile . file ) )
847+ . join ( "\n" ) ,
848+ ) ;
849+ } else {
850+ env . QUARTO_PROJECT_OUTPUT_FILES = outputFiles
851+ . map ( ( outputFile ) => relative ( projDir , outputFile . file ) )
852+ . join ( "\n" ) ;
853+ }
854+
817855 await runPostRender (
818856 projDir ,
819857 postRenderScripts ,
820858 progress ,
821859 ! ! projectRenderConfig . options . flags ?. quiet ,
822- {
823- ...prePostEnv ,
824- QUARTO_PROJECT_OUTPUT_FILES : outputFiles
825- . map ( ( outputFile ) => relative ( projDir , outputFile . file ) )
826- . join ( "\n" ) ,
827- } ,
860+ env ,
828861 ) ;
829862 }
830863 }
@@ -908,6 +941,23 @@ async function runScripts(
908941
909942 const handler = handlerForScript ( script ) ;
910943 if ( handler ) {
944+ if ( env ) {
945+ env = {
946+ ...env ,
947+ } ;
948+ } else {
949+ env = { } ;
950+ }
951+ if ( ! env ) throw new Error ( "should never get here" ) ;
952+ const input = Deno . env . get ( "QUARTO_USE_FILE_FOR_PROJECT_INPUT_FILES" ) ;
953+ const output = Deno . env . get ( "QUARTO_USE_FILE_FOR_PROJECT_OUTPUT_FILES" ) ;
954+ if ( input ) {
955+ env [ "QUARTO_USE_FILE_FOR_PROJECT_INPUT_FILES" ] = input ;
956+ }
957+ if ( output ) {
958+ env [ "QUARTO_USE_FILE_FOR_PROJECT_OUTPUT_FILES" ] = output ;
959+ }
960+
911961 const result = await handler . run ( script , args . splice ( 1 ) , undefined , {
912962 cwd : projDir ,
913963 stdout : quiet ? "piped" : "inherit" ,
0 commit comments