Skip to content

Commit 96c5a42

Browse files
committed
docs: describe the per-arch Windows installers and CI artifacts
1 parent f115bef commit 96c5a42

3 files changed

Lines changed: 6 additions & 5 deletions

File tree

‎technical-documentation/engineering/build-and-packaging.md‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ OpenScreen builds its renderer, Electron main process, preload bridge, native he
1111
| `npm run build` | Runs TypeScript checking, Vite, then unrestricted `electron-builder`. This is the full generic packaging command, but it does not proactively build platform helpers. **On Windows, prefer `build:win`** — see [Stale native artifacts](#stale-native-artifacts). |
1212
| `npm run build:mac` | Builds the ScreenCaptureKit and cursor helpers, checks TypeScript, runs Vite, and packages the macOS target. |
1313
| `npm run build:win` | Builds WGC/cursor helpers and the D3D11 compositor addon, fetches FFmpeg, checks TypeScript, runs Vite, and packages the Windows NSIS target without npm rebuild. |
14+
| `npm run build:win:arm64` | The same for Windows on ARM, into `electron/native/bin/win32-arm64/`. It has to run on an ARM64 host: the FFmpeg and ONNX Runtime fetches provision for the host. |
1415
| `npm run build:win:store` | Performs the Windows native and renderer build, then asks electron-builder for the configured AppX Store package. |
1516
| `npm run build:linux` | Checks TypeScript, runs Vite, then packages AppImage, Debian, pacman, and RPM artifacts without npm rebuild. Its explicit `--linux` target list overrides `linux.target` in `electron-builder.json5`, so a target added to the config alone is never built. |
1617
| `npm run build:native:mac` | Uses SwiftPM to build requested single-architecture ScreenCaptureKit and macOS cursor helpers and stages them under `electron/native/bin/darwin-*`. |
@@ -99,7 +100,7 @@ The fix is to link the CRT statically, which removes the dependency instead of o
99100
- CMake helpers — `set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")` in `electron/native/wgc-capture/CMakeLists.txt`. These are standalone processes that share no CRT state with anything, so `/MT` costs about 100 KB each and nothing else.
100101
- Rust addon — `-C target-feature=+crt-static` in `crates/.cargo/config.toml`. Safe for the napi cdylib: only opaque `napi_value`s cross the boundary, and Buffers handed to Node carry a finalizer that frees, in the addon, what the addon allocated.
101102

102-
`scripts/before-pack.cjs` reads the import table of every `.exe`/`.dll`/`.node` in `electron/native/bin/win32-x64/` and refuses to package a binary that needs a redistributable DLL **the package does not ship**. The `api-ms-win-crt-*` api-sets are deliberately not flagged: that is the UCRT, which does ship with Windows 10 and later.
103+
`scripts/before-pack.cjs` reads the import table of every `.exe`/`.dll`/`.node` in every shipped `electron/native/bin/win32-*/` folder and refuses to package a binary that needs a redistributable DLL **the package does not ship**, or one built for another architecture than its folder. The `api-ms-win-crt-*` api-sets are deliberately not flagged: that is the UCRT, which does ship with Windows 10 and later.
103104

104105
#### `vcomp140.dll`: the member that got away
105106

@@ -285,7 +286,7 @@ Copies of the same three files also remain at their old `public/` paths, because
285286

286287
### Windows
287288

288-
The default electron-builder target is NSIS, with an assisted installer that allows users to change the installation directory. `npm run build:win:store` explicitly selects the configured `appx` target for Microsoft Store packaging. The AppX identity, publisher, capabilities, and Store languages come from `electron-builder.json5`. Release CI builds and retains both the NSIS installer and AppX package, although the GitHub release publisher currently downloads only the `openscreen-windows` NSIS artifact.
289+
The default electron-builder target is NSIS, with an assisted installer that allows users to change the installation directory. `npm run build:win:store` explicitly selects the configured `appx` target for Microsoft Store packaging. The AppX identity, publisher, capabilities, and Store languages come from `electron-builder.json5`. Release CI builds and retains both the NSIS installer and AppX package, although the GitHub release publisher currently downloads only the `openscreen-windows-x64` and `openscreen-windows-arm64` NSIS artifacts.
289290

290291
#### Store tile assets
291292

‎technical-documentation/engineering/ci-workflows.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ Jobs that need the root dependencies use `.github/actions/setup`, which requests
9898

9999
A `v*` tag or manual dispatch starts platform builds. Dispatch accepts `arch` (`arm64`, `x64`, or `both`) for macOS and an optional `release_tag` that enables publication.
100100

101-
- `build-windows` runs `npm run build:win` and uploads `openscreen-windows` for 30 days.
101+
- `build-windows` is an `x64`/`arm64` matrix, each on a runner of its own arch (`windows-latest`, `windows-11-arm`). It runs `npm run build:win` or `npm run build:win:arm64` and uploads `openscreen-windows-x64` or `openscreen-windows-arm64` for 30 days, with a JSON sidecar that `publish-release` folds into one `latest.yml` listing both installers.
102102
- `build-windows-store` runs `npm run build:win:store` and uploads `openscreen-windows-store` for 30 days.
103103
- `build-macos` is an `arm64`/`x64` matrix. It builds Vite/Electron and native helpers, packages and optionally signs the app, creates DMGs, notarizes every signed build including pre-releases, and uploads one artifact per architecture for 30 days.
104104
- `build-linux` produces AppImage, deb, pacman, and rpm files and uploads `openscreen-linux` for 30 days. It asserts one artifact per format before uploading, because `if-no-files-found: error` evaluates the union of the upload globs and so cannot catch a single format that stopped being produced. No zsync: it was electron-updater's older AppImage delta format, and app-builder-lib 26.x embeds a block map in the AppImage instead — which is what the in-app updater (`electron/auto-updater.ts`) reads for a differential download.

‎technical-documentation/testing/manual-e2e-checklist.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,12 @@ A release candidate is tested on what CI built, not on a dev build. The artifact
4949

5050
```bash
5151
gh run list -R getopenscreen/openscreen --workflow build.yml --branch <branch>
52-
gh run download <run-id> -R getopenscreen/openscreen -n openscreen-windows
52+
gh run download <run-id> -R getopenscreen/openscreen -n openscreen-windows-x64
5353
```
5454

5555
| Artifact | What it holds |
5656
|---|---|
57-
| `openscreen-windows` | `Openscreen.Setup.<version>.exe`, the NSIS installer, with its `.blockmap` and `latest.yml` |
57+
| `openscreen-windows-x64`, `openscreen-windows-arm64` | `Openscreen.Setup.<version>-x64.exe` or `Openscreen.Setup.<version>-arm64.exe`, the NSIS installer, with its `.blockmap` and the update-feed JSON |
5858
| `openscreen-windows-store` | `Openscreen.Setup.<version>.appx`, the Store package |
5959
| `openscreen-mac-arm64`, `openscreen-mac-x64` | `Openscreen-macOS-Apple-Silicon-<version>.dmg` or `Openscreen-macOS-Intel-<version>.dmg`, with the update ZIP and its JSON |
6060
| `openscreen-linux` | `Openscreen-Linux-<version>` as `.AppImage`, `.deb`, `.rpm` and `.pacman`, with `latest-linux.yml` |

0 commit comments

Comments
 (0)