diff --git a/AGENTS.md b/AGENTS.md
index 77fbe55..de59b1b 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -9,7 +9,7 @@ container (`ghcr.io/nullean/release-notes`) and a GitHub Action (`action.yml`) t
| Path | What |
|---|---|
-| `src/release-notes` | the tool (net8.0 and net10.0), a `Nullean.Argh` CLI; `ReleaseNotesCommands.cs` holds the commands |
+| `src/release-notes` | the tool (net10.0 and net11.0), a `Nullean.Argh` CLI; `ReleaseNotesCommands.cs` holds the commands |
| `src/release-notes/GitHubReleaseClient.cs` | the GitHub writes (releases, labels), source-generated JSON instead of Octokit |
| `build/scripts` | the F# build ([Nullean.Make.Fs](https://www.nuget.org/packages/Nullean.Make.Fs), net11.0) the `mise` tasks and CI call |
| `build/keys` | the strong-name key the tool's own assembly is signed with |
@@ -17,8 +17,7 @@ container (`ghcr.io/nullean/release-notes`) and a GitHub Action (`action.yml`) t
## Commands
-mise installs the SDK pinned in `global.json` (plus the net10.0 runtime nupkg-validator runs on). Run
-everything through it:
+mise installs the SDK pinned in `global.json`. Run everything through it:
```bash
mise run build # build the solution
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 0124cdd..0cbd354 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -6,10 +6,8 @@
-
-
-
-
+
+
@@ -18,6 +16,6 @@
-
+
diff --git a/README.md b/README.md
index 205b1a7..43af66e 100644
--- a/README.md
+++ b/README.md
@@ -127,7 +127,7 @@ The tool ships as one package per platform. Install the root package; the .NET S
|---|---|---|
| [`release-notes`](src/release-notes/README.md) | the tool; points the SDK at the package for your platform | [](https://www.nuget.org/packages/release-notes) |
| `release-notes.` | the native-AOT build for `linux-x64`, `linux-arm64`, `win-x64`, `win-arm64` and `osx-arm64` | [](https://www.nuget.org/packages/release-notes.linux-x64) |
-| `release-notes.any` | the framework-dependent fallback (net8.0, net10.0) for every other platform | [](https://www.nuget.org/packages/release-notes.any) |
+| `release-notes.any` | the framework-dependent fallback (net10.0, net11.0) for every other platform | [](https://www.nuget.org/packages/release-notes.any) |
## Learn more
diff --git a/build/scripts/Paths.fs b/build/scripts/Paths.fs
index c23d1d1..eefef63 100644
--- a/build/scripts/Paths.fs
+++ b/build/scripts/Paths.fs
@@ -12,7 +12,7 @@ let AotRuntimeIdentifiers = ["linux-x64"; "linux-arm64"; "win-x64"; "win-arm64";
/// Must mirror release-notes.csproj's TargetFrameworks. Used to patch the signed managed dll back
/// into the packed 'any' fallback for every TFM it ships — see fixAnyPackageSigning in Targets.fs.
-let ManagedTargetFrameworks = ["net8.0"; "net10.0"]
+let ManagedTargetFrameworks = ["net10.0"; "net11.0"]
let Root =
let mutable dir = DirectoryInfo(".")
diff --git a/build/scripts/Program.fs b/build/scripts/Program.fs
index ae72e1e..ece3642 100644
--- a/build/scripts/Program.fs
+++ b/build/scripts/Program.fs
@@ -48,8 +48,8 @@ let main argv =
for project in Directory.EnumerateFiles("src", "*.?sproj", SearchOption.AllDirectories) do
sh $"dotnet clean {project} -c Release -v q" }
| Build -> command {
- composes [Clean]
- executes (shell { sh $"dotnet build -c Release" }) }
+ composes [Clean] }
+ |> executes { sh $"dotnet build -c Release" }
// there are no tests, so ci is pack: build, then create, validate and diff the packages
| Pack -> command { requires [Build]; composes [Generatepackages; Validatepackages; Generateapichanges] }
| Ci -> command { requires [Pack]; composes [] }
@@ -107,13 +107,13 @@ let main argv =
// works, with no ghcr.io credentials configured there. Only the build job, which does log in, passes
// --push.
| Publishcontainers -> target [] {
- let baseImage = "mcr.microsoft.com/dotnet/runtime-deps:10.0-noble-chiseled"
+ let baseImage = "mcr.microsoft.com/dotnet/runtime-deps:11.0-resolute-chiseled"
// MSBuild reads the quotes: without them the tags' `;` would split the property
let tags = $"ContainerImageTags=\"{Packaging.containerImageTags Versions.current.Value}\""
if push.Value then
- sh $"dotnet publish {toolProject} -c Release -f net10.0 -r linux-x64 /t:PublishContainer -p DebugType=none -p ContainerBaseImage={baseImage} -p ContainerRepository={Paths.Repository} -p {tags} -p ContainerUser=1001:1001 -p ContainerRegistry=ghcr.io"
+ sh $"dotnet publish {toolProject} -c Release -f net11.0 -r linux-x64 /t:PublishContainer -p DebugType=none -p ContainerBaseImage={baseImage} -p ContainerRepository={Paths.Repository} -p {tags} -p ContainerUser=1001:1001 -p ContainerRegistry=ghcr.io"
else
- sh $"dotnet publish {toolProject} -c Release -f net10.0 -r linux-x64 /t:PublishContainer -p DebugType=none -p ContainerBaseImage={baseImage} -p ContainerRepository={Paths.Repository} -p {tags} -p ContainerUser=1001:1001" }
+ sh $"dotnet publish {toolProject} -c Release -f net11.0 -r linux-x64 /t:PublishContainer -p DebugType=none -p ContainerBaseImage={baseImage} -p ContainerRepository={Paths.Repository} -p {tags} -p ContainerUser=1001:1001" }
// The framework-dependent build cannot catch what trimming breaks: #47 broke only the native-AOT binary, where
// Octokit's reflection-based JSON returned nothing or threw. So this publishes that binary and reads releases
@@ -124,7 +124,7 @@ let main argv =
let rid = RuntimeInformation.RuntimeIdentifier
let publishDirectory = Path.Combine(Paths.Output.FullName, "aot-smoke")
let publish = Paths.RootRelative publishDirectory
- sh $"dotnet publish {toolProject} -c Release -f net10.0 -r {rid} -o {publish}"
+ sh $"dotnet publish {toolProject} -c Release -f net11.0 -r {rid} -o {publish}"
let executable = if OperatingSystem.IsWindows() then $"{Paths.ToolName}.exe" else Paths.ToolName
let binary = Paths.RootRelative <| Path.Combine(publishDirectory, executable)
// Make.Fs quotes each interpolated hole as one argument, so --token stays in the command text
diff --git a/mise.toml b/mise.toml
index a803641..7b45ff9 100644
--- a/mise.toml
+++ b/mise.toml
@@ -1,6 +1,6 @@
# Bootstraps the toolchain and is the one entry point: `mise run `, the same task names in every nullean repo.
# The .NET SDK version lives only in global.json: the first dotnet entry reads it from there (sdk.version is the first
-# "version" key). The net10.0 runtime is listed after it because nupkg-validator runs on net10.0.
+# "version" key). List further runtimes after it when tests run on older target frameworks too.
[env]
DOTNET_NOLOGO = "1"
@@ -8,7 +8,7 @@ DOTNET_CLI_TELEMETRY_OPTOUT = "1"
DOTNET_SKIP_FIRST_TIME_EXPERIENCE = "1"
[tools]
-dotnet = ["""{{ read_file(path='global.json') | split(pat='"version"') | nth(n=1) | split(pat='"') | nth(n=1) }}""", "10"]
+dotnet = ["""{{ read_file(path='global.json') | split(pat='"version"') | nth(n=1) | split(pat='"') | nth(n=1) }}"""]
gh = "latest"
zizmor = "1"
diff --git a/src/release-notes/release-notes.csproj b/src/release-notes/release-notes.csproj
index c0f27b3..859ef6d 100644
--- a/src/release-notes/release-notes.csproj
+++ b/src/release-notes/release-notes.csproj
@@ -2,7 +2,7 @@
Exe
- net8.0;net10.0
+ net10.0;net11.0
release-notes
ReleaseNotes
enable
@@ -22,7 +22,7 @@
The root package's DotnetToolSettings.xml (v2) maps each RID to its per-RID package.
Installing requires the .NET 10 SDK or greater. -->
linux-x64;linux-arm64;win-x64;win-arm64;osx-arm64;any
-
true