build-windows.mjs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #!/usr/bin/env node
  2. /* eslint-disable @typescript-eslint/prefer-nullish-coalescing */
  3. import { build as builder } from 'electron-builder'
  4. import * as vars from './vars.mjs'
  5. import { execSync } from 'child_process'
  6. const isTag = (process.env.GITHUB_REF || process.env.BUILD_SOURCEBRANCH || '').startsWith('refs/tags/')
  7. const keypair = process.env.SM_KEYPAIR_ALIAS
  8. process.env.ARCH = process.env.ARCH || process.arch
  9. console.log('Signing enabled:', !!keypair)
  10. builder({
  11. dir: true,
  12. win: ['nsis', 'zip'],
  13. arm64: process.env.ARCH === 'arm64',
  14. config: {
  15. extraMetadata: {
  16. version: vars.version,
  17. },
  18. publish: process.env.KEYGEN_TOKEN ? [
  19. vars.keygenConfig,
  20. {
  21. provider: 'github',
  22. channel: `latest-${process.env.ARCH}`,
  23. },
  24. ] : undefined,
  25. forceCodeSigning: !!keypair,
  26. win: {
  27. certificateSha1: process.env.SM_CODE_SIGNING_CERT_SHA1_HASH,
  28. publisherName: process.env.SM_PUBLISHER_NAME,
  29. signingHashAlgorithms: ['sha256'],
  30. sign: keypair ? async function (configuration) {
  31. console.log('Signing', configuration)
  32. if (configuration.path) {
  33. try {
  34. const out = execSync(
  35. `smctl sign --keypair-alias=${keypair} --input "${String(configuration.path)}"`
  36. )
  37. if (out.toString().includes('FAILED')) {
  38. throw new Error(out.toString())
  39. }
  40. console.log(out.toString())
  41. } catch (e) {
  42. console.error(`Failed to sign ${configuration.path}`)
  43. console.error(e)
  44. process.exit(1)
  45. }
  46. }
  47. } : undefined,
  48. },
  49. },
  50. publish: (process.env.KEYGEN_TOKEN && isTag) ? 'always' : 'never',
  51. }).catch(e => {
  52. console.error(e)
  53. process.exit(1)
  54. })