From 97a3efcd4879ffcdeb0815ffcb0120d25b6fc4b1 Mon Sep 17 00:00:00 2001 From: Miguel249 Date: Mon, 10 Aug 2026 07:11:22 -0500 Subject: [PATCH] Verify the release package on a runtime the release runner can execute The publish job checks that a fresh consumer can install and run the packages before it pushes them, and it asked for linux-x64. That was right while the job ran on ubuntu. It moved to macOS in 8597427, so that the iOS workload could be installed at all - there is no Linux host pack for it - and this step did not move with it. verify-package.ps1 does not merely restore the package. It publishes a consumer and runs a simulation through it, so the runtime identifier has to be one the runner can execute. Building an ELF binary on a Mac and starting it gets: Program 'consumer' failed to run ... Exec format error which is what v0.4.0's first attempt died on. Nothing had been pushed, because this step runs before the push - that ordering is the reason the failure cost nothing but a re-tag. osx-arm64 is the host's own identifier. CI covers the other five against the same packed .nupkg on runners that can run them; what this step adds is that the exact files about to become permanent were installed and executed once more, and it can only do that for this machine. Worth noting where this hid: release.yml runs on a tag and nothing else, so a break in it survives any number of green CI runs and surfaces at the one moment it is most expensive. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/release.yml | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5d347e5..fae65ca 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -308,9 +308,28 @@ jobs: # And install what is about to be published into a project that has never # heard of this repository, before publishing it. + # + # The runtime identifier has to be one this runner can execute, because + # the script does not merely restore the package - it publishes a consumer + # and runs a simulation through it. This asked for linux-x64 while the job + # ran on ubuntu, and kept asking for it after the job moved to macOS so + # that the iOS workload would be installable, which no Linux host pack + # exists for. The result was a release workflow that could not publish at + # all: 0.4.0's first attempt died here on + # + # Program 'consumer' failed to run ... Exec format error + # + # having built a perfectly good ELF binary on a Mac. Nothing had been + # pushed, because this step comes before the push, which is the whole + # reason it comes before the push. + # + # osx-arm64 is the host's own identifier. CI covers the other five against + # the same packed .nupkg on runners that can run them; what this step adds + # is that the exact files about to become permanent were installed and + # executed once more, and it can only do that for this machine. - name: Verify a fresh consumer can use the package shell: pwsh - run: ./tools/verify-package.ps1 -Rid linux-x64 -Mode Framework -Version ${{ steps.version.outputs.version }} + run: ./tools/verify-package.ps1 -Rid osx-arm64 -Mode Framework -Version ${{ steps.version.outputs.version }} # Exchanges the workflow's OIDC token for a short-lived NuGet API key. The # trusted publishing policy on nuget.org names this repository and this