From ea40c938e03a4314a6853ba8930970fb84c9112c Mon Sep 17 00:00:00 2001 From: Baptiste Parmantier Date: Wed, 19 Aug 2026 16:50:22 +0200 Subject: [PATCH 1/4] ci(publish): install the same system deps as the test workflow The publish job runs cargo test --workspace, which compiles rustmotion-studio and pulls in the GTK/WebKit stack backed by glib-2.0, but only installed fontconfig and freetype. glib-sys failed to build and the 0.6.0 release stopped at the test step, before any crate reached crates.io. dd4c1e4 added these packages to ci.yaml only; the two workflows have compiled different things ever since. --- .github/workflows/publish.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 1c8bef1..d071722 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -12,7 +12,13 @@ jobs: - uses: actions/checkout@v4 - name: Install system dependencies - run: sudo apt-get update && sudo apt-get install -y libfontconfig1-dev libfreetype6-dev + # Doit rester identique à ci.yaml : l'étape « Run tests » ci-dessous lance + # `cargo test --workspace`, qui compile rustmotion-studio et tire donc la + # pile GTK/WebKit, elle-même adossée à glib-2.0. Sans ces paquets le build + # de glib-sys échoue et la release s'arrête avant toute publication. + # webkit/gtk/xdo: required to compile rustmotion-studio (dioxus desktop) + # asound: required by cpal, which rodio pulls in for preview audio + run: sudo apt-get update && sudo apt-get install -y libfontconfig1-dev libfreetype6-dev libwebkit2gtk-4.1-dev libgtk-3-dev libxdo-dev libasound2-dev - uses: dtolnay/rust-toolchain@stable From 4210dc756ee9135a8d17d055ed440e3d44dcabf6 Mon Sep 17 00:00:00 2001 From: Baptiste Parmantier Date: Wed, 19 Aug 2026 16:51:35 +0200 Subject: [PATCH 2/4] ci(publish): publish rustmotion-html before rustmotion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit rustmotion depends on rustmotion-html 0.6.0 alongside core and components, but the workflow never published it and the crate does not exist on crates.io. The release would have failed at the third publish step, with core and components already permanently published — crates.io publishes cannot be undone, only yanked, so recovering means bumping the whole workspace. --- .github/workflows/publish.yaml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index d071722..51c614a 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -66,5 +66,26 @@ jobs: done echo "Timeout waiting for rustmotion-components" && exit 1 + # rustmotion dépend de rustmotion-html au même titre que de core et + # components. Sans cette étape, `cargo publish -p rustmotion` échoue sur une + # dépendance introuvable — mais en troisième position, core et components + # étant alors déjà publiées. Une publication crates.io ne se défait pas : + # l'échec obligerait à repasser tout le workspace en version suivante. + - name: Publish rustmotion-html + run: cargo publish -p rustmotion-html --token ${{ secrets.CARGO_REGISTRY_TOKEN }} + + - name: Wait for rustmotion-html on crates.io + run: | + VERSION=$(grep '^version' crates/rustmotion-html/Cargo.toml | head -1 | sed 's/.*"\(.*\)".*/\1/') + for i in $(seq 1 30); do + if curl -sf "https://crates.io/api/v1/crates/rustmotion-html/$VERSION" > /dev/null; then + echo "rustmotion-html $VERSION available" + exit 0 + fi + echo "Waiting... ($i)" + sleep 5 + done + echo "Timeout waiting for rustmotion-html" && exit 1 + - name: Publish rustmotion run: cargo publish -p rustmotion --token ${{ secrets.CARGO_REGISTRY_TOKEN }} From fb32b88958303c5586546fa52adc2bd767a77854 Mon Sep 17 00:00:00 2001 From: Baptiste Parmantier Date: Wed, 19 Aug 2026 16:56:53 +0200 Subject: [PATCH 3/4] fix(components): move themes inside the crate so they ship with it highlight.rs reached the workspace-root themes/ through include_str!, four levels up and outside the package. cargo package only archives files under the crate, so the tarball shipped without them and the verify build failed on 65 missing files. Following rustc's suggestion of a fifth ../ would have been worse than the bug: it resolves only because the verify build runs inside target/package/ within the repo, so the dry-run would pass while producing a crate that cannot build for anyone downloading it from crates.io. --- .../src/codeblock/highlight.rs | 148 ++++++++---------- .../themes}/Catppuccin Frappe.tmTheme | 0 .../themes}/Catppuccin Latte.tmTheme | 0 .../themes}/Catppuccin Macchiato.tmTheme | 0 .../themes}/Catppuccin Mocha.tmTheme | 0 .../themes}/vscode/andromeeda.json | 0 .../themes}/vscode/aurora-x.json | 0 .../themes}/vscode/ayu-dark.json | 0 .../themes}/vscode/ayu-light.json | 0 .../themes}/vscode/ayu-mirage.json | 0 .../themes}/vscode/dark-plus.json | 0 .../themes}/vscode/dracula-soft.json | 0 .../themes}/vscode/dracula.json | 0 .../themes}/vscode/everforest-dark.json | 0 .../themes}/vscode/everforest-light.json | 0 .../themes}/vscode/github-dark-default.json | 0 .../themes}/vscode/github-dark-dimmed.json | 0 .../vscode/github-dark-high-contrast.json | 0 .../themes}/vscode/github-dark.json | 0 .../themes}/vscode/github-light-default.json | 0 .../vscode/github-light-high-contrast.json | 0 .../themes}/vscode/github-light.json | 0 .../themes}/vscode/gruvbox-dark-hard.json | 0 .../themes}/vscode/gruvbox-dark-medium.json | 0 .../themes}/vscode/gruvbox-dark-soft.json | 0 .../themes}/vscode/gruvbox-light-hard.json | 0 .../themes}/vscode/gruvbox-light-medium.json | 0 .../themes}/vscode/gruvbox-light-soft.json | 0 .../themes}/vscode/horizon-bright.json | 0 .../themes}/vscode/horizon.json | 0 .../themes}/vscode/houston.json | 0 .../themes}/vscode/kanagawa-dragon.json | 0 .../themes}/vscode/kanagawa-lotus.json | 0 .../themes}/vscode/kanagawa-wave.json | 0 .../themes}/vscode/laserwave.json | 0 .../themes}/vscode/light-plus.json | 0 .../themes}/vscode/material-theme-darker.json | 0 .../vscode/material-theme-lighter.json | 0 .../themes}/vscode/material-theme-ocean.json | 0 .../vscode/material-theme-palenight.json | 0 .../themes}/vscode/material-theme.json | 0 .../themes}/vscode/min-dark.json | 0 .../themes}/vscode/min-light.json | 0 .../themes}/vscode/monokai.json | 0 .../themes}/vscode/night-owl-light.json | 0 .../themes}/vscode/night-owl.json | 0 .../themes}/vscode/nord.json | 0 .../themes}/vscode/one-dark-pro.json | 0 .../themes}/vscode/one-light.json | 0 .../themes}/vscode/plastic.json | 0 .../themes}/vscode/poimandres.json | 0 .../themes}/vscode/red.json | 0 .../themes}/vscode/rose-pine-dawn.json | 0 .../themes}/vscode/rose-pine-moon.json | 0 .../themes}/vscode/rose-pine.json | 0 .../themes}/vscode/slack-dark.json | 0 .../themes}/vscode/slack-ochin.json | 0 .../themes}/vscode/snazzy-light.json | 0 .../themes}/vscode/solarized-dark.json | 0 .../themes}/vscode/solarized-light.json | 0 .../themes}/vscode/synthwave-84.json | 0 .../themes}/vscode/tokyo-night.json | 0 .../themes}/vscode/vesper.json | 0 .../themes}/vscode/vitesse-black.json | 0 .../themes}/vscode/vitesse-dark.json | 0 .../themes}/vscode/vitesse-light.json | 0 66 files changed, 65 insertions(+), 83 deletions(-) rename {themes => crates/rustmotion-components/themes}/Catppuccin Frappe.tmTheme (100%) rename {themes => crates/rustmotion-components/themes}/Catppuccin Latte.tmTheme (100%) rename {themes => crates/rustmotion-components/themes}/Catppuccin Macchiato.tmTheme (100%) rename {themes => crates/rustmotion-components/themes}/Catppuccin Mocha.tmTheme (100%) rename {themes => crates/rustmotion-components/themes}/vscode/andromeeda.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/aurora-x.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/ayu-dark.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/ayu-light.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/ayu-mirage.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/dark-plus.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/dracula-soft.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/dracula.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/everforest-dark.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/everforest-light.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/github-dark-default.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/github-dark-dimmed.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/github-dark-high-contrast.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/github-dark.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/github-light-default.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/github-light-high-contrast.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/github-light.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/gruvbox-dark-hard.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/gruvbox-dark-medium.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/gruvbox-dark-soft.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/gruvbox-light-hard.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/gruvbox-light-medium.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/gruvbox-light-soft.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/horizon-bright.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/horizon.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/houston.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/kanagawa-dragon.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/kanagawa-lotus.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/kanagawa-wave.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/laserwave.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/light-plus.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/material-theme-darker.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/material-theme-lighter.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/material-theme-ocean.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/material-theme-palenight.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/material-theme.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/min-dark.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/min-light.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/monokai.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/night-owl-light.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/night-owl.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/nord.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/one-dark-pro.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/one-light.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/plastic.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/poimandres.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/red.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/rose-pine-dawn.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/rose-pine-moon.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/rose-pine.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/slack-dark.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/slack-ochin.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/snazzy-light.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/solarized-dark.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/solarized-light.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/synthwave-84.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/tokyo-night.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/vesper.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/vitesse-black.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/vitesse-dark.json (100%) rename {themes => crates/rustmotion-components/themes}/vscode/vitesse-light.json (100%) diff --git a/crates/rustmotion-components/src/codeblock/highlight.rs b/crates/rustmotion-components/src/codeblock/highlight.rs index dc9c6b5..21ae8e9 100644 --- a/crates/rustmotion-components/src/codeblock/highlight.rs +++ b/crates/rustmotion-components/src/codeblock/highlight.rs @@ -203,19 +203,19 @@ fn theme_set() -> &'static ThemeSet { let catppuccin_themes: &[(&str, &str)] = &[ ( "catppuccin-latte", - include_str!("../../../../themes/Catppuccin Latte.tmTheme"), + include_str!("../../themes/Catppuccin Latte.tmTheme"), ), ( "catppuccin-frappe", - include_str!("../../../../themes/Catppuccin Frappe.tmTheme"), + include_str!("../../themes/Catppuccin Frappe.tmTheme"), ), ( "catppuccin-macchiato", - include_str!("../../../../themes/Catppuccin Macchiato.tmTheme"), + include_str!("../../themes/Catppuccin Macchiato.tmTheme"), ), ( "catppuccin-mocha", - include_str!("../../../../themes/Catppuccin Mocha.tmTheme"), + include_str!("../../themes/Catppuccin Mocha.tmTheme"), ), ]; for (name, xml) in catppuccin_themes { @@ -228,241 +228,223 @@ fn theme_set() -> &'static ThemeSet { let vscode_themes: &[(&str, &str)] = &[ ( "andromeeda", - include_str!("../../../../themes/vscode/andromeeda.json"), + include_str!("../../themes/vscode/andromeeda.json"), ), ( "aurora-x", - include_str!("../../../../themes/vscode/aurora-x.json"), + include_str!("../../themes/vscode/aurora-x.json"), ), ( "ayu-dark", - include_str!("../../../../themes/vscode/ayu-dark.json"), + include_str!("../../themes/vscode/ayu-dark.json"), ), ( "ayu-light", - include_str!("../../../../themes/vscode/ayu-light.json"), + include_str!("../../themes/vscode/ayu-light.json"), ), ( "ayu-mirage", - include_str!("../../../../themes/vscode/ayu-mirage.json"), + include_str!("../../themes/vscode/ayu-mirage.json"), ), ( "dark-plus", - include_str!("../../../../themes/vscode/dark-plus.json"), - ), - ( - "dracula", - include_str!("../../../../themes/vscode/dracula.json"), + include_str!("../../themes/vscode/dark-plus.json"), ), + ("dracula", include_str!("../../themes/vscode/dracula.json")), ( "dracula-soft", - include_str!("../../../../themes/vscode/dracula-soft.json"), + include_str!("../../themes/vscode/dracula-soft.json"), ), ( "everforest-dark", - include_str!("../../../../themes/vscode/everforest-dark.json"), + include_str!("../../themes/vscode/everforest-dark.json"), ), ( "everforest-light", - include_str!("../../../../themes/vscode/everforest-light.json"), + include_str!("../../themes/vscode/everforest-light.json"), ), ( "github-dark", - include_str!("../../../../themes/vscode/github-dark.json"), + include_str!("../../themes/vscode/github-dark.json"), ), ( "github-dark-default", - include_str!("../../../../themes/vscode/github-dark-default.json"), + include_str!("../../themes/vscode/github-dark-default.json"), ), ( "github-dark-dimmed", - include_str!("../../../../themes/vscode/github-dark-dimmed.json"), + include_str!("../../themes/vscode/github-dark-dimmed.json"), ), ( "github-dark-high-contrast", - include_str!("../../../../themes/vscode/github-dark-high-contrast.json"), + include_str!("../../themes/vscode/github-dark-high-contrast.json"), ), ( "github-light", - include_str!("../../../../themes/vscode/github-light.json"), + include_str!("../../themes/vscode/github-light.json"), ), ( "github-light-default", - include_str!("../../../../themes/vscode/github-light-default.json"), + include_str!("../../themes/vscode/github-light-default.json"), ), ( "github-light-high-contrast", - include_str!("../../../../themes/vscode/github-light-high-contrast.json"), + include_str!("../../themes/vscode/github-light-high-contrast.json"), ), ( "gruvbox-dark-hard", - include_str!("../../../../themes/vscode/gruvbox-dark-hard.json"), + include_str!("../../themes/vscode/gruvbox-dark-hard.json"), ), ( "gruvbox-dark-medium", - include_str!("../../../../themes/vscode/gruvbox-dark-medium.json"), + include_str!("../../themes/vscode/gruvbox-dark-medium.json"), ), ( "gruvbox-dark-soft", - include_str!("../../../../themes/vscode/gruvbox-dark-soft.json"), + include_str!("../../themes/vscode/gruvbox-dark-soft.json"), ), ( "gruvbox-light-hard", - include_str!("../../../../themes/vscode/gruvbox-light-hard.json"), + include_str!("../../themes/vscode/gruvbox-light-hard.json"), ), ( "gruvbox-light-medium", - include_str!("../../../../themes/vscode/gruvbox-light-medium.json"), + include_str!("../../themes/vscode/gruvbox-light-medium.json"), ), ( "gruvbox-light-soft", - include_str!("../../../../themes/vscode/gruvbox-light-soft.json"), - ), - ( - "horizon", - include_str!("../../../../themes/vscode/horizon.json"), + include_str!("../../themes/vscode/gruvbox-light-soft.json"), ), + ("horizon", include_str!("../../themes/vscode/horizon.json")), ( "horizon-bright", - include_str!("../../../../themes/vscode/horizon-bright.json"), - ), - ( - "houston", - include_str!("../../../../themes/vscode/houston.json"), + include_str!("../../themes/vscode/horizon-bright.json"), ), + ("houston", include_str!("../../themes/vscode/houston.json")), ( "kanagawa-dragon", - include_str!("../../../../themes/vscode/kanagawa-dragon.json"), + include_str!("../../themes/vscode/kanagawa-dragon.json"), ), ( "kanagawa-lotus", - include_str!("../../../../themes/vscode/kanagawa-lotus.json"), + include_str!("../../themes/vscode/kanagawa-lotus.json"), ), ( "kanagawa-wave", - include_str!("../../../../themes/vscode/kanagawa-wave.json"), + include_str!("../../themes/vscode/kanagawa-wave.json"), ), ( "laserwave", - include_str!("../../../../themes/vscode/laserwave.json"), + include_str!("../../themes/vscode/laserwave.json"), ), ( "light-plus", - include_str!("../../../../themes/vscode/light-plus.json"), + include_str!("../../themes/vscode/light-plus.json"), ), ( "material-theme", - include_str!("../../../../themes/vscode/material-theme.json"), + include_str!("../../themes/vscode/material-theme.json"), ), ( "material-theme-darker", - include_str!("../../../../themes/vscode/material-theme-darker.json"), + include_str!("../../themes/vscode/material-theme-darker.json"), ), ( "material-theme-lighter", - include_str!("../../../../themes/vscode/material-theme-lighter.json"), + include_str!("../../themes/vscode/material-theme-lighter.json"), ), ( "material-theme-ocean", - include_str!("../../../../themes/vscode/material-theme-ocean.json"), + include_str!("../../themes/vscode/material-theme-ocean.json"), ), ( "material-theme-palenight", - include_str!("../../../../themes/vscode/material-theme-palenight.json"), + include_str!("../../themes/vscode/material-theme-palenight.json"), ), ( "min-dark", - include_str!("../../../../themes/vscode/min-dark.json"), + include_str!("../../themes/vscode/min-dark.json"), ), ( "min-light", - include_str!("../../../../themes/vscode/min-light.json"), - ), - ( - "monokai", - include_str!("../../../../themes/vscode/monokai.json"), + include_str!("../../themes/vscode/min-light.json"), ), + ("monokai", include_str!("../../themes/vscode/monokai.json")), ( "night-owl", - include_str!("../../../../themes/vscode/night-owl.json"), + include_str!("../../themes/vscode/night-owl.json"), ), ( "night-owl-light", - include_str!("../../../../themes/vscode/night-owl-light.json"), + include_str!("../../themes/vscode/night-owl-light.json"), ), - ("nord", include_str!("../../../../themes/vscode/nord.json")), + ("nord", include_str!("../../themes/vscode/nord.json")), ( "one-dark-pro", - include_str!("../../../../themes/vscode/one-dark-pro.json"), + include_str!("../../themes/vscode/one-dark-pro.json"), ), ( "one-light", - include_str!("../../../../themes/vscode/one-light.json"), - ), - ( - "plastic", - include_str!("../../../../themes/vscode/plastic.json"), + include_str!("../../themes/vscode/one-light.json"), ), + ("plastic", include_str!("../../themes/vscode/plastic.json")), ( "poimandres", - include_str!("../../../../themes/vscode/poimandres.json"), + include_str!("../../themes/vscode/poimandres.json"), ), - ("red", include_str!("../../../../themes/vscode/red.json")), + ("red", include_str!("../../themes/vscode/red.json")), ( "rose-pine", - include_str!("../../../../themes/vscode/rose-pine.json"), + include_str!("../../themes/vscode/rose-pine.json"), ), ( "rose-pine-dawn", - include_str!("../../../../themes/vscode/rose-pine-dawn.json"), + include_str!("../../themes/vscode/rose-pine-dawn.json"), ), ( "rose-pine-moon", - include_str!("../../../../themes/vscode/rose-pine-moon.json"), + include_str!("../../themes/vscode/rose-pine-moon.json"), ), ( "slack-dark", - include_str!("../../../../themes/vscode/slack-dark.json"), + include_str!("../../themes/vscode/slack-dark.json"), ), ( "slack-ochin", - include_str!("../../../../themes/vscode/slack-ochin.json"), + include_str!("../../themes/vscode/slack-ochin.json"), ), ( "snazzy-light", - include_str!("../../../../themes/vscode/snazzy-light.json"), + include_str!("../../themes/vscode/snazzy-light.json"), ), ( "solarized-dark", - include_str!("../../../../themes/vscode/solarized-dark.json"), + include_str!("../../themes/vscode/solarized-dark.json"), ), ( "solarized-light", - include_str!("../../../../themes/vscode/solarized-light.json"), + include_str!("../../themes/vscode/solarized-light.json"), ), ( "synthwave-84", - include_str!("../../../../themes/vscode/synthwave-84.json"), + include_str!("../../themes/vscode/synthwave-84.json"), ), ( "tokyo-night", - include_str!("../../../../themes/vscode/tokyo-night.json"), - ), - ( - "vesper", - include_str!("../../../../themes/vscode/vesper.json"), + include_str!("../../themes/vscode/tokyo-night.json"), ), + ("vesper", include_str!("../../themes/vscode/vesper.json")), ( "vitesse-black", - include_str!("../../../../themes/vscode/vitesse-black.json"), + include_str!("../../themes/vscode/vitesse-black.json"), ), ( "vitesse-dark", - include_str!("../../../../themes/vscode/vitesse-dark.json"), + include_str!("../../themes/vscode/vitesse-dark.json"), ), ( "vitesse-light", - include_str!("../../../../themes/vscode/vitesse-light.json"), + include_str!("../../themes/vscode/vitesse-light.json"), ), ]; for (name, json) in vscode_themes { diff --git a/themes/Catppuccin Frappe.tmTheme b/crates/rustmotion-components/themes/Catppuccin Frappe.tmTheme similarity index 100% rename from themes/Catppuccin Frappe.tmTheme rename to crates/rustmotion-components/themes/Catppuccin Frappe.tmTheme diff --git a/themes/Catppuccin Latte.tmTheme b/crates/rustmotion-components/themes/Catppuccin Latte.tmTheme similarity index 100% rename from themes/Catppuccin Latte.tmTheme rename to crates/rustmotion-components/themes/Catppuccin Latte.tmTheme diff --git a/themes/Catppuccin Macchiato.tmTheme b/crates/rustmotion-components/themes/Catppuccin Macchiato.tmTheme similarity index 100% rename from themes/Catppuccin Macchiato.tmTheme rename to crates/rustmotion-components/themes/Catppuccin Macchiato.tmTheme diff --git a/themes/Catppuccin Mocha.tmTheme b/crates/rustmotion-components/themes/Catppuccin Mocha.tmTheme similarity index 100% rename from themes/Catppuccin Mocha.tmTheme rename to crates/rustmotion-components/themes/Catppuccin Mocha.tmTheme diff --git a/themes/vscode/andromeeda.json b/crates/rustmotion-components/themes/vscode/andromeeda.json similarity index 100% rename from themes/vscode/andromeeda.json rename to crates/rustmotion-components/themes/vscode/andromeeda.json diff --git a/themes/vscode/aurora-x.json b/crates/rustmotion-components/themes/vscode/aurora-x.json similarity index 100% rename from themes/vscode/aurora-x.json rename to crates/rustmotion-components/themes/vscode/aurora-x.json diff --git a/themes/vscode/ayu-dark.json b/crates/rustmotion-components/themes/vscode/ayu-dark.json similarity index 100% rename from themes/vscode/ayu-dark.json rename to crates/rustmotion-components/themes/vscode/ayu-dark.json diff --git a/themes/vscode/ayu-light.json b/crates/rustmotion-components/themes/vscode/ayu-light.json similarity index 100% rename from themes/vscode/ayu-light.json rename to crates/rustmotion-components/themes/vscode/ayu-light.json diff --git a/themes/vscode/ayu-mirage.json b/crates/rustmotion-components/themes/vscode/ayu-mirage.json similarity index 100% rename from themes/vscode/ayu-mirage.json rename to crates/rustmotion-components/themes/vscode/ayu-mirage.json diff --git a/themes/vscode/dark-plus.json b/crates/rustmotion-components/themes/vscode/dark-plus.json similarity index 100% rename from themes/vscode/dark-plus.json rename to crates/rustmotion-components/themes/vscode/dark-plus.json diff --git a/themes/vscode/dracula-soft.json b/crates/rustmotion-components/themes/vscode/dracula-soft.json similarity index 100% rename from themes/vscode/dracula-soft.json rename to crates/rustmotion-components/themes/vscode/dracula-soft.json diff --git a/themes/vscode/dracula.json b/crates/rustmotion-components/themes/vscode/dracula.json similarity index 100% rename from themes/vscode/dracula.json rename to crates/rustmotion-components/themes/vscode/dracula.json diff --git a/themes/vscode/everforest-dark.json b/crates/rustmotion-components/themes/vscode/everforest-dark.json similarity index 100% rename from themes/vscode/everforest-dark.json rename to crates/rustmotion-components/themes/vscode/everforest-dark.json diff --git a/themes/vscode/everforest-light.json b/crates/rustmotion-components/themes/vscode/everforest-light.json similarity index 100% rename from themes/vscode/everforest-light.json rename to crates/rustmotion-components/themes/vscode/everforest-light.json diff --git a/themes/vscode/github-dark-default.json b/crates/rustmotion-components/themes/vscode/github-dark-default.json similarity index 100% rename from themes/vscode/github-dark-default.json rename to crates/rustmotion-components/themes/vscode/github-dark-default.json diff --git a/themes/vscode/github-dark-dimmed.json b/crates/rustmotion-components/themes/vscode/github-dark-dimmed.json similarity index 100% rename from themes/vscode/github-dark-dimmed.json rename to crates/rustmotion-components/themes/vscode/github-dark-dimmed.json diff --git a/themes/vscode/github-dark-high-contrast.json b/crates/rustmotion-components/themes/vscode/github-dark-high-contrast.json similarity index 100% rename from themes/vscode/github-dark-high-contrast.json rename to crates/rustmotion-components/themes/vscode/github-dark-high-contrast.json diff --git a/themes/vscode/github-dark.json b/crates/rustmotion-components/themes/vscode/github-dark.json similarity index 100% rename from themes/vscode/github-dark.json rename to crates/rustmotion-components/themes/vscode/github-dark.json diff --git a/themes/vscode/github-light-default.json b/crates/rustmotion-components/themes/vscode/github-light-default.json similarity index 100% rename from themes/vscode/github-light-default.json rename to crates/rustmotion-components/themes/vscode/github-light-default.json diff --git a/themes/vscode/github-light-high-contrast.json b/crates/rustmotion-components/themes/vscode/github-light-high-contrast.json similarity index 100% rename from themes/vscode/github-light-high-contrast.json rename to crates/rustmotion-components/themes/vscode/github-light-high-contrast.json diff --git a/themes/vscode/github-light.json b/crates/rustmotion-components/themes/vscode/github-light.json similarity index 100% rename from themes/vscode/github-light.json rename to crates/rustmotion-components/themes/vscode/github-light.json diff --git a/themes/vscode/gruvbox-dark-hard.json b/crates/rustmotion-components/themes/vscode/gruvbox-dark-hard.json similarity index 100% rename from themes/vscode/gruvbox-dark-hard.json rename to crates/rustmotion-components/themes/vscode/gruvbox-dark-hard.json diff --git a/themes/vscode/gruvbox-dark-medium.json b/crates/rustmotion-components/themes/vscode/gruvbox-dark-medium.json similarity index 100% rename from themes/vscode/gruvbox-dark-medium.json rename to crates/rustmotion-components/themes/vscode/gruvbox-dark-medium.json diff --git a/themes/vscode/gruvbox-dark-soft.json b/crates/rustmotion-components/themes/vscode/gruvbox-dark-soft.json similarity index 100% rename from themes/vscode/gruvbox-dark-soft.json rename to crates/rustmotion-components/themes/vscode/gruvbox-dark-soft.json diff --git a/themes/vscode/gruvbox-light-hard.json b/crates/rustmotion-components/themes/vscode/gruvbox-light-hard.json similarity index 100% rename from themes/vscode/gruvbox-light-hard.json rename to crates/rustmotion-components/themes/vscode/gruvbox-light-hard.json diff --git a/themes/vscode/gruvbox-light-medium.json b/crates/rustmotion-components/themes/vscode/gruvbox-light-medium.json similarity index 100% rename from themes/vscode/gruvbox-light-medium.json rename to crates/rustmotion-components/themes/vscode/gruvbox-light-medium.json diff --git a/themes/vscode/gruvbox-light-soft.json b/crates/rustmotion-components/themes/vscode/gruvbox-light-soft.json similarity index 100% rename from themes/vscode/gruvbox-light-soft.json rename to crates/rustmotion-components/themes/vscode/gruvbox-light-soft.json diff --git a/themes/vscode/horizon-bright.json b/crates/rustmotion-components/themes/vscode/horizon-bright.json similarity index 100% rename from themes/vscode/horizon-bright.json rename to crates/rustmotion-components/themes/vscode/horizon-bright.json diff --git a/themes/vscode/horizon.json b/crates/rustmotion-components/themes/vscode/horizon.json similarity index 100% rename from themes/vscode/horizon.json rename to crates/rustmotion-components/themes/vscode/horizon.json diff --git a/themes/vscode/houston.json b/crates/rustmotion-components/themes/vscode/houston.json similarity index 100% rename from themes/vscode/houston.json rename to crates/rustmotion-components/themes/vscode/houston.json diff --git a/themes/vscode/kanagawa-dragon.json b/crates/rustmotion-components/themes/vscode/kanagawa-dragon.json similarity index 100% rename from themes/vscode/kanagawa-dragon.json rename to crates/rustmotion-components/themes/vscode/kanagawa-dragon.json diff --git a/themes/vscode/kanagawa-lotus.json b/crates/rustmotion-components/themes/vscode/kanagawa-lotus.json similarity index 100% rename from themes/vscode/kanagawa-lotus.json rename to crates/rustmotion-components/themes/vscode/kanagawa-lotus.json diff --git a/themes/vscode/kanagawa-wave.json b/crates/rustmotion-components/themes/vscode/kanagawa-wave.json similarity index 100% rename from themes/vscode/kanagawa-wave.json rename to crates/rustmotion-components/themes/vscode/kanagawa-wave.json diff --git a/themes/vscode/laserwave.json b/crates/rustmotion-components/themes/vscode/laserwave.json similarity index 100% rename from themes/vscode/laserwave.json rename to crates/rustmotion-components/themes/vscode/laserwave.json diff --git a/themes/vscode/light-plus.json b/crates/rustmotion-components/themes/vscode/light-plus.json similarity index 100% rename from themes/vscode/light-plus.json rename to crates/rustmotion-components/themes/vscode/light-plus.json diff --git a/themes/vscode/material-theme-darker.json b/crates/rustmotion-components/themes/vscode/material-theme-darker.json similarity index 100% rename from themes/vscode/material-theme-darker.json rename to crates/rustmotion-components/themes/vscode/material-theme-darker.json diff --git a/themes/vscode/material-theme-lighter.json b/crates/rustmotion-components/themes/vscode/material-theme-lighter.json similarity index 100% rename from themes/vscode/material-theme-lighter.json rename to crates/rustmotion-components/themes/vscode/material-theme-lighter.json diff --git a/themes/vscode/material-theme-ocean.json b/crates/rustmotion-components/themes/vscode/material-theme-ocean.json similarity index 100% rename from themes/vscode/material-theme-ocean.json rename to crates/rustmotion-components/themes/vscode/material-theme-ocean.json diff --git a/themes/vscode/material-theme-palenight.json b/crates/rustmotion-components/themes/vscode/material-theme-palenight.json similarity index 100% rename from themes/vscode/material-theme-palenight.json rename to crates/rustmotion-components/themes/vscode/material-theme-palenight.json diff --git a/themes/vscode/material-theme.json b/crates/rustmotion-components/themes/vscode/material-theme.json similarity index 100% rename from themes/vscode/material-theme.json rename to crates/rustmotion-components/themes/vscode/material-theme.json diff --git a/themes/vscode/min-dark.json b/crates/rustmotion-components/themes/vscode/min-dark.json similarity index 100% rename from themes/vscode/min-dark.json rename to crates/rustmotion-components/themes/vscode/min-dark.json diff --git a/themes/vscode/min-light.json b/crates/rustmotion-components/themes/vscode/min-light.json similarity index 100% rename from themes/vscode/min-light.json rename to crates/rustmotion-components/themes/vscode/min-light.json diff --git a/themes/vscode/monokai.json b/crates/rustmotion-components/themes/vscode/monokai.json similarity index 100% rename from themes/vscode/monokai.json rename to crates/rustmotion-components/themes/vscode/monokai.json diff --git a/themes/vscode/night-owl-light.json b/crates/rustmotion-components/themes/vscode/night-owl-light.json similarity index 100% rename from themes/vscode/night-owl-light.json rename to crates/rustmotion-components/themes/vscode/night-owl-light.json diff --git a/themes/vscode/night-owl.json b/crates/rustmotion-components/themes/vscode/night-owl.json similarity index 100% rename from themes/vscode/night-owl.json rename to crates/rustmotion-components/themes/vscode/night-owl.json diff --git a/themes/vscode/nord.json b/crates/rustmotion-components/themes/vscode/nord.json similarity index 100% rename from themes/vscode/nord.json rename to crates/rustmotion-components/themes/vscode/nord.json diff --git a/themes/vscode/one-dark-pro.json b/crates/rustmotion-components/themes/vscode/one-dark-pro.json similarity index 100% rename from themes/vscode/one-dark-pro.json rename to crates/rustmotion-components/themes/vscode/one-dark-pro.json diff --git a/themes/vscode/one-light.json b/crates/rustmotion-components/themes/vscode/one-light.json similarity index 100% rename from themes/vscode/one-light.json rename to crates/rustmotion-components/themes/vscode/one-light.json diff --git a/themes/vscode/plastic.json b/crates/rustmotion-components/themes/vscode/plastic.json similarity index 100% rename from themes/vscode/plastic.json rename to crates/rustmotion-components/themes/vscode/plastic.json diff --git a/themes/vscode/poimandres.json b/crates/rustmotion-components/themes/vscode/poimandres.json similarity index 100% rename from themes/vscode/poimandres.json rename to crates/rustmotion-components/themes/vscode/poimandres.json diff --git a/themes/vscode/red.json b/crates/rustmotion-components/themes/vscode/red.json similarity index 100% rename from themes/vscode/red.json rename to crates/rustmotion-components/themes/vscode/red.json diff --git a/themes/vscode/rose-pine-dawn.json b/crates/rustmotion-components/themes/vscode/rose-pine-dawn.json similarity index 100% rename from themes/vscode/rose-pine-dawn.json rename to crates/rustmotion-components/themes/vscode/rose-pine-dawn.json diff --git a/themes/vscode/rose-pine-moon.json b/crates/rustmotion-components/themes/vscode/rose-pine-moon.json similarity index 100% rename from themes/vscode/rose-pine-moon.json rename to crates/rustmotion-components/themes/vscode/rose-pine-moon.json diff --git a/themes/vscode/rose-pine.json b/crates/rustmotion-components/themes/vscode/rose-pine.json similarity index 100% rename from themes/vscode/rose-pine.json rename to crates/rustmotion-components/themes/vscode/rose-pine.json diff --git a/themes/vscode/slack-dark.json b/crates/rustmotion-components/themes/vscode/slack-dark.json similarity index 100% rename from themes/vscode/slack-dark.json rename to crates/rustmotion-components/themes/vscode/slack-dark.json diff --git a/themes/vscode/slack-ochin.json b/crates/rustmotion-components/themes/vscode/slack-ochin.json similarity index 100% rename from themes/vscode/slack-ochin.json rename to crates/rustmotion-components/themes/vscode/slack-ochin.json diff --git a/themes/vscode/snazzy-light.json b/crates/rustmotion-components/themes/vscode/snazzy-light.json similarity index 100% rename from themes/vscode/snazzy-light.json rename to crates/rustmotion-components/themes/vscode/snazzy-light.json diff --git a/themes/vscode/solarized-dark.json b/crates/rustmotion-components/themes/vscode/solarized-dark.json similarity index 100% rename from themes/vscode/solarized-dark.json rename to crates/rustmotion-components/themes/vscode/solarized-dark.json diff --git a/themes/vscode/solarized-light.json b/crates/rustmotion-components/themes/vscode/solarized-light.json similarity index 100% rename from themes/vscode/solarized-light.json rename to crates/rustmotion-components/themes/vscode/solarized-light.json diff --git a/themes/vscode/synthwave-84.json b/crates/rustmotion-components/themes/vscode/synthwave-84.json similarity index 100% rename from themes/vscode/synthwave-84.json rename to crates/rustmotion-components/themes/vscode/synthwave-84.json diff --git a/themes/vscode/tokyo-night.json b/crates/rustmotion-components/themes/vscode/tokyo-night.json similarity index 100% rename from themes/vscode/tokyo-night.json rename to crates/rustmotion-components/themes/vscode/tokyo-night.json diff --git a/themes/vscode/vesper.json b/crates/rustmotion-components/themes/vscode/vesper.json similarity index 100% rename from themes/vscode/vesper.json rename to crates/rustmotion-components/themes/vscode/vesper.json diff --git a/themes/vscode/vitesse-black.json b/crates/rustmotion-components/themes/vscode/vitesse-black.json similarity index 100% rename from themes/vscode/vitesse-black.json rename to crates/rustmotion-components/themes/vscode/vitesse-black.json diff --git a/themes/vscode/vitesse-dark.json b/crates/rustmotion-components/themes/vscode/vitesse-dark.json similarity index 100% rename from themes/vscode/vitesse-dark.json rename to crates/rustmotion-components/themes/vscode/vitesse-dark.json diff --git a/themes/vscode/vitesse-light.json b/crates/rustmotion-components/themes/vscode/vitesse-light.json similarity index 100% rename from themes/vscode/vitesse-light.json rename to crates/rustmotion-components/themes/vscode/vitesse-light.json From 38191432190fde59d4dd715ccf5cc52275c3a786 Mon Sep 17 00:00:00 2001 From: Baptiste Parmantier Date: Wed, 19 Aug 2026 16:59:06 +0200 Subject: [PATCH 4/4] ci: package the publishable crates on every PR cargo test never builds a tarball, so nothing caught that rustmotion-components reached outside its own directory for 65 theme files until a tag was pushed. This job packages the published crates and rebuilds each from its archive, moving that discovery from release time to review time. --- .github/workflows/ci.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 07e1029..afd85ab 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -46,3 +46,22 @@ jobs: - uses: Swatinem/rust-cache@v2 - name: Run tests run: cargo test --workspace + + # Empaquette les crates publiées et les recompile depuis leur tarball. Aucun + # `cargo test` ne fait ça, et c'est la seule étape qui voit ce qui manque au + # paquet : la release 0.6.0 s'est arrêtée sur 65 `include_str!` visant un + # dossier situé hors de la crate, donc absent de l'archive. Sans ce job, cette + # famille de défaut ne se découvre qu'en publiant — et une publication + # crates.io ne se défait pas, elle se yanke. + package: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install system dependencies + run: sudo apt-get update && sudo apt-get install -y libfontconfig1-dev libfreetype6-dev + - uses: dtolnay/rust-toolchain@stable + - uses: Swatinem/rust-cache@v2 + - name: Package publishable crates + # studio et cli ne sont pas publiées ; les exclure évite d'installer la + # pile GTK/WebKit ici pour rien. + run: cargo package --workspace --exclude rustmotion-studio --exclude rustmotion-cli