diff --git a/CHANGELOG.md b/CHANGELOG.md index 2caed44..d9503ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.2.0] — 2026-10-06 + +Moves to **Spectre.Console.Cli 0.57.2**. Spectre.Console.Cli now ships on its own release +line, and 0.57 changed `AsyncCommand.ExecuteAsync` from `protected` to `public`. +The six credential commands follow suit. Widening an override is a compatible change for +this package (package validation against 2.1.0 passes), but **raising the floor affects your +own commands**: once you upgrade, every `AsyncCommand`/`Command` in your app built against +0.55 has to declare its `Execute`/`ExecuteAsync` override `public`, or the build fails with +CS0507. + +No provider-facing interface changed. The provider packages' `[2.1.0, 3.0.0)` range already +resolves against 2.2.0. + +### Changed + +- **Spectre.Console.Cli floor raised from 0.55.0 to 0.57.2**, matching Spectre.Console. +- **`ExecuteAsync` on `AddCredentialCommand`, `DeleteCredentialCommand`, + `ExportCredentialsCommand`, `ImportCredentialsCommand`, `ListCredentialsCommand` and + `SelectCredentialCommand` is now `public`**, as Spectre.Console.Cli 0.57 requires. + +### Documentation + +- README: the command-handler sample uses a `public override`, and Requirements lists the + real floors (Spectre.Console.Cli 0.57.2+; `net10.0` platform packages 10.0.12+, not + 10.0.10+). + ## [2.1.0] — 2026-09-21 Fixes a **data-loss bug in the local file backend** and, in doing so, retires the @@ -926,7 +952,8 @@ Consumers needed a way to read a specific stored credential's secret at runtime - SourceLink, deterministic builds, embedded symbols, published symbol packages. - `TreatWarningsAsErrors=true`, `AnalysisLevel=latest` — zero-warning public API. -[Unreleased]: https://github.com/StuartMeeks/NextIteration.SpectreConsole.Auth/compare/v2.1.0...HEAD +[Unreleased]: https://github.com/StuartMeeks/NextIteration.SpectreConsole.Auth/compare/v2.2.0...HEAD +[2.2.0]: https://github.com/StuartMeeks/NextIteration.SpectreConsole.Auth/releases/tag/v2.2.0 [2.1.0]: https://github.com/StuartMeeks/NextIteration.SpectreConsole.Auth/releases/tag/v2.1.0 [2.0.0]: https://github.com/StuartMeeks/NextIteration.SpectreConsole.Auth/releases/tag/v2.0.0 [1.1.0]: https://github.com/StuartMeeks/NextIteration.SpectreConsole.Auth/releases/tag/v1.1.0 diff --git a/Directory.Packages.props b/Directory.Packages.props index f923ba3..79a6379 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -49,12 +49,13 @@ between minors, so a low floor would be both meaningless and risky. STANDARD.md 1.5. - Spectre.Console.Cli's latest stable is 0.55.0 (no 0.56/0.57 exists); it - requires Spectre.Console >= 0.55.0, which 0.57.2 satisfies. + Spectre.Console.Cli moved to its own release line and now matches + Spectre.Console at 0.57.2. 0.57 made AsyncCommand.ExecuteAsync public + (it was protected), so every override here is public. --> - + diff --git a/README.md b/README.md index 5cffbe8..ce60386 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,7 @@ And from inside any of your command handlers: ```csharp public sealed class SyncCommand(AdobeAuthenticationService auth) : AsyncCommand { - protected override async Task ExecuteAsync(CommandContext context, CancellationToken cancellationToken) + public override async Task ExecuteAsync(CommandContext context, CancellationToken cancellationToken) { var token = await auth.AuthenticateAsync(cancellationToken); // use token.GetAuthorizationHeader() on outgoing requests @@ -431,9 +431,9 @@ change made to strengthen encryption. Register after, and verify with ## Requirements - **.NET 8.0** or **.NET 10.0** (the package multi-targets `net8.0;net10.0`) -- **Spectre.Console** 0.57.2+ and **Spectre.Console.Cli** 0.55.0+ +- **Spectre.Console** 0.57.2+ and **Spectre.Console.Cli** 0.57.2+ - **Microsoft.Extensions.DependencyInjection.Abstractions** — 8.0.2+ on `net8.0`, - 10.0.10+ on `net10.0` + 10.0.12+ on `net10.0` Dependency floors are set per target framework, so a `net8.0` consumer is never dragged off its own 8.0.x servicing line. diff --git a/src/NextIteration.SpectreConsole.Auth/Commands/AddCredentialCommand.cs b/src/NextIteration.SpectreConsole.Auth/Commands/AddCredentialCommand.cs index ae9f783..d72f02d 100644 --- a/src/NextIteration.SpectreConsole.Auth/Commands/AddCredentialCommand.cs +++ b/src/NextIteration.SpectreConsole.Auth/Commands/AddCredentialCommand.cs @@ -44,7 +44,7 @@ public sealed class Settings : AccountsCommandSettings } /// - protected override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken) + public override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken) { try { diff --git a/src/NextIteration.SpectreConsole.Auth/Commands/DeleteCredentialCommand.cs b/src/NextIteration.SpectreConsole.Auth/Commands/DeleteCredentialCommand.cs index 5a38da8..c132cc8 100644 --- a/src/NextIteration.SpectreConsole.Auth/Commands/DeleteCredentialCommand.cs +++ b/src/NextIteration.SpectreConsole.Auth/Commands/DeleteCredentialCommand.cs @@ -18,7 +18,7 @@ public sealed class DeleteCredentialCommand(ICredentialManager credentialManager private readonly ICredentialManager _credentialManager = credentialManager; /// - protected override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken) + public override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken) { try { diff --git a/src/NextIteration.SpectreConsole.Auth/Commands/ExportCredentialsCommand.cs b/src/NextIteration.SpectreConsole.Auth/Commands/ExportCredentialsCommand.cs index 38a75f7..1479966 100644 --- a/src/NextIteration.SpectreConsole.Auth/Commands/ExportCredentialsCommand.cs +++ b/src/NextIteration.SpectreConsole.Auth/Commands/ExportCredentialsCommand.cs @@ -20,7 +20,7 @@ public sealed class ExportCredentialsCommand(ICredentialManager credentialManage private readonly ICredentialManager _credentialManager = credentialManager; /// - protected override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken) + public override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken) { try { diff --git a/src/NextIteration.SpectreConsole.Auth/Commands/ImportCredentialsCommand.cs b/src/NextIteration.SpectreConsole.Auth/Commands/ImportCredentialsCommand.cs index 5382ad7..0ebd7fb 100644 --- a/src/NextIteration.SpectreConsole.Auth/Commands/ImportCredentialsCommand.cs +++ b/src/NextIteration.SpectreConsole.Auth/Commands/ImportCredentialsCommand.cs @@ -20,7 +20,7 @@ public sealed class ImportCredentialsCommand(ICredentialManager credentialManage private readonly ICredentialManager _credentialManager = credentialManager; /// - protected override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken) + public override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken) { try { diff --git a/src/NextIteration.SpectreConsole.Auth/Commands/ListCredentialsCommand.cs b/src/NextIteration.SpectreConsole.Auth/Commands/ListCredentialsCommand.cs index f4ae925..b334004 100644 --- a/src/NextIteration.SpectreConsole.Auth/Commands/ListCredentialsCommand.cs +++ b/src/NextIteration.SpectreConsole.Auth/Commands/ListCredentialsCommand.cs @@ -34,7 +34,7 @@ public sealed class Settings : AccountsCommandSettings } /// - protected override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken) + public override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken) { try { diff --git a/src/NextIteration.SpectreConsole.Auth/Commands/SelectCredentialCommand.cs b/src/NextIteration.SpectreConsole.Auth/Commands/SelectCredentialCommand.cs index 3c3d44f..7130134 100644 --- a/src/NextIteration.SpectreConsole.Auth/Commands/SelectCredentialCommand.cs +++ b/src/NextIteration.SpectreConsole.Auth/Commands/SelectCredentialCommand.cs @@ -19,7 +19,7 @@ public sealed class SelectCredentialCommand(ICredentialManager credentialManager private readonly ICredentialManager _credentialManager = credentialManager; /// - protected override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken) + public override async Task ExecuteAsync(CommandContext context, Settings settings, CancellationToken cancellationToken) { try { diff --git a/src/NextIteration.SpectreConsole.Auth/NextIteration.SpectreConsole.Auth.csproj b/src/NextIteration.SpectreConsole.Auth/NextIteration.SpectreConsole.Auth.csproj index fbda13a..ea1d023 100644 --- a/src/NextIteration.SpectreConsole.Auth/NextIteration.SpectreConsole.Auth.csproj +++ b/src/NextIteration.SpectreConsole.Auth/NextIteration.SpectreConsole.Auth.csproj @@ -12,7 +12,7 @@ NextIteration.SpectreConsole.Auth - 2.1.0 + 2.2.0 Credential storage, encryption, and Spectre.Console CLI commands for managing provider credentials in CLI tools. true $(MSBuildThisFileDirectory)..\..\artifacts\packages