tag:github.com,2008:https://github.com/dotnet/dotnet-operator-sdk/releases Tags from dotnet-operator-sdk 2026-05-21T13:27:29Z tag:github.com,2008:Repository/261514821/v11.1.0-prerelease.1 2026-05-21T13:29:24Z v11.1.0-prerelease.1 <p>feat: Add extension points for resource generation (<a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/pull/1118">#1118</a>)</p> <p><span class="issue-keyword tooltipped tooltipped-se">Closes</span> <a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/issues/1114">#1114</a></p> <p>### Summary</p> <p>Introduces factory interfaces that let operators customize how CRDs, <br />events, and webhook configurations are generated. All factories are <br />registered with `TryAdd`, so users can register their own <br />implementations before calling `AddKubernetesOperator()` / <br />`AddDevelopmentTunnel()` / `UseCertificateProvider()` to override the <br />defaults.</p> <p>### New abstractions (`KubeOps.Abstractions`)</p> <p>| Interface | Purpose | <br />|---|---| <br />| `ICrdResourceFactory` | Controls how `V1CustomResourceDefinition` <br />resources are created from entity types | <br />| `IEventResourceFactory` | Controls how `Corev1Event` instances are <br />constructed when publishing events | <br />| `IWebhookConfigurationFactory` | Controls how <br />`V1MutatingWebhookConfiguration` and `V1ValidatingWebhookConfiguration` <br />are built |</p> <p>Supporting types: `MutatingWebhookRegistration`, <br />`ValidatingWebhookRegistration` (records carrying entity metadata, URI, <br />and CA bundle).</p> <p>### Default implementations</p> <p>- **`KubeOpsCrdResourceFactory`** — Uses the transpiler with a single <br />shared `MetadataLoadContext` across all entity types. Exposes <br />`CreateCrdForEntityType()` as a virtual override point. <br />- **`KubeOpsEventResourceFactory`** — Builds `Corev1Event` with a <br />SHA-512 hashed name for Kubernetes naming compliance. <br />- **`KubeOpsWebhookConfigurationFactory`** — Constructs webhook configs <br />with virtual `CreateMutatingWebhook()` / `CreateValidatingWebhook()` <br />methods for per-webhook customization.</p> <p>### Other changes</p> <p>- **`IWebhookAttribute`** interface added to `KubeOps.Operator.Web` — <br />implemented by `MutationWebhookAttribute`, `ValidationWebhookAttribute`, <br />and `ConversionWebhookAttribute`. `WebhookServiceBase.GetWebHookUri()` <br />falls back to `RouteAttribute.Template` for backward compatibility with <br />custom attributes. <br />- **`CrdInstaller`** refactored to accept `ICrdResourceFactory` via DI <br />and includes retry logic with exponential backoff for transient API <br />server errors. <br />- **`KubeOpsEventPublisherFactory`** simplified — event construction <br />delegated to `IEventResourceFactory`; the publisher only handles <br />get-or-create, count increment, and save. <br />- Event name hashing and `originalName` annotation logic moved from the <br />publisher into `KubeOpsEventResourceFactory`.</p> <p>### Breaking changes</p> <p>None. All modified constructors are `internal`. New interfaces and types <br />are purely additive.</p> <p>### Tests</p> <p>- `CrdInstallerTest` — verifies custom factory DI override, transient <br />error retry, non-transient error handling, and stop cancellation. <br />- `KubeOpsCrdResourceFactoryTest` — verifies default CRD transpilation. <br />- `KubeOpsEventResourceFactoryTest` — verifies event properties and <br />namespace defaulting. <br />- `EventPublisherCustomResourceFactoryTest` — end-to-end test verifying <br />custom factory output flows through the publisher to the Kubernetes <br />client.</p> github-actions tag:github.com,2008:Repository/261514821/v11.0.1-prerelease.1 2026-05-20T06:08:44Z v11.0.1-prerelease.1 <p>deps(core): update dependency sonaranalyzer.csharp to 10.26.0.140279 (<a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/pull/1124">#…</a></p> <p><a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/pull/1124">…1124</a>)</p> <p>This PR contains the following updates:</p> <p>| Package | Change | <br />[Age](<a href="https://docs.renovatebot.com/merge-confidence/">https://docs.renovatebot.com/merge-confidence/</a>) | <br />[Confidence](<a href="https://docs.renovatebot.com/merge-confidence/">https://docs.renovatebot.com/merge-confidence/</a>) | <br />|---|---|---|---| <br />| <br />[SonarAnalyzer.CSharp](<a href="https://redirect.sonarsource.com/doc/sonar-visualstudio.html">https://redirect.sonarsource.com/doc/sonar-visualstudio.html</a>) <br />([source](<a href="https://redirect.github.com/SonarSource/sonar-dotnet">https://redirect.github.com/SonarSource/sonar-dotnet</a>)) | <br />`10.25.0.139117` → `10.26.0.140279` | <br />![age](<a href="https://developer.mend.io/api/mc/badges/age/nuget/SonarAnalyzer.CSharp/10.26.0.140279?slim=true">https://developer.mend.io/api/mc/badges/age/nuget/SonarAnalyzer.CSharp/10.26.0.140279?slim=true</a>) <br />| <br />![confidence](<a href="https://developer.mend.io/api/mc/badges/confidence/nuget/SonarAnalyzer.CSharp/10.25.0.139117/10.26.0.140279?slim=true">https://developer.mend.io/api/mc/badges/confidence/nuget/SonarAnalyzer.CSharp/10.25.0.139117/10.26.0.140279?slim=true</a>) <br />|</p> <p>---</p> <p>### Release Notes</p> <p>&lt;details&gt; <br />&lt;summary&gt;SonarSource/sonar-dotnet (SonarAnalyzer.CSharp)&lt;/summary&gt;</p> <p>### <br />[`v10.26.0.140279`](<a href="https://redirect.github.com/SonarSource/sonar-dotnet/releases/tag/10.26.0.140279">https://redirect.github.com/SonarSource/sonar-dotnet/releases/tag/10.26.0.140279</a>)</p> <p>[Compare <br />Source](<a href="https://redirect.github.com/SonarSource/sonar-dotnet/compare/10.25.0.139117...10.26.0.140279">https://redirect.github.com/SonarSource/sonar-dotnet/compare/10.25.0.139117...10.26.0.140279</a>)</p> <p>### Release notes - .NET Analyzers - 10.26</p> <p>##### Feature</p> <p>[NET-3694](<a href="https://sonarsource.atlassian.net/browse/NET-3694">https://sonarsource.atlassian.net/browse/NET-3694</a>) Update <br />RSPEC before 10.26 release</p> <p>##### False Positive</p> <p>[NET-2346](<a href="https://sonarsource.atlassian.net/browse/NET-2346">https://sonarsource.atlassian.net/browse/NET-2346</a>) Fix S1854 <br />FP: Variable used after another assignment in finally <br />[NET-2347](<a href="https://sonarsource.atlassian.net/browse/NET-2347">https://sonarsource.atlassian.net/browse/NET-2347</a>) Fix S1168 <br />FP: Do not report on value types <br />[NET-3698](<a href="https://sonarsource.atlassian.net/browse/NET-3698">https://sonarsource.atlassian.net/browse/NET-3698</a>) Fix S1210 <br />FP: file-scoped types should be exempt</p> <p>##### False Negative</p> <p>[NET-1265](<a href="https://sonarsource.atlassian.net/browse/NET-1265">https://sonarsource.atlassian.net/browse/NET-1265</a>) Fix S2930 <br />FN: raise issues on non-disposed RegistryKeys <br />[NET-2685](<a href="https://sonarsource.atlassian.net/browse/NET-2685">https://sonarsource.atlassian.net/browse/NET-2685</a>) Fix S3604 <br />FN: Field Keyword, Partial Constructors, NullConditional Assignment <br />[NET-2812](<a href="https://sonarsource.atlassian.net/browse/NET-2812">https://sonarsource.atlassian.net/browse/NET-2812</a>) Fix S4275 <br />FN: Field Keyword <br />[NET-2999](<a href="https://sonarsource.atlassian.net/browse/NET-2999">https://sonarsource.atlassian.net/browse/NET-2999</a>) Fix S6672 <br />FN: Mismatch in primary constructor is not recognized</p> <p>&lt;/details&gt;</p> <p>---</p> <p>### Configuration</p> <p>📅 **Schedule**: (in timezone Europe/Zurich)</p> <p>- Branch creation <br /> - "after 9pm,before 6am" <br />- Automerge <br /> - At any time (no schedule defined)</p> <p>🚦 **Automerge**: Enabled.</p> <p>♻ **Rebasing**: Whenever PR is behind base branch, or you tick the <br />rebase/retry checkbox.</p> <p>🔕 **Ignore**: Close this PR and you won't be reminded about this update <br />again.</p> <p>---</p> <p>- [ ] &lt;!-- rebase-check --&gt;If you want to rebase/retry this PR, check <br />this box</p> <p>---</p> <p>This PR was generated by [Mend Renovate](<a href="https://mend.io/renovate/">https://mend.io/renovate/</a>). <br />View the [repository job <br />log](<a href="https://developer.mend.io/github/dotnet/dotnet-operator-sdk">https://developer.mend.io/github/dotnet/dotnet-operator-sdk</a>).</p> <p>&lt;!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xODUuMSIsInVwZGF0ZWRJblZlciI6IjQzLjE4NS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--&gt;</p> <p>---------</p> <p>Co-authored-by: renovate[bot] &lt;29139614+renovate[bot]@users.noreply.github.com&gt; <br />Co-authored-by: Marcus Kimpenhaus &lt;kimpenhaus@devil-engineering.de&gt;</p> github-actions tag:github.com,2008:Repository/261514821/v11.0.0 2026-05-19T12:56:03Z v11.0.0 <p>deps(test): update dependency coverlet.collector to 10.0.1 (<a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/pull/1123">#1123</a>)</p> <p>This PR contains the following updates:</p> <p>| Package | Change | <br />[Age](<a href="https://docs.renovatebot.com/merge-confidence/">https://docs.renovatebot.com/merge-confidence/</a>) | <br />[Confidence](<a href="https://docs.renovatebot.com/merge-confidence/">https://docs.renovatebot.com/merge-confidence/</a>) | <br />|---|---|---|---| <br />| <br />[coverlet.collector](<a href="https://redirect.github.com/coverlet-coverage/coverlet">https://redirect.github.com/coverlet-coverage/coverlet</a>) <br />| `10.0.0` → `10.0.1` | <br />![age](<a href="https://developer.mend.io/api/mc/badges/age/nuget/coverlet.collector/10.0.1?slim=true">https://developer.mend.io/api/mc/badges/age/nuget/coverlet.collector/10.0.1?slim=true</a>) <br />| <br />![confidence](<a href="https://developer.mend.io/api/mc/badges/confidence/nuget/coverlet.collector/10.0.0/10.0.1?slim=true">https://developer.mend.io/api/mc/badges/confidence/nuget/coverlet.collector/10.0.0/10.0.1?slim=true</a>) <br />|</p> <p>---</p> <p>### Release Notes</p> <p>&lt;details&gt; <br />&lt;summary&gt;coverlet-coverage/coverlet (coverlet.collector)&lt;/summary&gt;</p> <p>### <br />[`v10.0.1`](<a href="https://redirect.github.com/coverlet-coverage/coverlet/releases/tag/v10.0.1">https://redirect.github.com/coverlet-coverage/coverlet/releases/tag/v10.0.1</a>)</p> <p>##### Improvements</p> <p>- Coverlet with MTP 2 doesn't show test coverage statistic in console <br />[#&amp;#8203;1907](<a href="https://redirect.github.com/coverlet-coverage/coverlet/issues/1907">https://redirect.github.com/coverlet-coverage/coverlet/issues/1907</a>) <br />- Avoid unnecessary testhost restarts <br />[#&amp;#8203;1912](<a href="https://redirect.github.com/coverlet-coverage/coverlet/issues/1912">https://redirect.github.com/coverlet-coverage/coverlet/issues/1912</a>) <br />by &lt;<a href="https://github.com/mawosoft">https://github.com/mawosoft</a>&gt;</p> <p>##### Fixed</p> <p>- Fix inconsistent paths in cobertura reports <br />[#&amp;#8203;1723](<a href="https://redirect.github.com/coverlet-coverage/coverlet/issues/1723">https://redirect.github.com/coverlet-coverage/coverlet/issues/1723</a>) <br />- Fix when using "is" with "and" in pattern matching, branch coverage is <br />lower than normal <br />[#&amp;#8203;1313](<a href="https://redirect.github.com/coverlet-coverage/coverlet/issues/1313">https://redirect.github.com/coverlet-coverage/coverlet/issues/1313</a>) <br />- Fix Coverlet flagging a branch for an async functions finally block <br />where none exists <br />[#&amp;#8203;1337](<a href="https://redirect.github.com/coverlet-coverage/coverlet/issues/1337">https://redirect.github.com/coverlet-coverage/coverlet/issues/1337</a>) <br />- Fix Coverlet Tracker Missing CompilerGeneratedAttribute <br />[#&amp;#8203;1828](<a href="https://redirect.github.com/coverlet-coverage/coverlet/issues/1828">https://redirect.github.com/coverlet-coverage/coverlet/issues/1828</a>)</p> <p>##### Maintenance</p> <p>- Add architecture docs and diagrams for all integrations <br />[#&amp;#8203;1927](<a href="https://redirect.github.com/coverlet-coverage/coverlet/pull/1927">https://redirect.github.com/coverlet-coverage/coverlet/pull/1927</a>) <br />- Update NuGet packages and .NET SDK versions <br />[#&amp;#8203;1933](<a href="https://redirect.github.com/coverlet-coverage/coverlet/pull/1933">https://redirect.github.com/coverlet-coverage/coverlet/pull/1933</a>)</p> <p>[Diff between 10.0.0 and <br />10.0.1](<a href="https://redirect.github.com/coverlet-coverage/coverlet/compare/v10.0.0...v10.0.1">https://redirect.github.com/coverlet-coverage/coverlet/compare/v10.0.0...v10.0.1</a>)</p> <p>&lt;/details&gt;</p> <p>---</p> <p>### Configuration</p> <p>📅 **Schedule**: (in timezone Europe/Zurich)</p> <p>- Branch creation <br /> - "after 9pm,before 6am" <br />- Automerge <br /> - At any time (no schedule defined)</p> <p>🚦 **Automerge**: Enabled.</p> <p>♻ **Rebasing**: Whenever PR is behind base branch, or you tick the <br />rebase/retry checkbox.</p> <p>🔕 **Ignore**: Close this PR and you won't be reminded about this update <br />again.</p> <p>---</p> <p>- [ ] &lt;!-- rebase-check --&gt;If you want to rebase/retry this PR, check <br />this box</p> <p>---</p> <p>This PR was generated by [Mend Renovate](<a href="https://mend.io/renovate/">https://mend.io/renovate/</a>). <br />View the [repository job <br />log](<a href="https://developer.mend.io/github/dotnet/dotnet-operator-sdk">https://developer.mend.io/github/dotnet/dotnet-operator-sdk</a>).</p> <p>&lt;!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xODIuMiIsInVwZGF0ZWRJblZlciI6IjQzLjE4Mi4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJkZXBlbmRlbmNpZXMiXX0=--&gt;</p> <p>Co-authored-by: renovate[bot] &lt;29139614+renovate[bot]@users.noreply.github.com&gt;</p> github-actions tag:github.com,2008:Repository/261514821/v11.0.0-prerelease.1 2026-05-15T12:40:05Z v11.0.0-prerelease.1 <p>feat(kubernetes-client): add field selector support (<a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/pull/1094">#1094</a>)</p> <p>- Replaced individual label selector classes with a unified <br />`LabelSelector` hierarchy under `Selectors` namespace. <br />- Added `FieldSelector` hierarchy following a similar model to support <br />field-based filtering. <br />- Extended `KubernetesClient` and `ResourceWatcher` to handle both label <br />and field selectors for enhanced query capabilities. <br />- Updated `OperatorBuilder` with methods to register custom label and <br />field selectors for controllers. <br />- Improved test coverage with label and field selector functionality <br />verification. <br />- Removed obsolete or redundant selector implementations.</p> <p>BREAKING CHANGE: <br />The `LabelSelectors` namespace is renamed to `Selectors`. <br />To migrate, rename the namespaces.</p> <p>BREAKING CHANGE: <br />The `DefaultEntityLabelSelector` class is now sealed instead <br />of public. To mitigate, use the implementation with the interface <br />(intended way) instead of subclassing the default selector.</p> github-actions tag:github.com,2008:Repository/261514821/v10.6.0-prerelease.1 2026-05-14T17:52:39Z v10.6.0-prerelease.1 <p>feat: Add `ToIdentifierString` overloads (<a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/pull/1120">#1120</a>)</p> <p>This is for convenience and consistency when the operator needs to log <br />some object identity or reference.</p> github-actions tag:github.com,2008:Repository/261514821/v10.5.0 2026-05-12T12:33:49Z v10.5.0 <p>feat(crds): introduce retry with backoff pattern to crd-installer (<a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/pull/1103">#1103</a></p> <p><a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/pull/1103"></a>)</p> <p>- Introduced retry mechanism with exponential backoff for CRD <br />installation to handle transient errors. <br />- Added `CrdInstallerSettingsBuilder` for configuring <br />`CrdInstallerSettings` using a fluent API. <br />- Updated templates and documentation to reflect new <br />`WithOverwriteExisting` and `WithDeleteOnShutdown` APIs. <br />- Added extensive unit tests for new settings, builder, and CRD <br />installer behavior to ensure stability.</p> github-actions tag:github.com,2008:Repository/261514821/v10.5.0-prerelease.5 2026-05-12T07:58:14Z v10.5.0-prerelease.5 <p>feat(crds): introduce retry with backoff pattern to crd-installer (<a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/pull/1103">#1103</a></p> <p><a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/pull/1103"></a>)</p> <p>- Introduced retry mechanism with exponential backoff for CRD <br />installation to handle transient errors. <br />- Added `CrdInstallerSettingsBuilder` for configuring <br />`CrdInstallerSettings` using a fluent API. <br />- Updated templates and documentation to reflect new <br />`WithOverwriteExisting` and `WithDeleteOnShutdown` APIs. <br />- Added extensive unit tests for new settings, builder, and CRD <br />installer behavior to ensure stability.</p> github-actions tag:github.com,2008:Repository/261514821/v10.5.0-prerelease.4 2026-05-08T14:23:15Z v10.5.0-prerelease.4 github-actions tag:github.com,2008:Repository/261514821/v10.5.0-prerelease.3 2026-05-08T06:07:13Z v10.5.0-prerelease.3 <p>feat(CRDS): add ScaleSubresourceAttribute for enabling HPA scaling (<a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/pull/1095">#…</a></p> <p><a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/pull/1095">…1095</a>)</p> <p>- Introduced `ScaleSubresourceAttribute` to facilitate HPA scaling by <br />enabling scale subresources on CRDs. <br />- Updated transpiler logic and tests to ensure compatibility with scale <br />subresources, including verification for replicas and label selectors.</p> <p><span class="issue-keyword tooltipped tooltipped-se">fixes</span> <a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/issues/924">#924</a></p> github-actions tag:github.com,2008:Repository/261514821/v10.5.0-prerelease.2 2026-05-08T05:32:29Z v10.5.0-prerelease.2 <p>feat(crds): add support for marking `spec` as required via `[Required…</p> <p>…]` attribute at class level or by auto-infer from direct nested required properties (<a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/pull/1097">#1097</a>)</p> <p><span class="issue-keyword tooltipped tooltipped-se">fixes</span> <a class="issue-link js-issue-link" href="https://github.com/dotnet/dotnet-operator-sdk/issues/885">#885</a></p> github-actions