CI is the only supported way to produce a signed setup. Dispatch Build setup and choose the driver tag whose attested artifacts should be embedded. Do not build or sign the MSI locally.
- Driver tags stay
vMAJOR.MINOR.PATCHand produce MSI product versionMAJOR.MINOR.PATCH. - The first setup tag for that payload is
setup-vMAJOR.MINOR.PATCH. Later setup-only re-spins (installer fixes, without rebuilding drivers) usesetup-vMAJOR.MINOR.PATCH-r1,-r2, and so on. - The MSI product version stays
MAJOR.MINOR.PATCHacross re-spins. - The workflow creates the Git tag on the setup source commit (the branch or SHA you dispatched from). That can differ from the driver build commit.
- After the setup tag exists, CI opens a draft GitHub Release on that tag, attaches the signed MSI, and fills in the notes. Review the draft, smoke-test the MSI, then publish it. CI never alters an already-published release.
-
Finish a tagged
Buildand Partner Center signing sobthps3-tools,release-metadata, andbthps3-microsoft-driversexist. -
Actions → Build setup → Run workflow. Set
driver-tagtovMAJOR.MINOR.PATCH(example:v2.12.0). -
The workflow embeds that tag's signed drivers and tools, then builds the setup from the dispatched ref.
-
On success it uploads artifact
bthps3-setup, creates the reservedsetup-v*tag, opens a draft GitHub Release with the signed MSI, then mirrors the artifact. A tag collision fails the run without mirroring. -
Review the draft notes, smoke-test the MSI, then publish the GitHub Release. If the draft job failed, create the release by hand from the artifact:
gh release create setup-v3.2.0 ` --title "BthPS3 Bluetooth Drivers v3.2.0" ` --notes-file path\to\notes.md ` .\Nefarius_BthPS3_Drivers_x64_arm64_v3.2.0.msi
- Actions artifact
bthps3-setup(signed MSI plussetup-metadata.json) - Build-mirror copy of the same artifact
- Git tag
setup-vMAJOR.MINOR.PATCHorsetup-vMAJOR.MINOR.PATCH-rN - Draft GitHub Release on that tag (signed MSI plus generated notes)
setup-metadata.json records the driver tag, setup tag, driver and setup
commits, source run IDs, and the MSI SHA-256.
Tagged driver builds and setup signing need:
SIGN_RELAY_SERVER(variable)SIGN_RELAY_CI_TOKEN(secret)WEBHOOK_URL(secret; buildbot artifact mirror)SDCM_PROFILES__DEFAULT__TENANTID(secret; Partner Center)SDCM_PROFILES__DEFAULT__CLIENTID(secret; Partner Center)SDCM_PROFILES__DEFAULT__KEY(secret; Partner Center)
Draft release notes also require GitHub Copilot CLI billed to the organization
so the setup workflow can use GITHUB_TOKEN with copilot-requests: write.
The setup workflow grants contents: write to the tag job and the draft-release
job. The draft-release job also needs copilot-requests: write so Highlights
can be generated with the GitHub Copilot CLI (GITHUB_TOKEN). The organization
must allow Copilot CLI billed to the organization; otherwise that job fails and
the MSI/tag still remain for a manual release.
Rerunning the draft-release job updates an existing draft and replaces its MSI. It refuses to change a release that has already been published.
Do not re-sign Microsoft-attested .sys files. Attestation adds the Microsoft
signature; appending another publisher signature is incorrect.