chore(deps): Bump the nuget-dependencies group with 11 updates - #48
Open
dependabot[bot] wants to merge 1 commit into
Open
dependabot[bot] wants to merge 1 commit into
dependabot[bot] wants to merge 1 commit into
Conversation
Bumps MessagePack from 3.1.9 to 3.1.10 Bumps MessagePack.Annotations from 3.1.9 to 3.1.10 Bumps Microsoft.Playwright.Xunit from 1.62.0 to 1.63.0 Bumps OpenTelemetry.Exporter.OpenTelemetryProtocol from 1.19.0 to 1.19.1 Bumps OpenTelemetry.Extensions.Hosting from 1.19.0 to 1.19.1 Bumps PatternKit.Core from 0.147.26 to 0.147.27 Bumps Quartz from 4.1.1 to 4.2.0 Bumps Quartz.AspNetCore from 4.1.1 to 4.2.0 Bumps TinyBDD from 0.19.40 to 0.19.42 Bumps TinyBDD.Xunit from 0.19.40 to 0.19.42 Bumps WireMock.Net from 2.16.0 to 2.18.0 --- updated-dependencies: - dependency-name: MessagePack dependency-version: 3.1.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-dependencies - dependency-name: MessagePack.Annotations dependency-version: 3.1.10 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-dependencies - dependency-name: Microsoft.Playwright.Xunit dependency-version: 1.63.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-dependencies - dependency-name: OpenTelemetry.Exporter.OpenTelemetryProtocol dependency-version: 1.19.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-dependencies - dependency-name: OpenTelemetry.Extensions.Hosting dependency-version: 1.19.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-dependencies - dependency-name: PatternKit.Core dependency-version: 0.147.27 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-dependencies - dependency-name: Quartz dependency-version: 4.2.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-dependencies - dependency-name: Quartz.AspNetCore dependency-version: 4.2.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-dependencies - dependency-name: TinyBDD dependency-version: 0.19.42 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-dependencies - dependency-name: TinyBDD.Xunit dependency-version: 0.19.42 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-dependencies - dependency-name: WireMock.Net dependency-version: 2.18.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-dependencies ... Signed-off-by: dependabot[bot] <support@github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updated MessagePack from 3.1.9 to 3.1.10.
Release notes
Sourced from MessagePack's releases.
3.1.10
Security fix
Other fixes
New Contributors
Full Changelog: MessagePack-CSharp/MessagePack-CSharp@v3.1.9...v3.1.10
Commits viewable in compare view.
Updated MessagePack.Annotations from 3.1.9 to 3.1.10.
Release notes
Sourced from MessagePack.Annotations's releases.
3.1.10
Security fix
Other fixes
New Contributors
Full Changelog: MessagePack-CSharp/MessagePack-CSharp@v3.1.9...v3.1.10
Commits viewable in compare view.
Updated Microsoft.Playwright.Xunit from 1.62.0 to 1.63.0.
Release notes
Sourced from Microsoft.Playwright.Xunit's releases.
1.63.0
🪟 Locate across frames
Page.FrameLocator() and Frame.FrameLocator() called without a selector search in any frame of the
subtree, so you no longer need to locate the iframe first:
The rest of the locator resolves inside a single frame, just like a regular locator, and an error is thrown when it
matches elements in several frames.
👁️ Visible-only locators
New Locator.Visible returns a locator that matches only visible elements. It is the recommended
replacement for the
:visibleCSS pseudo-class:🖼️ Aria and screen snapshots in traces
New
AriaSnapshotsandScreenSnapshotsoptions of Tracing.StartAsync() capture an aria snapshot and a screenshot of the page on every action:With aria and screen snapshots recorded, the new Display Aria mode in the trace viewer shows the action screenshot
side by side with the aria snapshot, and hovering an aria node highlights it on the screenshot.
New APIs
Browser and Context
HttpCredentialsListnow also accepts an array of credentials. The first entry matching the request origin is used, and entries without an origin match any request.Opfsincludes the origin private file system in the storage state, so it can be persisted and restored into later contexts.Command line
pwsh bin/Debug/netX/playwright.ps1 install --no-removekeeps the browsers of other Playwright installations instead of removing them.pwsh bin/Debug/netX/playwright.ps1 codegen --http-credentialsrecords against pages behind HTTP authentication.Announcements
... (truncated)
Commits viewable in compare view.
Updated OpenTelemetry.Exporter.OpenTelemetryProtocol from 1.19.0 to 1.19.1.
Release notes
Sourced from OpenTelemetry.Exporter.OpenTelemetryProtocol's releases.
1.19.1
For highlights and announcements pertaining to this release see: Release Notes > 1.19.1.
The following changes are from the previous release 1.19.0.
NuGet: OpenTelemetry v1.19.1
NotSupportedExceptionthrown when building aTracerProviderorMeterProviderwith a large number of wildcard source/meter patterns onnet8.0, and a relatedOutOfMemoryExceptionthat could occur when many such providers were built over the lifetime of a process.(#7788)
See CHANGELOG for details.
NuGet: OpenTelemetry.Api v1.19.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Api.ProviderBuilderExtensions v1.19.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.Console v1.19.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.InMemory v1.19.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.OpenTelemetryProtocol v1.19.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.Zipkin v1.19.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Extensions.Hosting v1.19.1
No notable changes.
... (truncated)
1.19.1-rc.1
The following changes are from the previous release 1.19.0.
NuGet: OpenTelemetry v1.19.1-rc.1
NotSupportedExceptionthrown when building aTracerProviderorMeterProviderwith a large number of wildcard source/meter patterns onnet8.0, and a relatedOutOfMemoryExceptionthat could occur when many such providers were built over the lifetime of a process.(#7788)
See CHANGELOG for details.
NuGet: OpenTelemetry.Api v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Api.ProviderBuilderExtensions v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.Console v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.InMemory v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.OpenTelemetryProtocol v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.Zipkin v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Extensions.Hosting v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
... (truncated)
1.19.1-beta.1
The following changes are from the previous release 1.19.0-beta.1.
NuGet: OpenTelemetry.Exporter.Prometheus.AspNetCore v1.19.1-beta.1
1.19.1.(#7796)
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.Prometheus.HttpListener v1.19.1-beta.1
1.19.1.(#7796)
See CHANGELOG for details.
NuGet: OpenTelemetry.Shims.OpenTracing v1.19.1-beta.1
1.19.1.(#7796)
See CHANGELOG for details.
Commits viewable in compare view.
Updated OpenTelemetry.Extensions.Hosting from 1.19.0 to 1.19.1.
Release notes
Sourced from OpenTelemetry.Extensions.Hosting's releases.
1.19.1
For highlights and announcements pertaining to this release see: Release Notes > 1.19.1.
The following changes are from the previous release 1.19.0.
NuGet: OpenTelemetry v1.19.1
NotSupportedExceptionthrown when building aTracerProviderorMeterProviderwith a large number of wildcard source/meter patterns onnet8.0, and a relatedOutOfMemoryExceptionthat could occur when many such providers were built over the lifetime of a process.(#7788)
See CHANGELOG for details.
NuGet: OpenTelemetry.Api v1.19.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Api.ProviderBuilderExtensions v1.19.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.Console v1.19.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.InMemory v1.19.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.OpenTelemetryProtocol v1.19.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.Zipkin v1.19.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Extensions.Hosting v1.19.1
No notable changes.
... (truncated)
1.19.1-rc.1
The following changes are from the previous release 1.19.0.
NuGet: OpenTelemetry v1.19.1-rc.1
NotSupportedExceptionthrown when building aTracerProviderorMeterProviderwith a large number of wildcard source/meter patterns onnet8.0, and a relatedOutOfMemoryExceptionthat could occur when many such providers were built over the lifetime of a process.(#7788)
See CHANGELOG for details.
NuGet: OpenTelemetry.Api v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Api.ProviderBuilderExtensions v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.Console v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.InMemory v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.OpenTelemetryProtocol v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.Zipkin v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
NuGet: OpenTelemetry.Extensions.Hosting v1.19.1-rc.1
No notable changes.
See CHANGELOG for details.
... (truncated)
1.19.1-beta.1
The following changes are from the previous release 1.19.0-beta.1.
NuGet: OpenTelemetry.Exporter.Prometheus.AspNetCore v1.19.1-beta.1
1.19.1.(#7796)
See CHANGELOG for details.
NuGet: OpenTelemetry.Exporter.Prometheus.HttpListener v1.19.1-beta.1
1.19.1.(#7796)
See CHANGELOG for details.
NuGet: OpenTelemetry.Shims.OpenTracing v1.19.1-beta.1
1.19.1.(#7796)
See CHANGELOG for details.
Commits viewable in compare view.
Updated PatternKit.Core from 0.147.26 to 0.147.27.
Release notes
Sourced from PatternKit.Core's releases.
0.147.27
What's Changed
Full Changelog: JerrettDavis/PatternKit@v0.147.26...v0.147.27
Commits viewable in compare view.
Updated Quartz from 4.1.1 to 4.2.0.
Release notes
Sourced from Quartz's releases.
4.2.0
Quartz.NET 4.2 is an additive minor: every public change is a new type, a new member on a type we own, or a default interface member, and its one schema change is a generated migration under
database/migrations/4.2/that a mixed 4.1/4.2 cluster runs safely. A 4.0 or 4.1 application upgrades by changing the version and, on a persistent store, running that migration before the first 4.2 node starts. The headline is that a job can be declared on its class —[QuartzJob]and[CronTrigger]— with the cron expression checked by the compiler, and that one trigger can wait, in the store, for another's outcome.Highlights
Quartz.nupkgnow carries an analyzer underanalyzers/dotnet/cs:QZ0001refuses a cron literal the parser would refuse — atWithCronSchedule,CronScheduleBuilder.Create, theCronExpressionconstructors and parse members,CronCalendarandCronTriggerImpl, honouring a literalCronFormat.Unix— with the parser's own message;QZ0002refuses a[JobTimeout("…")]that does not parse or is negative;QZ0003warns on[PersistJobDataAfterExecution]without[DisallowConcurrentExecution];QZ0004(Info) notes anExecutethat never observes its cancellation token. The analyzer isnetstandard2.0and links the cron parser's own sources rather than a second grammar, so a literal the compiler accepts is one the scheduler accepts; a parity corpus of 128 expressions pins that.<DisableQuartzAnalyzers>true</DisableQuartzAnalyzers>in the project file turns it off (#3846) —ExcludeAssets="analyzers"does not, on the .NET 10 SDK; the package's dependencies are unchanged. (#3803, #3815)[QuartzJob(Name, Group, Description, Durable, RequestRecovery, Scheduler)]on anIJoband one[CronTrigger("…", Name, Group, TimeZone, MisfireInstruction, Priority, Description, ExecutionGroup)]per schedule are read by a source generator insideQuartz.nupkg, which writes anAddDeclaredJobs()extension forIQuartzBuildercalling the sameAddJob<T>/AddTrigger<T>you would have written — no reflection, nothing to root for trimming, and the cron expression checked at compile time byQZ0001.QZ1001–QZ1003refuse an attribute on a type that is not a concreteIJob, two declarations with one identity, and a[CronTrigger]without[QuartzJob].Scheduler = "…"binds a declaration to one named scheduler.[SimpleTrigger]and a cron read from configuration are the deliberate follow-ups. (#3804, #3818)TriggerBuilder.StartAfter(parentKey, condition)— orscheduler.ScheduleJob<TJob,TInput>(input, Continuation.After(parentKey), …)for a one-off — stores a trigger in the new stateAwaiting; when the parent's firing ends, its completion settles every continuation inside its own transaction, on whichever node ran it: a matching outcome (OnSuccess,OnFailure,OnCancellation,OnVeto, orOnAnyOutcome) releases the trigger to fire now, any other discards it, and a scheduled retry settles nothing. A parent deleted while continuations wait releases theOnAnyOutcomeones and parks the rest inError. Every store call that completes a firing now carriesExecutionOutcomeand the exception throughTriggeredJobCompleteContext.JobChainingJobListenerkeeps the recurring case and gains a condition. A continuation can be declared inquartz_jobs.xml(<continues-after>,<continuation-condition>), inquartz_jobs.jsonand theQuartz:Schedulesection (ContinuesAfter,ContinuationCondition), scheduled over the wire, and seen in the dashboard — an Awaiting filter on Triggers, and "Continues after" and "When" on a trigger's detail. Job Continuations is the page. (#3805, #3806, #3819, #3821)IJobExecutionContext.OutcomeandRetryScheduledtell a listener what the job did and whether a retry follows;ITriggerListener.TriggerRetriesExhaustedis raised once when a policy runs out (a default interface member, so no listener needs to change); the counterquartz.trigger.retries_exhaustedcounts it; execution history records the attempt and whether a retry was scheduled, the History page and the history routes filter on "failed after retries", and a final failure on the History page has a Run again button, recorded in the Action Log.RetryPolicy.Exponentialtakes an optional jitter that spreads the attempts. One correction rides along:IJobExecutionContext.RetryAttemptnow reports the attempt the firing is to listeners as well — it used to read the trigger's field afterExecutionCompletehad already advanced or cleared it. (#3807, #3829)GetNextValidTimeAfterused to make eightTimeZoneInfoqueries per answer; it now walks the expression's own bitmasks on the wall clock and resolves the offset through a per-zone table of safe segments — intervals verified against the zone's own answers, with everything within 48 hours of a transition, and every zone the table cannot verify, left to the existing code. Every DST edge case still runs the code that handled it before, and a differential test compares the two paths to the tick across ten zones, half of its instants near transitions. On the machine the benchmark README names:0 0/5 * * * ?421 → 36.5 ns and 100 successive occurrences 43.1 → 3.5 µs, zero allocations, against NCrontab's 25.3 ns and 2.7 µs; the second-level form now beats NCrontab. The one cost is 8 bytes on eachCronExpression. (#3801, #3820)src/Quartz.Benchmark.Competitors/runs the same five workloads against TickerQ 10.4.0 and Hangfire 1.8.25 — firing throughput in memory and on PostgreSQL, schedule-to-execute latency, punctuality of one-second schedules, and the cost of one schedule call — with completion counted inside the executing job on every side, and the benchmark README and the operations page carry the tables, the rows Quartz loses included. On the box the README names, Quartz at its defaults executes 181,000–257,000 in-memory one-offs a second (TickerQ 98,000–115,000, Hangfire 58,000–92,000), reachesExecute58–70 µs afterScheduleJob(TickerQ 14.7 ms, Hangfire 94–235 µs), and fires 100 % of one-second schedules within 50 ms (TickerQ 73–78 %, Hangfire 0–15 %); a schedule call costs 7.7–10 µs against TickerQ's 1.1–2.4 µs, and on PostgreSQL a one-off firing makes too many round trips — which #3824 addresses. The profiling switches that found where the time goes (--profile-fire,--profile-cron,--profile-schedule,--latency) ship inQuartz.Benchmark, and out-of-process benchmark runs work again. OnRAMJobStorea firing now allocates 1.83 KB where 4.1 allocated 2.63 KB and dispatches with two fewer thread hand-offs — an empty job data map costs nothing to clone or build, one task per dispatch instead of three, one ambient slot per firing, the run shell handed to the pool as state (IThreadPool.TryRunWithState, a default interface member), the firing's clock read only when a span is listening — 12–14 % faster on the fire-throughput benchmark. And one durable job with thousands of triggers behind it — the one-off API's own shape — no longer costs the store a linear scan and an array of keys on every completion: churn against a job with 20,000 triggers went from 183 µs and 157 KB to 434 ns and 424 B. (#3802, #3816, #3822, #3823, #3826)UsePersistentStore(s => s.UseExecutionHistory())— orquartz.jobStore.executionHistory = true— records every execution and misfire intoQRTZ_EXECUTION_HISTORYandQRTZ_MISFIRE_HISTORYin the scheduler's own database, so a cluster has one history and every node's dashboard, the HTTP API's history routes and a store-attached window read the same rows. Retention is the store's: a sweep on the scheduler's clock deletes pastExecutionHistoryOptions.Retentionand trims toMaxEntriesPerScheduler, idempotently, so several nodes sweeping at once is harmless. Writes go on their own connection, never inside a job's transaction, and a failed write is logged and dropped rather than failing the firing. The tables are optional: a 4.2 node validates them only when the history is on, and names the script when they are missing. (#3771, #3825)AddQuartzDashboard(o => o.AttachStore("prod", store => store.UseSqlServer(cs)))discovers the schedulers a database holds and opens a window on each — a never-started scheduler over the shared store, listed with the new originWindowand the target's name, its status derived from the cluster's check-in rows rather than from itself (no rows reads as unknown, not as stopped), with every scheduling action available and the node-local ones — start, stand-by, shutdown, interrupt — hidden with a sentence saying they need an API or agent target. With the database-backed history store the window's History page shows what the nodes ran. This is the shared-storage reach model a cluster behind a load balancer needs, with zero worker changes and no inbound port; the docs say what a window can and cannot do and that it needs the cluster's serializer configuration. (#3772, #3828)[Queue]→ execution groups that bound but do not route, retries held in the store rather than the worker, a dashboard that refuses to start until told who may reach it). The best-practices page no longer says Quartz has no retry policy, the quick start leads with the three-line form, and the index says what nobody knew was in the box. (#3808, #3813, #3814)QuartzHealthCheckOptions.StaleFiringTolerance(off unless set;3is the documented starting value) asks the store for a schedulable trigger whose fire time passed more than that many misfire thresholds ago and reports Degraded, or Unhealthy past twice the bar — the silent stall that "running" and "store answers" never caught, with the overdue trigger, when it was due and by how much in the report's data. The worse of the check-in and stalled-firing verdicts now wins, where a late check-in used to hide a stall. Underneath,TriggerQuery.NextFireTimeBeforeis a new filter every store and the HTTP API honour. (#3809, #3817)Public API — additive only
[QuartzJob],[CronTrigger]AddDeclaredJobs()is generated into your assemblyContinuation,ContinuationCondition,ExecutionOutcome,TriggeredJobCompleteContext,AwaitingContinuationITrigger.Continuation,ITriggerConfigurator<TJob>.StartAfter— default interface members;TriggerBuilder<TJob>.StartAfter;ScheduleJob<TJob, TInput>(input, Continuation after, options);JobChainingJobListener.AddJobChainLink(first, second, condition)andJobExecutionVetoedIJobStore.FiringComplete(TriggeredJobCompleteContext)— DIM;IDriverDelegate.SelectAwaitingContinuations,ReleaseContinuation,ResetContinuationFireTime,SelectSchedulerNames— DIMsTriggerState.Awaiting,StoredTriggerState.Awaiting;TriggerHeader.ContinuesAfter,ContinuationCondition;TriggerQuery.NextFireTimeBefore; theAdoConstantsnames of the new columns, tables and stateIJobExecutionContext.Outcome,RetryScheduled;ITriggerListener.TriggerRetriesExhausted— DIMs;ExecutionHistoryEntry.RetryAttempt,RetryScheduled;ExecutionHistoryQuery.FailedFinally;RetryPolicy.Exponential(…, jitter)andRetryPolicy.Jitter; the meterquartz.trigger.retries_exhaustedIPersistentStoreBuilder.UseExecutionHistory()— DIM;AdoJobStoreOptions.ExecutionHistorySchedulerOrigin.Window;SchedulerRegistration.Target;QuartzDashboardOptions.AttachStore,AttachStoreOptions;SchedulerHeaderDto.Target,IsWindow,DisplayNameQuartzHealthCheckOptions.StaleFiringToleranceIThreadPool.TryRunWithState— DIMObjectDoesNotExistExceptionNothing was removed or reshaped. Baseline diff
v4.1.1..v4.2.0:Quartz111 added member lines, 0 removed, twelve of them default interface members;Quartz.Dashboard12 added, 0 removed (24 lines re-ordered by the generator);Quartz.AspNetCoreandQuartz.HttpClientunchanged. TheQuartzpackage now depends on nothing new and carriesanalyzers/dotnet/cs/Quartz.Analyzers.dllandbuildTransitive/net10.0/Quartz.targets, which readsDisableQuartzAnalyzers.Schema
database/migrations/4.2/add_continuations_<dialect>.sqladdsCONTINUES_TRIGGER_NAME,CONTINUES_TRIGGER_GROUPandCONTINUATION_CONDITIONtoQRTZ_TRIGGERS, nullable. Required from 4.2.0: a 4.2 node refuses to start against a database without them, naming the script. Safe to apply while 4.0 and 4.1 nodes run — they never read the columns — but a 4.1 node cannot settle a continuation, so migrate, roll every node, then start scheduling them.4.2/add_execution_history_<dialect>.sqladdsQRTZ_EXECUTION_HISTORYandQRTZ_MISFIRE_HISTORY, optional: needed only withUseExecutionHistory(); a fresh install andProvisionSchema()create them regardless.Behaviour changes worth noting
TriggerState.Awaitingis a new value on the wire; a 4.1Quartz.HttpClientreading a 4.2 host that has continuations sees a state it does not know — upgrade the client. A store outside this repository that overridesTriggeredJobCompletekeeps working (FiringCompleteforwards to it) and settles no continuations until it implements the new member.Quartz.nupkgcarries an analyzer. A project whose cron or timeout literals were wrong builds no longer — that is the point — and a build withTreatWarningsAsErrorsseesQZ0003as an error;<DisableQuartzAnalyzers>true</DisableQuartzAnalyzers>opts out,.editorconfigre-tunes a severity.ObjectDoesNotExistExceptioninstead of waiting for ever. A scheduling file may still name a parent declared later in the same file — triggers are stored parent-first — but a parent in another file, or scheduled by a later call, has to come first.ContinuesAfterreadsnull), waits behind its job when that job disallows concurrent execution and is running, honours its calendar and end time — one released past its end time is discarded — and a continuation that is discarded takes everything waiting on it with it.Start()on one — from code or over the HTTP API, which also refuses standby and shutdown for it — throws before anything runs, where it used to run the cluster's start-up recovery against a live database. During a mixed 4.1/4.2 window, do not pause, resume or reschedule a continuation from a 4.1 node.... (truncated)
Commits viewable in compare view.
Updated Quartz.AspNetCore from 4.1.1 to 4.2.0.
Release notes
Sourced from Quartz.AspNetCore's releases.
4.2.0
Quartz.NET 4.2 is an additive minor: every public change is a new type, a new member on a type we own, or a default interface member, and its one schema change is a generated migration under
database/migrations/4.2/that a mixed 4.1/4.2 cluster runs safely. A 4.0 or 4.1 application upgrades by changing the version and, on a persistent store, running that migration before the first 4.2 node starts. The headline is that a job can be declared on its class —[QuartzJob]and[CronTrigger]— with the cron expression checked by the compiler, and that one trigger can wait, in the store, for another's outcome.Highlights
Quartz.nupkgnow carries an analyzer underanalyzers/dotnet/cs:QZ0001refuses a cron literal the parser would refuse — atWithCronSchedule,CronScheduleBuilder.Create, theCronExpressionconstructors and parse members,CronCalendarandCronTriggerImpl, honouring a literalCronFormat.Unix— with the parser's own message;QZ0002refuses a[JobTimeout("…")]that does not parse or is negative;QZ0003warns on[PersistJobDataAfterExecution]without[DisallowConcurrentExecution];QZ0004(Info) notes anExecutethat never observes its cancellation token. The analyzer isnetstandard2.0and links the cron parser's own sources rather than a second grammar, so a literal the compiler accepts is one the scheduler accepts; a parity corpus of 128 expressions pins that.<DisableQuartzAnalyzers>true</DisableQuartzAnalyzers>in the project file turns it off (#3846) —ExcludeAssets="analyzers"does not, on the .NET 10 SDK; the package's dependencies are unchanged. (#3803, #3815)[QuartzJob(Name, Group, Description, Durable, RequestRecovery, Scheduler)]on anIJoband one[CronTrigger("…", Name, Group, TimeZone, MisfireInstruction, Priority, Description, ExecutionGroup)]per schedule are read by a source generator insideQuartz.nupkg, which writes anAddDeclaredJobs()extension forIQuartzBuildercalling the sameAddJob<T>/AddTrigger<T>you would have written — no reflection, nothing to root for trimming, and the cron expression checked at compile time byQZ0001.QZ1001–QZ1003refuse an attribute on a type that is not a concreteIJob, two declarations with one identity, and a[CronTrigger]without[QuartzJob].Scheduler = "…"binds a declaration to one named scheduler.[SimpleTrigger]and a cron read from configuration are the deliberate follow-ups. (#3804, #3818)TriggerBuilder.StartAfter(parentKey, condition)— orscheduler.ScheduleJob<TJob,TInput>(input, Continuation.After(parentKey), …)for a one-off — stores a trigger in the new stateAwaiting; when the parent's firing ends, its completion settles every continuation inside its own transaction, on whichever node ran it: a matching outcome (OnSuccess,OnFailure,OnCancellation,OnVeto, orOnAnyOutcome) releases the trigger to fire now, any other discards it, and a scheduled retry settles nothing. A parent deleted while continuations wait releases theOnAnyOutcomeones and parks the rest inError. Every store call that completes a firing now carriesExecutionOutcomeand the exception throughTriggeredJobCompleteContext.JobChainingJobListenerkeeps the recurring case and gains a condition. A continuation can be declared inquartz_jobs.xml(<continues-after>,<continuation-condition>), inquartz_jobs.jsonand theQuartz:Schedulesection (ContinuesAfter,ContinuationCondition), scheduled over the wire, and seen in the dashboard — an Awaiting filter on Triggers, and "Continues after" and "When" on a trigger's detail. Job Continuations is the page. (#3805, #3806, #3819, #3821)IJobExecutionContext.OutcomeandRetryScheduledtell a listener what the job did and whether a retry follows;ITriggerListener.TriggerRetriesExhaustedis raised once when a policy runs out (a default interface member, so no listener needs to change); the counterquartz.trigger.retries_exhaustedcounts it; execution history records the attempt and whether a retry was scheduled, the History page and the history routes filter on "failed after retries", and a final failure on the History page has a Run again button, recorded in the Action Log.RetryPolicy.Exponentialtakes an optional jitter that spreads the attempts. One correction rides along:IJobExecutionContext.RetryAttemptnow reports the attempt the firing is to listeners as well — it used to read the trigger's field afterExecutionCompletehad already advanced or cleared it. (#3807, #3829)GetNextValidTimeAfterused to make eightTimeZoneInfoqueries per answer; it now walks the expression's own bitmasks on the wall clock and resolves the offset through a per-zone table of safe segments — intervals verified against the zone's own answers, with everything within 48 hours of a transition, and every zone the table cannot verify, left to the existing code. Every DST edge case still runs the code that handled it before, and a differential test compares the two paths to the tick across ten zones, half of its instants near transitions. On the machine the benchmark README names:0 0/5 * * * ?421 → 36.5 ns and 100 successive occurrences 43.1 → 3.5 µs, zero allocations, against NCrontab's 25.3 ns and 2.7 µs; the second-level form now beats NCrontab. The one cost is 8 bytes on eachCronExpression. (#3801, #3820)src/Quartz.Benchmark.Competitors/runs the same five workloads against TickerQ 10.4.0 and Hangfire 1.8.25 — firing throughput in memory and on PostgreSQL, schedule-to-execute latency, punctuality of one-second schedules, and the cost of one schedule call — with completion counted inside the executing job on every side, and the benchmark README and the operations page carry the tables, the rows Quartz loses included. On the box the README names, Quartz at its defaults executes 181,000–257,000 in-memory one-offs a second (TickerQ 98,000–115,000, Hangfire 58,000–92,000), reachesExecute58–70 µs afterScheduleJob(TickerQ 14.7 ms, Hangfire 94–235 µs), and fires 100 % of one-second schedules within 50 ms (TickerQ 73–78 %, Hangfire 0–15 %); a schedule call costs 7.7–10 µs against TickerQ's 1.1–2.4 µs, and on PostgreSQL a one-off firing makes too many round trips — which #3824 addresses. The profiling switches that found where the time goes (--profile-fire,--profile-cron,--profile-schedule,--latency) ship inQuartz.Benchmark, and out-of-process benchmark runs work again. OnRAMJobStorea firing now allocates 1.83 KB where 4.1 allocated 2.63 KB and dispatches with two fewer thread hand-offs — an empty job data map costs nothing to clone or build, one task per dispatch instead of three, one ambient slot per firing, the run shell handed to the pool as state (IThreadPool.TryRunWithState, a default interface member), the firing's clock read only when a span is listening — 12–14 % faster on the fire-throughput benchmark. And one durable job with thousands of triggers behind it — the one-off API's own shape — no longer costs the store a linear scan and an array of keys on every completion: churn against a job with 20,000 triggers went from 183 µs and 157 KB to 434 ns and 424 B. (#3802, #3816, #3822, #3823, #3826)UsePersistentStore(s => s.UseExecutionHistory())— orquartz.jobStore.executionHistory = true— records every execution and misfire intoQRTZ_EXECUTION_HISTORYandQRTZ_MISFIRE_HISTORYin the scheduler's own database, so a cluster has one history and every node's dashboard, the HTTP API's history routes and a store-attached window read the same rows. Retention is the store's: a sweep on the scheduler's clock deletes pastExecutionHistoryOptions.Retentionand trims toMaxEntriesPerScheduler, idempotently, so several nodes sweeping at once is harmless. Writes go on their own connection, never inside a job's transaction, and a failed write is logged and dropped rather than failing the firing. The tables are optional: a 4.2 node validates them only when the history is on, and names the script when they are missing. (#3771, #3825)AddQuartzDashboard(o => o.AttachStore("prod", store => store.UseSqlServer(cs)))discovers the schedulers a database holds and opens a window on each — a never-started scheduler over the shared store, listed with the new originWindowand the target's name, its status derived from the cluster's check-in rows rather than from itself (no rows reads as unknown, not as stopped), with every scheduling action available and the node-local ones — start, stand-by, shutdown, interrupt — hidden with a sentence saying they need an API or agent target. With the database-backed history store the window's History page shows what the nodes ran. This is the shared-storage reach model a cluster behind a load balancer needs, with zero worker changes and no inbound port; the docs say what a window can and cannot do and that it needs the cluster's serializer configuration. (#3772, #3828)[Queue]→ execution groups that bound but do not route, retries held in the store rather than the worker, a dashboard that refuses to start until told who may reach it). The best-practices page no longer says Quartz has no retry policy, the quick start leads with the three-line form, and the index says what nobody knew was in the box. (#3808, #3813, #3814)QuartzHealthCheckOptions.StaleFiringTolerance(off unless set;3is the documented starting value) asks the store for a schedulable trigger whose fire time passed more than that many misfire thresholds ago and reports Degraded, or Unhealthy past twice the bar — the silent stall that "running" and "store answers" never caught, with the overdue trigger, when it was due and by how much in the report's data. The worse of the check-in and stalled-firing verdicts now wins, where a late check-in used to hide a stall. Underneath,TriggerQuery.NextFireTimeBeforeis a new filter every store and the HTTP API honour. (#3809, #3817)Public API — additive only
[QuartzJob],[CronTrigger]AddDeclaredJobs()is generated into your assemblyContinuation,ContinuationCondition,ExecutionOutcome,TriggeredJobCompleteContext,AwaitingContinuationITrigger.Continuation,ITriggerConfigurator<TJob>.StartAfter— default interface members;TriggerBuilder<TJob>.StartAfter;ScheduleJob<TJob, TInput>(input, Continuation after, options);JobChainingJobListener.AddJobChainLink(first, second, condition)andJobExecutionVetoedIJobStore.FiringComplete(TriggeredJobCompleteContext)— DIM;IDriverDelegate.SelectAwaitingContinuations,ReleaseContinuation,ResetContinuationFireTime,SelectSchedulerNames— DIMsTriggerState.Awaiting,StoredTriggerState.Awaiting;TriggerHeader.ContinuesAfter,ContinuationCondition;TriggerQuery.NextFireTimeBefore; theAdoConstantsnames of the new columns, tables and stateIJobExecutionContext.Outcome,RetryScheduled;ITriggerListener.TriggerRetriesExhausted— DIMs;ExecutionHistoryEntry.RetryAttempt,RetryScheduled;ExecutionHistoryQuery.FailedFinally;RetryPolicy.Exponential(…, jitter)andRetryPolicy.Jitter; the meterquartz.trigger.retries_exhaustedIPersistentStoreBuilder.UseExecutionHistory()— DIM;AdoJobStoreOptions.ExecutionHistorySchedulerOrigin.Window;SchedulerRegistration.Target;QuartzDashboardOptions.AttachStore,AttachStoreOptions;SchedulerHeaderDto.Target,IsWindow,DisplayNameQuartzHealthCheckOptions.StaleFiringToleranceIThreadPool.TryRunWithState— DIMObjectDoesNotExistExceptionNothing was removed or reshaped. Baseline diff
v4.1.1..v4.2.0:Quartz111 added member lines, 0 removed, twelve of them default interface members;Quartz.Dashboard12 added, 0 removed (24 lines re-ordered by the generator);Quartz.AspNetCoreandQuartz.HttpClientunchanged. TheQuartzpackage now depends on nothing new and carriesanalyzers/dotnet/cs/Quartz.Analyzers.dllandbuildTransitive/net10.0/Quartz.targets, which readsDisableQuartzAnalyzers.Schema
database/migrations/4.2/add_continuations_<dialect>.sqladdsCONTINUES_TRIGGER_NAME,CONTINUES_TRIGGER_GROUPandCONTINUATION_CONDITIONtoQRTZ_TRIGGERS, nullable. Required from 4.2.0: a 4.2 node refuses to start against a database without them, naming the script. Safe to apply while 4.0 and 4.1 nodes run — they never read the columns — but a 4.1 node cannot settle a continuation, so migrate, roll every node, then start scheduling them.4.2/add_execution_history_<dialect>.sqladdsQRTZ_EXECUTION_HISTORYandQRTZ_MISFIRE_HISTORY, optional: needed only withUseExecutionHistory(); a fresh install andProvisionSchema()create them regardless.Behaviour changes worth noting
TriggerState.Awaitingis a new value on the wire; a 4.1Quartz.HttpClientreading a 4.2 host that has continuations sees a state it does not know — upgrade the client. A store outside this repository that overridesTriggeredJobCompletekeeps working (FiringCompleteforwards to it) and settles no continuations until it implements the new member.Quartz.nupkgcarries an analyzer. A project whose cron or timeout literals were wrong builds no longer — that is the point — and a build withTreatWarningsAsErrorsseesQZ0003as an error;<DisableQuartzAnalyzers>true</DisableQuartzAnalyzers>opts out,.editorconfigre-tunes a severity.ObjectDoesNotExistExceptioninstead of waiting for ever. A scheduling file may still name a parent declared later in the same file — triggers are stored parent-first — but a parent in another file, or scheduled by a later call, has to come first.ContinuesAfterreadsnull), waits behind its job when that job disallows concurrent execution and is running, honours its calendar and end time — one released past its end time is discarded — and a continuation that is discarded takes everything waiting on it with it.Start()on one — from code or over the HTTP API, which also refuses standby and shutdown for it — throws before anything runs, where it used to run the cluster's start-up recovery against a live database. During a mixed 4.1/4.2 window, do not pause, resume or reschedule a continuation from a 4.1 node.... (truncated)
Commits viewable in compare view.
Updated TinyBDD from 0.19.40 to 0.19.42.
Release notes
Sourced from TinyBDD's releases.
0.19.42
What's Changed
Full Changelog: JerrettDavis/TinyBDD@v0.19.41...v0.19.42
0.19.41
What's Changed
Full Changelog: JerrettDavis/TinyBDD@v0.19.40...v0.19.41
Commits viewable in compare view.
Updated TinyBDD.Xunit from 0.19.40 to 0.19.42.
Release notes
Sourced from TinyBDD.Xunit's releases.
0.19.42
What's Changed
Full Changelog: JerrettDavis/TinyBDD@v0.19.41...v0.19.42
0.19.41
What's Changed
Full Changelog: JerrettDavis/TinyBDD@v0.19.40...v0.19.41
Commits viewable in compare view.
Updated WireMock.Net from 2.16.0 to 2.18.0.
Release notes
Sourced from WireMock.Net's releases.
2.18.0
What's Changed
Full Changelog: wiremock/WireMock.Net@2.17.0...2.18.0
2.17.0
What's Changed
Full Changelog: wiremock/WireMock.Net@2.16.0...2.17.0
Commits viewable in compare view.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore <dependency name> major versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)@dependabot ignore <dependency name> minor versionwill close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)@dependabot ignore <dependency name>will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)@dependabot unignore <dependency name>will remove all of the ignore conditions of the specified dependency@dependabot unignore <dependency name> <ignore condition>will remove the ignore condition of the specified dependency and ignore conditions