From 5aed80d42ac92e4e3eb2d9e2bd43b22c99404b7a Mon Sep 17 00:00:00 2001 From: Philip Peterson Date: Sun, 13 Apr 2025 11:11:20 -0700 Subject: [PATCH] Fix CI build (#98) --- .github/workflows/nodejs.yml | 14 ++-- bin/cp-snapshot.js | 32 ++++++++ electron-builder.json | 13 +--- package.json | 2 +- test/index.ts | 1 - yarn.lock | 144 +++++++++++++++++++---------------- 6 files changed, 123 insertions(+), 83 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index d15f63bc..41650550 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -16,7 +16,6 @@ jobs: os: - macos-latest - ubuntu-latest - - macos-latest #TODO re-enable these: #- windows-latest fail-fast: false @@ -77,14 +76,14 @@ jobs: APPLE_ID: ${{ secrets.APPLE_ID }} APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_PASSWORD }} - name: Archive Build Artifacts - uses: LabhanshAgrawal/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: + name: artifact-1-${{ runner.os }} path: | dist/*.dmg dist/*.snap dist/*.AppImage dist/*.deb - dist/*.rpm dist/*.pacman dist/*.exe - name: Run E2E Tests @@ -92,11 +91,13 @@ jobs: run: yarn run test:e2e --verbose - name: Run E2E Tests on Linux if: runner.os == 'Linux' - uses: GabrielBB/xvfb-action@v1.6 + uses: GabrielBB/xvfb-action@v1.7 with: - run: yarn run test:e2e + run: | + yarn run test:e2e env: SHELL: /bin/bash + DEBUG: "pw:browser*" - name: Archive E2E test screenshot uses: actions/upload-artifact@v4 with: @@ -185,8 +186,9 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Archive Build Artifacts - uses: LabhanshAgrawal/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: + name: artifact-4-${{ runner.os }}--${{ matrix.name }} path: | dist/*.snap dist/*.AppImage diff --git a/bin/cp-snapshot.js b/bin/cp-snapshot.js index a4e29392..3bcfc5dc 100644 --- a/bin/cp-snapshot.js +++ b/bin/cp-snapshot.js @@ -1,5 +1,6 @@ const path = require('path'); const fs = require('fs'); +const fsPromises = require('fs/promises'); const {Arch} = require('electron-builder'); function copySnapshot(pathToElectron, archToCopy) { @@ -42,6 +43,7 @@ exports.default = async (context) => { ? `${context.appOutDir}/Hyper.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources` : context.appOutDir; copySnapshot(pathToElectron, archToCopy); + useLoaderScriptFix(context); }; if (require.main === module) { @@ -51,3 +53,33 @@ if (require.main === module) { copySnapshot(pathToElectron, archToCopy); } } + + +// copied and modified from https://github.com/gergof/electron-builder-sandbox-fix/blob/master/lib/index.js +// copied and modified from https://github.com/Adamant-im/adamant-im/blob/7b20272a717833ffb0b49b034ab9974118fc59ec/scripts/electron/sandboxFix.js + +const useLoaderScriptFix = async (params) => { + if (params.electronPlatformName !== 'linux') { + // this fix is only required on linux + return + } + + const executable = path.join(params.appOutDir, params.packager.executableName) + + const loaderScript = `#!/usr/bin/env bash +set -u +SCRIPT_DIR="$( cd "$( dirname "\${BASH_SOURCE[0]}" )" && pwd )" +exec "$SCRIPT_DIR/${params.packager.executableName}.bin" "--no-sandbox" "$@" +` + + try { + await fsPromises.rename(executable, executable + '.bin') + await fsPromises.writeFile(executable, loaderScript) + await fsPromises.chmod(executable, 0o755) + } catch (e) { + console.error('failed to create loader for sandbox fix: ' + e.message) + throw new Error('Failed to create loader for sandbox fix') + } + + console.log('sandbox fix successfully applied') +} \ No newline at end of file diff --git a/electron-builder.json b/electron-builder.json index b01cab6e..dff5cb05 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -1,5 +1,4 @@ { - "$schema": "http://json.schemastore.org/electron-builder", "appId": "com.quinefoundation.hyper", "afterSign": "./bin/notarize.js", "afterPack": "./bin/cp-snapshot.js", @@ -23,7 +22,6 @@ "target": [ "deb", "AppImage", - "rpm", "snap", "pacman" ] @@ -36,7 +34,9 @@ "arm64" ] }, - "rfc3161TimeStampServer": "http://timestamp.comodoca.com" + "signtoolOptions": { + "timeStampServer": "http://timestamp.comodoca.com" + } }, "nsis": { "include": "build/win/installer.nsh", @@ -103,13 +103,6 @@ "compression": "bzip2", "afterInstall": "./build/linux/after-install.tpl" }, - "rpm": { - "afterInstall": "./build/linux/after-install.tpl", - "fpm": [ - "--rpm-rpmbuild-define", - "_build_id_links none" - ] - }, "snap": { "confinement": "classic", "publish": "github" diff --git a/package.json b/package.json index b0cfa8aa..0fb48c66 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "cpy-cli": "^5.0.0", "cross-env": "7.0.3", "electron": "28.3.3", - "electron-builder": "26.0.0-alpha.6", + "electron-builder": "26.0.13", "electron-link": "^0.6.0", "electron-mksnapshot": "^28.3.0", "electronmon": "^2.0.3", diff --git a/test/index.ts b/test/index.ts index 69792e87..4348591f 100644 --- a/test/index.ts +++ b/test/index.ts @@ -33,7 +33,6 @@ test.before(async () => { executablePath: pathToBinary }); await app.firstWindow(); - await new Promise((resolve) => setTimeout(resolve, 15000)); }); test.after(async () => { diff --git a/yarn.lock b/yarn.lock index 975c7a61..aac5b870 100644 --- a/yarn.lock +++ b/yarn.lock @@ -563,7 +563,16 @@ resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== -"@electron/asar@3.2.17", "@electron/asar@^3.2.7": +"@electron/asar@3.2.18": + version "3.2.18" + resolved "https://registry.npmjs.org/@electron/asar/-/asar-3.2.18.tgz#fa607f829209bab8b9e0ce6658d3fe81b2cba517" + integrity sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg== + dependencies: + commander "^5.0.0" + glob "^7.1.6" + minimatch "^3.0.4" + +"@electron/asar@^3.2.7": version "3.2.17" resolved "https://registry.npmjs.org/@electron/asar/-/asar-3.2.17.tgz#91d28087aad80d1a1c8cc4e667c6476edf50f949" integrity sha512-OcWImUI686w8LkghQj9R2ynZ2ME693Ek6L1SiaAgqGKzBaTIZw3fHDqN82Rcl+EU1Gm9EgkJ5KLIY/q5DCRbbA== @@ -632,10 +641,10 @@ minimist "^1.2.6" plist "^3.0.5" -"@electron/rebuild@3.7.0": - version "3.7.0" - resolved "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.0.tgz#82e20c467ddedbb295d7f641592c52e68c141e9f" - integrity sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw== +"@electron/rebuild@3.7.2": + version "3.7.2" + resolved "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.2.tgz#8d808b29159c50086d27a5dec72b40bf16b4b582" + integrity sha512-19/KbIR/DAxbsCkiaGMXIdPnMCJLkcf8AvGnduJtWBs/CBwiAjY1apCqOLVxrXg+rtXFCngbXhBanWjxLUt1Mg== dependencies: "@electron/node-gyp" "https://github.com/electron/node-gyp#06b29aafb7708acef8b3669835c8a7857ebc92d2" "@malept/cross-spawn-promise" "^2.0.0" @@ -1964,36 +1973,35 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" -app-builder-bin@5.0.0-alpha.11: - version "5.0.0-alpha.11" - resolved "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.11.tgz#2aa630fc8bbcb68a309e42ac0234818341c6ac2f" - integrity sha512-8qqHYEvddA9jvpO90XMNwgOYZPWBDI/5w9QHyMD68IhGY8RDO2apGfXcF6xmfZb1jXJLilvwGwsDyITQraQz8A== +app-builder-bin@5.0.0-alpha.12: + version "5.0.0-alpha.12" + resolved "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.12.tgz#2daf82f8badc698e0adcc95ba36af4ff0650dc80" + integrity sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w== -app-builder-lib@26.0.0-alpha.6: - version "26.0.0-alpha.6" - resolved "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.0.0-alpha.6.tgz#93fed112b79f03282c154e594d9bf609c323a20e" - integrity sha512-aIDVXdStmWPbG9Hi+H4JrDp7Lua4+ZjFRE9HxXWTNl17Ke/mRn1y3DvqVuwNd/CDlkINTlBez/zsGQJ1XnrXxA== +app-builder-lib@26.0.13: + version "26.0.13" + resolved "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.0.13.tgz#d70efc3107ff20944853419aabe34c3663d302f6" + integrity sha512-Iov4wX9dHRiI1rxRFk7k3X4QtltsTXN+8Kge7B5DO+pTjKxSNhJ1S+wjJAQM5VatxGxwX7HnxmHLt5PRI5AYSw== dependencies: "@develar/schema-utils" "~2.6.5" - "@electron/asar" "3.2.17" + "@electron/asar" "3.2.18" "@electron/fuses" "^1.8.0" "@electron/notarize" "2.5.0" "@electron/osx-sign" "1.3.1" - "@electron/rebuild" "3.7.0" + "@electron/rebuild" "3.7.2" "@electron/universal" "2.0.1" "@malept/flatpak-bundler" "^0.4.0" "@types/fs-extra" "9.0.13" async-exit-hook "^2.0.1" - bluebird-lst "^1.0.9" - builder-util "26.0.0-alpha.3" - builder-util-runtime "9.2.10" + builder-util "26.0.13" + builder-util-runtime "9.3.2" chromium-pickle-js "^0.2.0" config-file-ts "0.2.8-rc1" debug "^4.3.4" dotenv "^16.4.5" dotenv-expand "^11.0.6" ejs "^3.1.8" - electron-publish "26.0.0-alpha.4" + electron-publish "26.0.13" fs-extra "^10.1.0" hosted-git-info "^4.1.0" is-ci "^3.0.0" @@ -2002,10 +2010,12 @@ app-builder-lib@26.0.0-alpha.6: json5 "^2.2.3" lazy-val "^1.0.5" minimatch "^10.0.0" + plist "3.1.0" resedit "^1.7.0" semver "^7.3.8" tar "^6.1.12" temp-file "^3.4.0" + tiny-async-pool "1.3.0" "aproba@^1.0.3 || ^2.0.0": version "2.0.0" @@ -2354,18 +2364,6 @@ bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" -bluebird-lst@^1.0.9: - version "1.0.9" - resolved "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c" - integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw== - dependencies: - bluebird "^3.5.5" - -bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - blueimp-md5@^2.10.0: version "2.18.0" resolved "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.18.0.tgz#1152be1335f0c6b3911ed9e36db54f3e6ac52935" @@ -2426,26 +2424,25 @@ buffer@^5.1.0, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" -builder-util-runtime@9.2.10: - version "9.2.10" - resolved "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz#a0f7d9e214158402e78b74a745c8d9f870c604bc" - integrity sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw== +builder-util-runtime@9.3.2: + version "9.3.2" + resolved "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.3.2.tgz#2a69a239b50e26accf4ed4ea1730406a3117213c" + integrity sha512-7QDXJ1FwT6d9ZhG4kuObUUPY8/ENBS/Ky26O4hR5vbeoRGavgekS2Jxv+8sCn/v23aPGU2DXRWEeJuijN2ooYA== dependencies: debug "^4.3.4" sax "^1.2.4" -builder-util@26.0.0-alpha.3: - version "26.0.0-alpha.3" - resolved "https://registry.npmjs.org/builder-util/-/builder-util-26.0.0-alpha.3.tgz#3fa5a915dc1b8270c2aeb11c01b3eef769ebb9ff" - integrity sha512-OKG+aqX/1+zT+tBEdLN+EbI2cH+qc94CRyudb/Cg2oWA33d3TRUZBnUcjbod8iHw27Hbc5gyJT5V0p1QP0ApWQ== +builder-util@26.0.13: + version "26.0.13" + resolved "https://registry.npmjs.org/builder-util/-/builder-util-26.0.13.tgz#a2c11f8e89e5392719e540d610d70d8413943d74" + integrity sha512-6b64uHzywaL2KAG+rVcqk/Prta1m3I2Jo1d4d2CrApb6EeSk2V384tmSL0EniH+P8jaNbMp6qhg7cIALw32zRA== dependencies: "7zip-bin" "~5.2.0" "@types/debug" "^4.1.6" - app-builder-bin "5.0.0-alpha.11" - bluebird-lst "^1.0.9" - builder-util-runtime "9.2.10" + app-builder-bin "5.0.0-alpha.12" + builder-util-runtime "9.3.2" chalk "^4.1.2" - cross-spawn "^7.0.3" + cross-spawn "^7.0.6" debug "^4.3.4" fs-extra "^10.1.0" http-proxy-agent "^7.0.0" @@ -2456,6 +2453,7 @@ builder-util@26.0.0-alpha.3: source-map-support "^0.5.19" stat-mode "^1.0.0" temp-file "^3.4.0" + tiny-async-pool "1.3.0" cacache@^16.1.0: version "16.1.3" @@ -3038,6 +3036,15 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + css-in-js-utils@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz#640ae6a33646d401fc720c54fc61c42cd76ae2bb" @@ -3301,14 +3308,14 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dmg-builder@26.0.0-alpha.6: - version "26.0.0-alpha.6" - resolved "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.0.0-alpha.6.tgz#8a32ef4a431921eabbea1e96bca63f814ef0aae9" - integrity sha512-kT3XXIf9zkG/n0MRqW6n0BIl7R9ftEQzyFdCxWUuLFPyoFi5vKYX1uShbIjPFX/E0+s2nMqoNtEM3KDRt7aQNg== +dmg-builder@26.0.13: + version "26.0.13" + resolved "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.0.13.tgz#c5dc2db3b23e278ce146e68b45523b3f5f1780c9" + integrity sha512-OBa6xbQwFAm6gbbClkuGrxnOLbrPauv3yaugnGtIHsn7BvFSmMhZzhmcJQMrAGzDW2M3n/RmG/5mgOYUagqoeg== dependencies: - app-builder-lib "26.0.0-alpha.6" - builder-util "26.0.0-alpha.3" - builder-util-runtime "9.2.10" + app-builder-lib "26.0.13" + builder-util "26.0.13" + builder-util-runtime "9.3.2" fs-extra "^10.1.0" iconv-lite "^0.6.2" js-yaml "^4.1.0" @@ -3374,16 +3381,16 @@ ejs@^3.1.8: dependencies: jake "^10.8.5" -electron-builder@26.0.0-alpha.6: - version "26.0.0-alpha.6" - resolved "https://registry.npmjs.org/electron-builder/-/electron-builder-26.0.0-alpha.6.tgz#42fafe2efaa82d520f110691357e7e306367ad3f" - integrity sha512-Uf4UlZpc+q2e7lYq44/NRY0IH2QsnbjnSpsZcuaKMeiqJrZe0U7Uwa5leHK2tZ3eqwHLCJSvDYKuQGbeFDY9pg== +electron-builder@26.0.13: + version "26.0.13" + resolved "https://registry.npmjs.org/electron-builder/-/electron-builder-26.0.13.tgz#7ae15b8a61e428f436cae61831dfd28f6d977540" + integrity sha512-DbTHV16W03TcGImDXeFulmCGIaFIh4nyXTLm5CE3ml47R54AaAlEWI+Jj1/kMsK2rproHw3eoR4l/3P7hlJ0fA== dependencies: - app-builder-lib "26.0.0-alpha.6" - builder-util "26.0.0-alpha.3" - builder-util-runtime "9.2.10" + app-builder-lib "26.0.13" + builder-util "26.0.13" + builder-util-runtime "9.3.2" chalk "^4.1.2" - dmg-builder "26.0.0-alpha.6" + dmg-builder "26.0.13" fs-extra "^10.1.0" is-ci "^3.0.0" lazy-val "^1.0.5" @@ -3415,14 +3422,14 @@ electron-mksnapshot@^28.3.0: fs-extra "^7.0.1" temp "^0.8.3" -electron-publish@26.0.0-alpha.4: - version "26.0.0-alpha.4" - resolved "https://registry.npmjs.org/electron-publish/-/electron-publish-26.0.0-alpha.4.tgz#7c7bf8ab6134b74a616adde7024337baf79fc37a" - integrity sha512-bl2QOjC4Sp/qaDmxSY8PD3tiO8XSLzXgYvfX9L5tFaQ5LnX3NEA/6PMw4zssw/cY60STqIPle0rZ4dpTz8YJXA== +electron-publish@26.0.13: + version "26.0.13" + resolved "https://registry.npmjs.org/electron-publish/-/electron-publish-26.0.13.tgz#04340520e6e9de5262fecfa011658cfcc3fc8917" + integrity sha512-O5hfHSwli5cegQ4JS3Dp0dZcheex6UCRE/qYyRQvhB6DhSwojiwTnAGEuQCJXc8K8Zxz2lku5Du3VwYHf8d5Lw== dependencies: "@types/fs-extra" "^9.0.11" - builder-util "26.0.0-alpha.3" - builder-util-runtime "9.2.10" + builder-util "26.0.13" + builder-util-runtime "9.3.2" chalk "^4.1.2" form-data "^4.0.0" fs-extra "^10.1.0" @@ -7831,7 +7838,7 @@ semver@7.6.3, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== -semver@^5.6.0: +semver@^5.5.0, semver@^5.6.0: version "5.7.2" resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== @@ -8534,6 +8541,13 @@ time-zone@^1.0.0: resolved "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" integrity sha1-mcW/VZWJZq9tBtg73zgA3IL67F0= +tiny-async-pool@1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz#c013e1b369095e7005db5595f95e646cca6ef8a5" + integrity sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA== + dependencies: + semver "^5.5.0" + tiny-inflate@^1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4"