Skip to content

Commit 5573947

Browse files
committed
feat: enhance Windows build process with MSIX and Squirrel packaging support
1 parent f996c49 commit 5573947

2 files changed

Lines changed: 69 additions & 2 deletions

File tree

.github/workflows/release-electron.yml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ jobs:
137137
Write-Host "Using Windows SDK version $selectedVersion for MSIX packaging"
138138
139139
- name: Build Electron distributables
140+
if: runner.os != 'Windows'
140141
env:
141142
STARQUERY_MAC_SIGN: ${{ runner.os == 'macOS' && env.APPLE_SIGN_CERTIFICATE_P12_BASE64 != '' && 'true' || 'false' }}
142143
STARQUERY_MAC_NOTARIZE: ${{ runner.os == 'macOS' && ((env.APPLE_NOTARY_API_KEY_P8_BASE64 != '' && env.APPLE_API_KEY_ID != '' && env.APPLE_API_ISSUER != '') || (env.APPLE_ID != '' && env.APPLE_APP_SPECIFIC_PASSWORD != '' && env.APPLE_TEAM_ID != '')) && 'true' || 'false' }}
@@ -160,6 +161,40 @@ jobs:
160161
WINDOWS_CERTIFICATE_PASSWORD: ${{ env.STARQUERY_WINDOWS_CERTIFICATE_PASSWORD }}
161162
run: pnpm --dir packages/electron make
162163

164+
- name: Package Electron app
165+
if: runner.os == 'Windows'
166+
run: pnpm --dir packages/electron exec electron-forge package
167+
168+
- name: Build Windows Squirrel distributable
169+
if: runner.os == 'Windows'
170+
env:
171+
STARQUERY_MSIX_PUBLISHER: ${{ vars.STARQUERY_MSIX_PUBLISHER }}
172+
STARQUERY_MSIX_PUBLISHER_DISPLAY_NAME: ${{ vars.STARQUERY_MSIX_PUBLISHER_DISPLAY_NAME }}
173+
STARQUERY_MSIX_IDENTITY_NAME: ${{ vars.STARQUERY_MSIX_IDENTITY_NAME }}
174+
STARQUERY_MSIX_PACKAGE_DISPLAY_NAME: ${{ vars.STARQUERY_MSIX_PACKAGE_DISPLAY_NAME }}
175+
STARQUERY_MSIX_APP_DISPLAY_NAME: ${{ vars.STARQUERY_MSIX_APP_DISPLAY_NAME }}
176+
STARQUERY_MSIX_BACKGROUND_COLOR: ${{ vars.STARQUERY_MSIX_BACKGROUND_COLOR }}
177+
STARQUERY_MSIX_MIN_OS_VERSION: ${{ vars.STARQUERY_MSIX_MIN_OS_VERSION }}
178+
STARQUERY_MSIX_MAX_OS_VERSION_TESTED: ${{ vars.STARQUERY_MSIX_MAX_OS_VERSION_TESTED }}
179+
STARQUERY_MSIX_SIGN: ${{ vars.STARQUERY_MSIX_SIGN }}
180+
WINDOWS_CERTIFICATE_PASSWORD: ${{ env.STARQUERY_WINDOWS_CERTIFICATE_PASSWORD }}
181+
run: pnpm --dir packages/electron exec electron-forge make --skip-package --targets=@electron-forge/maker-squirrel
182+
183+
- name: Build Windows MSIX distributable
184+
if: runner.os == 'Windows'
185+
env:
186+
STARQUERY_MSIX_PUBLISHER: ${{ vars.STARQUERY_MSIX_PUBLISHER }}
187+
STARQUERY_MSIX_PUBLISHER_DISPLAY_NAME: ${{ vars.STARQUERY_MSIX_PUBLISHER_DISPLAY_NAME }}
188+
STARQUERY_MSIX_IDENTITY_NAME: ${{ vars.STARQUERY_MSIX_IDENTITY_NAME }}
189+
STARQUERY_MSIX_PACKAGE_DISPLAY_NAME: ${{ vars.STARQUERY_MSIX_PACKAGE_DISPLAY_NAME }}
190+
STARQUERY_MSIX_APP_DISPLAY_NAME: ${{ vars.STARQUERY_MSIX_APP_DISPLAY_NAME }}
191+
STARQUERY_MSIX_BACKGROUND_COLOR: ${{ vars.STARQUERY_MSIX_BACKGROUND_COLOR }}
192+
STARQUERY_MSIX_MIN_OS_VERSION: ${{ vars.STARQUERY_MSIX_MIN_OS_VERSION }}
193+
STARQUERY_MSIX_MAX_OS_VERSION_TESTED: ${{ vars.STARQUERY_MSIX_MAX_OS_VERSION_TESTED }}
194+
STARQUERY_MSIX_SIGN: ${{ vars.STARQUERY_MSIX_SIGN }}
195+
WINDOWS_CERTIFICATE_PASSWORD: ${{ env.STARQUERY_WINDOWS_CERTIFICATE_PASSWORD }}
196+
run: pnpm --dir packages/electron exec electron-forge make --skip-package --targets=@electron-forge/maker-msix
197+
163198
- name: Upload workflow artifacts
164199
uses: actions/upload-artifact@v4
165200
with:

packages/electron/scripts/vendor-runtime-dependencies.cjs

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,38 @@ function copyPackageTree(sourceDir, targetDir) {
9696
});
9797
}
9898

99-
async function vendorRuntimeDependencies(buildPath) {
99+
function pruneVendoredPackage(packageName, targetPackageDir, targetPlatform, targetArch) {
100+
if (packageName !== 'oracledb') {
101+
return;
102+
}
103+
104+
const releaseDir = path.join(targetPackageDir, 'build', 'Release');
105+
if (!fs.existsSync(releaseDir)) {
106+
return;
107+
}
108+
109+
const expectedBinarySuffix = `-${targetPlatform}-${targetArch}.node`;
110+
const releaseEntries = fs.readdirSync(releaseDir);
111+
112+
for (const entryName of releaseEntries) {
113+
if (!entryName.startsWith('oracledb-')) {
114+
continue;
115+
}
116+
117+
const isNativeBinary = entryName.endsWith('.node');
118+
const isBuildInfo = entryName.endsWith('.node-buildinfo.txt');
119+
if (!isNativeBinary && !isBuildInfo) {
120+
continue;
121+
}
122+
123+
const matchesTarget = entryName.includes(expectedBinarySuffix);
124+
if (!matchesTarget) {
125+
fs.rmSync(path.join(releaseDir, entryName), { force: true });
126+
}
127+
}
128+
}
129+
130+
async function vendorRuntimeDependencies(buildPath, targetPlatform, targetArch) {
100131
const electronPackageJson = readJson(electronPackageJsonPath);
101132
const pending = [...collectDependencyNames(electronPackageJson)];
102133
const visited = new Set();
@@ -121,6 +152,7 @@ async function vendorRuntimeDependencies(buildPath) {
121152

122153
ensureDirectory(path.dirname(targetPackageDir));
123154
copyPackageTree(installedPackageDir, targetPackageDir);
155+
pruneVendoredPackage(packageName, targetPackageDir, targetPlatform, targetArch);
124156

125157
const installedPackageJson = readJson(installedPackageJsonPath);
126158
for (const dependencyName of collectDependencyNames(installedPackageJson)) {
@@ -133,7 +165,7 @@ async function vendorRuntimeDependencies(buildPath) {
133165

134166
module.exports = async function afterCopy(buildPath, electronVersion, platform, arch, callback) {
135167
try {
136-
await vendorRuntimeDependencies(buildPath);
168+
await vendorRuntimeDependencies(buildPath, platform, arch);
137169
callback();
138170
} catch (error) {
139171
callback(error);

0 commit comments

Comments
 (0)