build-installed-update-worker.mjs 2.0 KB

1234567891011121314151617181920212223242526272829
  1. /** Internal builder child; requires its live parent's version-scoped packaging record and never publishes. */
  2. import { readFile, realpath } from 'node:fs/promises'
  3. import { dirname, join } from 'node:path'
  4. import { readInstalledUpdateRun } from './installed-update-qualification.ts'
  5. import { assertInstalledUpdateSigningClear } from './installed-update-packaging.ts'
  6. import { createInstalledUpdateBuilderConfig } from './installed-update-builder.ts'
  7. import { packagingOutputRedactor } from './packaging-run.mjs'
  8. try {
  9. const [manifest, version, ...extra] = process.argv.slice(2)
  10. if (!manifest || !version || extra.length !== 0) throw new Error('invalid worker arguments')
  11. const run = await readInstalledUpdateRun(manifest)
  12. const record = await realpath(process.env.DSH_DESKTOP_PACKAGING_RUN_DIR ?? '')
  13. if (dirname(record) !== await realpath(join(run.root, version, 'packaging'))) throw new Error('wrong packaging record directory')
  14. const metadata = JSON.parse(await readFile(join(record, 'run.json'), 'utf8'))
  15. if (metadata.mode !== 'operator-authorized-single-version' || metadata.id !== run.id
  16. || metadata.version !== version || metadata.pid !== process.ppid) throw new Error('worker is not owned by the authorized parent')
  17. await assertInstalledUpdateSigningClear()
  18. const config = await createInstalledUpdateBuilderConfig(manifest, version, process.env)
  19. const { build, Platform, Arch } = await import('electron-builder')
  20. await build({ projectDir: join(import.meta.dirname, '..'), config,
  21. targets: Platform.WINDOWS.createTarget(['nsis'], Arch.x64), publish: 'never' })
  22. } catch (error) {
  23. const redactor = packagingOutputRedactor(Object.entries(process.env)
  24. .filter(([name]) => /KEY|SECRET|TOKEN|PASSWORD/iu.test(name)).map(([, value]) => value ?? ''), text => process.stderr.write(text))
  25. redactor.write(Buffer.from(error instanceof Error ? `${error.stack ?? error.message}\n` : 'installed update: builder worker failed\n'))
  26. redactor.end()
  27. process.exitCode = 1
  28. }