diff --git a/.github/workflows/build_macos.yaml b/.github/workflows/build_macos.yaml index 7614a14596..bae435642a 100644 --- a/.github/workflows/build_macos.yaml +++ b/.github/workflows/build_macos.yaml @@ -109,6 +109,10 @@ jobs: with: python-version: "3.13" + # Install Quartz for DMG badges + # https://github.com/electron-userland/electron-builder/issues/9511#issuecomment-3774092888 + - run: sudo pip3 install pyobjc-framework-Quartz + - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6 with: node-version-file: .node-version diff --git a/electron-builder.ts b/electron-builder.ts index 9038882cce..ce9f3b800b 100644 --- a/electron-builder.ts +++ b/electron-builder.ts @@ -162,6 +162,9 @@ const config: Omit, "electronFuses"> & { mergeASARs: true, x64ArchFiles: "**/matrix-seshat/*.node", // hak already runs lipo }, + dmg: { + badgeIcon: "build/icon.icon", + }, win: { target: ["squirrel", "msi"], signtoolOptions: { diff --git a/package.json b/package.json index 6a1b4dad4a..a9969763d4 100644 --- a/package.json +++ b/package.json @@ -85,12 +85,12 @@ "@types/pacote": "^11.1.1", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", - "app-builder-lib": "26.4.0", + "app-builder-lib": "26.5.0", "chokidar": "^5.0.0", "detect-libc": "^2.0.0", "electron": "40.0.0", - "electron-builder": "26.4.0", - "electron-builder-squirrel-windows": "26.4.0", + "electron-builder": "26.5.0", + "electron-builder-squirrel-windows": "26.5.0", "electron-devtools-installer": "^4.0.0", "eslint": "^8.26.0", "eslint-config-google": "^0.14.0", diff --git a/patches/dmg-builder+26.5.0.patch b/patches/dmg-builder+26.5.0.patch new file mode 100644 index 0000000000..bd91dc2342 --- /dev/null +++ b/patches/dmg-builder+26.5.0.patch @@ -0,0 +1,29 @@ +diff --git a/node_modules/dmg-builder/out/dmgUtil.js b/node_modules/dmg-builder/out/dmgUtil.js +index acf576a..c306492 100644 +--- a/node_modules/dmg-builder/out/dmgUtil.js ++++ b/node_modules/dmg-builder/out/dmgUtil.js +@@ -99,7 +99,6 @@ async function customizeDmg({ appPath, artifactPath, volumeName, specification, + const settings = { + title: path.basename(volumePath), + icon: await packager.getResource(specification.icon), +- "badge-icon": await packager.getResource(specification.badgeIcon), + "icon-size": specification.iconSize, + "text-size": iconTextSize, + "compression-level": Number(process.env.ELECTRON_BUILDER_COMPRESSION_LEVEL || "9"), +@@ -114,6 +113,16 @@ async function customizeDmg({ appPath, artifactPath, volumeName, specification, + // hide_extension: c.hideExtension, + }))) || [], + }; ++ ++ if (specification.badgeIcon) { ++ let badgeIcon = await packager.getResource(specification.badgeIcon); ++ if (badgeIcon.toLowerCase().endsWith(".icon")) { ++ badgeIcon = await packager.generateIcnsFromIcon(badgeIcon) ++ } ++ settings["badge-icon"] = badgeIcon; ++ delete settings["icon"]; ++ } ++ + if (specification.backgroundColor != null || specification.background == null) { + settings["background-color"] = specification.backgroundColor || "#ffffff"; + const window = specification.window; diff --git a/yarn.lock b/yarn.lock index 8d2f5a70c4..c00278a128 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2454,10 +2454,10 @@ app-builder-bin@5.0.0-alpha.12: resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-5.0.0-alpha.12.tgz#2daf82f8badc698e0adcc95ba36af4ff0650dc80" integrity sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w== -app-builder-lib@26.4.0: - version "26.4.0" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-26.4.0.tgz#649b4a98b51a90141b73e4f12a74ac5bc0f2eff4" - integrity sha512-Uas6hNe99KzP3xPWxh5LGlH8kWIVjZixzmMJHNB9+6hPyDpjc7NQMkVgi16rQDdpCFy22ZU5sp8ow7tvjeMgYQ== +app-builder-lib@26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-26.5.0.tgz#a247414e8017f5b0785eba53f6d3b4f14fc0c496" + integrity sha512-iRRiJhM0uFMauDeIuv8ESHZSn+LESbdDEuHi7rKdeETjrvBObecXnWJx1f3vs3KtoGcd3hCk1zURKypyvZOtFQ== dependencies: "@develar/schema-utils" "~2.6.5" "@electron/asar" "3.4.1" @@ -2469,7 +2469,7 @@ app-builder-lib@26.4.0: "@malept/flatpak-bundler" "^0.4.0" "@types/fs-extra" "9.0.13" async-exit-hook "^2.0.1" - builder-util "26.3.4" + builder-util "26.4.1" builder-util-runtime "9.5.1" chromium-pickle-js "^0.2.0" ci-info "4.3.1" @@ -2477,7 +2477,7 @@ app-builder-lib@26.4.0: dotenv "^16.4.5" dotenv-expand "^11.0.6" ejs "^3.1.8" - electron-publish "26.3.4" + electron-publish "26.4.1" fs-extra "^10.1.0" hosted-git-info "^4.1.0" isbinaryfile "^5.0.0" @@ -2489,7 +2489,7 @@ app-builder-lib@26.4.0: plist "3.1.0" resedit "^1.7.0" semver "~7.7.3" - tar "^6.1.12" + tar "7.5.3" temp-file "^3.4.0" tiny-async-pool "1.3.0" which "^5.0.0" @@ -2745,10 +2745,10 @@ builder-util-runtime@9.5.1: debug "^4.3.4" sax "^1.2.4" -builder-util@26.3.4: - version "26.3.4" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-26.3.4.tgz#eb20e2e2895fe360360eddded5d8cf12ad2aad60" - integrity sha512-aRn88mYMktHxzdqDMF6Ayj0rKoX+ZogJ75Ck7RrIqbY/ad0HBvnS2xA4uHfzrGr5D2aLL3vU6OBEH4p0KMV2XQ== +builder-util@26.4.1: + version "26.4.1" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-26.4.1.tgz#22a311fa68c976aa00f39686872799370f688225" + integrity sha512-FlgH43XZ50w3UtS1RVGDWOz8v9qMXPC7upMtKMtBEnYdt1OVoS61NYhKm/4x+cIaWqJTXua0+VVPI+fSPGXNIw== dependencies: "7zip-bin" "~5.2.0" "@types/debug" "^4.1.6" @@ -3249,13 +3249,13 @@ dir-compare@^4.2.0: minimatch "^3.0.5" p-limit "^3.1.0 " -dmg-builder@26.4.0: - version "26.4.0" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-26.4.0.tgz#dc7edec167b06b1542804e6e4220d1bcaf952b71" - integrity sha512-ce4Ogns4VMeisIuCSK0C62umG0lFy012jd8LMZ6w/veHUeX4fqfDrGe+HTWALAEwK6JwKP+dhPvizhArSOsFbg== +dmg-builder@26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-26.5.0.tgz#e8c287f59f26c99a7760a29959f6fd1e4ce9d5de" + integrity sha512-AyOCzpS1TCxDkSWxAzpfw5l7jBX4C8jKCucmT/6y6/24H5VKSHpjcVJD0W8o5BrFi+skC7Z7+F4aNyHmvn4AAw== dependencies: - app-builder-lib "26.4.0" - builder-util "26.3.4" + app-builder-lib "26.5.0" + builder-util "26.4.1" fs-extra "^10.1.0" iconv-lite "^0.6.2" js-yaml "^4.1.0" @@ -3330,26 +3330,26 @@ ejs@^3.1.8: dependencies: jake "^10.8.5" -electron-builder-squirrel-windows@26.4.0: - version "26.4.0" - resolved "https://registry.yarnpkg.com/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.4.0.tgz#4327a349b0c0bdc0eaf4c7ca3a4b0cc40dbdddcb" - integrity sha512-7dvalY38xBzWNaoOJ4sqy2aGIEpl2S1gLPkkB0MHu1Hu5xKQ82il1mKSFlXs6fLpXUso/NmyjdHGlSHDRoG8/w== +electron-builder-squirrel-windows@26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.5.0.tgz#64b631c70342b4fec1498ed86623de9eae09a32c" + integrity sha512-pMXUzwHFIz3S6/jtzg4tB6LBqOM4buEChYCz73JGuV/cWoWhB4xTVVfFuXwrsu0uqhZw8zyhbpyWIEPTE76Dcg== dependencies: - app-builder-lib "26.4.0" - builder-util "26.3.4" + app-builder-lib "26.5.0" + builder-util "26.4.1" electron-winstaller "5.4.0" -electron-builder@26.4.0: - version "26.4.0" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-26.4.0.tgz#f9a8598f045ded4cbaf41efb7bb18a89619c5dd2" - integrity sha512-FCUqvdq2AULL+Db2SUGgjOYTbrgkPxZtCjqIZGnjH9p29pTWyesQqBIfvQBKa6ewqde87aWl49n/WyI/NyUBog== +electron-builder@26.5.0: + version "26.5.0" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-26.5.0.tgz#9f9ec6954fd80f0d9897ca2f67044ffd4c8dbd96" + integrity sha512-DHvMBUmDscyvI/JvcJ1ZjrPqikzANbnX83MxUX5Daaeu2I8c2SxFM8LyKEepEZr1uomV1sw7yrLtKhKAT82OdA== dependencies: - app-builder-lib "26.4.0" - builder-util "26.3.4" + app-builder-lib "26.5.0" + builder-util "26.4.1" builder-util-runtime "9.5.1" chalk "^4.1.2" ci-info "^4.2.0" - dmg-builder "26.4.0" + dmg-builder "26.5.0" fs-extra "^10.1.0" lazy-val "^1.0.5" simple-update-notifier "2.0.0" @@ -3362,13 +3362,13 @@ electron-devtools-installer@^4.0.0: dependencies: unzip-crx-3 "^0.2.0" -electron-publish@26.3.4: - version "26.3.4" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-26.3.4.tgz#ed05f1ccbb7ee1e53b4140d92735e26fa4bfefd7" - integrity sha512-5/ouDPb73SkKuay2EXisPG60LTFTMNHWo2WLrK5GDphnWK9UC+yzYrzVeydj078Yk4WUXi0+TaaZsNd6Zt5k/A== +electron-publish@26.4.1: + version "26.4.1" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-26.4.1.tgz#2a88b9321e8e93a5efe91433a4d08de8c76f749f" + integrity sha512-nByal9K5Ar3BNJUfCSglXltpKUhJqpwivNpKVHnkwxTET9LKl+NxoojpGF1dSXVFcoBKVm+OhsVa28ZsoshEPA== dependencies: "@types/fs-extra" "^9.0.11" - builder-util "26.3.4" + builder-util "26.4.1" builder-util-runtime "9.5.1" chalk "^4.1.2" form-data "^4.0.0" @@ -6834,7 +6834,18 @@ tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.0.tgz#7e3ea6d5ca31ba8e078b560f0d83ce9a14aa8be6" integrity sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== -tar@^6.0.5, tar@^6.1.12: +tar@7.5.3, tar@^7.0.0, tar@^7.4.3, tar@^7.5.2: + version "7.5.3" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.3.tgz#e1a41236e32446f75e63b720222112c4ffe5b3a1" + integrity sha512-ENg5JUHUm2rDD7IvKNFGzyElLXNjachNLp6RaGf4+JOgxXHkqA+gq81ZAMCUmtMtqBsoU62lcp6S27g1LCYGGQ== + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.1.0" + yallist "^5.0.0" + +tar@^6.0.5: version "6.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== @@ -6846,17 +6857,6 @@ tar@^6.0.5, tar@^6.1.12: mkdirp "^1.0.3" yallist "^4.0.0" -tar@^7.0.0, tar@^7.4.3, tar@^7.5.2: - version "7.5.3" - resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.3.tgz#e1a41236e32446f75e63b720222112c4ffe5b3a1" - integrity sha512-ENg5JUHUm2rDD7IvKNFGzyElLXNjachNLp6RaGf4+JOgxXHkqA+gq81ZAMCUmtMtqBsoU62lcp6S27g1LCYGGQ== - dependencies: - "@isaacs/fs-minipass" "^4.0.0" - chownr "^3.0.0" - minipass "^7.1.2" - minizlib "^3.1.0" - yallist "^5.0.0" - temp-file@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.4.0.tgz#766ea28911c683996c248ef1a20eea04d51652c7"