Skip to content

Commit 034890e

Browse files
Squashed 'src/resources/extension-subtrees/julia-engine/' changes from f591fc4..cb74379
cb74379 chore: bump version to 0.2.0 (#10) 9190b2b chore: update QuartoNotebookRunner to 0.18.1 (#11) 4938a8a docs: add CHANGELOG and enforce-changelog workflow (#9) 402ffba feat: Add keep-ipynb support (#8) be6996e Merge pull request #7 from PumasAI/mh/0.18.0 257035f Update to 0.18.0 git-subtree-dir: src/resources/extension-subtrees/julia-engine git-subtree-split: cb74379d7929258abc0ebe319785157c8479a68f
1 parent 350586c commit 034890e

15 files changed

Lines changed: 119 additions & 7 deletions

File tree

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: "Enforce changelog"
2+
on:
3+
pull_request:
4+
types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled]
5+
6+
jobs:
7+
changelog:
8+
runs-on: ubuntu-latest
9+
steps:
10+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
11+
- uses: dangoslen/changelog-enforcer@204e7d3ef26579f4cd0fd759c57032656fdf23c7 # v3.6.1
12+
with:
13+
changeLogPath: 'CHANGELOG.md'
14+
skipLabels: 'skip-changelog'

AGENTS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,7 @@ CI runs on all three platforms (Linux, macOS, Windows) against a pinned quarto-c
5959
3. Runs the full test suite
6060

6161
When bumping `QUARTO_CLI_REV`, use the full commit hash annotated with the version tag for clarity (e.g. `abc123 # v1.9.35`).
62+
63+
## Changelog
64+
65+
Every PR with user-facing or otherwise meaningful changes must include an update to `CHANGELOG.md` (enforced by CI). Add entries under the `## Unreleased` section. Use the `skip-changelog` label to bypass the check for PRs that don't need an entry (e.g. internal cleanups, CI, or docs changes).

CHANGELOG.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Quarto Julia Engine changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## Unreleased
9+
10+
## [0.2.0](https://github.com/PumasAI/quarto-julia-engine/releases/tag/v0.2.0) - 2026-03-24
11+
12+
- Added `keep-ipynb` support. When `keep-ipynb: true` is set in document YAML, the executed notebook is written to `<stem>.ipynb` alongside the source file [#8](https://github.com/PumasAI/quarto-julia-engine/pull/8).
13+
- Updated to QuartoNotebookRunner 0.18.1 [#11](https://github.com/PumasAI/quarto-julia-engine/pull/11):
14+
- **`fig-format: retina` support**: Normalized to `png` with doubled `fig-dpi`, matching Quarto's Jupyter and knitr backends. Fixes blurry plots with default HTML settings.
15+
- **Improved cache invalidation**: Cache key now hashes full `Manifest.toml` content (SHA-224) so dependency version changes correctly invalidate the cache.
16+
- Updated to QuartoNotebookRunner 0.18.0 [#7](https://github.com/PumasAI/quarto-julia-engine/pull/7):
17+
- **Shared worker processes**: Multiple notebooks can share a single worker process when their configs match. Enable with `share_worker_process: true`.
18+
- **`execute-dir` support**: Quarto's `execute-dir` option (e.g. `execute-dir: project`) is now passed through correctly.
19+
- **Cached worker environments**: Worker envs persist across sessions, skipping environment setup on subsequent runs when Julia and QNR versions haven't changed.
20+
- **Relaxed manifest version checking**: Only major.minor is checked by default, matching Julia's Pkg behavior. Opt into strict major.minor.patch via `julia: strict_manifest_versions: true`.
21+
- **Diagnostic file logging**: Set `QUARTONOTEBOOKRUNNER_LOG` to a directory path to enable timestamped log files.
22+
- **Echo handling for Python/R cells**: Fixed duplicate YAML keys and added proper support for `echo: false` and `echo: fenced`.
23+
24+
## [0.1.0](https://github.com/PumasAI/quarto-julia-engine/releases/tag/v0.1.0) - 2026-03-19
25+
26+
- Initial release as a standalone Quarto extension, extracted from [quarto-cli](https://github.com/quarto-dev/quarto-cli).
27+
- Bundled Julia resource files (`Project.toml`, `ensure_environment.jl`, `quartonotebookrunner.jl`, `start_quartonotebookrunner_detached.jl`) into the extension, making it fully self-contained [#6](https://github.com/PumasAI/quarto-julia-engine/pull/6).
28+
- Added CI workflow with tests on Linux, macOS, and Windows [#6](https://github.com/PumasAI/quarto-julia-engine/pull/6).

_extensions/julia-engine/Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
QuartoNotebookRunner = "4c0109c6-14e9-4c88-93f0-2b974d3468f4"
33

44
[compat]
5-
QuartoNotebookRunner = "=0.17.4"
5+
QuartoNotebookRunner = "=0.18.1"

_extensions/julia-engine/_extension.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
title: Quarto Julia Engine Extension
2-
version: 0.1.0
2+
version: 0.2.0
33
quarto-required: ">=1.9.0"
44
contributes:
55
engines:

_extensions/julia-engine/julia-engine.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,7 @@ var kFigFormat = "fig-format";
631631
var kFigPos = "fig-pos";
632632
var kIpynbProduceSourceNotebook = "produce-source-notebook";
633633
var kKeepHidden = "keep-hidden";
634+
var kKeepIpynb = "keep-ipynb";
634635

635636
// src/julia-engine.ts
636637
var isWindows2 = Deno.build.os === "windows";
@@ -749,6 +750,11 @@ var juliaEngineDiscovery = {
749750
language: "julia"
750751
};
751752
const assets = quarto.jupyter.assets(options.target.input, options.format.pandoc.to);
753+
if (options.format.execute[kKeepIpynb]) {
754+
const stem = options.target.source.replace(/\.[^.]+$/, "");
755+
const ipynbPath = stem + ".ipynb";
756+
Deno.writeTextFileSync(ipynbPath, JSON.stringify(nb, null, 2));
757+
}
752758
const result = await quarto.jupyter.toMarkdown(nb, {
753759
executeOptions: options,
754760
language: nb.metadata.kernelspec.language.toLowerCase(),

src/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ export const kFigFormat = "fig-format";
1313
export const kFigPos = "fig-pos";
1414
export const kIpynbProduceSourceNotebook = "produce-source-notebook";
1515
export const kKeepHidden = "keep-hidden";
16+
export const kKeepIpynb = "keep-ipynb";

src/julia-engine.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import {
3737
kIpynbProduceSourceNotebook,
3838
kJuliaEngine,
3939
kKeepHidden,
40+
kKeepIpynb,
4041
} from "./constants.ts";
4142

4243
// Platform detection
@@ -220,6 +221,14 @@ export const juliaEngineDiscovery: ExecutionEngineDiscovery = {
220221
options.format.pandoc.to,
221222
);
222223

224+
// Write notebook to file if keep-ipynb is set (must happen before
225+
// toMarkdown which mutates nb in place)
226+
if (options.format.execute[kKeepIpynb]) {
227+
const stem = options.target.source.replace(/\.[^.]+$/, "");
228+
const ipynbPath = stem + ".ipynb";
229+
Deno.writeTextFileSync(ipynbPath, JSON.stringify(nb, null, 2));
230+
}
231+
223232
// NOTE: for perforance reasons the 'nb' is mutated in place
224233
// by jupyterToMarkdown (we don't want to make a copy of a
225234
// potentially very large notebook) so should not be relied

tests/docs/julia-engine/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44
# Allow only source files
55
!*/*.qmd
66
!*/_quarto.yml
7+
!*/_metadata.yml
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
engines: ["julia"]

0 commit comments

Comments
 (0)