Feature/Add Quartz.NET Integration for Background Job Scheduling#1263
Feature/Add Quartz.NET Integration for Background Job Scheduling#1263alnuaimicoder wants to merge 16 commits into
Conversation
- Add CommunityToolkit.Aspire.Hosting.Quartz (hosting integration) - Add CommunityToolkit.Aspire.Quartz (client integration) - Add CommunityToolkit.Aspire.Quartz.Abstractions (core abstractions) - Rename csproj files to match CommunityToolkit naming - Update package metadata Still TODO: - Update namespaces in C# files - Add unit and integration tests - Create example application - Add PublicAPI.txt files - Update documentation
- Remove custom metadata (handled by Directory.Build.props) - Add Description and AdditionalPackageTags - Update project references to use CommunityToolkit naming - Add 'client' and 'hosting' tags as required
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/CommunityToolkit/Aspire/main/eng/scripts/dogfood-pr.sh | bash -s -- 1263Or
iex "& { $(irm https://raw.githubusercontent.com/CommunityToolkit/Aspire/main/eng/scripts/dogfood-pr.ps1) } 1263" |
- Add api/ folders to all three projects - Add PublicAPI.Shipped.txt (empty for new integration) - Add PublicAPI.Unshipped.txt with all public APIs - Follows CommunityToolkit API tracking conventions
- Update package names in all README files - Update installation instructions - Point to aspire.dev for documentation - Remove references to original repository
- Mark completed tasks - Update remaining tasks list - Add time estimates - Clarify next steps
- Add QuartzResourceTests for hosting integration - Add QuartzClientTests for client integration - Test resource creation and configuration - Test service registration - Test JobOptions and RetryPolicy - All tests follow xUnit conventions
- Added Quartz, Quartz.Extensions.Hosting, Quartz.Serialization.Json packages (v3.16.1) - Added Npgsql (v10.0.2) and Microsoft.Data.SqlClient (v6.1.4) - Created unit tests for hosting and client components - Added XML documentation comments for all public APIs - Fixed test implementations to match actual API signatures - All tests passing (10 total: 4 hosting + 6 client)
- Added SignalR Client (v10.0.5) and Npgsql.EntityFrameworkCore.PostgreSQL (v10.0.1) - Started Quartz example structure in examples/quartz/ - Fixed ServiceDefaults to use correct OpenTelemetry API - Example needs namespace cleanup (in progress)
- Fixed namespace conflict in QuartzJobScheduler.cs using global:: qualifier - Removed OpenApi calls (AddOpenApi, MapOpenApi) - not needed - Removed EF Core migration code - using built-in QuartzMigrationService - Deleted EF Core Data folder and migrations - Updated README files to clarify automatic database migration - All 10 unit tests passing - Example application builds successfully
- Added three Quartz packages to integrations table - Added shield badges and documentation links - Positioned alphabetically between Python and KurrentDB
- Added Hosting.Quartz.Tests to integration tests matrix - Added Quartz.Tests to client tests matrix - Tests will run automatically on PRs and main branch
- Added 4 example projects in /examples/quartz/ folder - Added 3 source libraries in /src/ folder - Added 2 test projects in /tests/ folder - All projects alphabetically ordered
|
@dotnet-policy-service agree |
There was a problem hiding this comment.
Pull request overview
This PR adds a new Quartz.NET integration to the Aspire Community Toolkit, introducing three new packages (hosting, client, and abstractions), plus tests and a full example application to demonstrate scheduling and monitoring background jobs in Aspire-based solutions.
Changes:
- Added new Quartz integration packages:
CommunityToolkit.Aspire.Hosting.Quartz,CommunityToolkit.Aspire.Quartz, andCommunityToolkit.Aspire.Quartz.Abstractions. - Added unit tests for the hosting and client packages and wired them into CI.
- Added a Quartz end-to-end example (AppHost + ApiService + Blazor dashboard) and updated the repo README/solution/package versions accordingly.
Show a summary per file
| File | Description |
|---|---|
| tests/CommunityToolkit.Aspire.Quartz.Tests/QuartzClientTests.cs | Adds unit tests for abstractions/client types. |
| tests/CommunityToolkit.Aspire.Quartz.Tests/CommunityToolkit.Aspire.Quartz.Tests.csproj | Adds Quartz client test project. |
| tests/CommunityToolkit.Aspire.Hosting.Quartz.Tests/QuartzResourceTests.cs | Adds unit tests for Quartz hosting resource. |
| tests/CommunityToolkit.Aspire.Hosting.Quartz.Tests/CommunityToolkit.Aspire.Hosting.Quartz.Tests.csproj | Adds Quartz hosting test project. |
| src/CommunityToolkit.Aspire.Quartz/README.md | Documents client package usage and features. |
| src/CommunityToolkit.Aspire.Quartz/QuartzHealthCheck.cs | Adds Quartz scheduler health check. |
| src/CommunityToolkit.Aspire.Quartz/QuartzConstants.cs | Adds internal constants for the client integration. |
| src/CommunityToolkit.Aspire.Quartz/QuartzClientExtensions.cs | Registers Quartz client services (idempotency/OTel/health checks). |
| src/CommunityToolkit.Aspire.Quartz/JobSerializer.cs | Adds internal job payload serialization helper. |
| src/CommunityToolkit.Aspire.Quartz/IdempotencyStore.cs | Adds DB-backed idempotency key store. |
| src/CommunityToolkit.Aspire.Quartz/IDbConnectionFactory.cs | Introduces public DB connection factory abstraction + provider enum. |
| src/CommunityToolkit.Aspire.Quartz/DuplicateJobException.cs | Adds exception for duplicate idempotency-key scheduling. |
| src/CommunityToolkit.Aspire.Quartz/DbConnectionFactory.cs | Implements provider detection + connection creation for SQL Server/Postgres. |
| src/CommunityToolkit.Aspire.Quartz/CronExpressionValidator.cs | Adds cron expression validation helper. |
| src/CommunityToolkit.Aspire.Quartz/CommunityToolkit.Aspire.Quartz.csproj | Adds new client package project and dependencies. |
| src/CommunityToolkit.Aspire.Quartz/BackgroundJobClient.cs | Implements job enqueue/schedule logic using Quartz scheduling APIs. |
| src/CommunityToolkit.Aspire.Quartz/api/PublicAPI.Unshipped.txt | Adds public API tracking for client package. |
| src/CommunityToolkit.Aspire.Quartz/api/PublicAPI.Shipped.txt | Initializes shipped API baseline for client package. |
| src/CommunityToolkit.Aspire.Quartz.Abstractions/RetryPolicyBuilder.cs | Adds fluent retry policy builder. |
| src/CommunityToolkit.Aspire.Quartz.Abstractions/RetryPolicy.cs | Adds retry policy + backoff strategy types. |
| src/CommunityToolkit.Aspire.Quartz.Abstractions/README.md | Documents abstractions package. |
| src/CommunityToolkit.Aspire.Quartz.Abstractions/JobOptions.cs | Adds job options type (idempotency/retry/priority/tags). |
| src/CommunityToolkit.Aspire.Quartz.Abstractions/JobContext.cs | Adds job execution context type. |
| src/CommunityToolkit.Aspire.Quartz.Abstractions/IJob.cs | Adds job interface abstraction. |
| src/CommunityToolkit.Aspire.Quartz.Abstractions/IBackgroundJobClient.cs | Adds background job client contract. |
| src/CommunityToolkit.Aspire.Quartz.Abstractions/CommunityToolkit.Aspire.Quartz.Abstractions.csproj | Adds new abstractions package project. |
| src/CommunityToolkit.Aspire.Quartz.Abstractions/api/PublicAPI.Unshipped.txt | Adds public API tracking for abstractions package. |
| src/CommunityToolkit.Aspire.Quartz.Abstractions/api/PublicAPI.Shipped.txt | Initializes shipped API baseline for abstractions package. |
| src/CommunityToolkit.Aspire.Hosting.Quartz/SqlServerMigrationScript.cs | Adds SQL Server Quartz schema + idempotency table script. |
| src/CommunityToolkit.Aspire.Hosting.Quartz/README.md | Documents hosting package usage and features. |
| src/CommunityToolkit.Aspire.Hosting.Quartz/QuartzResourceExtensions.cs | Adds AppHost extension methods for Quartz resource modeling. |
| src/CommunityToolkit.Aspire.Hosting.Quartz/QuartzResource.cs | Adds Quartz resource model type. |
| src/CommunityToolkit.Aspire.Hosting.Quartz/QuartzMigrationService.cs | Adds startup migration service to create schema on first run. |
| src/CommunityToolkit.Aspire.Hosting.Quartz/QuartzHostingExtensions.cs | Adds service-collection extension for running Quartz + migrations. |
| src/CommunityToolkit.Aspire.Hosting.Quartz/PostgreSqlMigrationScript.cs | Adds PostgreSQL Quartz schema + idempotency table script. |
| src/CommunityToolkit.Aspire.Hosting.Quartz/CommunityToolkit.Aspire.Hosting.Quartz.csproj | Adds new hosting package project and dependencies. |
| src/CommunityToolkit.Aspire.Hosting.Quartz/api/PublicAPI.Unshipped.txt | Adds public API tracking for hosting package. |
| src/CommunityToolkit.Aspire.Hosting.Quartz/api/PublicAPI.Shipped.txt | Initializes shipped API baseline for hosting package. |
| README.md | Adds Quartz entries to the integrations table and NuGet links. |
| INTEGRATION_PROGRESS.md | Adds an integration progress checklist document. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css | Adds vendored Bootstrap asset for the sample UI. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.css | Adds vendored Bootstrap asset for the sample UI. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css | Adds vendored Bootstrap asset for the sample UI. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css | Adds vendored Bootstrap asset for the sample UI. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/wwwroot/app.css | Adds sample web app CSS. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/WeatherApiClient.cs | Adds sample web client for Weather endpoint. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Services/QuartzApiClient.cs | Adds sample web client for Quartz API endpoints. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Properties/launchSettings.json | Adds sample launch settings for the web frontend. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Program.cs | Configures the sample web frontend services/endpoints. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Components/Routes.razor | Adds sample routing component. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Components/Pages/Weather.razor | Adds sample Weather page. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Components/Pages/QuartzDashboard.razor | Adds a Quartz dashboard UI page. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Components/Pages/Home.razor | Adds sample Home page. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Components/Pages/Error.razor | Adds sample Error page. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Components/Pages/Counter.razor | Adds sample Counter page. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Components/Layout/NavMenu.razor.css | Adds sample navigation styling. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Components/Layout/NavMenu.razor | Adds sample navigation layout. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Components/Layout/MainLayout.razor.css | Adds main layout styling. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Components/Layout/MainLayout.razor | Adds main layout component. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Components/App.razor | Adds sample HTML host page and CSS includes. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/Components/_Imports.razor | Adds Razor imports for the sample UI. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/CommunityToolkit.Aspire.Hosting.Quartz.Web.csproj | Adds sample web project. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.Web/appsettings.json | Adds sample web app configuration. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ServiceDefaults/Extensions.cs | Adds service defaults for the example (OTel/health/service discovery). |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ServiceDefaults/CommunityToolkit.Aspire.Hosting.Quartz.ServiceDefaults.csproj | Adds service defaults project for the example. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.AppHost/Properties/launchSettings.json | Adds AppHost launch settings for the example. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.AppHost/CommunityToolkit.Aspire.Hosting.Quartz.AppHost.csproj | Adds example AppHost project. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.AppHost/appsettings.json | Adds example AppHost settings. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.AppHost/AppHost.cs | Defines the distributed app model for the Quartz example. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Services/QuartzJobScheduler.cs | Adds Quartz scheduling service used by the example API. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/QuartzSample.ApiService.http | Adds HTTP scratch file for example API. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Properties/launchSettings.json | Adds example API launch settings. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Program.cs | Adds sample Quartz API endpoints + SignalR hub wiring. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Listeners/QuartzJobListener.cs | Adds Quartz job listener broadcasting via SignalR. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Jobs/WebhookNotificationJob.cs | Adds sample job for webhook notifications. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Jobs/MetricsAggregationJob.cs | Adds sample job for metrics aggregation. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Jobs/HealthCheckJob.cs | Adds sample job for health check work. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Jobs/FileCleanupJob.cs | Adds sample job for cleanup work. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Jobs/EmailNotificationJob.cs | Adds sample job for email notifications. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Jobs/DataSyncJob.cs | Adds sample job for data sync work. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Jobs/DataCleanupJob.cs | Adds sample job for data cleanup work. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Jobs/DatabaseBackupJob.cs | Adds sample job for database backup work. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Jobs/DailyReportJob.cs | Adds sample job for report generation. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Jobs/CacheWarmupJob.cs | Adds sample job for cache warmup. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Jobs/ApiHealthMonitorJob.cs | Adds sample job for API monitoring. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Hubs/QuartzHub.cs | Adds SignalR hub for job events. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/Extensions/QuartzExtensions.cs | Adds helper to schedule jobs from config (example). |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/CommunityToolkit.Aspire.Hosting.Quartz.ApiService.csproj | Adds example API project. |
| examples/quartz/CommunityToolkit.Aspire.Hosting.Quartz.ApiService/appsettings.json | Adds example API configuration (Quartz schema + cron). |
| Directory.Packages.props | Adds centralized package versions for Quartz-related dependencies. |
| CommunityToolkit.Aspire.slnx | Adds new Quartz projects (src/tests/examples) to the solution. |
| .github/workflows/tests.yaml | Adds new Quartz test projects to the CI test matrix. |
Copilot's findings
- Files reviewed: 88/133 changed files
- Comments generated: 19
| namespace Aspire.Quartz; | ||
|
|
||
| /// <summary> | ||
| /// Marker interface for background jobs. | ||
| /// </summary> | ||
| public interface IJob | ||
| { | ||
| /// <summary> | ||
| /// Executes the job logic. | ||
| /// </summary> | ||
| /// <param name="context">The job execution context.</param> | ||
| /// <param name="cancellationToken">Cancellation token.</param> | ||
| Task ExecuteAsync(JobContext context, CancellationToken cancellationToken); | ||
| } |
| using Aspire.Quartz; | ||
| using Microsoft.Extensions.Configuration; | ||
| using Microsoft.Extensions.DependencyInjection; | ||
| using Microsoft.Extensions.Hosting; |
| /// <param name="services">The service collection.</param> | ||
| /// <param name="connectionName">The name of the connection string (default: "quartzdb").</param> | ||
| /// <param name="idempotencyExpiration">The expiration time for idempotency keys (default: 7 days).</param> | ||
| /// <returns>The service collection for chaining.</returns> | ||
| public static IServiceCollection AddQuartzClient( | ||
| this IServiceCollection services, | ||
| string connectionName = "quartzdb", | ||
| TimeSpan? idempotencyExpiration = null) |
| Aspire.Hosting.QuartzResourceExtensions | ||
| static Aspire.Hosting.QuartzResourceExtensions.AddQuartz(this Aspire.Hosting.IDistributedApplicationBuilder builder, string name) -> Aspire.Hosting.ApplicationModel.IResourceBuilder<Aspire.Hosting.ApplicationModel.QuartzResource>! | ||
| Aspire.Hosting.ApplicationModel.QuartzResource | ||
| Aspire.Hosting.ApplicationModel.QuartzResource.QuartzResource(string! name) -> void |
| ### High Priority (Required for PR approval) | ||
|
|
||
| - [ ] **Unit Tests** - Create comprehensive unit tests | ||
| - Test resource creation and configuration | ||
| - Test job client API (enqueue, schedule, cancel) | ||
| - Test idempotency store behavior | ||
| - Test retry policy logic | ||
| - Test job serialization | ||
|
|
||
| - [ ] **Integration Tests** - Create end-to-end tests | ||
| - Test with PostgreSQL (mark with `[RequiresDocker]`) | ||
| - Test database migration | ||
| - Test health checks | ||
| - Test OpenTelemetry traces | ||
| - Inherit from `IClassFixture<AspireIntegrationTestFixture<TExampleAppHost>>` | ||
|
|
||
| - [ ] **Example Application** - Create minimal example | ||
| - Move from `samples/` to `examples/Quartz/` | ||
| - Simplify to demonstrate core features only | ||
| - Remove SignalR (optional feature, not core) | ||
| - Update to use CommunityToolkit packages | ||
|
|
||
| ### Medium Priority (Can be done after initial PR) | ||
|
|
||
| - [ ] **Update CI Workflow** - Add tests to GitHub Actions | ||
| - Update `.github/workflows/tests.yml` | ||
| - Run `./eng/testing/generate-test-list-for-workflow.sh` | ||
|
|
||
| - [ ] **Update Main README** - Add integration to main repo README | ||
| - Add to integrations table | ||
| - Include links to packages | ||
|
|
| namespace CommunityToolkit.Aspire.Hosting.Quartz; | ||
|
|
||
| /// <summary> | ||
| /// Extension methods for adding Quartz.NET resources to an Aspire application. | ||
| /// </summary> | ||
| public static class QuartzResourceExtensions | ||
| { |
| namespace Aspire.Quartz; | ||
|
|
||
| /// <summary> | ||
| /// Extension methods for adding Quartz background job client to the service collection. | ||
| /// </summary> | ||
| public static class QuartzClientExtensions | ||
| { |
High Priority Fixes: - Remove custom IJob interface; constrain TJob to Quartz.IJob directly - Fix unused using directives (CS8019) in QuartzClientTests.cs and QuartzClientExtensions.cs - Fix AddQuartzClient connection string parameter ambiguity and README example - Fix PublicAPI.Unshipped.txt namespace mismatches across all three packages Medium Priority Fixes: - Move QuartzResourceExtensions to Aspire.Hosting namespace (repo convention) - Move QuartzResource to Aspire.Hosting.ApplicationModel namespace - Move QuartzClientExtensions to Microsoft.Extensions.Hosting with IHostApplicationBuilder - Remove vendored Bootstrap lib/; use bootstrap/bootstrap.min.css like other examples - Add SanitizeLogValue helper to address CodeQL CWE-117 log injection warnings - Remove outdated INTEGRATION_PROGRESS.md
alnuaimicoder
left a comment
There was a problem hiding this comment.
#1263 I've addressed the feedback and pushed the requested changes. Please take another look when you have time.
aaronpowell
left a comment
There was a problem hiding this comment.
Quick initial pass - we aren't using the PublicAPI.* files anymore and they should be removed.
| <PackageVersion Include="Microsoft.NET.StringTools" Version="17.11.48" /> | ||
| <PackageVersion Include="Microsoft.Build.Locator" Version="1.10.12" /> | ||
| <PackageVersion Include="Npgsql" Version="10.0.2" /> | ||
| <PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.1" /> |
There was a problem hiding this comment.
This dependency doesn't appear to be used and as a result it triggers a full test suite run of the solution (if we can't tell where something is used it triggers everything).
If it's needed, ensure there's a csproj that references it, otherwise it can be removed.
Closes #1259
Overview
This PR adds a production-ready integration for background job scheduling using Quartz.NET in .NET Aspire applications.
.NET Aspire currently lacks native support for background job scheduling. Developers must manually integrate Quartz.NET or Hangfire, configure persistence, set up observability, and implement idempotency themselves. This integration solves that problem by providing an Aspire-native solution.
What's Included
Three Packages
CommunityToolkit.Aspire.Hosting.Quartz (Hosting Integration)
CommunityToolkit.Aspire.Quartz (Client Integration)
IBackgroundJobClientfor dynamic job schedulingCommunityToolkit.Aspire.Quartz.Abstractions (Core Abstractions)
IJob,IBackgroundJobClientJobOptions,RetryPolicy,JobContextKey Features
Usage Example
AppHost
API Service
Job Definition
Proof of Concept
This integration has been published and tested:
PR Checklist
What's Completed
Core Implementation
Testing
Documentation
Example Application
Package Management
API Tracking
CI/CD Integration
Solution Integration
Testing Coverage
Unit Tests (10 tests - All Passing )
Client Tests (6 tests)
Hosting Tests (4 tests)
Integration Tests (Optional - Can be added later)
Other Information
Why This Integration Matters
Background job scheduling is a fundamental requirement for most production applications. Currently, .NET Aspire developers must:
This integration makes background jobs a first-class citizen in Aspire, just like databases, caches, and messaging.
Design Decisions
Aspire.Hostingfor discoverabilityMaintenance Commitment
I'm committed to:
Database Migration
The integration includes automatic database migration:
QuartzMigrationServicechecks if Quartz tables existProduction Features
Branch:
feature/add-quartz-integrationOriginal Repository: https://github.com/alnuaimicoder/aspire-hosting-quartz
Status: Ready for Review - All requirements met