Skip to content

github CI: actually sign files in scons source so that scons launcher doesn't do it, causing uploaded symbols to mismatch#20129

Merged
seanbudd merged 19 commits into
masterfrom
i20033_2
May 19, 2026
Merged

github CI: actually sign files in scons source so that scons launcher doesn't do it, causing uploaded symbols to mismatch#20129
seanbudd merged 19 commits into
masterfrom
i20033_2

Conversation

@michaelDCurran

@michaelDCurran michaelDCurran commented May 14, 2026

Copy link
Copy Markdown
Member

Link to issue number:

Fixes #20033
Replaces pr #20084

Summary of the issue:

The debug symbols archived from builds of NvDA do not match the actual files in the final NVDA launcher, if files are required to be signed.
This is due to the fact that the API signing key was never set in the CI environment when building NVDA with scons source, although it was present when running scons launcher. NVDA would be initially built without signed files, and these files would be collected for the symbols, but then as the launcher was being created, the files would be retroactively signed.
Also if trying to run CI instructing SCons to use multiple cores to speed up builds, some of the files may have been signed after the launcher was created, thus leaving them as the old unsigned copies.
Signing with signpath takes a very long time, and can add up to 10 minutes for a build when using a single core.
Thus signing properly in scons source would address the incorrect symbols and allow for building using multiple cores.

Description of user facing changes:

Description of developer facing changes:

Description of development approach:

  • Set the API signing token in the environment for the set scons args step in the Build NVDA job. this mirrors what is already done for the Create Launcher job.
  • In the Create Launcher job, Split the powershell commands to install signpath out of the Create launcher step and into its own Install Signpath step.
  • Add an Install Signpath step to the Build NVDA job, mirroring the step in the Create launcher job.
  • In the Create launcher job, split out the building of the NVDA controller client from the Create Launcher step into its own Create NVDA controller client step.
  • Remove the sconsCores variable from the scons launcher command in the Create Launcher step, meaning that scons launcher will always run with only one core, no matter what sconsCores is set to. It is very important that scons launcher never run with multiple cores, as if it ever has any dependencies, they must be build before the NSIS launcher builds.
  • change the sconsCores variable to be --all-cores meaning that scons source, scons user_docs, scons client etc (but not scons launcher) will now run using all available cores). The biggest advantage here is signing files in scons source which dramatically decreases time as files can be signed in parallel to further source building.

Testing strategy:

  • Build locally with and without signing info. Ensure builds succeeed. For a build with signing info, ensure each of the dlls and exes are really signed.
  • Make a try build and verify that dlls and exes are correctly signed.
  • Check try build log Build NVDA job to ensure that dlls are copied and signed.
  • Check try build log Create Launcher job to ensure that dlls are no longer copied and signed.

Known issues with pull request:

If we see any issue with running with multiple cores, we should change --all-cores back to -j1, as that change is not technically required to solve #20033, but was the main blocker for why we stopped using multiple cores in the firstplace.

Code Review Checklist:

  • Documentation:
    • Change log entry
    • User Documentation
    • Developer / Technical Documentation
    • Context sensitive help for GUI changes
  • Testing:
    • Unit tests
    • System (end to end) tests
    • Manual testing
  • UX of all users considered:
    • Speech
    • Braille
    • Low Vision
    • Different web browsers
    • Localization in other languages / culture than English
  • API is compatible with existing add-ons.
  • Security precautions taken.

…ld NvDA), make sure to set the API signing token. This was happening for creating the launcher, but not here. Thus dlls / exes were not intially signed when symbols were collected for upload, and then the launcher produced newly signed ones.
… the build signs files which takes a little longer.
…uncher, as this final step must be done sequentially, and there is a chance that some remaining dependencies (such as espeak dictionaries) could be recompiled.
…ilt with multiple cores, but launcher cannot. Also easier to read logs.
…d create Launcher. Split building controller client and creating launcher into their own steps.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR updates the GitHub Actions CI pipeline to ensure signing happens during scons source (not retroactively during scons launcher), so that archived/uploaded debug symbols match the binaries shipped in the final NVDA launcher. It also restructures CI steps to better control parallelism and reduce signing-related rebuilds.

Changes:

  • Pass the API signing token into the Build NVDA job’s setSconsArgs.ps1 so scons source can sign outputs during the initial build.
  • Switch general SCons builds to --all-cores, while ensuring scons launcher runs without the parallelism flag.
  • Split “Create launcher and controller client” into discrete steps (install SignPath, build client, build launcher) and adjust launcher target list accordingly.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
ci/scripts/setSconsArgs.ps1 Updates default SCons parallelism (--all-cores) and removes client from the launcher output target list.
.github/workflows/testAndPublish.yml Ensures signing token is available during Build NVDA; installs SignPath earlier; splits launcher/client build steps; prevents launcher build from inheriting parallel SCons flags.

Comment thread .github/workflows/testAndPublish.yml
Comment thread .github/workflows/testAndPublish.yml
Comment thread .github/workflows/testAndPublish.yml
@michaelDCurran

Copy link
Copy Markdown
Member Author

@copilot apply changes based on the comments in this thread

Agent-Logs-Url: https://github.com/nvaccess/nvda/sessions/3881434f-41da-4959-a487-b2703e747874

Co-authored-by: michaelDCurran <14154141+michaelDCurran@users.noreply.github.com>
Copilot AI requested a review from a team as a code owner May 14, 2026 07:55
Copilot AI requested a review from Qchristensen May 14, 2026 07:55
Agent-Logs-Url: https://github.com/nvaccess/nvda/sessions/3881434f-41da-4959-a487-b2703e747874

Co-authored-by: michaelDCurran <14154141+michaelDCurran@users.noreply.github.com>

Copilot AI commented May 14, 2026

Copy link
Copy Markdown

@copilot apply changes based on the comments in this thread

Applied the requested workflow follow-up in 146bab2: both SignPath installation steps now only run on push builds, so pull request runs skip the unnecessary module install.

@michaelDCurran

Copy link
Copy Markdown
Member Author

@copilot why did you touch documentation files? this is completely unrelated to the changes requested.

This reverts commit 58ffd64.

Co-authored-by: michaelDCurran <14154141+michaelDCurran@users.noreply.github.com>

Copilot AI commented May 14, 2026

Copy link
Copy Markdown

@copilot why did you touch documentation files? this is completely unrelated to the changes requested.

They were accidentally included when I used the first progress update while the working tree already had those unrelated docs edits. I’ve removed that stray docs-only change from the branch in 235a1c2, so the PR diff is back to the intended CI files only.

…ically checking the API signing token secret.
… from an environment, so set apiSigningToken in the env for the step.
@github-actions github-actions Bot requested a deployment to snapshot May 14, 2026 13:17 Abandoned
Comment thread ci/scripts/setSconsArgs.ps1
Comment thread projectDocs/issues/githubIssueTemplateExplanationAndExamples.md
Comment thread .github/workflows/testAndPublish.yml
…gle core. Similarly, if building a release also do the same as release builds can not be re-run safely.

@seanbudd seanbudd left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Can you merge master in one more time to ensure the changes to projectDocs are gone?

@seanbudd seanbudd added the conceptApproved Similar 'triaged' for issues, PR accepted in theory, implementation needs review. label May 18, 2026
@github-actions github-actions Bot requested a deployment to snapshot May 19, 2026 00:47 Abandoned
@seanbudd seanbudd merged commit 4a8bbf8 into master May 19, 2026
143 of 149 checks passed
@seanbudd seanbudd deleted the i20033_2 branch May 19, 2026 02:35
@github-actions github-actions Bot added this to the 2026.3 milestone May 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

conceptApproved Similar 'triaged' for issues, PR accepted in theory, implementation needs review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ci: Debug symbols are built from incorrect dll/exe files, rendering them useless

5 participants