Skip to content

chore(family): Release Notes pipeline, CONVENTIONS v0.5, codecov 90%, CoC v3.0#24

Merged
JohnVerheij merged 1 commit into
mainfrom
chore/family-sweep-v0.5
May 15, 2026
Merged

chore(family): Release Notes pipeline, CONVENTIONS v0.5, codecov 90%, CoC v3.0#24
JohnVerheij merged 1 commit into
mainfrom
chore/family-sweep-v0.5

Conversation

@JohnVerheij
Copy link
Copy Markdown
Owner

@JohnVerheij JohnVerheij commented May 15, 2026

Summary

Five-item family sweep. Proven on JsonAssertions.TUnit v0.2.0 (the auto-extract pipeline is validated end-to-end on the live nuget.org Release Notes tab) and rolled identically across the four sibling family repos.

The five items

  1. Directory.Build.targets (NEW, repo root): a RoslynCodeTaskFactory inline C# task that runs BeforeTargets="GenerateNuspec", reads CHANGELOG.md, matches ^## \[<Version>\], captures the body up to the next ## [ or EOF, prepends a View the rendered release notes: <url> line pointing at the matching GitHub Release, and overrides <PackageReleaseNotes>. nuget.org's Release Notes tab is driven by <PackageReleaseNotes> (not by shipping CHANGELOG.md in the nupkg), so this is the mechanism that surfaces the per-version notes on the package page. When no matching CHANGELOG section is found, the task emits an MSBuild Warning and the csproj fallback is preserved.

  2. csproj <PackageReleaseNotes> in both src/<Core>/<Core>.csproj and src/<Adapter>/<Adapter>.csproj: flipped from the literal See CHANGELOG.md placeholder to $(RepositoryUrl)/releases/tag/v$(Version). The URL is auto-linked by nuget.org, so the no-match case still gives consumers a one-click route to the matching GitHub Release notes. A short comment block above the property documents the auto-extract override.

  3. CONVENTIONS.md v0.4 → v0.5: adds the CHANGELOG conventions section (10 rules formalising Keep a Changelog 1.1.0 usage) and the PackageReleaseNotes auto-extract convention (documenting the mechanism + fallback URL + two caveats). File copied identically across all five family repos.

  4. codecov.yml patch.default.target 80% → 90%: brings the patch-coverage gate in line with the project-coverage gate. Encourages adding tests for new code rather than coasting on the overall percentage.

  5. CODE_OF_CONDUCT.md upgraded to Contributor Covenant v3.0 (from v2.1; spec at https://www.contributor-covenant.org/version/3/0/code_of_conduct/). The maintainer contact link is now the GitHub profile URL rather than referencing a private email (GitHub keeps the primary email private).

Two caveats consumers should know (Release Notes pipeline)

  • nuget.org renders the Release Notes tab as plaintext with preserved line breaks, not as rendered markdown (NuGet/NuGetGallery#8889 is the open feature request). The prepended View the rendered release notes: <url> line gives consumers a one-click route to the rendered-markdown version on GitHub.
  • Only future releases benefit. Nupkgs already on nuget.org are immutable; their Release Notes tabs continue showing whatever <PackageReleaseNotes> value was in the original pack.

Verification

No source or test changes; gate re-run for sanity:

  • dotnet format --verify-no-changes clean.
  • dotnet build -c Release 0 warnings / 0 errors.
  • dotnet test -c Release all tests pass.
  • dotnet pack confirms the <releaseNotes> element in the generated nuspec carries the prepended URL line plus the matching CHANGELOG body (where a ## [<Version>] section exists in the repo's current CHANGELOG).

Out of scope

  • Version bumps. This is tooling + conventions; package versions are unchanged.
  • CHANGELOG entries on each repo. The new auto-extract runs against whatever ## [<Version>] section is present at pack time; nothing breaks if there is no entry for the current version yet (the warning fires and the URL fallback ships).

Summary by CodeRabbit

  • Documentation

    • Updated Code of Conduct to Contributor Covenant v3.0 with revised reporting procedures
    • Established CHANGELOG conventions for standardized release notes formatting
  • Chores

    • Configured package release notes to link directly to version-specific GitHub releases
    • Increased code coverage patch target from 80% to 90%

Review Change Stack

… CoC v3.0

Five-item family sweep proven on JsonAssertions v0.2.0 (auto-extract
validated end-to-end on the nuget.org Release Notes tab) and rolled
across the four sibling repos identically.

- Directory.Build.targets (NEW, repo root): RoslynCodeTaskFactory
  inline C# task that runs BeforeTargets="GenerateNuspec", reads
  CHANGELOG.md, matches '## [<Version>]', captures the body up to the
  next '## [' or EOF, prepends 'View the rendered release notes: <url>'
  pointing at the matching GitHub Release, and overrides
  <PackageReleaseNotes>. nuget.org's Release Notes tab is driven by
  <PackageReleaseNotes> (not by shipping CHANGELOG.md in the nupkg),
  so this is the mechanism that surfaces the per-version notes on the
  package page. The prepended URL works around NuGet/NuGetGallery#8889
  (the open feature request to render markdown in the Release Notes
  tab; gallery currently still plaintext-with-line-breaks). When no
  matching CHANGELOG section is found, the task emits an MSBuild
  Warning and the csproj fallback is preserved.

- src/<Core>/<Core>.csproj + src/<Adapter>/<Adapter>.csproj:
  <PackageReleaseNotes> flipped from 'See CHANGELOG.md' (rendered as
  literal placeholder text on nuget.org) to
  $(RepositoryUrl)/releases/tag/v$(Version). The URL is auto-linked
  by nuget.org, so the no-match case still gives consumers a
  one-click route to the matching GitHub Release notes. A descriptive
  comment block above the property documents the auto-extract
  override.

- CONVENTIONS.md v0.4 -> v0.5: adds the CHANGELOG conventions section
  (10 rules formalising Keep a Changelog 1.1.0 usage: user-facing-only
  content, the six standard headers, header order, past-tense bullets,
  leading-API formatting, breaking-change marking, no-edit-published-
  sections, ISO-8601 dates, always-present Unreleased section,
  reference-link footer in lockstep) and the PackageReleaseNotes
  auto-extract convention (documenting the Directory.Build.targets
  mechanism + the fallback URL + the two caveats: plaintext rendering
  on nuget.org and future-releases-only effect). File copied identically
  across the five family repos.

- codecov.yml: patch.default.target 80% -> 90%. The four sibling repos
  still had 80% inherited from the family pattern at the time the gate
  was set; bumped in lockstep so the family enforces a uniform 90%
  patch-coverage gate.

- CODE_OF_CONDUCT.md: upgraded to Contributor Covenant v3.0 (from v2.1;
  spec at https://www.contributor-covenant.org/version/3/0/code_of_conduct/).
  The maintainer contact link is now the GitHub profile URL rather
  than 'the email address listed on the project owner's GitHub profile'.
  John keeps his primary email private on GitHub, so referencing a
  private email created a dead-end pointer.

No source or test changes; format / build / test gate re-run for sanity.
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 15, 2026

📝 Walkthrough

Walkthrough

This PR updates community governance to Contributor Covenant v3.0, documents and implements automated release notes extraction from CHANGELOG.md into NuGet package metadata via MSBuild, configures the GitHub release URL fallback in both project files, and increases code coverage patch requirements to 90%.

Changes

Release Notes, Governance, and Quality Updates

Layer / File(s) Summary
Community Governance Update
CODE_OF_CONDUCT.md
CODE_OF_CONDUCT.md updated to Contributor Covenant v3.0 with revised reporting instructions using GitHub profile contact options instead of email.
Release Notes Convention Documentation
CONVENTIONS.md
CONVENTIONS.md v0.5 documents CHANGELOG conventions and PackageReleaseNotes auto-extract workflow, specifying how an inline Roslyn task parses version sections, optionally prepends GitHub URLs, and handles missing sections with fallback behavior.
MSBuild Changelog Extraction Implementation
Directory.Build.targets
Adds ExtractChangelogSection UsingTask to regex-extract ## [<Version>] bodies from CHANGELOG.md with optional GitHub URL prepending, and SetPackageReleaseNotesFromChangelog target to invoke extraction before NuSpec generation with non-fatal missing-changelog handling.
Package Release Notes Configuration
src/MathAssertions/MathAssertions.csproj, src/MathAssertions.TUnit/MathAssertions.TUnit.csproj
Both project files set PackageReleaseNotes to GitHub release URL template $(RepositoryUrl)/releases/tag/v$(Version), which serves as the fallback value when the MSBuild extraction task cannot find a matching changelog section.
Code Coverage Threshold
codecov.yml
Patch coverage target in codecov.yml increased from 80% to 90%.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐰 A changelog hops from file to NuGet's sight,
Where Covenant v3 keeps our conduct bright,
MSBuild extracts with gentle regex care,
Release notes now flow with GitHub flair—
Quality thresholds rise to ninety-fair!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main changes: Release Notes pipeline setup, CONVENTIONS update to v0.5, codecov threshold increase to 90%, and Code of Conduct upgrade to v3.0.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/family-sweep-v0.5

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 15, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
CODE_OF_CONDUCT.md (1)

7-7: ⚡ Quick win

Use a stable, repo-controlled reporting channel.

Routing reports through GitHub profile contact options is fragile because those options can change or disappear. Please add a dedicated, explicit contact method (or a fallback path) directly in this file.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@CODE_OF_CONDUCT.md` at line 7, The "To report a concern..." line currently
points to a personal GitHub profile contact which is fragile; update this to a
stable, repo-controlled reporting channel by adding an explicit, durable contact
method (e.g., a repository-maintained email address, a SECURITY.md link, or a
dedicated issue/incident template) and include a fallback path; replace the
GitHub-profile URL text with the chosen channel and keep the note that reports
are handled confidentially so readers know where to send concerns reliably.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@CODE_OF_CONDUCT.md`:
- Line 7: The "To report a concern..." line currently points to a personal
GitHub profile contact which is fragile; update this to a stable,
repo-controlled reporting channel by adding an explicit, durable contact method
(e.g., a repository-maintained email address, a SECURITY.md link, or a dedicated
issue/incident template) and include a fallback path; replace the GitHub-profile
URL text with the chosen channel and keep the note that reports are handled
confidentially so readers know where to send concerns reliably.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 8b2f8345-df14-46ba-a784-20f22d337e6b

📥 Commits

Reviewing files that changed from the base of the PR and between 815bf7b and f3d8c3c.

📒 Files selected for processing (6)
  • CODE_OF_CONDUCT.md
  • CONVENTIONS.md
  • Directory.Build.targets
  • codecov.yml
  • src/MathAssertions.TUnit/MathAssertions.TUnit.csproj
  • src/MathAssertions/MathAssertions.csproj

@JohnVerheij JohnVerheij merged commit c193417 into main May 15, 2026
7 checks passed
@JohnVerheij JohnVerheij deleted the chore/family-sweep-v0.5 branch May 15, 2026 09:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant