Skip to content

fix: generate stubExecutableExe and sign it #8959

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 35 commits into
base: master
Choose a base branch
from

Conversation

beyondkmp
Copy link
Collaborator

@beyondkmp beyondkmp commented Mar 14, 2025

fix #8952

Root Cause

when createExecutableStubForExe is executed, WriteZipToSetup writes information to the file, essentially creating a new file, which invalidates the original signature.
Image

https://github.com/Squirrel/Squirrel.Windows/blob/51f5e2cb01add79280a53d51e8d0cfa20f8c9f9f/src/Update/Program.cs#L633-L647

Image

How to fix
Apply a patch to the Squirrel Windows source code(Squirrel/Squirrel.Windows#1903). For the existing stub exe files, don't generate them anymore. Then, a new stub exe can be generated in Electron Builder and signed.

Copy link

changeset-bot bot commented Mar 14, 2025

🦋 Changeset detected

Latest commit: eb5d7b3

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 8 packages
Name Type
electron-builder-squirrel-windows Patch
app-builder-lib Patch
dmg-builder Patch
electron-builder Patch
electron-forge-maker-appimage Patch
electron-forge-maker-nsis-web Patch
electron-forge-maker-nsis Patch
electron-forge-maker-snap Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@beyondkmp beyondkmp marked this pull request as draft March 14, 2025 08:06
@beyondkmp beyondkmp marked this pull request as ready for review March 16, 2025 01:12
@beyondkmp beyondkmp requested a review from mmaietta March 16, 2025 01:47
@t3chguy
Copy link
Contributor

t3chguy commented Mar 17, 2025

Seems to fail to build at least for ARM64 package: https://github.com/element-hq/element-desktop/actions/runs/13895690921/job/38875908510?pr=2211 looks like my testing is insufficient, doesn't bring in the vendor dir - looks like patch-package doesn't support binary files ds300/patch-package#193

@t3chguy
Copy link
Contributor

t3chguy commented Mar 17, 2025

Looks like package.json files needs updating to include vendor dir

@t3chguy
Copy link
Contributor

t3chguy commented Mar 17, 2025

image

Looks like it works sans the package.json not including vendor in the package - good job @beyondkmp

I also checked that the number of signings remained the same

Copy link
Collaborator

@mmaietta mmaietta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding the vendor directory adds a few megabytes (quick maffs) to the repo, which is the antipattern from what electron-builder-binaries is supposed to be used for. IIRC though, the squirrel windows target/package must be installed separately and isn't part of the electron-builder dependency tree, right? In this case, I think it's safe to add the vendor files (albeit I'll still need to verify file origin). In general though, we should avoid adding vendor files directly to electron-builder unless absolutely necessary (which is the case with this fix)

@t3chguy
Copy link
Contributor

t3chguy commented Mar 17, 2025

the squirrel windows target/package must be installed separately and isn't part of the electron-builder dependency tree, right?

Yup, electron-builder-squirrel-windows https://www.npmjs.com/package/electron-builder-squirrel-windows is not a transitive dependency of electron-builder

@beyondkmp
Copy link
Collaborator Author

Looks like package.json files needs updating to include vendor dir

my bad. Added.

@beyondkmp
Copy link
Collaborator Author

These vendor files are copied from the GitHub Actions workflow at https://github.com/beyondkmp/Squirrel.Windows/actions/runs/13871759240/job/38819263248 and the other files(like 7zip,nuget) are copiled from https://github.com/electron/windows-installer/tree/main/vendor.

https://github.com/Squirrel/Squirrel.Windows/pull/1903/files
The code changes for Squirrel Windows are located here.

@mmaietta
Copy link
Collaborator

@beyondkmp new squirrel.windows in electron-builder-binaries with your patch applied can be found in this "compile" PR. (The CI/CD takes care of generating and committing the artifacts post-merge of the PR through Changesets GHA)
electron-userland/electron-builder-binaries#67

@mmaietta
Copy link
Collaborator

[email protected] using Squirrel 2.0.1 artifact has been released

beyondkmp added 2 commits May 29, 2025 08:20
… binaries

- Added logic to download and copy custom Squirrel binaries if the specified vendor directory is not accessible.
- Removed outdated vendor binaries and configuration files to streamline the package.
@beyondkmp beyondkmp marked this pull request as ready for review May 29, 2025 00:21
@beyondkmp beyondkmp requested a review from mmaietta May 29, 2025 00:21
@github-actions github-actions bot added the linux label May 29, 2025
@github-actions github-actions bot removed the linux label Jun 5, 2025
await fs.promises.cp(vendorDirectory, tmpVendorDirectory, { recursive: true })
if (customSquirrelBin && customSquirrelBin.length > 0) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure what this is checking for. Are you intending?
!isEmptyOrSpaces(customSquirrelBin) && await exists(customSquirrelBin)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There was a bit of ambiguity in the wording. What I meant is: if the user has specified a custom Squirrel, we should not overwrite it with our patched version.

@beyondkmp beyondkmp requested a review from mmaietta June 17, 2025 07:21
@beyondkmp beyondkmp requested a review from mmaietta June 22, 2025 01:30
const vendorDirectory = path.join(path.dirname(windowInstallerPackage), "vendor")

const squirrelBin = await getBinFromUrl(
"[email protected]",
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A special @ character in the path causes the failure.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Missing signature on Squirrel ExecutionStub
3 participants