Repository navigation
Conversation
|
Before merging: the |
|
@PathGao secret deleted successfully. is this the last merge before 2.7.7 is ready to cut? |
|
@alecdotdev Yes — this is the last one. Nothing else is open and But don't merge it yet. Deleting the token made the merge safe; it didn't get us signing. Merging today gives you an unsigned 2.7.7, and the whole reason this release was worth waiting for is that it would be the first signed one. The step left is yours, and it is a form: https://signpath.org/apply. The organization those four strings came from is the free trial, and a trial cannot have a trusted build system — which the open-source programme requires. You can't fix that from inside app.signpath.io; SignPath creates the Foundation organization themselves after they verify the project. On the form, Build System is GitHub and the repository is this one. Markpad qualifies — BSD-3-Clause, released, maintained, documented. Everything else is already written down for you:
When the Foundation organization exists, send me its four strings — organization id, project slug, signing policy slug, artifact configuration slug. I swap the three lines here, you add If the application drags on, tell me and we cut 2.7.7 unsigned instead. Nothing else in the release is waiting on this. |
|
@PathGao okay got it, i think the org is still under review then. ill update you when approved |
|
@alecdotdev have you got the sign? |
|
I may sign an apple developer today so probably our macos version will also be signed by me |
|
@PathGao no response yet. let me know if you do go through with the apple dev part and if theres any secrets id need to add |
done. next time when you release,macos version will be signed by apple. |
|
@alecdotdev on the SignPath wait: it has been at least nine days since you said the organization was under review, and Markpad still isn't on signpath.org/projects. SignPath publishes no review time for the Foundation programme — other projects report a few weeks — so this is not yet unusual, but it is worth a nudge. The review lives in their inbox, not here: mail support@signpath.io with the project name, the repository URL and the date you submitted the form, and ask where the application stands. That is faster than waiting for the form to answer on its own. |
0df8a58 to
dea9596
Compare
|
@PathGao good news,
new variables: project slug: can add the |
dea9596 to
153d327
Compare
|
@alecdotdev Rebased onto master (the conflict was #935 merging the two Windows upload steps) and swapped in the new org id, project slug Still needed from you:
Please don't merge or cut 2.7.7 on |
will keep you updated once they reach back out |
|
@alecdotdev Thanks. |
|
@PathGao added now |
|
@alecdotdev Dry run passed (run 38033533193, deleted afterwards). All four executables carry SignPath's test certificate, and the regenerated updater signatures verify against the signed installers and match |
|
@alecdotdev On timing: the next release goes out after I've reviewed #962, #963 and #964, and within a few days of SignPath issuing the production certificate. So this merges together with those, and that release is the first signed Windows build. |
|
@alecdotdev Did you tell SignPath the setup is ready, and have they replied? |
|
@PathGao sent them a confirmation oct 10th, still awaiting follow-up |
|
they replied: Thank you for the ping und update on your part. We’ll now review your signing setup and the signing requests you’ve submitted. As part of this, we’ll check that everything is configured correctly (for example origin verification, workflow setup, and policy usage). If everything looks good, we can proceed with releasing the production certificate to your organization in SignPath so you can use it in your regular release process. I’ll get back to you once the review is complete or if we need any clarification from your side. One important heads-up: just awaiting subseq followup now. |
|
Great!!!! |
|
How much is it going? |
|
@alecdotdev Any news from SignPath on the production certificate? I'm planning to release in the next couple of days. |
|
@PathGao haven't heard anything past the following since Oct 16th.
I'll ping here as soon as that changes. |
153d327 to
ad01b77
Compare
One signing request covers all four executables, so it lives in a job of its own rather than in the two Windows matrix entries. The matrix hands its build over as an artifact; nothing Windows reaches the release page until the request comes back approved. Authenticode rewrites the installer, so its `.sig` -- the minisign signature the updater checks -- is regenerated from the signed file before anything is uploaded. Without SIGNPATH_API_TOKEN the job uploads what the matrix built, unsigned, and the release notes keep saying so.
ad01b77 to
a0cb583
Compare
What this is
Windows Authenticode signing through SignPath Foundation, using the four strings @alecdotdev posted in #562. Ref #562, #334, #466, #722.
Mechanism
One signing request covers all four executables — SignPath signs the contents of one Actions artifact and an approver releases it by hand — but x64 and arm64 are two matrix entries, and each uploaded straight to the release page. So the signing is a job of its own: the matrix hands its build over as an artifact,
sign-windowscollects both, submits one request, and is the only place a Windows file reaches the release. An approval that never comes leaves the draft without Windows assets rather than with unsigned ones.Authenticode rewrites the installer's bytes, and
*-setup.exe.sigis a minisign signature over the pre-signing ones. Shipping that makes every Windows install reject its next update — the same defect the repacked AppImage had, fixed the same way: re-sign from the signed file, then letgenerate-update-feedread the signatures back off the release.Scope
Without
SIGNPATH_API_TOKENthe job uploads what the matrix built, unsigned, and the release notes keep the SmartScreen note — both keyed on that one secret, so a release cannot claim to be signed when it is not. Same shape as the macOS certificate, for the reason #294 was closed: a release must not be blocked on credentials nobody has configured yet.The four non-secret values are in the job rather than in secrets, and RELEASING.md gets a one-time setup step 8 saying so, plus what the SignPath side needs — the GitHub App, the trusted build system, the artifact configuration, an approver.
Not here: signing the copy of Markpad an NSIS installer unpacks. Nothing can reach inside an installer after it is built, so that would be a second build pass and a second approval, and what people report — SmartScreen on the download, the heuristic on the portable
.exe— is on the files this signs.Tests
Four in
scripts/releaseWorkflow.test.ts, all matching workflow text, which is what a workflow makes checkable: nogh release uploadof an.exein the matrix; one signing request per release over four collected executables; the.sigregenerated after the signed executables land and before the upload, withgenerate-update-feedwaiting on the job; and the upload not gated on the token while every SignPath step is. The existing "RELEASING.md names the signing secrets the workflow reads" now reads the new job too.Each was falsified: putting a release upload back in the matrix, asking for two files instead of four, moving the re-sign ahead of the signed copy, gating the upload on the token, dropping
sign-windowsfrom the feed'sneeds, and renaming the secret in RELEASING.md each turn exactly one of them red.Verification
macOS 26.6.2, Node 24.16.0.
0 vulnerabilities, 831 files / 0 errors, 1033 pass (was 1029), 434 pass.
Not verified: the release path itself.
build.ymlisworkflow_dispatchonly, so nothing here has run — the first proof is 2.7.7, and it is also the first time the SignPath side is exercised end to end.cargo testnot run; no Rust in the diff.🤖 Generated with Claude Code