-
Notifications
You must be signed in to change notification settings - Fork 9.7k
feat(tools-pack): cross-platform WebUI (no-Electron) packaging type #3509
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from 4 commits
Commits
Show all changes
48 commits
Select commit
Hold shift + click to select a range
37fdd13
docs(webui): design and implementation plan for the WebUI packaging type
SugarFatFree 04cd1d4
ci(webui): cross-platform WebUI build workflow with optional GitHub R…
SugarFatFree d3ecf15
feat(tools-pack): add cross-platform WebUI (no-Electron) packaging type
SugarFatFree 4112f46
fix(webui): make stop/status target the config-driven runtime and nor…
SugarFatFree f1a01a2
docs(webui): document config fields in the example, strip doc keys wh…
SugarFatFree 1ba8765
docs(webui): translate shipped resources and source comments to English
SugarFatFree a27f533
docs(webui): translate design and implementation plan specs to English
SugarFatFree 747aa0f
fix(webui): bracket IPv6 hosts in URLs and persist full config for ex…
SugarFatFree e23f8a1
fix(webui): make a repeated start idempotent instead of failing obscu…
SugarFatFree 6093d91
fix(webui): make Linux .desktop executable and stop hiding real IPC f…
SugarFatFree c605e5b
fix(webui): stop the STATUS probe from hiding real IPC failures
SugarFatFree 3c15c07
fix(webui): treat a url-less STATUS reply as a protocol error; publis…
SugarFatFree 017bc77
Merge upstream/main into pr/webui-packaging-type
SugarFatFree 2b8fa94
fix(webui): fail fast when an explicit --config path is missing
SugarFatFree c946ea2
refactor(webui): make WebUI a build-only lane fenced off from the rel…
SugarFatFree 81f6c06
fix(webui): restore the --app-version build flag on the webui CLI lane
SugarFatFree 075f446
Merge remote-tracking branch 'upstream/main' into pr/webui-packaging-…
SugarFatFree 5427252
fix(webui): invalidate the win version-family workspace-build alias w…
SugarFatFree 4cab7a7
Merge remote-tracking branch 'upstream/main' into pr/webui-packaging-…
SugarFatFree ec42493
Merge remote-tracking branch 'upstream/main' into pr/webui-packaging-…
SugarFatFree e2673ae
Merge remote-tracking branch 'upstream/main' into pr/webui-packaging-…
SugarFatFree 91636f9
Merge remote-tracking branch 'upstream/main' into pr/webui-packaging-…
SugarFatFree 265d414
Merge upstream/main into pr/webui-packaging-type
SugarFatFree 6b80103
fix(webui): normalize %k before cd in the Linux .desktop launcher
SugarFatFree 3b9fccf
fix(webui): URI-decode %k in the Linux .desktop launcher
SugarFatFree f15dd6e
fix(webui): normalize the file:// authority in the Linux .desktop lau…
SugarFatFree cd80ec4
fix(webui): match the file:// localhost authority case-insensitively
SugarFatFree dde0020
fix(webui): match the file:// URI scheme case-insensitively
SugarFatFree e88aab2
fix(webui): proxy /api to the daemon's real host when bound non-loopback
SugarFatFree 4e6ddd7
fix(webui): report the detached worker pid from `start --json`
SugarFatFree a6ccc96
Merge upstream/main into pr/webui-packaging-type
SugarFatFree 6b7c107
fix(webui): make launcher import side-effect-free and canonicalize re…
SugarFatFree c029cfe
fix(webui): pass the .desktop %k location as a positional arg, not in…
SugarFatFree 48560f0
fix(webui): enforce the absolute OD_DATA_DIR contract in resolveWebui…
SugarFatFree 5f58e71
fix(webui): fast-fail on signal-killed sidecar startup and bracket a …
SugarFatFree 503c359
fix(webui): advertise the real bound web port for --port 0 and namesp…
SugarFatFree ecefad9
Merge upstream/main into pr/webui-packaging-type
SugarFatFree a93720a
Merge upstream/main into pr/webui-packaging-type
SugarFatFree c2baa5e
Merge upstream/main into pr/webui-packaging-type
SugarFatFree 6769af1
Merge upstream/main into pr/webui-packaging-type
SugarFatFree a013263
fix(tools-pack): add required arch field to win-removal-plan test config
SugarFatFree 2ad8596
fix(packaged): correct IPv6 any-host launcher wiring and reject relat…
SugarFatFree f80c9fe
Merge upstream/main into pr/webui-packaging-type
SugarFatFree baa82e8
Merge remote-tracking branch 'upstream/main' into pr/webui-packaging-…
SugarFatFree eda06e0
Merge remote-tracking branch 'upstream/main' into pr/webui-packaging-…
SugarFatFree 32a5592
fix(tools-pack): set required arch on new win test fixtures after ups…
SugarFatFree 40ab3e0
fix(packaged): forward OD_WEB_PORT to daemon so split-port WebUI pass…
SugarFatFree 630f534
fix(packaged): reject negative daemonPort so only 0 means dynamic loo…
SugarFatFree File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,122 @@ | ||
| name: Build WebUI Packages | ||
|
|
||
| # Cross-platform "WebUI" packaging type: a terminal-launched, no-Electron | ||
| # distribution (daemon + web in server mode) driven by `tools-pack webui build`. | ||
| # Each matrix entry runs on its target OS so the bundled better-sqlite3 prebuild | ||
| # matches the runner platform/arch. Artifacts are uploaded per platform; this is | ||
| # the networked end-to-end packaging path that cannot run in the local sandbox. | ||
| on: | ||
| workflow_dispatch: | ||
| inputs: | ||
| release_tag: | ||
| description: "Publish the archives to a GitHub Release under this tag (e.g. webui-v0.8.0). GitHub Releases serve files as-is, so users download the .tar.gz / .zip directly instead of a zip-wrapped artifact. Leave empty to only upload workflow artifacts." | ||
| required: false | ||
| default: "" | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| build: | ||
| name: webui (${{ matrix.name }}) | ||
| runs-on: ${{ matrix.os }} | ||
| strategy: | ||
| fail-fast: false | ||
| matrix: | ||
| include: | ||
| - name: mac-arm64 | ||
| os: macos-14 | ||
| platform: mac | ||
| arch: arm64 | ||
| - name: mac-x64 | ||
| os: macos-15-intel | ||
| platform: mac | ||
| arch: x64 | ||
| - name: win-x64 | ||
| os: windows-latest | ||
| platform: win | ||
| arch: x64 | ||
| - name: linux-x64 | ||
| os: ubuntu-latest | ||
| platform: linux | ||
| arch: x64 | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@v6.0.2 | ||
|
|
||
| - name: Setup pnpm | ||
| uses: pnpm/action-setup@v5 | ||
| with: | ||
| version: 10.33.2 | ||
|
|
||
| - name: Setup Node.js | ||
| uses: actions/setup-node@v6 | ||
| with: | ||
| node-version: 24 | ||
|
|
||
| - name: Install dependencies | ||
| run: pnpm install --frozen-lockfile | ||
|
|
||
| - name: Build WebUI package | ||
| shell: bash | ||
| run: | | ||
| set -euo pipefail | ||
| pnpm exec tools-pack webui build \ | ||
| --platform "${{ matrix.platform }}" \ | ||
| --arch "${{ matrix.arch }}" \ | ||
| --dir "${{ runner.temp }}/tools-pack" \ | ||
| --json | tee "${{ runner.temp }}/webui-build-${{ matrix.name }}.json" | ||
|
|
||
| - name: Upload WebUI archive | ||
| uses: actions/upload-artifact@v7 | ||
| with: | ||
| name: open-design-webui-${{ matrix.name }} | ||
| path: ${{ runner.temp }}/tools-pack/**/open-design-webui-* | ||
| if-no-files-found: error | ||
|
|
||
| - name: Upload build log | ||
| if: always() | ||
| uses: actions/upload-artifact@v7 | ||
| with: | ||
| name: webui-build-log-${{ matrix.name }} | ||
| path: ${{ runner.temp }}/webui-build-${{ matrix.name }}.json | ||
| if-no-files-found: ignore | ||
|
|
||
| # Optional publish step. GitHub's upload-artifact always re-zips its payload, | ||
| # so a downloaded artifact is a zip wrapping our real .tar.gz/.zip. A GitHub | ||
| # Release serves uploaded files byte-for-byte, so users get the archive itself. | ||
| # Runs only when the dispatcher supplies a release_tag. | ||
| release: | ||
| name: publish release | ||
| needs: build | ||
| if: ${{ inputs.release_tag != '' }} | ||
| runs-on: ubuntu-latest | ||
| permissions: | ||
| contents: write | ||
| env: | ||
| GH_TOKEN: ${{ github.token }} | ||
| VERSION_TAG: ${{ inputs.release_tag }} | ||
| steps: | ||
| - name: Checkout | ||
| uses: actions/checkout@v6.0.2 | ||
|
|
||
| - name: Download all WebUI archives | ||
| uses: actions/download-artifact@v8 | ||
| with: | ||
| pattern: open-design-webui-* | ||
| path: dist | ||
| merge-multiple: true | ||
|
|
||
| - name: Publish archives to GitHub Release | ||
| run: | | ||
| set -euo pipefail | ||
| ls -lh dist | ||
| if gh release view "$VERSION_TAG" >/dev/null 2>&1; then | ||
| gh release upload "$VERSION_TAG" dist/* --clobber | ||
| else | ||
| gh release create "$VERSION_TAG" \ | ||
| --target "$GITHUB_SHA" \ | ||
| --title "Open Design WebUI $VERSION_TAG" \ | ||
| --notes "Cross-platform terminal-launched WebUI packages (no Electron). Linux ships a .tar.gz (preserves the launcher executable bit); macOS and Windows ship a .zip." \ | ||
| dist/* | ||
| fi | ||
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
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
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
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
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
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
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.