|
1 | 1 | # Linux packaging |
2 | 2 |
|
3 | | -Linux is a first-class CodexHub surface on the same 0.1.9 train as Windows. |
| 3 | +Linux is a first-class CodexHub surface on the same release train as Windows. |
4 | 4 | Do not fork a `linux-main`. Rebase campaign work onto `main` and ship Linux |
5 | 5 | artifacts from the same tag. |
6 | 6 |
|
@@ -32,6 +32,29 @@ groups and capabilities before touching that user's launcher directory. |
32 | 32 | AppImage upgrades likewise rewrite one stable managed user launcher rather |
33 | 33 | than adding per-version entries. |
34 | 34 |
|
| 35 | +Portable builds register the same managed user launcher, pointing at the |
| 36 | +running executable (including paths containing spaces). Detection requires |
| 37 | +the archive's `CodexHub` executable name and adjacent |
| 38 | +`src-python/codex_proxy.py` and `config/providers.toml` resources; |
| 39 | +development and system binaries do not create portable launchers. GTK uses |
| 40 | +the configured application identifier so GNOME can associate Wayland windows |
| 41 | +with this launcher. Customized user launchers remain untouched. |
| 42 | +Development binaries also leave existing managed launchers untouched; runtime |
| 43 | +cleanup is restricted to the installed `/usr/bin/codexhub` target. |
| 44 | + |
| 45 | +Linux runtime icons refresh all supported hicolor sizes and use a content-hashed |
| 46 | +icon name in the managed launcher, preventing GNOME from reusing a cached |
| 47 | +older image. Normal windows use an RGBA surface, a rounded panel and a |
| 48 | +12-pixel transparent shadow inset; maximized/fullscreen windows omit the |
| 49 | +inset. Debian post-install migration recognizes this managed absolute icon |
| 50 | +format and archives the portable launcher before installing the package entry. |
| 51 | +Verify the packaged build on Wayland as well as X11. |
| 52 | + |
| 53 | +For the GNOME 50 menu-label initialization race and its separately applied, |
| 54 | +reversible desktop compatibility patch, see |
| 55 | +[GNOME support](../../support/gnome/README.md). Do not count reloading the |
| 56 | +indicator as a restart regression test. |
| 57 | + |
35 | 58 | Updater platform key: `linux-x86_64`. Add that platform to the existing |
36 | 59 | `latest.json` / `latest-debug.json` payload; do not invent a second product |
37 | 60 | channel. |
@@ -98,6 +121,22 @@ This host's accepted floors are the same numeric floors as Windows: Codex |
98 | 121 | Desktop `26.715.8383.0` (Debian package `chatgpt`) and ZCode `3.3.6`. |
99 | 122 | `open_codex_app` on Linux launches `/usr/bin/chatgpt` / `codex-launcher`. |
100 | 123 |
|
| 124 | +GNOME dock identity regression includes first launch followed by an upgrade |
| 125 | +between two distinct portable directories. The `linux_window` Rust tests load the |
| 126 | +resulting desktop entry through GIO and assert both the current executable and |
| 127 | +fingerprinted icon file. Run `cargo test --locked --manifest-path |
| 128 | +src-tauri/Cargo.toml linux_window`. A portable candidate must also pass |
| 129 | +`./scripts/codexhub-python.sh scripts/e2e_linux_dock_icon.py --bin <portable>/CodexHub`. |
| 130 | +This starts an isolated headless GNOME session with a populated stale icon cache, |
| 131 | +resolves the running window through Shell.WindowTracker, and verifies that its |
| 132 | +actual GIcon can load. The release builder runs this check before archiving, so |
| 133 | +both first launch and portable-directory upgrade must pass. It requires |
| 134 | +GNOME Shell, gdbus, gsettings, and gtk-update-icon-cache; missing dependencies |
| 135 | +must not be reported as a pass. Desktop acceptance additionally checks that |
| 136 | +the running window resolves to the CodexHub icon rather than the generic gear. |
| 137 | +Use isolated test directories; do not include real user paths, configuration, |
| 138 | +credentials, or unrelated desktop contents in shared evidence. |
| 139 | + |
101 | 140 | Windows CLI real-client E2E remains required for the Windows candidate. It is |
102 | 141 | not a substitute for the Linux CLI gate, and the Linux gate is not a substitute |
103 | 142 | for Windows. |
0 commit comments