import { mkdirSync, rmSync, symlinkSync } from 'node:fs'; import { dirname, join } from 'node:path'; export function createDiskImage({ app, archive, identity, run }) { const contents = join(dirname(archive), 'dmg-contents'); mkdirSync(contents); try { run('ditto', [app, join(contents, 'KanbanGit.app')]); symlinkSync('/Applications', join(contents, 'Applications')); run('hdiutil', [ 'create', '-volname', 'KanbanGit', '-srcfolder', contents, '-format', 'UDZO', archive, ]); run('codesign', ['--sign', identity, '--timestamp', archive]); run('hdiutil', ['verify', archive]); } finally { rmSync(contents, { recursive: true, force: true }); } }