Skip to content

Commit ef2a05f

Browse files
var-ggclaude
andcommitted
feat: add Microsoft Store MSIX build track
Stand up an MSIX packaging path for Microsoft Store distribution, parallel to the existing MSI/NSIS release pipeline. The Store re-signs MSIX packages on certification, so this channel can go live without waiting on SignPath/Authenticode code signing. - src-tauri/gen/windows/: tauri-windows-bundle config + AppxManifest template; Identity pinned to the Partner Center package identity (var-gg.gitwink), broadFileSystemAccess declared for cross-disk repo discovery. - .github/workflows/store.yml: separate, manually-triggered workflow building the x64+arm64 .msixbundle; independent toolchain and output dir, no collision with release.yml. - update/tray/commands: disable the in-app updater for MSIX installs since the Store owns updates, mirroring the existing Scoop handling. - pnpm-workspace.yaml: allow the skia-canvas build script (pulled in by tauri-windows-bundle via image-js). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 8b922a5 commit ef2a05f

16 files changed

Lines changed: 645 additions & 6 deletions

.github/workflows/store.yml

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Builds the Microsoft Store MSIX bundle via tauri-windows-bundle.
2+
#
3+
# Kept separate from release.yml on purpose: that workflow ships the
4+
# (SignPath/Authenticode-signed) MSI + NSIS installers to GitHub Releases;
5+
# this one produces the .msixbundle for manual upload to Partner Center,
6+
# which the Store re-signs. Different toolchain, different output dir
7+
# (src-tauri/target/msix/ vs src-tauri/target/release/bundle/) — no collision.
8+
#
9+
# Manual trigger only: a Store-submittable package needs the real Partner
10+
# Center identity filled into src-tauri/gen/windows/bundle.config.json and
11+
# AppxManifest.xml.template. Run this when a Store submission is due.
12+
name: MSIX (Microsoft Store)
13+
14+
on:
15+
workflow_dispatch:
16+
17+
permissions:
18+
contents: read
19+
20+
jobs:
21+
msix:
22+
name: Build MSIX bundle
23+
runs-on: windows-latest
24+
steps:
25+
- name: Checkout
26+
uses: actions/checkout@v4
27+
28+
- name: Install Node
29+
uses: actions/setup-node@v4
30+
with:
31+
node-version: 22
32+
33+
- name: Install pnpm
34+
uses: pnpm/action-setup@v4
35+
with:
36+
version: latest
37+
run_install: false
38+
39+
- name: Install Rust (stable, x64 + arm64)
40+
uses: dtolnay/rust-toolchain@stable
41+
with:
42+
targets: x86_64-pc-windows-msvc,aarch64-pc-windows-msvc
43+
44+
- name: Cache cargo workspace
45+
uses: Swatinem/rust-cache@v2
46+
with:
47+
workspaces: src-tauri
48+
49+
- name: Install frontend deps
50+
run: pnpm install --frozen-lockfile
51+
52+
# cargo build (the bundler's default runner) does not run Tauri's
53+
# beforeBuildCommand, so the frontend must be built into dist/
54+
# explicitly before the Rust binary is compiled and packed.
55+
- name: Build frontend
56+
run: pnpm build
57+
58+
- name: Install msixbundle-cli
59+
run: cargo install msixbundle-cli
60+
61+
- name: Build MSIX bundle (x64 + arm64)
62+
run: pnpm tauri:windows:build --arch x64,arm64 --runner pnpm --verbose
63+
64+
- name: Upload MSIX bundle
65+
uses: actions/upload-artifact@v4
66+
with:
67+
name: gitwink-msix
68+
path: src-tauri/target/msix/*.msixbundle
69+
if-no-files-found: error

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
"dev": "vite",
88
"build": "tsc && vite build",
99
"preview": "vite preview",
10-
"tauri": "tauri"
10+
"tauri": "tauri",
11+
"tauri:windows:build": "tauri-windows-bundle build"
1112
},
1213
"dependencies": {
1314
"@tauri-apps/api": "^2",
@@ -25,6 +26,7 @@
2526
"@types/react-dom": "^19.1.6",
2627
"@vitejs/plugin-react": "^4.6.0",
2728
"typescript": "~5.8.3",
28-
"vite": "^7.0.4"
29+
"vite": "^7.0.4",
30+
"@choochmeque/tauri-windows-bundle": "^0.1.18"
2931
}
3032
}

0 commit comments

Comments
 (0)