Skip to content

quarto publish connect on v1.8.24 throws No such file or directory (os error 2): stat 'site_libs/quarto-html/axe/axe-check.js' #13396

Closed

Description

@balling-dev

I have:

  • searched the issue tracker for similar issues
  • installed the latest version of Quarto CLI
  • formatted my issue following the Bug Reports guide

Bug description

After upgrading from quarto-cli v1.7.34 to v1.8.24 I get the following error when trying to publish the default Quarto Book template (generated in RStudio 2025.05.1 Build 513.pro3 - the receiving Posit Connect server is v2025.04.0-0-gb111741196):

[?] Uploading files
ERROR: NotFound: No such file or directory (os error 2): stat 'site_libs/quarto-html/axe/axe-check.js'

Stack trace:
    at Object.stat (ext:deno_fs/30_fs.js:410:21)
    at file:///opt/quarto/bin/quarto.js:156140:31
    at Array.map (<anonymous>)
    at createTarFromFiles (file:///opt/quarto/bin/quarto.js:156139:15)
    at createBundle (file:///opt/quarto/bin/quarto.js:156200:9)
    at eventLoopTick (ext:core/01_core.js:178:7)
    at async file:///opt/quarto/bin/quarto.js:156387:30
    at async withSpinner (file:///opt/quarto/bin/quarto.js:121599:12)
    at async Object.publish4 [as publish] (file:///opt/quarto/bin/quarto.js:156384:5)
    at async publishSite (file:///opt/quarto/bin/quarto.js:158599:38)

And the site is not published on the connect server.

Downgrading to quarto-cli v1.7.34 solves the issue, and further testing shows that the issue manifests in all quarto-cli versions after v1.7.34.

Steps to reproduce

Create the default Quarto Book template using generated in RStudio 2025.05.1 Build 513.pro3, and remove pdf rendering from _quarto.yml for simplicity:

project:
  type: book

book:
  title: "quarto_cli_test"
  author: "Norah Jones"
  date: "9/20/2025"
  chapters:
    - index.qmd
    - intro.qmd
    - summary.qmd
    - references.qmd

bibliography: references.bib

format:
  html:
    theme:
      - cosmo
      - brand

Then publish to Posit Connect Server (v2025.04.0-0-gb111741196) using quarto-cli v1.8.24:

$ quarto publish connect --no-browser --server <redacted> --token <redacted> --id "<redacted>"
[?] Preparing to publish site

Rendering for publish:

[1/4] index.qmd


processing file: index.qmd
1/3
2/3 [unnamed-chunk-1]
3/3
output file: index.knit.md
[...]
processing file: summary.qmd
1/3
2/3 [unnamed-chunk-1]
3/3
output file: summary.knit.md

[4/4] references.qmd

[?] Uploading files
ERROR: NotFound: No such file or directory (os error 2): stat 'site_libs/quarto-html/axe/axe-check.js'

Stack trace:
    at Object.stat (ext:deno_fs/30_fs.js:410:21)
    at file:///opt/quarto/bin/quarto.js:156140:31
    at Array.map (<anonymous>)
    at createTarFromFiles (file:///opt/quarto/bin/quarto.js:156139:15)
    at createBundle (file:///opt/quarto/bin/quarto.js:156200:9)
    at eventLoopTick (ext:core/01_core.js:178:7)
    at async file:///opt/quarto/bin/quarto.js:156387:30
    at async withSpinner (file:///opt/quarto/bin/quarto.js:121599:12)
    at async Object.publish4 [as publish] (file:///opt/quarto/bin/quarto.js:156384:5)
    at async publishSite (file:///opt/quarto/bin/quarto.js:158599:38)

Running the quarto connect publish after export QUARTO_PRINT_STACK=true provides no further details.

Actual behavior

Publication to Posit Connect server fails.

Expected behavior

When downgrading to quarto-cli v1.7.34 (in the same docker container), publication works:

$ quarto publish connect --no-browser --server <redacted> --token <redacted> --id "<redacted>"

[?] Preparing to publish site

Rendering for publish:

[1/4] index.qmd


processing file: index.qmd
1/3
2/3 [unnamed-chunk-1]
3/3
output file: index.knit.md
[...]
processing file: summary.qmd
1/3
2/3 [unnamed-chunk-1]
3/3
output file: summary.knit.md

[4/4] references.qmd

[?] Uploading files
[?] Publishing site
[?] Published: https://<redacted>/content/<redacted>/

Your environment

  • IDE: RStudio 2025.05.1 Build 513.pro3 (only used for generating Quarto Book template)
  • Posit Connect Server: v2025.04.0-0-gb111741196
  • Environment: ghcr.io/r-lib/rig/r
  • quarto-cli: v1.8.24

Quarto check output

Quarto check for v1.8.24:

$ quarto check

Quarto 1.8.24
[?] Checking environment information...
      Quarto cache location: /root/.cache/quarto
[?] Checking versions of quarto binary dependencies...
      Pandoc version 3.6.3: OK
      Dart Sass version 1.87.0: OK
      Deno version 2.3.1: OK
      Typst version 0.13.0: OK
[?] Checking versions of quarto dependencies......OK
[?] Checking Quarto installation......OK
      Version: 1.8.24
      Path: /opt/quarto/bin

[?] Checking tools....................OK
      TinyTeX: (not installed)
      Chromium: (not installed)

[?] Checking LaTeX....................OK
      Using: Installation From Path
      Path: /usr/bin
      Version: 2021

[?] Checking Chrome Headless....................OK
      Chrome:  (not detected)

[?] Checking basic markdown render....OK

[?] Checking Python 3 installation....OK
      Version: 3.10.12
      Path: /usr/bin/python3
      Jupyter: (None)

      Jupyter is not available in this Python installation.
      Install with python3 -m pip install jupyter

[?] Checking R installation...........OK
      Version: 4.5.1
      Path: /opt/R/4.5.1/lib/R
      LibPaths:
        - /root/R/x86_64-pc-linux-gnu-library/4.5
        - /opt/R/4.5.1/lib/R/library
      knitr: 1.50
      rmarkdown: 2.29

[?] Checking Knitr engine render......OK

Quarto check for v1.7.34:

$ quarto check

Quarto 1.7.34
[?] Checking environment information...
      Quarto cache location: /root/.cache/quarto
[?] Checking versions of quarto binary dependencies...
      Pandoc version 3.6.3: OK
      Dart Sass version 1.85.1: OK
      Deno version 1.46.3: OK
      Typst version 0.13.0: OK
[?] Checking versions of quarto dependencies......OK
[?] Checking Quarto installation......OK
      Version: 1.7.34
      Path: /opt/quarto/bin

[?] Checking tools....................OK
      TinyTeX: (not installed)
      Chromium: (not installed)

[?] Checking LaTeX....................OK
      Using: Installation From Path
      Path: /usr/bin
      Version: 2021

[?] Checking Chrome Headless....................OK
      Chrome:  (not detected)

[?] Checking basic markdown render....OK

[?] Checking Python 3 installation....OK
      Version: 3.10.12
      Path: /usr/bin/python3
      Jupyter: (None)

      Jupyter is not available in this Python installation.
      Install with python3 -m pip install jupyter

[?] Checking R installation...........OK
      Version: 4.5.1
      Path: /opt/R/4.5.1/lib/R
      LibPaths:
        - /root/R/x86_64-pc-linux-gnu-library/4.5
        - /opt/R/4.5.1/lib/R/library
      knitr: 1.50
      rmarkdown: 2.29

[?] Checking Knitr engine render......OK

Activity

  1. self-assigned this
    on Sep 20, 2025
  2. added this to the Hot-fix milestone on Sep 20, 2025
  3. cscheid commented on Sep 20, 2025

    @cscheid
    Member

    We'll investigate and fix right away. The default template shouldn't be doing anything with axe-check, that's definitely a bug.

  4. cderv commented on Sep 22, 2025

    @cderv
    Member

    @cscheid we do add axe-check.js module in all our html output now. This is part of quarto.js module resolution

    // quarto.js helpers
    if (bootstrap) {
    const deps = recursiveModuleDependencies(
    formatResourcePath("html", "quarto.js"),
    );
    scripts.push(...deps);
    }

    It seems to me this could be related to another issue, as I cannot publish either from Windows, but with a different error. As if the path is not correctly constructed.

    And what I found is that this is a side effect of our change in TempContext creation. We are using it to create the tar.gz to upload.

    // publish
    const tempContext = createTempContext();

    const { bundlePath } = await createBundle(
    type,
    publishFiles,
    tempContext,
    );

    // stage files into temp dir
    const stageDir = tempContext.createDir();

    const tarFile = tempContext.createFile({ suffix: ".tar" });

    await createTarFromFiles(tarFile, tarFiles);

    But at this last step the expectation of tarFiles being relative to tarFile is not meant

    /**
    * Creates a tar archive from the specified files and directories.
    * @param outputPath The path where the tar archive will be created.
    * @param filePaths An array of file and directory paths to include in the tar archive. Paths are relative to outputPath.
    * @returns A promise that resolves when the tar archive is created.
    */
    export async function createTarFromFiles(

    This could be due to the change we did for dir option in temp context

    export function createTempContext(options?: Deno.MakeTempOptions): TempContext {
    if (options?.dir) {
    ensureDirSync(options?.dir);
    }
    let dir: string | undefined = Deno.makeTempDirSync({
    dir: tempDir,
    ...options,
    });

    in

    So passing expected dir should fix it. I'll try it by making a PR and test

  5. cderv commented on Sep 22, 2025

    @cderv
    Member

    I was wrong, this is due to Deno2 update with new createTarFromFiles() that has this expectation of filePaths relative to outputPath which is not the case in this publish context using Temp Context.

    I don't think this function is working as expected... 🤔

  6. self-assigned this
    on Sep 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions