From d0a3d701f4462d22ae6cfd15d8f6c563638850a4 Mon Sep 17 00:00:00 2001 From: OpenSauce Date: Sun, 26 Jul 2026 13:02:13 +0100 Subject: [PATCH 1/4] fix(release): install the X11 dev packages the plugin needs cargo-dist builds the whole workspace, so the release build compiles rustortion-plugin, which pulls iced_baseview -> baseview -> the x11 crate. Its build script hard-requires x11-xcb via pkg-config, which was not in the dist apt list, so v0.3.0's build died on both Linux targets after the tag had been pushed. v0.2.0 predates the plugin crate (#224), so this list had never been insufficient before and nothing on the PR path covers it: ci.yaml installs the full X11 set and passes, while release.yml derives its packages from dist-workspace.toml and does not. Mirrors the apt list in ci.yaml. Both dist targets build natively (ubuntu-22.04 and ubuntu-22.04-arm), so native packages are correct. pr-run-mode is set to upload temporarily to prove this on the real runners; it is removed before merge. --- dist-workspace.toml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/dist-workspace.toml b/dist-workspace.toml index 3f25fbe..d837917 100644 --- a/dist-workspace.toml +++ b/dist-workspace.toml @@ -19,9 +19,44 @@ install-updater = false include = ["impulse_responses", "presets", "README.md", "LICENSE"] # Skip checking whether the specified configuration files are up to date allow-dirty = ["ci"] +# TEMPORARY - remove before merge. Builds release artifacts on the PR so the +# apt fix below is proven on the real runners instead of at tag time. +pr-run-mode = "upload" +# dist builds the whole workspace, so the release build compiles +# rustortion-plugin too — and that pulls iced_baseview -> baseview -> the `x11` +# crate, whose build script hard-requires x11-xcb via pkg-config. v0.2.0 +# predates the plugin crate (#224), so the first tag after it (v0.3.0) was the +# first time this list was ever insufficient, and it failed *after* the tag was +# pushed. +# +# Keep this in sync with the apt list in .github/workflows/ci.yaml — if CI can +# build the workspace and this cannot, the difference shows up only at tag time. [dist.dependencies.apt] libjack-jackd2-dev = '*' pkg-config = '*' libasound2-dev = '*' libgl-dev = '*' +libx11-dev = '*' +libx11-xcb-dev = '*' +libxcb1-dev = '*' +libxcursor-dev = '*' +libxfixes-dev = '*' +libxft-dev = '*' +libxi-dev = '*' +libxinerama-dev = '*' +libxmu-dev = '*' +libxrandr-dev = '*' +libxrender-dev = '*' +libxss-dev = '*' +libxt-dev = '*' +libxtst-dev = '*' +libxxf86vm-dev = '*' +libxkbcommon-dev = '*' +libxkbcommon-x11-dev = '*' +libxpresent-dev = '*' +libxcb-render0-dev = '*' +libxcb-shape0-dev = '*' +libxcb-xfixes0-dev = '*' +libxcb-icccm4-dev = '*' +libxcb-dri2-0-dev = '*' From d53e4b66450a0e553b6aa7963002f160650c3f32 Mon Sep 17 00:00:00 2001 From: OpenSauce Date: Sun, 26 Jul 2026 13:09:37 +0100 Subject: [PATCH 2/4] fix(release): stop dist building the plugin, correct the archive name in docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces the previous approach of installing the plugin's X11 build dependencies. dist was running `cargo build --workspace`, so every release build compiled rustortion-plugin — whose iced_baseview -> baseview dep needs x11-xcb headers — and then discarded the result. plugin-release.yml builds the real bundles on `release: published`. precise-builds = true limits the build to the packages that actually produce release artifacts, i.e. the `rustortion` bin. The standalone reaches X11 through x11-dl, which dlopens at runtime and needs nothing at build time, so the original four apt packages are correct and the X11 list is reverted. Verified with `dist plan`: same artifacts, apt list back to four packages. Separately, both READMEs still told users to download `rustortion-.tar.xz`. dist names the archive after the package, which became rustortion-standalone, so v0.3.0 ships `rustortion-standalone-.tar.xz`. Pre-dates this branch; the docs have been wrong since the crate was split. --- README.md | 9 +++++++-- README.zh-CN.md | 9 +++++++-- dist-workspace.toml | 48 ++++++++++++++------------------------------- 3 files changed, 29 insertions(+), 37 deletions(-) diff --git a/README.md b/README.md index d8c1aac..4da1b47 100644 --- a/README.md +++ b/README.md @@ -42,11 +42,16 @@ You can download a tarball of a pre-built binary from the [releases page.](https ```bash sudo apt-get install libjack-jackd2-0 -tar -xf rustortion-x86_64-unknown-linux-gnu.tar.xz -cd rustortion-x86_64-unknown-linux-gnu +tar -xf rustortion-standalone-x86_64-unknown-linux-gnu.tar.xz +cd rustortion-standalone-x86_64-unknown-linux-gnu ./rustortion ``` +> [!NOTE] +> The standalone archive was named `rustortion-.tar.xz` up to v0.2.0. From v0.3.0 it is +> `rustortion-standalone-.tar.xz`, following the crate rename. The binary inside is still +> `rustortion`. Substitute `aarch64` for `x86_64` on a Raspberry Pi. + ### Running/Building from Source With the rust toolchain installed, you can clone the repository and run the application: diff --git a/README.zh-CN.md b/README.zh-CN.md index 0e6a7b7..6db2ad7 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -41,11 +41,16 @@ ```bash sudo apt-get install libjack-jackd2-0 -tar -xf rustortion-x86_64-unknown-linux-gnu.tar.xz -cd rustortion-x86_64-unknown-linux-gnu +tar -xf rustortion-standalone-x86_64-unknown-linux-gnu.tar.xz +cd rustortion-standalone-x86_64-unknown-linux-gnu ./rustortion ``` +> [!NOTE] +> 在 v0.2.0 及更早版本中,独立版压缩包名为 `rustortion-.tar.xz`;自 v0.3.0 起, +> 随着 crate 重命名,压缩包名为 `rustortion-standalone-.tar.xz`。包内的可执行文件 +> 仍为 `rustortion`。树莓派请将 `x86_64` 替换为 `aarch64`。 + ### 从源码运行/编译 安装好 Rust 工具链后,您可以克隆仓库并运行应用程序: diff --git a/dist-workspace.toml b/dist-workspace.toml index d837917..721ad40 100644 --- a/dist-workspace.toml +++ b/dist-workspace.toml @@ -19,44 +19,26 @@ install-updater = false include = ["impulse_responses", "presets", "README.md", "LICENSE"] # Skip checking whether the specified configuration files are up to date allow-dirty = ["ci"] +# Build only the packages that actually produce release artifacts, i.e. the +# `rustortion` bin from rustortion-standalone. +# +# Without this, dist runs `cargo build --workspace` and compiles every member — +# including rustortion-plugin, whose iced_baseview -> baseview dep needs x11-xcb +# headers at build time. That plugin build is pure waste here: its output is +# discarded, and plugin-release.yml builds the real bundles on `release: +# published`. It also broke the v0.3.0 tag, because the apt list below covers +# what the standalone needs (x11-dl, dlopened at runtime) and not what baseview +# needs, and nothing on the PR path exercises the dist build. +precise-builds = true # TEMPORARY - remove before merge. Builds release artifacts on the PR so the -# apt fix below is proven on the real runners instead of at tag time. +# fix is proven on the real runners instead of at tag time. pr-run-mode = "upload" -# dist builds the whole workspace, so the release build compiles -# rustortion-plugin too — and that pulls iced_baseview -> baseview -> the `x11` -# crate, whose build script hard-requires x11-xcb via pkg-config. v0.2.0 -# predates the plugin crate (#224), so the first tag after it (v0.3.0) was the -# first time this list was ever insufficient, and it failed *after* the tag was -# pushed. -# -# Keep this in sync with the apt list in .github/workflows/ci.yaml — if CI can -# build the workspace and this cannot, the difference shows up only at tag time. +# Only the packages the *standalone* needs. It reaches X11 through x11-dl, +# which dlopens at runtime and needs nothing at build time — see precise-builds +# above for why the plugin's build-time X11 requirements are not our problem. [dist.dependencies.apt] libjack-jackd2-dev = '*' pkg-config = '*' libasound2-dev = '*' libgl-dev = '*' -libx11-dev = '*' -libx11-xcb-dev = '*' -libxcb1-dev = '*' -libxcursor-dev = '*' -libxfixes-dev = '*' -libxft-dev = '*' -libxi-dev = '*' -libxinerama-dev = '*' -libxmu-dev = '*' -libxrandr-dev = '*' -libxrender-dev = '*' -libxss-dev = '*' -libxt-dev = '*' -libxtst-dev = '*' -libxxf86vm-dev = '*' -libxkbcommon-dev = '*' -libxkbcommon-x11-dev = '*' -libxpresent-dev = '*' -libxcb-render0-dev = '*' -libxcb-shape0-dev = '*' -libxcb-xfixes0-dev = '*' -libxcb-icccm4-dev = '*' -libxcb-dri2-0-dev = '*' From e949458919e715210cc5128b9a0cf49df1dbe09f Mon Sep 17 00:00:00 2001 From: OpenSauce Date: Sun, 26 Jul 2026 13:10:22 +0100 Subject: [PATCH 3/4] docs: drop the archive rename note --- README.md | 5 ----- README.zh-CN.md | 5 ----- 2 files changed, 10 deletions(-) diff --git a/README.md b/README.md index 4da1b47..14d3cd8 100644 --- a/README.md +++ b/README.md @@ -47,11 +47,6 @@ cd rustortion-standalone-x86_64-unknown-linux-gnu ./rustortion ``` -> [!NOTE] -> The standalone archive was named `rustortion-.tar.xz` up to v0.2.0. From v0.3.0 it is -> `rustortion-standalone-.tar.xz`, following the crate rename. The binary inside is still -> `rustortion`. Substitute `aarch64` for `x86_64` on a Raspberry Pi. - ### Running/Building from Source With the rust toolchain installed, you can clone the repository and run the application: diff --git a/README.zh-CN.md b/README.zh-CN.md index 6db2ad7..2f79b68 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -46,11 +46,6 @@ cd rustortion-standalone-x86_64-unknown-linux-gnu ./rustortion ``` -> [!NOTE] -> 在 v0.2.0 及更早版本中,独立版压缩包名为 `rustortion-.tar.xz`;自 v0.3.0 起, -> 随着 crate 重命名,压缩包名为 `rustortion-standalone-.tar.xz`。包内的可执行文件 -> 仍为 `rustortion`。树莓派请将 `x86_64` 替换为 `aarch64`。 - ### 从源码运行/编译 安装好 Rust 工具链后,您可以克隆仓库并运行应用程序: From 16ae687753514c63467f5da97e748a674f332e6d Mon Sep 17 00:00:00 2001 From: OpenSauce Date: Sun, 26 Jul 2026 13:17:48 +0100 Subject: [PATCH 4/4] chore(release): drop the temporary pr-run-mode Verified on both runners: dist now builds with --package=rustortion-standalone and never compiles the x11 crate. Reverting to the default PR mode so ordinary PRs do not build release artifacts. --- dist-workspace.toml | 3 --- 1 file changed, 3 deletions(-) diff --git a/dist-workspace.toml b/dist-workspace.toml index 721ad40..a4dc62a 100644 --- a/dist-workspace.toml +++ b/dist-workspace.toml @@ -30,9 +30,6 @@ allow-dirty = ["ci"] # what the standalone needs (x11-dl, dlopened at runtime) and not what baseview # needs, and nothing on the PR path exercises the dist build. precise-builds = true -# TEMPORARY - remove before merge. Builds release artifacts on the PR so the -# fix is proven on the real runners instead of at tag time. -pr-run-mode = "upload" # Only the packages the *standalone* needs. It reaches X11 through x11-dl, # which dlopens at runtime and needs nothing at build time — see precise-builds