notarize-macos-disk-images.mjs 1.3 KB

123456789101112131415161718192021222324252627282930
  1. /** Notarize and qualify macOS disk images after electron-builder creates them. */
  2. import { notarize } from '@electron/notarize'
  3. import { rmSync } from 'node:fs'
  4. import { resolveMacOSNotarizationEnvironment } from './desktop-release-environment.mjs'
  5. import { verifyMacOSDiskImage } from './verify-macos-signature.mjs'
  6. /**
  7. * Submit one generated DMG to Apple, staple its ticket, and verify Gatekeeper acceptance.
  8. * @param {{ file: string }} artifact - Completed electron-builder artifact.
  9. * @param {NodeJS.ProcessEnv} env - Packaging environment.
  10. * @param {{ signingIdentity: string, teamId: string }} expected - Public release identity.
  11. * @param {(options: object) => Promise<void>} submit - Notary submission implementation.
  12. * @param {(path: string, expected: object) => void} verify - Disk-image qualification implementation.
  13. * @returns {Promise<void>}
  14. */
  15. export async function notarizeMacOSDiskImageArtifact(
  16. artifact,
  17. env,
  18. expected,
  19. submit = notarize,
  20. verify = verifyMacOSDiskImage,
  21. ) {
  22. if (!artifact.file.endsWith('.dmg')) return
  23. rmSync(`${artifact.file}.blockmap`, { force: true })
  24. const credentials = resolveMacOSNotarizationEnvironment(env)
  25. await submit({ appPath: artifact.file, ...credentials })
  26. verify(artifact.file, expected)
  27. process.stdout.write(`desktop macOS notarization: verified disk image ${artifact.file}\n`)
  28. }