Skip to content

chore!: target net10.0 and Microsoft.Azure.Cosmos 3.62.0 - #35

Closed
xperiandri wants to merge 4 commits into
mainfrom
chore/net10-cosmos-3.62
Closed

xperiandri wants to merge 4 commits into
mainfrom
chore/net10-cosmos-3.62

Conversation

@xperiandri

Copy link
Copy Markdown
Collaborator

Proposed Changes

Phase 0 step 1 of ADR 0001:

  • net8.0 -> net10.0 for the library, the tests and the build project; README requirement updated.
  • Microsoft.Azure.Cosmos 3.60.0 -> 3.62.0. Its release notes contain a breaking change of their own: thin client mode is on by default and does not support resource-token authentication (AZURE_COSMOS_THIN_CLIENT_ENABLED=false opts out).
  • Removed the unused System.Linq.Async pin (never in any restore graph; on net10.0 System.Linq.AsyncEnumerable is in the box) and the System.Formats.Asn1 reference of the build project (NU1510 after retargeting).
  • Microsoft.SourceLink.GitHub 10.0.300 -> 10.0.401 (NU1902, GHSA-23fw-v26w-5fgq affects 10.0.300-10.0.301). Separate commit, can be dropped.
  • CI workflows and the dev container install only the .NET 10 SDK: every pinned dotnet tool runs on the .NET 10 runtime alone (checked on a dotnet root with only Microsoft.NETCore.App 10.0.12).
  • CHANGELOG Unreleased entry; the FAKE UpdateChangelog replay for 2.0.0 produces a correct entry.

Types of changes

  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)

Dropping net8.0 makes the next release 2.0.0.

Checklist

  • Build and tests pass locally
  • I have added tests that prove my fix is effective or that my feature works (if appropriate)
  • I have added necessary documentation (if appropriate)

Further comments

  • Debug and Release builds: 0 errors, the same 19 nullness warnings as on main; Fantomas leaves no diff; build.cmd DotnetBuild, BuildDocs and the DotnetPack chain pass; the package contains only lib/net10.0.
  • Tests: 119/119 in Debug and Release against the local Windows emulator with 4 workers, same as main. With the default 32 workers both main and this branch get 500/503 responses from the local emulator on container creation; the shared test infrastructure pull request that follows adds a partition budget for that. CI uses the Linux emulator.
  • Later Phase 0 pull requests are stacked on this branch.

🤖 Generated with Claude Code

xperiandri and others added 4 commits October 2, 2026 22:43
* `net8.0` -> `net10.0` in the library, test and FAKE build projects;
  the commented analyzer block in `Directory.Build.props` follows the new TFM
* `Microsoft.Azure.Cosmos` 3.60.0 -> 3.62.0 (maintainer decision)
* Remove the `System.Linq.Async` 6.0.0 central version pin: no project
  references it directly and no package brings it transitively
  (`project.assets.json` lists it only under `centralPackageVersions`),
  and on `net10.0` `System.Linq.AsyncEnumerable` is part of the framework
* Remove the `System.Formats.Asn1` reference and pin from the build project:
  on `net10.0` NuGet prunes it as part of the framework and warns NU1510
* README: the SDK requirement is the 10.0 SDK pinned in `global.json`
* CHANGELOG: Unreleased entry; the next release is 2.0.0

BREAKING CHANGE: the package targets net10.0 only; net8.0 is no longer supported.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every project now targets `net10.0`, and none of the pinned dotnet tools
needs the .NET 8 runtime although their manifest entries keep
`rollForward: false` (the tool's own runtimeconfig decides):

* fantomas 8.0.5 and fslangmcp 0.18.0 ship `tools/net10.0`
* fsharp-analyzers 0.31.0 (`tools/net8.0`) and fsdocs-tool 20.0.1
  (`tools/net6.0`) set `rollForward: LatestMajor` in their runtimeconfig
* dotnet-reportgenerator-globaltool 5.4.7 (`tools/net8.0`, `tools/net9.0`)
  sets `rollForwardOnNoCandidateFx: 2` (major)

Each tool was started on a private dotnet root holding only
Microsoft.NETCore.App 10.0.12, where a `net8.0` app with the default
policy fails to start. The docs workflow already installed only 10.x.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
For `net10.0` projects the .NET 10 SDK defaults `NuGetAuditMode` to `all`,
so restore now audits transitive packages and warns NU1902 for
Microsoft.Build.Tasks.Git 10.0.300 (GHSA-23fw-v26w-5fgq, CVE-2026-62900,
affected 10.0.300-10.0.301, patched in 10.0.303). 10.0.401 matches the
SDK pinned in `global.json`. The package is build-only (`PrivateAssets=all`)
and does not reach consumers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
`updateChangelog` copies the Unreleased items verbatim into the release
entry, the NuGet release notes and the GitHub release, so a replay of the
FAKE `UpdateChangelog` target for 2.0.0 published "the next release is a
major version (2.0.0)" inside the 2.0.0 entry itself. The breaking-change
item now reads correctly both before and after the release.

The `System.Linq.Async` item is dropped: the pin never reached any
restore graph or the package, so consumers see no change, and the
changelog lists no repository-only chores in earlier releases either
(SDK migration, transitive pinning, tool updates). The commit that
removed the pin keeps the explanation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 2, 2026 21:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot review overview

🔵 Needs a closer look

The breaking runtime and Cosmos SDK upgrades warrant human confirmation of cross-platform CI and Linux-emulator results.

Review effort: Balanced
Findings: None

What changed in this PR

Implements ADR 0001’s first migration step, moving the library and supporting projects to .NET 10 for the planned 2.0.0 release.

Changes:

  • Retargets projects and standardizes development and CI environments on .NET 10.
  • Updates Cosmos and SourceLink dependencies and removes unused package entries.
  • Documents SDK requirements and breaking compatibility changes.
File Description
tests/​Cosmos.Tests/​FSharp.Azure.Cosmos.Tests.fsproj Targets tests at .NET 10.
src/​Cosmos/​FSharp.Azure.Cosmos.fsproj Targets the library at .NET 10 only.
README.md Updates SDK requirements.
Directory.Packages.props Updates dependencies and removes unused pins.
Directory.Build.props Updates a commented-out framework condition.
CHANGELOG.md Documents framework and Cosmos breaking changes.
build/​build.fsproj Retargets build tooling and removes the ASN.1 reference.
.github/​workflows/​publish_release.yml Removes .NET 8 installation.
.github/​workflows/​publish_ci.yml Removes .NET 8 installation.
.github/​workflows/​copilot-setup-steps.yml Removes .NET 8 installation.
.github/​workflows/​build.yml Removes .NET 8 installation.
.devcontainer/​devcontainer.json Installs only .NET 10.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@xperiandri

Copy link
Copy Markdown
Collaborator Author

Split as requested into #37 (chore!: target net10.0) and #38 (chore(deps)!: update Microsoft.Azure.Cosmos to 3.62.0), with Conventional Commits. The two branches together have exactly this pull request's content.

🤖 Generated with Claude Code

@xperiandri xperiandri closed this Oct 2, 2026
@xperiandri
xperiandri deleted the chore/net10-cosmos-3.62 branch October 2, 2026 22:30
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.

2 participants