Repository navigation
Docs site: publish docs/ and the READMEs to GitHub Pages from main, with API pages #115
Copy link
Copy link
Closed
Labels
area/releaseVersioning, changelogs, packaging and release wiringVersioning, changelogs, packaging and release wiringdocumentationImprovements or additions to documentationImprovements or additions to documentation
Milestone
Description
Problem
The consumer docs can only be read as Markdown on GitHub, and that leaves a reader with no way in:
- No navigation and no search. The 16 guides in
docs/, the root README and the seven package READMEs run to about 7,700 lines. The only map is the root README's "Documentation" table, and nothing searches across the pages. The answer to "how does a value object reach a query" is spread overef-core.md, the EF Core README and the Generators README. - No API reference. Every public member of the shipping projects has XML docs (the build fails on CS1591), but only an IDE shows them. The surface tables in
option.mdandresult.mdare the only member lists a reader can browse.
A GitHub wiki is ruled out, for the reasons CaffeinatedCoder/CodoMetis.ValueRanges#417 gives. A wiki is a separate repository whose edits bypass PRs, so ReadmeSampleTests couldn't compile its blocks and claims.json couldn't hold its sentences.
Unlike ValueRanges, TypeKit has one supported line, and main is its released state: topics merge into release/<version>, which merges into main when it is tagged. GitHub already shows the docs of the version dotnet add package installs, and the site must keep that.
Change
- Build from the sources as they are. A workflow publishes
docs/*.md, the root README, the package READMEs andCHANGELOG.mdto GitHub Pages, without copying or transforming them, soReadmeSampleTestsandOracleCatalogueTestskeep holding the same text. Navigation comes from the site's config. A page that has to change for the site changes in the same PR as its sample regions and claims. - Tool: DocFX, as ValueRanges decided in its spike (Docs site: publish docs/ to GitHub Pages, one build per line, the stable line by default CodoMetis.ValueRanges#417): it reads the API from published assemblies, and every page the guides link to becomes a site page, so their relative links resolve without rewriting. Pinned in
.config/dotnet-tools.json, withsite/docfx.jsonin the repository (DocFX refuses a content root outside its base directory). - Spike first, on what ValueRanges didn't have.
src/holds 35 C# 14extension(...)blocks, which carry most of theOptionandResultextensions,AsTextand theIQueryablehelpers. ValueRanges had none. Check whether DocFX lists their members, and on the type they extend. If it doesn't, the API pages leave out most of the surface a reader looks for. Ship the guides and READMEs without API pages, and record the gap in a comment with DocFX's version. - API pages for the run-time packages only.
CodoMetis.TypeKit,.EntityFrameworkCore,.AspNetCore,.Serilogand.Testing, read from onedotnet publishoutput. The Generators' public surface is what they generate into a consumer (the aspects are internal), and the Analyzers' is their rules, so their READMEs stay the reference. - One build, from
main. A push tomainpublishes the site, so it always serves the latest release.release/<version>is not published, because a docs page describing an unreleased version would be the wrong default. A second line under its own path (/2.x/,/3.x/, as ValueRanges does) waits until a 3.x line is supported beside 2.x. - Navigation. The guides in the order of the README's "Documentation" table, then the package READMEs as "Reference", then the changelog. Contributor material (
CONTRIBUTING.md,AGENTS.md,design/) stays on GitHub. - Links. The guides link 43 times to package READMEs and twice to the changelog, which become pages. They also link 15 times into
design/(mostlycomparison.md), and those links are rewritten at build time to a GitHub URL at the built commit, never by editing the sources. Analyzer help links and exception messages keep pointing at the README anchors on GitHub: they are public contract, and the site doesn't replace them. - Link check on every PR. The docs build runs with
--warningsAsErrorson a PR that touches a published page, without deploying, so a broken link fails the PR rather than the deploy. - README. It links to the site and stays the GitHub and nuget.org landing page.
- Needed from the maintainer: set Settings → Pages → Source to "GitHub Actions". The workflow can't do that itself.
Done when
- The site serves the latest release from
mainand is rebuilt by CI on a push tomain. - Every guide and package README can be reached from the navigation and is found by the site's search, and the API pages list the extension-block members, or the spike's comment records why there are none.
- No link is broken: the check fails a PR with a seeded broken link, and passes without it.
- CONTRIBUTING.md says how the docs are published, and how a second line would be added.
Metadata
Metadata
Assignees
Labels
area/releaseVersioning, changelogs, packaging and release wiringVersioning, changelogs, packaging and release wiringdocumentationImprovements or additions to documentationImprovements or additions to documentation
Activity
CaffeinatedCoder commentedon Oct 29, 2026
Spike result (DocFX 2.81.0, 2026-10-29): DocFX lists the members of C# 14
extension(...)blocks, so the API pages ship (#138, decision 0116).Measured with
docfx metadataon the published assemblies of the five run-time packages:Option.FirstOrNone<T>(this IEnumerable<T> source)andStringTextExtensions.AsText(this string? text): 37 extension methods onOptionand 52 onResult.Option<T>'s page showsSelect,SelectMany,Where,Zip,ToResultandResult.Traverse.Gaps, none of which blocks shipping the API pages:
this in Option<T> a), not as theextension(...)block they're declared in.OrDefault()(where T : struct) andOrNull()(where T : class) appear onOption's page only.GuidValueExtensions.New(), appears asNew<TSelf>()onGuidValueExtensions, not asOrderId.New().docs.ymlfails ifOption<T>'s orResult<T, TError>'s page stops listing its extensionSelect, so a DocFX update that loses them fails CI instead of reaching readers.CaffeinatedCoder commentedon Oct 29, 2026
Done in #138, merged into
release/2.3.0(3b1c5ac). The API pages ship: DocFX 2.81.0 lists the extension-block members (decision 116). The first deploy runs when the release merges intomain.