Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package deckcraft for openSUSE:Factory checked in at 2026-10-30 18:11:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/deckcraft (Old) and /work/SRC/openSUSE:Factory/.deckcraft.new.1255 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "deckcraft" Fri Oct 30 18:11:50 2026 rev:2 rq:1393736 version:0.12.0 Changes: -------- --- /work/SRC/openSUSE:Factory/deckcraft/deckcraft.changes 2026-10-28 21:11:04.116404345 +0100 +++ /work/SRC/openSUSE:Factory/.deckcraft.new.1255/deckcraft.changes 2026-10-30 18:19:09.687500618 +0100 @@ -1,0 +2,29 @@ +Thu Oct 29 12:40:28 UTC 2026 - Martin Pluskal <[email protected]> + +- Update to 0.12.0 (upstream tag v0.12.0, 2026-10-28): + * Startup update prompt with direct self-updating; new + craft-update/craft-ui/craft-i18n helpers from craft-libs + * UI toolkit egui 0.36 -> 0.37; every dropdown uses the + shared ComboBox; proofing language for the whole deck + * Fixes for HTML paste panics, picture/object preview + fills, trendline sums, table command errors, layout + index validation and PPTX import/export details + * Hardening (no CVE assigned): media decoders bounded + against resource amplification and unbound state + * Largely refactoring, installer and CI work otherwise; + no install layout change + * Re-vendor (update=true): new crates (ureq/rustls stack, + zip 9, time, tar, postcard, quick-xml 0.42, icu 2.3) + all under already-listed licences; webpki-root-certs + is dev/wasm-only and not linked; licence set and + Legal-Review-Notice unchanged; cargo_audit reports no + advisories. +- Set the fixed metainfo release date to 2026-10-28 (v0.12.0). +- Disable in-app self-update (PATCH-FIX-OPENSUSE + deckcraft-no-self-update.patch): no startup update check and no + install prompt, so upstream releases are never installed over + RPM-owned files; the manual Help check outcome toast stays. +- Add deckcraft-drop-unused-egui-patches.patch: + drop unused [patch.crates-io] pins the vendor omits + +------------------------------------------------------------------- Old: ---- deckcraft-0.11.1.tar.zst New: ---- deckcraft-0.12.0.tar.zst deckcraft-drop-unused-egui-patches.patch deckcraft-no-self-update.patch ----------(New B)---------- New: RPM-owned files; the manual Help check outcome toast stays. - Add deckcraft-drop-unused-egui-patches.patch: drop unused [patch.crates-io] pins the vendor omits New:- Disable in-app self-update (PATCH-FIX-OPENSUSE deckcraft-no-self-update.patch): no startup update check and no install prompt, so upstream releases are never installed over ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ deckcraft.spec ++++++ --- /var/tmp/diff_new_pack.uDFgDY/_old 2026-10-30 18:19:18.213857548 +0100 +++ /var/tmp/diff_new_pack.uDFgDY/_new 2026-10-30 18:19:18.218857757 +0100 @@ -17,7 +17,7 @@ Name: deckcraft -Version: 0.11.1 +Version: 0.12.0 Release: 0 Summary: Native presentation app with slides, shows and an agent API # Legal-Review-Notice: scope is the two shipped targets (deckcraft, deckcraft-cli) @@ -41,6 +41,18 @@ URL: https://github.com/storytold/deckcraft Source0: %{name}-%{version}.tar.zst Source1: vendor.tar.zst +# PATCH-FIX-OPENSUSE deckcraft-no-self-update.patch -- distro builds +# must not phone home at startup nor offer to install an upstream release +# over RPM-owned files (the package manager owns updates); the manual +# Help check outcome toast stays. New upstream behaviour in 0.12.0, not +# upstreamable (upstream ships self-updating intentionally). +Patch0: deckcraft-no-self-update.patch +# PATCH-FIX-OPENSUSE deckcraft-drop-unused-egui-patches.patch -- drop four +# [patch.crates-io] pins (egui_demo_lib, egui_extras, egui_inspection, +# egui_system_font_provider) that nothing uses (Cargo.lock [[patch.unused]]): +# cargo_vendor omits them from vendor.tar.zst, so any --offline resolve +# fails; upstreamable as cleanup once upstream drops the pins. +Patch1: deckcraft-drop-unused-egui-patches.patch BuildRequires: appstream-glib BuildRequires: c_compiler BuildRequires: cargo >= 1.95 @@ -100,6 +112,12 @@ # workspace also builds deckcraft-web, which is not shipped). CRAFT_FONTS_DIR # stays unset: the fonts build step then embeds nothing and falls back to # system fonts. +# NOTE: keep the parameterized cargo build and test macros below in braced +# form. The bare form misparses the trailing package arguments in the +# Factory build root (staging adi:5: Unknown option in the build macro at +# the build section call), while the braced form with identical arguments +# builds green; spec-cleaner 1.3.1 rewrites them back to bare, recorded as +# a cleaner deviation at gate time. %{cargo_build} --locked -p deckcraft -p deckcraft-cli %install @@ -108,10 +126,10 @@ install -Dm0644 packaging/linux/ai.storyteller.deckcraft.desktop %{buildroot}%{_datadir}/applications/ai.storyteller.deckcraft.desktop install -Dm0644 packaging/linux/ai.storyteller.deckcraft.mime.xml %{buildroot}%{_datadir}/mime/packages/ai.storyteller.deckcraft.xml install -d -m 0755 %{buildroot}%{_datadir}/metainfo -# Fixed upstream release date (v0.11.1, 2026-10-25): a build-time date would +# Fixed upstream release date (v0.12.0, 2026-10-28): a build-time date would # make the metainfo differ on every rebuild, and spec-cleaner macro-expands # the %-sequences of any date format string, so keep this a plain string. -sed -e "s/@VERSION@/%{version}/g" -e "s/@DATE@/2026-10-25/g" packaging/linux/ai.storyteller.deckcraft.metainfo.xml.in > %{buildroot}%{_datadir}/metainfo/ai.storyteller.deckcraft.metainfo.xml +sed -e "s/@VERSION@/%{version}/g" -e "s/@DATE@/2026-10-28/g" packaging/linux/ai.storyteller.deckcraft.metainfo.xml.in > %{buildroot}%{_datadir}/metainfo/ai.storyteller.deckcraft.metainfo.xml # Upstream declares the app icon as type="stock" but it is a custom hicolor # icon, so declare it as cached for appstream validation. sed -i 's|<icon type="stock">ai.storyteller.deckcraft</icon>|<icon type="cached" width="64" height="64">ai.storyteller.deckcraft.png</icon>|' %{buildroot}%{_datadir}/metainfo/ai.storyteller.deckcraft.metainfo.xml @@ -121,6 +139,7 @@ %check # Media codec unit tests (committed fixtures only, no network) covering the # in-house H.264/HEVC/VP9/AV1 decoders and the symphonia audio path. +# (Braced form per the NOTE at the build section call above.) %{cargo_test} --locked -p deckcraft-media # Both binaries exit before any window or GPU init on --version. %{buildroot}%{_bindir}/deckcraft --version ++++++ _service ++++++ --- /var/tmp/diff_new_pack.uDFgDY/_old 2026-10-30 18:19:18.362863785 +0100 +++ /var/tmp/diff_new_pack.uDFgDY/_new 2026-10-30 18:19:18.371864162 +0100 @@ -2,7 +2,7 @@ <service mode="manual" name="tar_scm"> <param name="url">https://github.com/storytold/deckcraft.git</param> <param name="scm">git</param> - <param name="revision">v0.11.1</param> + <param name="revision">v0.12.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="versionrewrite-replacement">\1</param> @@ -15,7 +15,8 @@ <service mode="manual" name="set_version"/> <service mode="manual" name="cargo_vendor"> <param name="src">deckcraft-*.tar.zst</param> - <param name="update">true</param> + <param name="update">false</param> + <param name="respect-lockfile">true</param> </service> <service mode="manual" name="cargo_audit"/> </services> ++++++ deckcraft-0.11.1.tar.zst -> deckcraft-0.12.0.tar.zst ++++++ ++++ 136137 lines of diff (skipped) ++++++ deckcraft-drop-unused-egui-patches.patch ++++++ From: openSUSE Publishing <[email protected]> Subject: [PATCH] Drop unused egui patch pins so the offline vendor build resolves Bug: none (downstream build fix, upstreamable as cleanup) Upstream pins four egui crates (egui_demo_lib, egui_extras, egui_inspection, egui_system_font_provider) in [patch.crates-io] that nothing in the workspace uses (Cargo.lock lists all four under [[patch.unused]]). cargo_vendor therefore omits them from vendor.tar.zst, and any --offline/--locked resolve against the vendor directory fails with "patch location ... does not contain packages matching ...". Drop the four unused pins (plus their [[patch.unused]] lock stanzas, so --locked stays satisfied); the [[package]] set is unchanged. --- a/Cargo.toml +++ b/Cargo.toml @@ -117,10 +117,6 @@ egui-winit = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" } egui-wgpu = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" } egui_glow = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" } -egui_extras = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" } egui_kittest = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" } -egui_system_font_provider = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" } eframe = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" } -egui_demo_lib = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" } -egui_inspection = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" } winit = { git = "https://github.com/storytold/winit.git", rev = "a517b3846ee8457d84ee4975110bfda6797c44dc" } --- a/Cargo.lock +++ b/Cargo.lock @@ -6505,22 +6505,3 @@ "winnow", ] -[[patch.unused]] -name = "egui_demo_lib" -version = "0.37.0" -source = "git+https://github.com/storytold/egui.git?rev=6d518fc799681571963842f95b55a6b68431b15a#6d518fc799681571963842f95b55a6b68431b15a" - -[[patch.unused]] -name = "egui_extras" -version = "0.37.0" -source = "git+https://github.com/storytold/egui.git?rev=6d518fc799681571963842f95b55a6b68431b15a#6d518fc799681571963842f95b55a6b68431b15a" - -[[patch.unused]] -name = "egui_inspection" -version = "0.37.0" -source = "git+https://github.com/storytold/egui.git?rev=6d518fc799681571963842f95b55a6b68431b15a#6d518fc799681571963842f95b55a6b68431b15a" - -[[patch.unused]] -name = "egui_system_font_provider" -version = "0.37.0" -source = "git+https://github.com/storytold/egui.git?rev=6d518fc799681571963842f95b55a6b68431b15a#6d518fc799681571963842f95b55a6b68431b15a" ++++++ deckcraft-no-self-update.patch ++++++ From: openSUSE Publishing <[email protected]> Subject: [PATCH] No self-update in distro builds: no startup check, no install prompt Bug: none (downstream distribution policy, not upstreamable) The package manager owns updates on a distro install: do not phone home to the releases page on every GUI launch, and never offer to install an upstream release (UPDATE-AND-RESTART) over RPM-owned files. Upstream ships this machinery intentionally for its own builds. Help ▸ Check for Updates stays as an explicit manual action reporting through its outcome toast; only the automatic startup check and the self-update install prompt are turned off. --- a/apps/deckcraft/src/main.rs +++ b/apps/deckcraft/src/main.rs @@ -268,7 +268,11 @@ deckcraft_ui_egui::install_ime_pass_hooks(&cc.egui_ctx); let mut app = SlideApp::new(Session::new(), services()); load_prefs(&mut app); - app.enable_update_checks(); + // Downstream (openSUSE): the package manager owns updates, so the + // desktop app must not check for (and offer to install) upstream + // releases on its own at startup (enable_update_checks() left + // uncalled, keeping the updater disabled). Manual Help ▸ Check + // stays. // AutoRecover: reopen what a previous run left unsaved, then keep it current. if std::env::var_os("DECKCRAFT_NO_RECOVERY").is_none() { app.session.recovery_dir = deckcraft_engine::recovery::default_dir(); --- a/crates/ui-egui/src/dialogs/updates_ui.rs +++ b/crates/ui-egui/src/dialogs/updates_ui.rs @@ -1,7 +1,7 @@ //! One background check at start-up (and on demand from Help) for a newer release, and the modal //! prompt that offers to update and restart. The flow itself is `craft_update::updater::Updater`. -use craft_update::updater::{Action, Status, Updater}; +use craft_update::updater::{Status, Updater}; use crate::SlideApp; @@ -51,15 +51,11 @@ } } -pub(crate) fn show(app: &mut SlideApp, ctx: &egui::Context) { - // The restart helper is scheduled before the app closes, so no update starts over unsaved work. - let clean = !app.session.documents().iter().any(|d| d.is_dirty()); - match app.updates_rt.updater.show_if(ctx, clean) { - Action::OpenUrl(url) => ctx.open_url(egui::OpenUrl::new_tab(url)), - // The app's close path asks about unsaved work; the restart helper relaunches once the process exits. - Action::Close => ctx.send_viewport_cmd(egui::ViewportCommand::Close), - Action::None => {} - } +pub(crate) fn show(_app: &mut SlideApp, _ctx: &egui::Context) { + // Downstream (openSUSE): never draw the self-update prompt, so no + // upstream release is ever installed over RPM-owned files (neither + // at startup nor after a manual check). The manual Help ▸ Check for + // Updates outcome (tick() toast) stays. } #[cfg(test)] @@ -67,12 +63,13 @@ use super::*; #[test] - fn an_offered_release_opens_the_prompt() { + fn an_offered_release_never_opens_the_prompt() { + // Downstream (openSUSE): the self-update prompt is neutered. let mut app = SlideApp::new(deckcraft_engine::Session::new(), crate::Services::default()); let ctx = egui::Context::default(); assert!(!app.updates_rt.updater.prompt_open()); app.updates_rt.updater.offer(craft_update::Release { tag: "v99.0.0".into(), ..Default::default() }); ctx.run_ui(egui::RawInput::default(), |ui| show(&mut app, ui.ctx())).textures_delta.clear(); - assert!(app.updates_rt.updater.prompt_open()); + assert!(!app.updates_rt.updater.prompt_open()); } } ++++++ vendor.tar.zst ++++++ /work/SRC/openSUSE:Factory/deckcraft/vendor.tar.zst /work/SRC/openSUSE:Factory/.deckcraft.new.1255/vendor.tar.zst differ: char 8, line 1
