Skip to content

Release: Health Checks, Storage (file + S3), and ASP.NET Core health bridge#7

Merged
tgiachi merged 23 commits into
mainfrom
develop
Jun 23, 2026
Merged

Release: Health Checks, Storage (file + S3), and ASP.NET Core health bridge#7
tgiachi merged 23 commits into
mainfrom
develop

Conversation

@tgiachi

@tgiachi tgiachi commented Jun 23, 2026

Copy link
Copy Markdown
Owner

Summary

Release candidate from develop. Adds three feature areas plus documentation.

  • Health ChecksIHealthCheck / IHealthCheckService with a parallel aggregator (per-check timeout + exception isolation), RegisterHealthChecksService().
  • Storage — extracted contracts into SquidStd.Storage.Abstractions, moved the file/YAML provider into SquidStd.Storage (opt-in AddFileStorage), and added an S3/MinIO provider SquidStd.Storage.S3 (AddS3Storage). Added ListKeysAsync (streaming, prefix filter) across all providers.
  • ASP.NET Core health bridgeAddSquidStdHealthChecks() maps every SquidStd IHealthCheck into the standard Microsoft.Extensions.Diagnostics.HealthChecks system, exposed via app.MapHealthChecks(...).
  • Docs — package READMEs + DocFX articles for the new packages, serialization/scheduler/health-checks articles, toc and root index updates, accuracy fixes in Core/Services.Core READMEs.

Notable changes

  • Storage is now opt-in (no longer auto-registered by RegisterCoreServices); FileSecretStore keeps working by constructing FileStorageService internally.
  • New packages: SquidStd.Storage.Abstractions, SquidStd.Storage, SquidStd.Storage.S3.

Test plan

  • dotnet build SquidStd.slnx — succeeds.
  • dotnet test — 517 passed, 0 failed (incl. Testcontainers integration tests for RabbitMQ, Redis, MinIO; requires Docker).
  • DocFX site builds with 0 warnings / 0 errors.

tgiachi added 18 commits June 22, 2026 19:17
…storage opt-in

- move FileStorageService/YamlObjectStorageService/StoragePathResolver into SquidStd.Storage
- add AddFileStorage opt-in registration; drop RegisterStorageServices from core
- FileSecretStore references SquidStd.Storage.Services for FileStorageService
- split the mixed storage/secret test file: storage -> tests/Storage, secrets -> tests/Security
- update RegisterDefaultServicesExtensionsTests for opt-in storage
- MinioContainerFixture + S3StorageServiceTests (roundtrip/missing/exists-delete/ctor)
- make S3StorageService IDisposable (disposes the MinIO client and bucket lock, fixes CA1001)
@github-advanced-security

Copy link
Copy Markdown
Contributor

You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool.

What Enabling Code Scanning Means:

  • The 'Security' tab will display more code scanning analysis results (e.g., for the default branch).
  • Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results.
  • You will be able to see the analysis results for the pull request's branch on this overview once the scans have completed and the checks have passed.

For more information about GitHub Code Scanning, check out the documentation.

Comment thread src/SquidStd.Storage.S3/Services/S3StorageService.cs Fixed
Comment thread src/SquidStd.Storage.S3/Services/S3StorageService.cs Fixed
Comment thread tests/SquidStd.Tests/Health/HealthCheckRegistrationTests.cs Fixed
Comment thread tests/SquidStd.Tests/Storage/StorageRegistrationTests.cs Fixed
Comment on lines +110 to +113
catch (Exception ex)
{
return (check.Name, HealthCheckResult.Unhealthy(ex.Message, ex) with { Duration = stopwatch.Elapsed });
}
var health = app.Services.GetRequiredService<HealthCheckService>();
var report = await health.CheckHealthAsync();

Assert.True(report.Entries.ContainsKey("alpha"));
var report = await health.CheckHealthAsync();

Assert.True(report.Entries.ContainsKey("alpha"));
Assert.True(report.Entries.ContainsKey("beta"));
Comment thread tests/SquidStd.Tests/Storage/StorageRegistrationTests.cs Fixed
tgiachi and others added 4 commits June 23, 2026 10:12
… on local IDisposable'

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
… on local IDisposable'

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
… on local IDisposable'

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Comment thread src/SquidStd.Storage.S3/Services/S3StorageService.cs Fixed
[Fact]
public async Task AddFileStorage_ResolvesAndRoundTrips()
{
var root = Path.Combine(Path.GetTempPath(), "squidstd-storage-" + Guid.NewGuid().ToString("N"));
The CodeQL autofix wrapped the MinioClient builder in 'using var', which broke
the subsequent reassignment (CS1656). Move construction into a static CreateClient
helper that returns the built client (owned by _client and disposed in Dispose),
so the reassignment is valid and the IDisposable escapes the method.

private static IMinioClient CreateClient(S3StorageOptions options)
{
var minio = new MinioClient()
@tgiachi
tgiachi merged commit 3e8726d into main Jun 23, 2026
3 checks passed
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