Skip to content

Migrate to StartOS SDK 2.0.6 - #1

Merged
stupleb merged 2 commits into
masterfrom
migrate-sdk-2.0.6
Jul 20, 2026
Merged

Migrate to StartOS SDK 2.0.6#1
stupleb merged 2 commits into
masterfrom
migrate-sdk-2.0.6

Conversation

@stupleb

@stupleb stupleb commented Jul 20, 2026

Copy link
Copy Markdown
Owner

Migrates the package from SDK 1.5.3 to 2.0.6, and refreshes the vendored build file.

SDK port

Only one 2.0 breaking change reaches this package: SubContainer.of() is now lazy and synchronous, so the await is dropped at all three call sites. None of them read .rootfs/.guid/.subpath(), and .exec() is unchanged (it materializes internally), so the pg_isready ready-check is unaffected.

Checked rather than assumed, and confirmed unaffected: setupBackups/Backups.withPgDump (the 2.0 additions are additive only), multi-daemon requires ordering, checkPortListening, useEntrypoint, Mounts, MultiHost + createInterface, Action.withInput, and the FileHelper read().once() / read().const(effects) split.

Alongside: typescript^6.0.3, and tsconfig.json collapses onto the SDK's tsconfig.base.json (ES2022, module preserve, moduleResolution bundler).

Version

Stays at 2.20260626.0:0. The package has never been released — no tags, no GitHub releases — so there is no installed base to migrate and the "Initial release" notes remain accurate.

CI

Drops the Pin start-cli v0.4.0-beta.9 step from both workflows. It existed only because the package was SDK 1.5.3, and that CLI cannot pack a 2.0.x package — leaving it would have broken the release build. build.yml returns to the shared Start9 reusable workflow, which it was inlined away from solely to host that pin.

Also refreshes the vendored s9pk.mk from the 2.0.6 tarball. It is vendored per package, so the npm bump does not update it; the stale 1.5.3-era copy had no check-deps, no SDK lint gate, and an install target requiring a flat host:/registry: in ~/.startos/config.yaml. The lint gate it switches on passes clean here.

Verification

Build: tsc and SDK lint clean, ncc builds, both arches pack from a cleared tree, and the built manifests report sdkVersion 2.0.6 at 2.20260626.0:0.

Device-tested on StartOS (x86_64) — the package's first end-to-end run at any version:

  • Fresh install; all three daemons start and check_tables builds the schema
  • Video playback (the companion generates and validates a PO token against a live video)
  • Account creation
  • Configure Invidious action — toggles apply, .const() fires the reactive restart, the db volume persists
  • Backup and restore
  • All three generated secrets survive merge(), evidenced by an authenticated 200 GET /api/v1/auth/subscriptions after the action's restart: hmac_key (session cookie still validates), the db password (postgres skips re-init and keeps its original, so a regenerated one would fail auth), and invidious_companion_key (companion logs an identical secret_key)

🤖 Generated with Claude Code

stupleb and others added 2 commits July 18, 2026 21:25
Bump @start9labs/start-sdk 1.5.3 -> 2.0.6 and typescript -> 6.0.3, and
collapse tsconfig.json onto the SDK's tsconfig.base.json (ES2022, module
preserve, moduleResolution bundler).

Only one 2.0 breaking change reaches this package: SubContainer.of() is now
lazy and synchronous, so the await is dropped at all three call sites. None
of them read .rootfs/.guid/.subpath(), and .exec() is unchanged (it
materializes internally), so the pg_isready ready-check is unaffected.

Verified unaffected by 2.0, having checked rather than assumed: setupBackups
/ Backups.withPgDump (the 2.0 additions are additive only), multi-daemon
requires ordering, checkPortListening, useEntrypoint, Mounts, MultiHost +
createInterface, Action.withInput, and the FileHelper read().once() /
read().const(effects) split.

The packaging revision stays at 2.20260626.0:0 rather than bumping to :1.
The package has never been released -- no tags, no GitHub releases -- so
there is no installed base to migrate and the "Initial release" notes remain
accurate.

CI: drop the "Pin start-cli v0.4.0-beta.9" step from both workflows. It
existed only because the package was SDK 1.5.3, and that CLI cannot pack a
2.0.x package -- leaving it would have broken the release build. build.yml
returns to the shared Start9 reusable workflow, which it was inlined away
from solely to host that pin.

Also refresh the vendored s9pk.mk from the 2.0.6 tarball. It is vendored per
package, so the npm bump does not update it; the stale 1.5.3-era copy had no
check-deps or git/jq dependency checks, no SDK lint gate, and an install
target requiring a flat host:/registry: in ~/.startos/config.yaml, which
fails against this workspace's nested host config. The lint gate it switches
on passes clean here.

Verified: tsc and SDK lint clean, ncc builds, both arches pack from a clean
tree, and the built manifests report sdkVersion 2.0.6 at 2.20260626.0:0.
Not device-tested.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Fresh install on StartOS (SDK 2.0.6, x86_64) exercised playback, account
creation, the Configure Invidious action, the reactive restart, and
backup/restore. All passed.

Two findings worth keeping:

- The config.yml readability question is answered -- the invidious container
  reads it from the main volume without help, so no chown oneshot is needed.
  Dropped from the list.
- An authenticated 200 GET /api/v1/auth/subscriptions after the action's
  restart confirms all three generated secrets survive merge(): hmac_key (the
  session cookie still validates), the db password (postgres skips re-init and
  keeps its original, so a regenerated one would fail auth), and
  invidious_companion_key (the companion logs an identical secret_key).

Also document the benign log noise -- the eight check_tables "relation does
not exist" errors on first start, the InstanceListRefreshJob parse failures,
and the fact that the companion prints its secret_key at startup -- so none
of it gets re-diagnosed as a fault later.

Adds a note to consider runAsInit on the invidious and companion daemons;
both images use tini, which warns it cannot reap zombies when not PID 1.
Pre-existing, not a 2.0 regression, and it changes signal delivery, so it
needs its own device test.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@stupleb
stupleb merged commit e248811 into master Jul 20, 2026
3 checks passed
@stupleb
stupleb deleted the migrate-sdk-2.0.6 branch July 20, 2026 18:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant