Releasing
NuGet publish is tag-triggered. The workflow is .github/workflows/publish.yml. It authenticates with nuget.org Trusted Publishing (NuGet/login + OIDC), not a long-lived API key. The nuget.org policy must name this repository and publish.yml. The GitHub secret NUGET_USER is the nuget.org profile name.
Version
VersionPrefix is 6.0.0. That was the TFM break (net45 / netstandard1.6 dropped). The next release is v6.0.1 (or v6.1.0 / v7.0.0), not another 5.x.
Cut a release
First make sure CHANGELOG.md has a ## [version] section that describes the release. Then, on master, after CI is green:
git tag vX.Y.Z
git push origin vX.Y.Z
The Publish workflow will:
- Extract the
## [6.0.0]section ofCHANGELOG.md, and fail if there isn't one - Restore, build
-warnaserror, test - Pack
FSharp.Interop.Dynamicat6.0.0(nupkg + snupkg) - Attest SLSA build provenance for the nupkg and snupkg, signed with Sigstore through GitHub's OIDC identity
dotnet nuget pushto nuget.org with--skip-duplicate- Create the GitHub release
v6.0.0with those notes, the packages, and the provenance bundleFSharp.Interop.Dynamic.6.0.0.intoto.jsonlattached. A version with a-suffix is marked as a prerelease.
workflow_dispatch with a version input does steps 1–5 without a tag and creates no GitHub release. Prefer the tag.
Verify a package
Anyone can check that a package was built by this repository's Publish workflow:
gh attestation verify FSharp.Interop.Dynamic.6.0.0.nupkg --repo fsprojects/FSharp.Interop.Dynamic
Pull requests never publish.
After it lands
Update the README / docs callout that nuget.org is still 5.0.1.268. The next patch is v6.0.1, not another 5.x.