VISP Relay

Releases and updates

Ship a stable release that deploys app-host artifacts and verifies client packages.

Stable GitHub Releases are the production deployment interface. Publishing a non-draft, non-prerelease tag named vX.Y.Z runs the unified release workflow against that exact commit. One release deploys the API, portal, admin console, browser broadcaster, OBS Remote web app, and this documentation site; and attaches the OBS plugin packages to the same GitHub Release. Native store submission is currently disabled until its EAS release job is enabled.

Before tagging

Set the same X.Y.Z (no leading v) in:

  • apps/native/app.json
  • apps/native/package.json
  • every MARKETING_VERSION entry in the committed iOS project
  • apps/obs-plugin/buildspec.json
  • apps/obs-remote/app.json
  • apps/obs-remote/package.json

Tag a commit on main and publish the release. Draft and prerelease publications are ignored, and concurrent releases are serialized.

What the workflow does

  1. Runs the repository tests, type checks, and every production build first — a red check stops the release before anything deploys.
  2. Connects to the app host over an ephemeral Tailscale identity and runs the root-owned visp-release bootstrap with the tag and its 40-character commit SHA.
  3. Builds OBS Remote for web and retains the output as a workflow artifact.
  4. Builds, signs, and notarizes the OBS packages and attaches them with SHA256SUMS.txt — uploads use overwrite semantics, so rerunning a failed job is safe.

How the server update stays safe

The bootstrap verifies the tag and SHA, takes a host lock, refuses to run over tracked local changes, checks out the exact release, and then executes that release's own helper from /usr/local/libexec — so helper fixes take effect in the same release that ships them.

The helper installs frozen dependencies, migrates the database, and builds all six app-host artifacts before restarting anything. It validates the Caddy configuration before installing it, restarts visp-server and visp-web, reloads Caddy, and runs local smoke checks. An install, migration, or build failure therefore leaves the currently running services untouched.

Two rules follow from this design:

  • Migrations must stay backward-compatible; database rollback is manual.
  • A MediaMTX (relay) restart is never part of a release. Schedule relay upgrades in a maintenance window because they end active streams. API and portal restarts do not.

After the release

  • Portal and API healthy; the admin console shares the main login, permits an admin, and denies an ordinary user.
  • A deep browser-app route and OAuth return work at stream.visp-stream.com; WebRTC publishes through the relay.
  • OBS Remote signs in and receives live OBS state at remote.visp-stream.com.
  • Docs respond at docs.visp-stream.com: /docs, /api/search, /llms.txt, /llms-full.txt.
  • The GitHub Release carries all three OBS packages, the macOS package is notarized, and every file matches SHA256SUMS.txt.

OBS Remote native store distribution, native store promotion, OBS plugin installation on broadcaster machines, OTA updates, automatic database rollback, and relay restarts are intentionally outside the workflow. Operator-side prerequisites are documented in the repository's deploy/UPDATE.md.

On this page