Skip to content

Commit f276701

Browse files
committed
feat(ci): rebuild desktop and panel binaries with unified workflow
- Replace `stitch-setup` GUI binary with new `stitch-desktop` menu-bar/tray controller that runs the local panel without Docker - Add `stitch-panel` to release builds as a bundled process-runtime binary for the desktop app - Rename feature from `gui` to `desktop` and `panel`, with `desktop` depending on `panel` to share process types - Update `Cargo.toml` dependencies: remove egui/eframe/rfd, add tray-icon/tao for native menu-bar/tray support - Consolidate macOS app packaging to build universal binaries for stitch, stitch-panel, and stitch-desktop in one lipo pass - Add `.github/build-setup.yml` to build the panel frontend (web SPA) before cargo-dist runs, ensuring stitch-panel embeds real assets - Update `dist-workspace.toml` to enable both `panel` and `desktop` features and include stitch-panel in release binaries - Remove Lato font assets no longer used by the desktop tray UI - Update documentation: rename references from `stitch-setup` to `stitch-desktop`, clarify desktop app as menu-bar/tray controller with local panel in browser, add new `install-desktop.md` - Update skill documentation to reflect desktop app behavior: autostart registers OS login items, panel restores running bots on reboot - Expand `README.md` quick-start options to emphasize "Desktop app" vs "Server/Docker" distinction with feature descriptions
1 parent 01c7775 commit f276701

54 files changed

Lines changed: 4801 additions & 6020 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/skills/stitch/SKILL.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,10 @@ Layouts, in the order to check:
7171
(`https://stitch-panel.<tailnet>.ts.net`). See [Docker fleet](#docker-fleet).
7272
- **Docker fleet without panel**: bot containers only, driven with
7373
`docker compose`. See [Docker fleet](#docker-fleet).
74-
- **Desktop app** (`stitch-setup` — macOS `Stitch.app`, Windows
75-
`stitch-setup.exe`, Linux `stitch-setup`): GUI that supervises one bot in-window.
74+
- **Desktop app** (`stitch-desktop` — macOS `Stitch.app`, Windows
75+
`stitch-desktop.exe`, Linux `stitch-desktop`): menu-bar / tray controller that
76+
runs the local panel without Docker. Tray **Start at login** registers an OS
77+
login item (`--autostart`); the panel restores bots that were left running.
7678
- **Foreground / manual** or **local service**: `~/Stitch/` (or
7779
`/etc/stitch-bot/` on Linux systemd) with `stitch.toml` / key / env.
7880
- **AWS cloud** (ECS Fargate): operator-owned `deploy/aws` stack. See
@@ -82,9 +84,9 @@ Detect it: `docker ps --filter name=stitch-panel` (or image
8284
`textile-stitch-panel`) means the panel is installed. Bot containers show under
8385
`ghcr.io/textile-protocol/textile-stitch`. Local layouts: `stitch --version`,
8486
`systemctl status stitch`, `launchctl list | grep -i stitch`, or a running
85-
`stitch-setup`/`Stitch` process. Cloud: ECS service `<bot>-stitch`. Only if none
86-
of those exist is it genuinely not installed — then see
87-
[Not installed yet](#not-installed-yet).
87+
`stitch-desktop`/`Stitch` / `stitch-panel` process. Cloud: ECS service
88+
`<bot>-stitch`. Only if none of those exist is it genuinely not installed — then
89+
see [Not installed yet](#not-installed-yet).
8890

8991
## Golden rules — every operation
9092

@@ -287,7 +289,7 @@ Other paths only if the operator explicitly prefers them (do not offer these as
287289
the default install):
288290

289291
- **Desktop app** (no terminal): download the release for their OS and open Stitch
290-
— macOS `Stitch.dmg`, Windows `stitch-setup.exe`, Linux `stitch-setup`.
292+
— macOS `Stitch.dmg`, Windows `stitch-desktop.exe`, Linux `stitch-desktop`.
291293
- **Manual / CLI**: the per-OS guides under `docs/install-*.md`, or `stitch init`
292294
for a single foreground bot.
293295

.codex/skills/stitch/SKILL.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,10 @@ Layouts, in the order to check:
7272
(`https://stitch-panel.<tailnet>.ts.net`). See [Docker fleet](#docker-fleet).
7373
- **Docker fleet without panel**: bot containers only, driven with
7474
`docker compose`. See [Docker fleet](#docker-fleet).
75-
- **Desktop app** (`stitch-setup` — macOS `Stitch.app`, Windows
76-
`stitch-setup.exe`, Linux `stitch-setup`): GUI that supervises one bot in-window.
75+
- **Desktop app** (`stitch-desktop` — macOS `Stitch.app`, Windows
76+
`stitch-desktop.exe`, Linux `stitch-desktop`): menu-bar / tray controller that
77+
runs the local panel without Docker. Tray **Start at login** registers an OS
78+
login item (`--autostart`); the panel restores bots that were left running.
7779
- **Foreground / manual** or **local service**: `~/Stitch/` (or
7880
`/etc/stitch-bot/` on Linux systemd) with `stitch.toml` / key / env.
7981
- **AWS cloud** (ECS Fargate): operator-owned `deploy/aws` stack. See
@@ -83,9 +85,9 @@ Detect it: `docker ps --filter name=stitch-panel` (or image
8385
`textile-stitch-panel`) means the panel is installed. Bot containers show under
8486
`ghcr.io/textile-protocol/textile-stitch`. Local layouts: `stitch --version`,
8587
`systemctl status stitch`, `launchctl list | grep -i stitch`, or a running
86-
`stitch-setup`/`Stitch` process. Cloud: ECS service `<bot>-stitch`. Only if none
87-
of those exist is it genuinely not installed — then see
88-
[Not installed yet](#not-installed-yet).
88+
`stitch-desktop`/`Stitch` / `stitch-panel` process. Cloud: ECS service
89+
`<bot>-stitch`. Only if none of those exist is it genuinely not installed — then
90+
see [Not installed yet](#not-installed-yet).
8991

9092
## Golden rules — every operation
9193

@@ -288,7 +290,7 @@ Other paths only if the operator explicitly prefers them (do not offer these as
288290
the default install):
289291

290292
- **Desktop app** (no terminal): download the release for their OS and open Stitch
291-
— macOS `Stitch.dmg`, Windows `stitch-setup.exe`, Linux `stitch-setup`.
293+
— macOS `Stitch.dmg`, Windows `stitch-desktop.exe`, Linux `stitch-desktop`.
292294
- **Manual / CLI**: the per-OS guides under `docs/install-*.md`, or `stitch init`
293295
for a single foreground bot.
294296

.github/build-setup.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Injected into cargo-dist's build-local-artifacts job via
2+
# `github-build-setup` in dist-workspace.toml. Runs after checkout so
3+
# `stitch-panel` embeds the real panel SPA instead of the empty-placeholder page.
4+
- name: Setup Node
5+
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
6+
with:
7+
node-version: 22
8+
cache: npm
9+
cache-dependency-path: web/package-lock.json
10+
11+
- name: Build panel frontend
12+
working-directory: web
13+
shell: bash
14+
run: |
15+
set -euo pipefail
16+
npm ci --no-audit --no-fund
17+
npm run build

.github/workflows/ci.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,5 +72,7 @@ jobs:
7272
- name: Run panel tests
7373
run: cargo test --features panel
7474

75-
- name: Build the panel binary
76-
run: cargo build --release --features panel --bin stitch-panel
75+
- name: Build the panel and desktop binaries
76+
run: |
77+
cargo build --release --features panel,desktop \
78+
--bin stitch-panel --bin stitch-desktop

.github/workflows/macos-app.yml

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,19 +66,26 @@ jobs:
6666
[ -n "${MACOS_CERT_P12:-}" ] && echo "have_cert=true" >> "$GITHUB_OUTPUT" || echo "have_cert=false" >> "$GITHUB_OUTPUT"
6767
[ -n "${MACOS_NOTARY_API_KEY:-}" ] && echo "have_notary=true" >> "$GITHUB_OUTPUT" || echo "have_notary=false" >> "$GITHUB_OUTPUT"
6868
69+
- name: Build panel frontend
70+
working-directory: web
71+
run: |
72+
set -euo pipefail
73+
npm ci
74+
npm run build
75+
6976
- name: Build universal binaries
7077
run: |
7178
set -euo pipefail
7279
for target in aarch64-apple-darwin x86_64-apple-darwin; do
73-
cargo build --release --features gui --bin stitch --bin stitch-setup --target "$target"
80+
cargo build --release --features panel,desktop \
81+
--bin stitch --bin stitch-panel --bin stitch-desktop --target "$target"
7482
done
7583
mkdir -p target/universal
76-
lipo -create -output target/universal/stitch \
77-
target/aarch64-apple-darwin/release/stitch \
78-
target/x86_64-apple-darwin/release/stitch
79-
lipo -create -output target/universal/stitch-setup \
80-
target/aarch64-apple-darwin/release/stitch-setup \
81-
target/x86_64-apple-darwin/release/stitch-setup
84+
for bin in stitch stitch-panel stitch-desktop; do
85+
lipo -create -output "target/universal/$bin" \
86+
"target/aarch64-apple-darwin/release/$bin" \
87+
"target/x86_64-apple-darwin/release/$bin"
88+
done
8289
8390
- name: Import Developer ID signing certificate
8491
if: ${{ steps.signing.outputs.have_cert == 'true' }}
@@ -110,7 +117,8 @@ jobs:
110117
- name: Assemble Stitch.app
111118
# make-app.sh signs with $STITCH_CODESIGN_ID when set (Developer ID),
112119
# otherwise ad-hoc ("-").
113-
run: packaging/macos/make-app.sh target/universal/stitch-setup dist target/universal/stitch
120+
run: packaging/macos/make-app.sh target/universal/stitch-desktop dist \
121+
target/universal/stitch target/universal/stitch-panel
114122

115123
- name: Build Stitch.dmg
116124
# Wrap the (signed) app in a drag-to-Applications image. make-dmg.sh signs

.github/workflows/release.yml

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,19 @@ jobs:
163163
with:
164164
persist-credentials: false
165165
submodules: recursive
166+
- name: Setup Node
167+
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
168+
with:
169+
node-version: 22
170+
cache: npm
171+
cache-dependency-path: web/package-lock.json
172+
- name: Build panel frontend
173+
working-directory: web
174+
shell: bash
175+
run: |
176+
set -euo pipefail
177+
npm ci --no-audit --no-fund
178+
npm run build
166179
- name: Install Rust non-interactively if not already installed
167180
if: ${{ matrix.container }}
168181
run: |
@@ -209,8 +222,9 @@ jobs:
209222
# below (the aarch64-unknown-linux-gnu release target fails fetching the
210223
# GTK/X11 dev libs). Pin apt to IPv4. No-op on x86 (archive.ubuntu.com is
211224
# v4) and skipped on non-Linux where there's no apt.
212-
# NOTE: manual patch on a dist-autogenerated file — re-apply (or move to
213-
# `github-build-setup`) if release.yml is ever regenerated by cargo-dist.
225+
# NOTE: manual patch on a dist-autogenerated file — also covered by
226+
# `github-build-setup = "../build-setup.yml"` for the frontend steps above;
227+
# re-apply the IPv4 pin if release.yml is regenerated by cargo-dist.
214228
if: runner.os == 'Linux'
215229
run: echo 'Acquire::ForceIPv4 "true";' | sudo tee /etc/apt/apt.conf.d/99force-ipv4
216230
- name: Install dependencies

.textile-monorepo-source

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
bc2dfa5073baac15a7d3118db255e40b35deb358
1+
38fe58de50aa3994786d1e82bb4963d2af650009

.textile-stitch-release-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.1.125
1+
0.1.126

0 commit comments

Comments
 (0)