Skip to content

fix(packaging): ship README.md with every Fallout.* nupkg#207

Merged
ChrisonSimtian merged 1 commit into
mainfrom
fix/package-readme
May 27, 2026
Merged

fix(packaging): ship README.md with every Fallout.* nupkg#207
ChrisonSimtian merged 1 commit into
mainfrom
fix/package-readme

Conversation

@ChrisonSimtian

Copy link
Copy Markdown
Collaborator

Summary

Today's dotnet pack output warns on every Fallout.* package:

The package Fallout. is missing a readme. Go to https://aka.ms/nuget/authoring-best-practices/readme to learn why package readmes are important.

And nuget.org's package landing pages show the generic "No README" placeholder instead of the Fallout intro / install command / docs link. Surfaced when Chris went to upload the locally-packed Fallout.Cli.*.nupkg to reserve the new ID (#206).

What this PR does

The plumbing was already half-wired up in Directory.Build.props but commented out, tied to a separate TODO about the missing PackageIcon. Decoupled and made smarter:

  • <PackageReadmeFile>README.md</PackageReadmeFile> enabled unconditionally.
  • New ItemGroups in Directory.Build.props pick the right README per package:
    • If src/Fallout.X/README.md exists → pack that one (per-package content wins on the nuget.org landing page).
    • Otherwise → pack the repo-root README.md.
  • Fallout.Migrate.Analyzers.csproj: removed its now-redundant explicit <None Include=\"README.md\" Pack=\"true\" PackagePath=\"\\\" />; the Directory.Build.props auto-include handles it.
  • Test projects (IsPackable=False) aren't affected.
  • PackageIcon stays commented (still blocked on a 256×256 PNG export of .assets/fallout-logo.svg).

Verification

Packed three representative projects locally; each gets the right README:

Project Per-project README? Pack result
Fallout.Common no Root README packed (Fallout logo + intro). Warning gone.
Fallout.Migrate.Analyzers yes Its own README packed (analyzer-specific landing page). Warning gone.
src/Shims/Nuke.Common yes Its own README packed (shim-specific landing page). Warning gone.

unzip -l <pkg>.nupkg confirms exactly one README.md at the root of each package; unzip -p <pkg>.nupkg <pkg>.nuspec confirms <readme>README.md</readme>.

Test plan

  • ubuntu-latest goes green.
  • After merge, rebase chore(globaltool)!: rename Fallout.GlobalTool → Fallout.Cli #206 (Fallout.Cli rename) onto main so its pack picks up the readme fix; rebuild the local Fallout.Cli.*.nupkg for manual upload.
  • Post-merge release pipeline: all 17+ Fallout.* packages publish with readmes attached. nuget.org pages show the landing content instead of the placeholder.

Today's `dotnet pack` output emits a warning for every Fallout.* package:

> The package Fallout.<X> is missing a readme. Go to https://aka.ms/nuget/authoring-best-practices/readme to learn why package readmes are important.

And nuget.org's package landing pages show the generic "No README" placeholder
instead of the project description / install one-liners / docs link.

The plumbing was already half-wired up in `Directory.Build.props` but
commented out, tied to a separate TODO about the missing `PackageIcon`. This
PR decouples them and adds smart per-project / repo-root README selection:

- `<PackageReadmeFile>README.md</PackageReadmeFile>` enabled unconditionally.
- New ItemGroups in `Directory.Build.props` pick a README per package:
    - If `src/Fallout.X/README.md` exists → pack THAT one (per-package
      content wins for nuget.org's landing page).
    - Otherwise → pack the repo-root `README.md`.
- `Fallout.Migrate.Analyzers.csproj`: removed its now-redundant explicit
  `<None Include="README.md" Pack="true" PackagePath="\" />` line; the
  Directory.Build.props auto-include handles it.
- Test projects have `IsPackable=False` so the items don't matter for them.
- `PackageIcon` stays commented (still blocked on a 256×256 PNG export of
  `.assets/fallout-logo.svg` — separate TODO).

## Verification

Packed three representative projects locally; each gets the right README:

| Project | Per-project README? | Pack result |
|---|---|---|
| `Fallout.Common` | no | Root README packed (Fallout logo + intro). Warning gone. |
| `Fallout.Migrate.Analyzers` | yes | Its own README packed (analyzer-specific landing page). Warning gone. |
| `src/Shims/Nuke.Common` | yes | Its own README packed (shim-specific landing page). Warning gone. |

`unzip -l <pkg>.nupkg` confirms exactly one `README.md` at the root of each
package; `unzip -p <pkg>.nupkg <pkg>.nuspec` confirms `<readme>README.md</readme>`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ChrisonSimtian
ChrisonSimtian merged commit 3e60c9c into main May 27, 2026
1 check passed
@ChrisonSimtian
ChrisonSimtian deleted the fix/package-readme branch May 27, 2026 00:33
ChrisonSimtian added a commit that referenced this pull request May 27, 2026
Picks up four patches shipped overnight, notably:
  - #212: AES-GCM v2 secret format (per-secret salt+nonce, 600K PBKDF2)
  - #211: drop unused Build() + surface dotnet-tools.json in IDE config group
  - #209: manifest flip + ownership-gotcha doc
  - #207: ship README.md with every Fallout.* nupkg

Verified locally: `dotnet tool restore` pulls 10.3.45 cleanly,
`dotnet fallout --help` runs through the new in-tool runner without issue.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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