COMP: Add line continuations to pixi task cmds for pixi 0.68 compatibility#6236
Conversation
…ility pixi 0.68.0 (released 2026-05-08) changes how multi-line task cmds are parsed. Per pixi PR prefix-dev/pixi#5957, bare newlines that were previously joined as whitespace are now joined with '&&', so cmd = '''cmake -Bbuild -S. ...''' is no longer executed as 'cmake -Bbuild -S. ...' but as 'cmake && -Bbuild && -S. && ...'. cmake then runs with no arguments and prints its Usage banner; the next line tries to execute '-Bbuild' as a command and fails with 'command not found'; the task exits 127. Backslash line continuations preserve the legacy single-command behavior on both pre- and post-0.68 pixi versions. Affected tasks (all multi-line cmake invocations under [tool.pixi.feature.cxx.tasks]): configure configure-ci configure-debug configure-release configure-python configure-debug-python The two python-exe tasks already terminate the first line with '&&' so they are not double-separated by 0.68's logic and need no modification. Fixes the global ITK CI Pixi-Cxx breakage observed across all open PRs since pixi 0.68.0 became the default in prefix-dev/setup-pixi.
|
| Filename | Overview |
|---|---|
| pyproject.toml | Mechanical addition of \ line continuations to all six multi-line cmake cmd blocks; TOML parses cleanly and semantics are preserved across both pre-0.68 and 0.68+ pixi versions. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A["pixi task invoked\n(e.g. pixi run configure)"] --> B{pixi version?}
B -- "< 0.68\n(deno_task_shell)" --> C["bare newlines → whitespace\ncmd runs as single cmake invocation ✅"]
B -- ">= 0.68\n(new parser)" --> D{line ends with\nbackslash?}
D -- "YES (this PR)" --> E["continuation merged\ncmd runs as single cmake invocation ✅"]
D -- "NO (before this PR)" --> F["each line joined with &&\ncmake runs with no args → exit 127 ❌"]
Reviews (1): Last reviewed commit: "COMP: Add line continuations to pixi tas..." | Re-trigger Greptile
|
@dzenanz All CI will fail until this is included. The github CI have update to pixi 0.68, and we are not compatible with that version in our pyproject.toml file. The change is backward compatible with pre pixi 0.68 |
ad0af23
into
InsightSoftwareConsortium:main
Phase A v4 ingest of the standalone remote module ntustison/ITKAdaptiveDenoising into Modules/Filtering/AdaptiveDenoising/. Whitelisted upstream history was sanitized via the v4 pipeline (see InsightSoftwareConsortium#6204), then stripped of all raw .nrrd test fixtures via 'git filter-repo --invert-paths' so that no raw binary blobs land in ITK's git history. Sibling .cid stubs are added in a follow-up commit; their fetch path is published via ITKTestingData PR InsightSoftwareConsortium#48. Stacked on the pixi 0.68 multi-line cmd compatibility fix from InsightSoftwareConsortium#6236.
Phase A v4 ingest of the standalone remote module ntustison/ITKAdaptiveDenoising into Modules/Filtering/AdaptiveDenoising/. Whitelisted upstream history was sanitized via the v4 pipeline (see InsightSoftwareConsortium#6204), then stripped of all raw .nrrd test fixtures via 'git filter-repo --invert-paths' so that no raw binary blobs land in ITK's git history. Sibling .cid stubs are added in a follow-up commit; their fetch path is published via ITKTestingData PR InsightSoftwareConsortium#48. Stacked on the pixi 0.68 multi-line cmd compatibility fix from InsightSoftwareConsortium#6236.
Add backslash line continuations to all multi-line
cmdblocks inpyproject.tomlso pixi tasks still execute as a single shell commandunder pixi 0.68+. Unblocks Pixi-Cxx CI on every open ITK PR.
Root cause (pixi 0.68 behavior change)
pixi 0.68.0 was released 2026-05-08 and shipped
prefix-dev/pixi#5957,
which changes how multi-line TOML
cmdblocks are interpreted.Before 0.68 (deno_task_shell collapsed bare newlines to whitespace):
executed as
cmake -Bbuild -S. ...— a single cmake invocation.After 0.68 (pixi joins non-empty, non-comment lines with
&&beforeparsing), the same TOML executes as
cmake && -Bbuild && -S. && ....cmakeruns first with no arguments, prints its Usage banner;the next statement tries to execute
-Bbuildas a command, failswith
command not found, and the task exits 127.Per the pixi PR description, "Backslash line continuations are
merged" — so adding a trailing
\on each non-final linerestores the legacy single-command semantics on pixi 0.68+ and is
a no-op on earlier versions.
Affected ITK CI shape
The
prefix-dev/setup-pixi@v0.8.1action used by ITK's.github/workflows/pixi.ymldoes not pin a
pixi-version, so it pulls the latest release. Yesterdayruns got 0.67.2 (working); today's runs got 0.68.0 (broken).
Pixi-Cxx (ubuntu-22.04)Pixi-Cxx (macos-15)Pixi-Cxx (windows-2022)Confirmed by re-running PR #6234 today: same code that passed
yesterday now fails with the same
Usage/-Bbuild: command not found/Available tasks:signature. Same applies to PR #6235and any open PR whose latest CI run fired today.
What this PR changes
Adds a trailing
\to every non-final, non-empty, non-already-&&-terminatedline of every multi-line
cmdinpyproject.toml. Six tasks aretouched:
configureconfigure-ciconfigure-debugconfigure-releaseconfigure-pythonconfigure-debug-pythonThe two
python-exetasks already terminate their first line with&&(so per pixi 0.68's "lines already ending in a shell controloperator (
&&,||,|,;,&) aren't double-separated" rulethey continue to work unmodified).
53 insertions / 53 deletions; no semantic change beyond restoring
the previous single-command execution model.
Local validation
python3 -c "import tomllib; tomllib.load(open('pyproject.toml','rb'))": parses cleanlypre-commit run --all-files: clean