feat: Wave 2 — version About dialog, installer core, release image pipeline - #45
Merged
jmservera merged 4 commits intoJul 27, 2026
Merged
Conversation
- add Help > About dialog showing GET /control/version (FR-G3) - add POSIX install.sh local mode and .env.template (FR-D2/D3/E5/G4) - add release workflow pushing 8 images to ghcr on v* tags (FR-B1/B2/B3) 🚀 Part of #29 - Generated by Copilot
Contributor
There was a problem hiding this comment.
Pull request overview
Implements Wave 2 of the release/packaging plan by adding (1) a frontend About dialog that surfaces the running UbeROS version from the control plane, (2) an initial POSIX install.sh that bootstraps local deployments and generates .env from a template without clobbering existing configs, and (3) a GitHub Actions release workflow that builds and publishes service images to GHCR on v* tags.
Changes:
- Frontend: add
getVersion()and an About modal wired into the menubar, plus a Playwright acceptance spec. - Installer: introduce
install.shwith mode auto-detection and first-run.envgeneration from.env.template. - CI/CD: add
.github/workflows/release.ymlto build/push all service images on version tags.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/acceptance/s14-theme-g-about.spec.js | New Playwright acceptance test validating /control/version and About modal rendering. |
| services/frontend/src/lib/control.js | Adds getVersion() to fetch the running version from the control plane. |
| services/frontend/src/App.svelte | Adds an About button + modal showing the running version, primed on mount and refreshed on open. |
| install.sh | New POSIX installer scaffolding with mode detection, .env generation, and local mode compose build/up. |
| .github/workflows/release.yml | New tag-triggered workflow to build/push images to GHCR with version-based tagging. |
| .env.template | New installer template for .env, including workspace/version settings and other stack defaults. |
…ault - emit release.yml image tags as a multiline output for build-push-action - default UBEROS_WORKSPACE outside the checkout, resolved by install.sh - create the workspace src dir before compose bind-mounts it 🔧 - Generated by Copilot
🧭 - Generated by Copilot
- keep DEFAULT_WORKSPACE empty without HOME and fail with guidance - honor an exported UBEROS_WORKSPACE as the installer default - align s14 spec requirement IDs with PRD Theme G 🏠 - Generated by Copilot
jmservera
deleted the
release-packaging/wave-2-frontend-installer-release
branch
July 27, 2026 21:46
Contributor
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (1)
install.sh:108
- ensure_workspace() falls back to ./workspace when UBEROS_WORKSPACE is empty, which will create/modify a workspace inside the source checkout and undermine the repo-isolation goal. Instead, fail fast with guidance so users keep the workspace outside the repo.
ensure_workspace() {
workspace="$(env_value UBEROS_WORKSPACE)"
workspace="${workspace:-./workspace}"
# Compose resolves relative bind-mount paths against the project directory
Comment on lines
+90
to
+95
| cp "${ENV_TEMPLATE}" "${ENV_FILE}" | ||
| # The template ships UBEROS_WORKSPACE empty on purpose; resolve it to an | ||
| # external directory so the source checkout stays clean (FR-F1, BR-009). | ||
| sed "s|^UBEROS_WORKSPACE=\$|UBEROS_WORKSPACE=${DEFAULT_WORKSPACE}|" \ | ||
| "${ENV_FILE}" > "${ENV_FILE}.tmp" && mv "${ENV_FILE}.tmp" "${ENV_FILE}" | ||
| log "Generated .env from .env.template (workspace: ${DEFAULT_WORKSPACE})." |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Wave 2 of the PRD 004 release/packaging plan. Bundles the three independent Wave 2 slices (PR-5, PR-6, PR-10) into a single branch as requested. Builds on the already-merged Wave 1 foundation (version plumbing, OCI labels,
UBEROS_WORKSPACE).What changed
Frontend About/Version dialog (Theme G, FR-G3)
services/frontend/src/lib/control.js— newgetVersion()callingGET /control/version, falling back todev.services/frontend/src/App.svelte— an About menubar entry opening a modal that shows the running version (primed on mount, refreshed on open).tests/acceptance/s14-theme-g-about.spec.js— Playwright spec:/control/versionreturns a version, the About entry renders, and the modal shows the control-plane version.Installer core + local mode (Themes D/E/G, FR-D2, FR-D3, FR-E5, FR-G4)
install.sh— new POSIX-sh installer:--mode local|releasewith auto-detection (source checkout vs release bundle),--version,--help, unknown-flag handling, and.envgeneration that never clobbers an existing.env. Local mode runsdocker compose build && up -d. Release mode is a clear placeholder for the later installer stage (PR-13)..env.template— installer template mirroring.env.example, includingUBEROS_WORKSPACEandUBEROS_VERSION.Release image pipeline (Theme B, FR-B1, FR-B2, FR-B3)
.github/workflows/release.yml— onv*tags, matrix-builds all 8 service images forlinux/amd64and pushes them toghcr.io/jmservera/uberos/<service>:<version>, adding a moving:betatag for pre-releases. PassesUBEROS_VERSION(feeding the OCI labels from Wave 1) andNPM_REGISTRYbuild-args.Validation
docker compose build frontend— clean.s14-theme-g-about— 3/3 pass against the running stack.install.sh—sh -nclean, shellcheck clean,--version/--help/bad-flag behavior verified, auto-detect resolves tolocalon this checkout.actionlint(Docker image) onrelease.yml— clean.docker compose config --quiet— resolves.Related issues
Part of #29 (packaging / workspace isolation / installer). This PR adds the installer core and version transparency but does not fully close #29 — workspace provisioning + migration land in Wave 3 (PR-8), so no auto-close keyword is used.
Note
The release workflow depends on ghcr publish permissions and package-visibility automation (tracked as DR-03 in the planning log). Confirm
GITHUB_TOKENpackage-write perms and package visibility before pushing the first realv*tag.