Skip to content

quarto::render() fails in parallel il project.render is "*.qmd" #224

@ColinFay

Description

@ColinFay

Bug description

Rendering in parallel fails if project.render is "*.qmd" in _quarto.yaml

Reprex

Let's assume the following _quarto.yaml:

project:
  render:
    - "*.qmd"

Which is found on the doc at https://quarto.org/docs/projects/quarto-projects.html#render-targets

If I create a series of qmd and tries to render them in parallel using {future}, it fails :

options(
  future.rng.onMisuse = "ignore"
)
future::plan(future::multisession)

for (i in 1:50){
  write(file = sprintf("test%s.qmd", i),
        sprintf("---
title: 'test%s'
---

## Quarto

Quarto enables you to weave together content and executable code into a finished presentation. To learn more about Quarto presentations see <https://quarto.org/docs/presentations/>.
", i)
  )
}

list.files(pattern = "\\.qmd$", full.names = TRUE) |>
  furrr::future_map(
    .progress = TRUE,
    \(x){
      quarto::quarto_render(
        x,
        quiet = FALSE
      )
    }
  )

With the following error:

ERROR: NotFound: No such file or directory (os error 2): stat '/Users/colinfay/git/poubelle/multirenderquarto/test15_files/mediabag'

Stack trace:
    at Object.statSync (ext:deno_fs/30_fs.js:425:3)
    at createWalkEntrySync (file:///Applications/quarto/bin/quarto.js:2028:23)
    at walkSync (file:///Applications/quarto/bin/quarto.js:2068:15)
    at walkSync.next (<anonymous>)
    at advanceMatch (file:///Applications/quarto/bin/quarto.js:2191:20)
    at advanceMatch.next (<anonymous>)
    at expandGlobSync (file:///Applications/quarto/bin/quarto.js:2207:24)
    at expandGlobSync.next (<anonymous>)
    at expandGlobs (file:///Applications/quarto/bin/quarto.js:4972:24)
    at resolveGlobs (file:///Applications/quarto/bin/quarto.js:5049:26)
Error in (function (.x, .f, ..., .progress = FALSE)  : 
  ℹ In index: 3.
Caused by error in `quarto::quarto_render()`:
✖ Error running quarto cli.
Caused by error:
! System command 'quarto' failed
Calls: <Anonymous> ... resolve.list -> signalConditionsASAP -> signalConditions
Execution halted

Notes

  • If I modify the yaml on the fly and add all the qmd names, it works :
y <- yaml::read_yaml(
  "_quarto.yaml"
)
old_render <- y$project$render
y$project$render <- list.files(pattern = "qmd")
yaml::write_yaml(y, "_quarto.yaml")

list.files(pattern = "\\.qmd$", full.names = TRUE) |>
  furrr::future_map(
    .progress = TRUE,
    \(x){
      quarto::quarto_render(
        x,
        quiet = FALSE
      )
      return(x)
    }
  )
  
y$project$render <- old_render
yaml::write_yaml(y, "_quarto.yaml")
  • Removing the _quarto.yml works

  • A _quarto.yml with other content will work

format:
  html

Session information

% Rscript -e "packageVersion('quarto')"
[1] ‘1.4.4’
% quarto --version
1.6.40

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions