RASP.Net follows a tag-driven versioning and release pipeline using Semantic Versioning (SemVer). This document outlines the release process and the SemVer policy for changes to the library.
A security library carries an extra burden ordinary libraries don't: a version bump can change what gets blocked in production. Consumers doing a "safe" minor update must be able to trust that their block/audit posture didn't silently flip.
For RASP.Net, the "public API" includes the detection contract — defaults, rule sets, and activation model — alongside the C# signatures:
| Change | Version bump | Reasoning |
|---|---|---|
| Bug fix, no behavior change | PATCH | Standard. |
| New detection rules / new guard | MINOR | Additive, but can change runtime behavior — a request that passed yesterday may be blocked today. Never PATCH. |
| Loosening a default; changing block→audit (or audit→block) behavior | MINOR (at minimum) | A consumer's security posture changes without a code change on their side. Must be called out prominently in release notes. |
| Removing/renaming public API | MAJOR | Standard. |
| Changing the activation model (e.g. profiler or MonoMod patching becoming default-on) | MAJOR | Alters what runs inside the consumer's process — the highest-trust decision a RASP consumer makes. |
| Dropping a TFM (e.g. net8.0 at end-of-support) | MAJOR | Breaks consumers on that runtime. |
- Releases are triggered exclusively via GitHub Releases. Do not use local
git push --tags. - When a new release is published on GitHub with a tag starting with
v(e.g.,v1.3.0), the Release workflow is triggered, targeting thereleaseGitHub Environment (requires manual approval from a required reviewer before publishing). - The workflow builds, tests, and packs the library using
MinVerto automatically version the NuGet packages based on the tag. - The workflow generates a
CHANGELOG.mdbased on Conventional Commits in the history and appends it to the GitHub Release. - The packages are pushed to NuGet.org using Trusted Publishing (OIDC) — no long-lived API key is stored as a secret. The workflow exchanges a short-lived GitHub OIDC token for a 1-hour NuGet API key at publish time, per the Trusted Publishing policy configured on nuget.org for this repository, workflow file, and
releaseenvironment.
- nuget.org Trusted Publishing policy: nuget.org account → Trusted Publishing → add a policy with Repository Owner
JVBotelho, RepositoryRASP.Net, Workflow Filerelease.yml, Environmentrelease. NUGET_USERsecret/variable: the nuget.org profile name (not email) used to log in viaNuGet/login@v1.RASP_CORE_SNK_BASE64secret: base64-encoded private strong-name key, used to fully signRasp.Core.dllat release time (seesrc/Rasp.Core/Rasp.Core.csproj).releaseGitHub Environment: configured with required reviewers, so every publish needs manual approval.