Enable isolated Capsule Local automatic update testing

This commit is contained in:
2026-09-12 22:18:16 -04:00
parent edefc74c1a
commit a767ee4514
12 changed files with 85 additions and 17 deletions

View File

@ -18,8 +18,13 @@ export function validateFeedUrl(value) {
}
/** Return a Windows build config; public releases fail closed without signing. */
export function createBuildConfig({ release = false, env = process.env } = {}) {
const url = release ? validateFeedUrl(env.CAPSULE_UPDATE_URL) : null
export function createBuildConfig({ release = false, testUpdates = false, bootstrap = false, env = process.env } = {}) {
if (release && testUpdates) throw new Error('Test updates cannot be combined with a public release.')
if (bootstrap && !testUpdates) throw new Error('Bootstrap requires test updates.')
const url = testUpdates ? validateFeedUrl(env.CAPSULE_TEST_UPDATE_URL) : release ? validateFeedUrl(env.CAPSULE_UPDATE_URL) : null
if (testUpdates && !new URL(url).pathname.endsWith('/capsule/testfeed/')) {
throw new Error('Test updates require a separate /capsule/testfeed/ URL.')
}
const publisher = env.CAPSULE_PUBLISHER_NAME?.trim()
if (release && !publisher) {
throw new Error('CAPSULE_PUBLISHER_NAME must match the signing certificate subject CN.')
@ -31,7 +36,7 @@ export function createBuildConfig({ release = false, env = process.env } = {}) {
appId: release ? APP_ID : `${APP_ID}.local`,
productName: release ? 'Capsule' : 'Capsule Local',
executableName: release ? 'Capsule' : 'Capsule Local',
directories: { output: release ? 'dist/release' : 'dist/local' },
directories: { output: release ? 'dist/release' : testUpdates ? bootstrap ? 'dist/test-bootstrap' : 'dist/test' : 'dist/local' },
files: ['out/**/*', 'package.json'],
asar: true,
npmRebuild: false,
@ -39,12 +44,13 @@ export function createBuildConfig({ release = false, env = process.env } = {}) {
extraMetadata: {
// Keep the release userData path compatible with the original dev app.
name: release ? 'capsule' : 'capsule-local',
capsuleUpdates: { enabled: release }
...(bootstrap ? { version: '0.1.0' } : {}),
capsuleUpdates: { enabled: release || testUpdates, testing: testUpdates }
},
artifactName: release ? 'Capsule-${version}-${arch}-Setup.${ext}' : 'Capsule-Local-${version}-${arch}-Setup.${ext}',
artifactName: release || testUpdates ? 'Capsule-${version}-${arch}-Setup.${ext}' : 'Capsule-Local-${version}-${arch}-Setup.${ext}',
win: {
target: [{ target: 'nsis', arch: ['x64'] }],
verifyUpdateCodeSignature: true,
verifyUpdateCodeSignature: !testUpdates,
signExecutable: release,
...(release ? { signtoolOptions: {
publisherName: publisher,
@ -60,6 +66,6 @@ export function createBuildConfig({ release = false, env = process.env } = {}) {
runAfterFinish: false,
shortcutName: release ? 'Capsule' : 'Capsule Local'
},
publish: release ? [{ provider: 'generic', url, channel: 'latest', useMultipleRangeRequest: false }] : null
publish: release || testUpdates ? [{ provider: 'generic', url, channel: 'latest', useMultipleRangeRequest: false }] : null
}
}