Skip to content

feat: Wave 2 — version About dialog, installer core, release image pipeline - #45

Merged
jmservera merged 4 commits into
mainfrom
release-packaging/wave-2-frontend-installer-release
Jul 27, 2026
Merged

feat: Wave 2 — version About dialog, installer core, release image pipeline#45
jmservera merged 4 commits into
mainfrom
release-packaging/wave-2-frontend-installer-release

Conversation

@jmservera

Copy link
Copy Markdown
Owner

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 — new getVersion() calling GET /control/version, falling back to dev.
  • 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/version returns 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|release with auto-detection (source checkout vs release bundle), --version, --help, unknown-flag handling, and .env generation that never clobbers an existing .env. Local mode runs docker compose build && up -d. Release mode is a clear placeholder for the later installer stage (PR-13).
  • .env.template — installer template mirroring .env.example, including UBEROS_WORKSPACE and UBEROS_VERSION.

Release image pipeline (Theme B, FR-B1, FR-B2, FR-B3)

  • .github/workflows/release.yml — on v* tags, matrix-builds all 8 service images for linux/amd64 and pushes them to ghcr.io/jmservera/uberos/<service>:<version>, adding a moving :beta tag for pre-releases. Passes UBEROS_VERSION (feeding the OCI labels from Wave 1) and NPM_REGISTRY build-args.

Validation

  • docker compose build frontend — clean.
  • Playwright s14-theme-g-about — 3/3 pass against the running stack.
  • install.shsh -n clean, shellcheck clean, --version/--help/bad-flag behavior verified, auto-detect resolves to local on this checkout.
  • actionlint (Docker image) on release.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_TOKEN package-write perms and package visibility before pushing the first real v* tag.

- 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
Copilot AI review requested due to automatic review settings July 27, 2026 20:58

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.sh with mode auto-detection and first-run .env generation from .env.template.
  • CI/CD: add .github/workflows/release.yml to 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.

Comment thread .github/workflows/release.yml
Comment thread .env.template Outdated
…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
Copilot AI review requested due to automatic review settings July 27, 2026 21:21

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.

Comment thread install.sh
Copilot AI review requested due to automatic review settings July 27, 2026 21:36

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.

Comment thread install.sh Outdated
Comment thread tests/acceptance/s14-theme-g-about.spec.js Outdated
- 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
Copilot AI review requested due to automatic review settings July 27, 2026 21:45
@jmservera
jmservera merged commit 91a1c27 into main Jul 27, 2026
5 checks passed
@jmservera
jmservera deleted the release-packaging/wave-2-frontend-installer-release branch July 27, 2026 21:46

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 thread install.sh
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})."
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.

Solution Packaging: Improve Workspace Initialisation and Repository Isolation for a Better Developer Experience

2 participants