Releases are tag-driven. Pushing a v*.*.* tag builds, tests, packs, creates the GitHub
release and publishes to nuget.org. There is no manual dotnet nuget push and no long-lived
API key.
The version comes from the git tag via MinVer — no
<Version> element exists anywhere in the repository. A build from an untagged commit
produces a prerelease version derived from the last tag.
All packages are versioned and released together, so a fix in one renderer ships as one version bump across the whole set. That keeps a consumer from having to reason about which combination of package versions is compatible.
Semantic versioning applies to the public API: the builder
interfaces, IFileGenerator, GenerationResult and the definition models.
-
Make sure
mainis green. -
Move the
## [Unreleased]entries inCHANGELOG.mdinto a new version section with today's date, and update the link definitions at the bottom. The release workflow reads that section for the release notes and fails if it is missing. -
Commit, tag and push:
git tag -a v1.1.0 -m "v1.1.0" git push origin main --follow-tags -
The
Releaseworkflow runs. It packs, uploads the.nupkgand.snupkgfiles, creates the GitHub release, and then waits on thenugetenvironment before publishing. -
Approve the
nugetenvironment. Publishing to nuget.org is irreversible — a version can be unlisted but never replaced — so it sits behind a manual gate.
The workflow authenticates to nuget.org with Trusted
Publishing (OIDC). There is
no NUGET_API_KEY secret to rotate or leak.
Setup, once per package prefix:
- On nuget.org, go to your account then Trusted Publishing.
- Add a policy for the
FluentDocspackage prefix, ownerdeniscuciuc, repositorydeniscuciuc/fluentdocs, workflowrelease.yml, environmentnuget. - Set the repository variable
NUGET_USERNAMEto your nuget.org username.
dotnet build -c Release
dotnet test -c Release
dotnet pack -c Release -o ./artifacts
ls ./artifacts # expect exactly 8 .nupkg and 8 .snupkg, nothing elseThe package count is the check that matters: an example or test project that accidentally becomes packable shows up here and nowhere else.