Linux app id: ai.storyteller.solidcraft, with an end-of-life rebase from the old id (#619)
The Flatpak app id, desktop/metainfo/MIME file names, icon name and the window's Wayland app_id / X11 class are now ai.storyteller.solidcraft, the id the ArtCraft launcher expects. Existing Flatpak installs move over: the Pages repo marks app/ai.storyteller.solvecraft end-of-life with a rebase to the new id, so flatpak update offers the switch and Flatpak carries ~/.var/app along. A new install next to the old one copies settings and autosaves on first launch through a read-only grant on the old data folder. The metainfo declares <replaces>/<provides>, the desktop entry X-Flatpak-RenamedFrom, and AppImages drop the menu entry an older AppImage installed. deb/rpm upgrades remove the old-named files. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
bcbfa50eac
commit
e67cc0c747
21 files changed
+194
-68
No files matched your search
@@ -36,18 +36,21 @@ to the same user installation:
|
||||
```sh
|
||||
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
flatpak remote-add --user --if-not-exists solidcraft https://bherbruck.github.io/solidcraft/flatpak/solidcraft.flatpakrepo
|
||||
flatpak install --user solidcraft ai.storyteller.solvecraft
|
||||
flatpak run ai.storyteller.solvecraft
|
||||
flatpak install --user solidcraft ai.storyteller.solidcraft
|
||||
flatpak run ai.storyteller.solidcraft
|
||||
```
|
||||
|
||||
The application ID is unchanged, so existing installations keep
|
||||
receiving updates under whatever remote name they were added with (see the
|
||||
[compatibility notes](https://github.com/bherbruck/solidcraft/blob/main/docs/compatibility.md#package-ids)).
|
||||
Releases up to 0.7 used the application ID `ai.storyteller.solvecraft`. If you installed one
|
||||
of those from the SolidCraft remote, `flatpak update --user` reports it as end-of-life and offers
|
||||
to replace it with `ai.storyteller.solidcraft`; accept, and your settings and autosaves move with
|
||||
it. If you installed a `.flatpak` bundle, install the new bundle, launch it once (it copies your
|
||||
settings), then run `flatpak uninstall --user ai.storyteller.solvecraft` (see the
|
||||
[compatibility notes](https://github.com/bherbruck/solidcraft/blob/main/docs/compatibility.md#linux-app-id)).
|
||||
|
||||
Alternatively, download the release's `.flatpak` file for your architecture and run
|
||||
`flatpak install --user ./solidcraft-VERSION-linux-ARCH.flatpak`. The bundle supplies the
|
||||
Flathub runtime repository address; installation still needs internet access to fetch any
|
||||
missing runtime. Launch with `flatpak run ai.storyteller.solvecraft`, rather than looking for
|
||||
missing runtime. Launch with `flatpak run ai.storyteller.solidcraft`, rather than looking for
|
||||
a host `solidcraft` binary. Files chosen through Open/Save use the desktop file-chooser portal;
|
||||
command-line paths outside Documents may need a specific additional filesystem permission.
|
||||
|
||||
|
||||
+35
-2
@@ -22,7 +22,7 @@ New designs are saved as `.solidcraft`. Files with the old extension still open
|
||||
| Browser file picker | `apps/solidcraft-web/src/files.rs` (`accept`) |
|
||||
| Windows | `packaging/windows/solidcraft.wxs`: the `.solvecraft` extension on the design ProgId and in `SupportedTypes` |
|
||||
| macOS | `packaging/macos/Info.plist.in`: `solvecraft` in the design document type's extensions |
|
||||
| Linux / FreeBSD / Flatpak | `packaging/linux/ai.storyteller.solvecraft.mime.xml`: `*.solvecraft` glob and the `application/x-solvecraft` alias |
|
||||
| Linux / FreeBSD / Flatpak | `packaging/linux/ai.storyteller.solidcraft.mime.xml`: `*.solvecraft` glob and the `application/x-solvecraft` alias |
|
||||
|
||||
Recent-files entries that point at a `.solvecraft` file keep working: they are plain paths and
|
||||
open through the same detection. The browser app also lists designs it stored under the old
|
||||
@@ -68,6 +68,8 @@ it is missing (desktop and browser, `solidcraft_ui_egui::prefs::stored`). The br
|
||||
reads files and the autosave it kept under the old names in local storage and OPFS
|
||||
(`apps/solidcraft-web/src/files.rs`). A 3DxWare profile the driver made for the old executable
|
||||
name is read until it makes a new one (`apps/solidcraft/src/space_mouse.rs`).
|
||||
In the Flatpak sandbox these folders live under `~/.var/app/<app id>/data`; for data kept under
|
||||
the app id of releases before 0.8, see [Linux app ID](#linux-app-id).
|
||||
The thumbnail cache is not migrated; it is rebuilt. The copy helper is
|
||||
`solidcraft_io::adopt_legacy_dir`, used by the desktop app (`adopt_legacy_settings`) and
|
||||
`solidcraft_engine::recovery::default_dir`. Tests: `legacy_dir` (copy once, never overwrite,
|
||||
@@ -109,13 +111,44 @@ test `legacy_design_files_and_resource_uris`).
|
||||
|
||||
| Package | Decision | Why |
|
||||
|---|---|---|
|
||||
| Flatpak app ID / Linux desktop ID `ai.storyteller.solvecraft` | **kept** | A new Flatpak ID is a different app: existing installs would stop receiving updates. The `.desktop`, metainfo and MIME file names and the Wayland `app_id` must match it, so they keep it too. |
|
||||
| Flatpak app ID / Linux desktop ID | changed in 0.8 from `ai.storyteller.solvecraft` to `ai.storyteller.solidcraft` | The ID the ArtCraft launcher looks for (`ai.storyteller.<name>`). The `.desktop`, metainfo and MIME file names, the icon name, and the Wayland `app_id` / X11 class follow it. Existing installs are moved over; see [Linux app ID](#linux-app-id). |
|
||||
| Flatpak remote file | `solidcraft.flatpakrepo`, plus a legacy `solvecraft.flatpakrepo` copy | Old links keep working; existing remotes point at the repo URL, which is unchanged. |
|
||||
| macOS bundle ID | changed to `ai.storyteller.solidcraft` | No updater depends on it; the app is drag-installed. macOS may ask again on first launch (unsigned builds). |
|
||||
| MSI `UpgradeCode` | **kept** | So the new MSI upgrades the old install in place. Product name is SolidCraft; the default folder becomes `Program Files\SolidCraft` (the major upgrade removes the old folder). A custom install folder isn't remembered across this one upgrade. |
|
||||
| deb / rpm package name | renamed to `solidcraft`; deb `Replaces`/`Conflicts`/`Provides: solvecraft`, rpm `Obsoletes`/`Provides: solvecraft` | Installing the new package replaces the old one instead of installing side by side. |
|
||||
| AppImage | `solidcraft-<version>-linux-<arch>.AppImage`; the release also carries a copy of its `.zsync` under the old `solvecraft-…` name | AppImages already installed look for the old-named `.zsync`, so AppImageUpdate keeps finding updates. |
|
||||
|
||||
## Linux app ID
|
||||
|
||||
Releases up to 0.7 used `ai.storyteller.solvecraft`; 0.8 uses `ai.storyteller.solidcraft`
|
||||
everywhere (Flatpak, deb, rpm, AppImage, Snap, FreeBSD, Nix). The shims:
|
||||
|
||||
| Shim | Where | What it does |
|
||||
|---|---|---|
|
||||
| End-of-life rebase in the Flatpak repository | `packaging/flatpak-site.sh` | Each release's Pages deploy keeps the old `app/ai.storyteller.solvecraft/<arch>/stable` refs (mirrored from the previous deploy) and marks them once with `flatpak build-commit-from --end-of-life-rebase=ai.storyteller.solvecraft=ai.storyteller.solidcraft`. `flatpak update` then says the old app is end-of-life and offers to replace it with the new one; accepting installs `ai.storyteller.solidcraft`, uninstalls the old app, and Flatpak moves `~/.var/app/ai.storyteller.solvecraft` to the new id's folder (leaving a symlink at the old path) on the first launch, so settings and autosaves come along unchanged. |
|
||||
| AppStream `<replaces>` / `<provides>` | `packaging/linux/ai.storyteller.solidcraft.metainfo.xml.in` | Software centres treat the new id as the successor of the old one and of `ai.storyteller.solvecraft.desktop`. |
|
||||
| `X-Flatpak-RenamedFrom` | `packaging/linux/ai.storyteller.solidcraft.desktop` | Desktops that honour it (GNOME Shell) keep favourites and pinned launchers pointing at the renamed entry. |
|
||||
| Read-only access to the old Flatpak data folder | `--filesystem=~/.var/app/ai.storyteller.solvecraft:ro` in `packaging/linux/flatpak/ai.storyteller.solidcraft.bundle.yml`; `solidcraft_io::legacy_flatpak_path`, used by `adopt_legacy_settings` and `recovery::default_dir` | When the new app was installed next to the old one (for example from a `.flatpak` bundle, which has no update feed) instead of through the rebase, its first launch copies settings and autosaves from the old app's folder, as in section 4. The old folder is not changed. |
|
||||
| The old window `app_id` as eframe's legacy storage key | `adopt_legacy_settings` (`LEGACY_APP_ID`) | Window state that releases before the settings rename kept under `~/.local/share/ai.storyteller.solvecraft` is still copied (section 4). |
|
||||
| Old AppImage menu entries | `packaging/linux/AppRun` | An AppImage's first run removes the `ai.storyteller.solvecraft.desktop` entry and icons that an AppImage up to 0.7 installed in `~/.local/share`, so the menu doesn't show the app twice. |
|
||||
|
||||
deb and rpm need no shim: the package (`solidcraft`) is unchanged, and an upgrade removes the old
|
||||
`/usr/share/applications/ai.storyteller.solvecraft.desktop`, metainfo, MIME and icon files
|
||||
because the new version doesn't ship them; the post-install script refreshes the desktop, MIME
|
||||
and icon caches, so no stale menu entry is left. The Snap is unaffected apart from its
|
||||
`common-id`: snapd names its menu entry after the snap.
|
||||
|
||||
Flatpak installed from a downloaded `.flatpak` bundle (no update feed): install the new bundle,
|
||||
launch it once (settings and autosaves are copied), then
|
||||
`flatpak uninstall --user ai.storyteller.solvecraft`.
|
||||
|
||||
**Removal:** keep the end-of-life refs in the Flatpak repository for at least six months after
|
||||
0.8.0 (until 2027-04) and at least two minor releases; removing them strands any install that
|
||||
hasn't run `flatpak update` since. The read-only filesystem grant and `legacy_flatpak_path` can go
|
||||
at the same time. `<replaces>`, `<provides>` and `X-Flatpak-RenamedFrom` are harmless and can stay.
|
||||
Tests: `flatpak_twin_maps_our_sandbox_data_to_the_old_app_id`,
|
||||
`first_launch_adopts_the_previous_release_settings`.
|
||||
|
||||
## macOS
|
||||
|
||||
Releases before 0.4 were installed as `SolveCraft.app`. To update, quit the app, drag
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ version bump and no patch release for every merge.
|
||||
Every release asset, binary, installer product name and package uses the SolidCraft name
|
||||
(`solidcraft-<version>-linux-<arch>.AppImage`, `SolidCraft-<version>-windows-x64.exe`,
|
||||
`solidcraft-cli` archives, …). The old name survives only in the shims listed in
|
||||
[compatibility.md](compatibility.md) (the Linux app ID, the legacy `.zsync` and `.flatpakrepo`
|
||||
[compatibility.md](compatibility.md) (the end-of-life Flatpak refs of the old Linux app ID, the legacy `.zsync` and `.flatpakrepo`
|
||||
copies, the deprecated old-name CLI alias); keep them until that document says they can go. Do not
|
||||
rewrite published assets, checksums, tags or historical release notes of earlier versions.
|
||||
|
||||
|
||||
Reference in new issue
Block a user