Updates: Frame Studio and Frame Home update themselves from GitHub

CI stamps every Studio build with its commit (FRAME_BUILD) and the
release gets latest.json: the commit, Frame Home's identity (a hash of
the headset programs in frame/payload) and the files in the release.

Frame Studio (studio/updater.h): checks a few seconds after start and
every 6 hours (Help > Check for Updates any time). A newer build shows
"Update Available" in the top bar; Download and Install fetches this
computer's build with the system's curl, unpacks it with tar, and swaps
each item in (the old one renamed aside first, so the running copy
keeps working and a failure rolls everything back). Restart Now closes
through the normal unsaved-changes prompt, then starts the new copy;
the next start deletes what was set aside. Local builds never update.
New platform calls: systemTool (System32's curl/tar on Windows) and
launch.

Frame Home (src/switcher.cpp): on the Steam Frame the Environments
panel checks a minute after it starts and every 6 hours. When the
installed programs' hash isn't the release's, "Update Frame Home"
shows beside Restart Frame Home; it downloads FrameHome-installer.zip
and runs its install.sh in its own session (which restarts Frame Home
and the panel), and the new panel says "Frame Home is updated". Also
frame-switcher --check-update / --update from a terminal.
frame/payload: frame-switcher rebuilt on the Steam Frame with this.

Tested: Studio's full cycle (check, download, unpack, swap, relaunch,
cleanup) and its rollback against a local fake release on Windows; the
headset's check and update against a fake release on the Frame (old
panel and Frame Home replaced, then up to date); Linux compile of
Studio; Studio --selftest unchanged (98 passed, same 6 known fails).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ToastconcernandClaude Opus 5.5 committed 2026-10-23 11:40:23 -05:00
1 parent 39c8424391
commit fedadd5ae3
12 files changed
+590 -3

No files matched your search

+10
View File
@@ -180,6 +180,16 @@ The **Headset** tab (or the **Headset** menu):
(show only the selection) and **Show Everything**.
- **Edit > Menu Search...** (F3): find any command by typing part of its name.
## Updates
Studio checks GitHub for a newer **Latest build** a few seconds after it starts and every 6 hours after that. When
there is one, an orange **Update Available** button shows in the top bar. Click it, then **Download and Install**:
Studio downloads the build for your computer and puts it in place of the copy you're running. **Restart Now** opens
the new one (it asks about unsaved changes first). **Help > Check for Updates...** checks right away.
If Studio's folder can't be written to (Program Files, for example), nothing is changed and the window offers the
download page instead. A copy you built yourself doesn't update itself.
## Keyboard shortcuts
| Key | Does | Key | Does |
+10
View File
@@ -47,8 +47,18 @@ Over SSH (`ssh frame`) you can do the same with the panel's program:
~/frame-home/bin/frame-switcher --list # the environments; the current one is marked with *
~/frame-home/bin/frame-switcher --set 3 # switch, by number from --list or by file name
~/frame-home/bin/frame-switcher --delete NAME # delete one, like the panel's delete button
~/frame-home/bin/frame-switcher --check-update # is there a newer Frame Home on GitHub?
~/frame-home/bin/frame-switcher --update # download and install it now
```
### Updates
The panel checks GitHub for a newer Frame Home a minute after it starts and every 6 hours after that. When there is
one, **Update Frame Home** shows at the top of the panel, beside **Restart Frame Home**. Click it: the headset
downloads the new version and installs it, and Frame Home and the panel restart a few seconds later with
"Frame Home is updated". Your environments and settings stay as they are. If it can't finish, the panel says why;
`~/frame-home/logs/update.log` has the details.
## Adding environments
Every environment lives in `~/frame-home/envs` on the headset. Ways to put one there: