chore(deps): update core handwritten gems lockfiles (major)#34748
Open
renovate-bot wants to merge 1 commit into
Open
chore(deps): update core handwritten gems lockfiles (major)#34748renovate-bot wants to merge 1 commit into
renovate-bot wants to merge 1 commit into
Conversation
|
0c106fc to
37211b1
Compare
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.
This PR contains the following updates:
0.11.3→1.2.4"~> 5.14"→"~> 6.0""~> 5.25"→"~> 6.0""~> 5.16"→"~> 6.0""~> 3.1.2"→"~> 4.2.0""~> 0.22"→"~> 1.0""~> 0.9"→"~> 1.0"Release Notes
googleapis/google-api-ruby-client (google-apis-core)
v1.2.4Bug Fixes
v1.2.3Bug Fixes
v1.2.2Bug Fixes
v1.2.1Bug Fixes
v1.2.0Features
v1.1.0Features
v1.0.2Bug Fixes
v1.0.1Bug Fixes
v1.0.0This is a major release that replaces the underlying httpclient library with Faraday (#23524). This will ensure the client libraries are on a more stable and better maintained foundation moving forward.
For most users, this change should be transparent. However, if your application depends on the httpclient interfaces, you can retain compatibility with httpclient by pinning the
google-apis-coregem to~> 0.18in your Gemfile. Httpclient-based versions of this gem will remain on the 0.x release train, while Faraday-based versions will occupy the 1.x release train. We will push critical fixes and security updates to both branches for one year until August 2026, but new feature work will take place only on the 1.x branch.v0.18.0Compare Source
Features
v0.17.0Compare Source
Features
Bug Fixes
v0.16.0Features
v0.15.1Bug Fixes
v0.15.0Compare Source
Features
v0.14.1Compare Source
Bug Fixes
v0.14.0Compare Source
Features
Bug Fixes
v0.13.0Compare Source
Features
v0.12.0Compare Source
Features
minitest/minitest (minitest)
v6.0.6Compare Source
v6.0.5Compare Source
v6.0.4Compare Source
v6.0.3Compare Source
v6.0.2Compare Source
v6.0.1Compare Source
v6.0.0Compare Source
kamui/retriable (retriable)
v4.2.0Compare Source
Bug fixes
Kernelextension methods (require "retriable/core_ext/kernel") are nowprivate, matching idiomatic
Kernelhelpers likeputsandrand.Previously
retriableandretriable_with_contextwere public instancemethods, so they leaked onto every object's public API and could be invoked
with an explicit receiver (e.g.
"foo".retriable { ... }). They remaincallable in the documented receiver-less form.
(#146)
Retriable.with_context(andKernel#retriable_with_context) now raisesArgumentErrorwhen called without a block, matchingwith_override.Previously a missing block was silently ignored: the call returned
nilandthe intended block never ran, hiding a caller bug. Behavior change: code that
relied on the silent no-op will now raise.
Config#validate!now validates the structure of each entry incontexts,so configured contexts are checked on every
Retriable.retriable/with_contextcall rather than only when a given context is first used. Acontext whose options contain an unknown key (including a nested
contextskey) now raises
ArgumentError, "<key> is not a valid option", matching thewith_overridepath. Non-Hashcontextsand non-Hash per-context valuesremain leniently treated as empty options (no behavior change). Option
values are still validated lazily at retry time, unchanged.
Docs
on_retryreceivesnext_interval: nilon the final rescuedattempt, when Retriable is about to give up because
triesare exhausted.on_retrystill fires beforeon_give_up(unchanged behavior); thenilcontract is now called out in the
on_retrydocumentation so handlers guardarithmetic or logging on
next_interval.Performance
Config#initializeno longer allocates a throwawayExponentialBackoff(andruns its redundant
validate!) just to read default values. Defaults now livein a frozen
ExponentialBackoff::DEFAULTSconstant, removing an allocation andredundant validation from the
retriablehot path.(#149)
v4.1.1Compare Source
Bug fixes
retry_if,on_retry, andon_give_upare now validated to be callable(respond to
#call) or falsy. A non-callable truthy value raisesArgumentErrorat configuration time instead of a laterNoMethodErroron aretry path. (#140)
Internal
Retriable.configure,config,retriable,with_override,with_context, andRetriable::Config) andvalidate them in CI with
rbs validate.(#142)
bundler-auditdependencyaudit job to CI. (#143)
CC_TEST_REPORTER_IDfrom the CI workflow.(#141)
v4.1.0Compare Source
Bug fixes
with_contexttries:now clears an inheritedintervals:fromglobal config or a context, matching the documented precedence. Previously
Retriable.retriable(tries: 1)was silently ignored whenintervalswasconfigured, running
intervals.size + 1times. Passing bothintervals:andtries:in the same call still letsintervals:win.v4.0.0Compare Source
This is a major release with breaking changes. Please read carefully before upgrading.
Breaking changes
timeout:option. Thetimeout:option has been removed fromRetriable.retriable,Retriable.configure, andRetriable.with_override. It was a thin wrapper around Ruby'sTimeout.timeout, which has well-documented safety issues: it interrupts execution at arbitrary lines and can corrupt internal state in libraries that are not interrupt-safe (mutexes, file handles, network sockets, allocator state). This was first raised against this gem in #96 in 2021; Retriable 3.8.0 deprecated the option, and 4.0 removes the footgun entirely. As a side effect, the historical bug where Retriable's own internalTimeout::Errorwas silently retried by default is no longer reachable, since Retriable no longer raises a timeout itself. User-raisedTimeout::Error(for example, from aTimeout.timeoutblock you write inside the retried block) is still matched by the defaulton: [StandardError]becauseTimeout::Error < RuntimeError < StandardError. Passingtimeout:toRetriable.retriableorRetriable.with_overridenow raisesArgumentError; settingconfig.timeoutinRetriable.configurenow raisesNoMethodErrorbecause the configuration attribute has been removed. See the 4.0 migration section in the README for replacement patterns.~> 3.8) remains available.Features
on_give_upcallback that runs when Retriable stops retrying after a rescued retriable exception. Receives(exception, try, elapsed_time, next_interval, reason), wherereasonis:tries_exhaustedor:max_elapsed_time. Does not fire for non-retriable exceptions orretry_ifrejections. Passon_give_up: falseto suppress a configured handler for a single call.SetofExceptionclasses as theon:option, in addition to a single class, anArray, or aHash.Internal
Retriable.retriable,Retriable.with_context, and theKernelextension methods to Ruby 3.1+ anonymous block forwarding. No user-visible behavior change.v3.8.0Compare Source
Deprecations
timeout:option ahead of its removal in Retriable 4.0. Non-nil timeout values supplied throughRetriable.configure,Retriable.retriable(...), orRetriable.with_override(...)now emit a deprecation warning while keeping the existing runtime behavior unchanged. On Ruby 2.7+ the warning is emitted viaKernel.warn(..., category: :deprecated), so callers can silence it through the standard Ruby controls (Warning[:deprecated] = false,ruby -W:no-deprecated, or a customWarning.warn). To keep the notice from drowning busy applications, it is emitted at most once per process; suppression viaWarning[:deprecated]leaves the warner armed for the next call that re-enables the category. Prefer library-native timeout settings, or wrap the retried block inTimeout.timeout(...)directly if you still need that behavior. See the README migration guidance for details.v3.7.0Compare Source
tries: Float::INFINITY. Requires a finitemax_elapsed_timeas a safety bound and is incompatible with customintervals:. Both invalid configurations raiseArgumentErrorfromConfig#validate!.v3.6.1Compare Source
on:option before retrying. Previously, passing a non-Exceptionvalue such asObject,Kernel, or a plainModule(which appear in everyException's ancestor chain) would silently retry process-critical exceptions likeSystemExitandInterrupt. Theon:option now requires anExceptionsubclass, an array of them, or a hash whose keys are such classes and whose values arenil, aRegexp, or an array ofRegexps. Invalid shapes raiseArgumentErrorbefore the block runs.with_override(contexts:)shape before applying overrides.contextsmay benilor a hash, and each per-context override must be a hash.on_retry: falsedisables a callback set inRetriable.configurefor a single call.v3.6.0Compare Source
Retriable.overrideandRetriable.reset_overrideare removed and replaced by block-scopedRetriable.with_override(opts) { ... }. The new API requires a block, restores the previous override (or absence of override) when the block exits viaensure, and is thread-local — overrides set in one thread do not affect other threads, and child threads do not inherit them. Fibers within a thread still share the thread's active override. Nestedwith_overridecalls correctly restore the outer override on inner exit. See the README anddocs/testing.mdfor migration and testing patterns. This replaces the override API introduced in 3.5.0.v3.5.1Compare Source
triesmust now be a positive integer unless a customintervalsarray is provided.v3.5.0Compare Source
max_elapsed_timewhensleep_disabledis true.overrideandreset_overrideAPIs to force retry settings over local call options when needed (for example, test short-circuiting).v3.4.1Compare Source
Process.clock_gettime(CLOCK_MONOTONIC)for elapsed time tracking so retry timing is immune to wall-clock adjustments (NTP, manual changes).max_elapsed_time: nilgracefully instead of raisingNoMethodError.* 1.0float coercion inExponentialBackoff#randomize.v3.4.0Compare Source
retry_ifoption to support custom retry predicates, including checks against wrappedexception.causevalues.v3.3.0Compare Source
Retriable.retriableinternals into focused private helpers to improve readability while preserving behavior..rubocop.ymlwith explicit modern defaults to enable new cops while preserving existing project style policies.v3.2.1Compare Source
v3.2.0Compare Source
triesvalue is overridden byintervalsparameter if both are provided and add a test for this. This is always what the README stated but the code didn't actually do it.simplecov-ruby/simplecov (simplecov)
v1.0.0Compare Source
==================
First stable release of the 1.0 line. The entries below consolidate release candidates rc1 through rc5 and describe all changes since 0.22.1.
Breaking Changes
RUBY_VERSION3.4). Ruby 3.1 reached end of life in March 2025, and a recenti18nrelease callsFiber[], a Ruby 3.2 API, at load time, so suites that load Rails no longer run on 3.1. Raisingrequired_ruby_versionto>= 3.2also excludes JRuby 9.4, which reportsRUBY_VERSION3.1.x. See #1171.{ "covered_percent": 80.0 }to full stats shape{ "covered": 8, "missed": 2, "total": 10, "percent": 80.0, "strength": 0.0 }. The keycovered_percentis renamed topercent.simplecov_json_formattergem is now built in.require "simplecov_json_formatter"continues to work via a shim.StringFilternow matches at path-segment boundaries."lib"matches/lib/but no longer matches/library/. Use aRegexpfilter for substring matching.SourceFile#project_filenamenow returns a truly relative path with no leading separator (e.g.lib/foo.rbinstead of/lib/foo.rb). This also removes the leading/from file path keys incoverage.jsonand from the filename inminimum_coverage_by_fileerror messages. AnchoredRegexFilters that relied on a leading/(e.g.%r{^/lib/}) should be rewritten (e.g.%r{\Alib/}).docilegem dependency. TheSimpleCov.configureblock is now evaluated viainstance_execwith instance variable proxying.JSONFormatterwhen theCC_TEST_REPORTER_IDenvironment variable is set. The defaultHTMLFormatternow emitscoverage.jsonalongside the HTML report (usingJSONFormatter.build_hashto serialize the same payloadJSONFormatterwrites), so the env-var special case is no longer needed. Because of this, listingJSONFormatteralongsideHTMLFormatteris redundant and can be removed.SimpleCov.startnow loads thetest_frameworksprofile by default, which filters paths undertest/,spec/,features/, andautotest/. Running the suite always executes 100% of the test files themselves, which inflated the overall percentage and obscured application coverage. To opt back in (e.g. to surface dead test helpers), drop the filter withremove_filter %r{\A(test|features|spec|autotest)/}. See #816.rspec -f json. Suppress it entirely withsilent: trueon the formatter; redirect with2>&1if you want the old behavior. See #1060.parallel_tests, SimpleCov now waits in the first started process (viaParallelTests.first_process?) rather than the last. This matches the conventionparallel_tests's own README recommends for "do something once after all workers finish" hooks, so user code that has its ownParallelTests.wait_for_other_processes_to_finishin anRSpec.after(:suite)(or equivalent) no longer deadlocks against SimpleCov's wait when both pick the same process. As a side benefit, the previousPARALLEL_TEST_GROUPS=1workaround forlast_process?'s"" == "1"mismatch (#1066) is no longer needed —first_process?handles that case naturally. Migration: the rare project that wired its own wait viaParallelTests.last_process?now hits the symmetric deadlock and must switch tofirst_process?. See #922.SimpleCov.coverage_criterion. It was a reader/writer for a value nothing in SimpleCov ever consumed, so it duplicatedprimary_coveragewithout affecting any behavior. Useprimary_coverageto choose the report's leading criterion (or thecoverage :branch, primary: trueform).Deprecations
add_filter→skip(identical matcher grammar; no behavior change)add_group→group(identical matcher grammar; no behavior change)track_files→cover(coverincludes unloaded files liketrack_filesdid and restricts the report to the matching set; pass every directory you want reported, e.g.cover "lib/**/*.rb", "app/**/*.rb", to keep the old additive-only behavior)use_merging→merging(same value)enable_for_subprocesses→merge_subprocesses(same value)enable_coverage_for_eval→enable_coverage :eval(folds into the same call that enables:line/:branch/:method)print_error_status(reader) →print_errors(theprint_error_status=writer is unaffected for now)SimpleCov.startfrom.simplecovis deprecated. Coverage tracking still begins for backward compatibility, but a one-time deprecation warning fires pointing the user at moving the call intospec_helper.rb/test_helper.rb; a future release will require the explicitSimpleCov.startfrom a test helper. The migration goes hand-in-hand with the bugfix below: onceSimpleCov.startlives in the test helper, the parent process that auto-loads.simplecovnever starts tracking and the empty-report-overwrite scenario can't arise. See #581.# :nocov:toggle comments (and the configurableSimpleCov.nocov_token/SimpleCov.skip_token) are deprecated in favor of the new# simplecov:disable/# simplecov:enabledirectives. Each file that still uses# :nocov:emits a one-time deprecation warning to stderr at load time pointing at the recommended replacement, and any call toSimpleCov.nocov_tokenorSimpleCov.skip_token(getter or setter) likewise warns. The directive will be removed in a future release.SimpleCov::SourceFile#branches_coverage_percentand#methods_coverage_percentare deprecated in favor of the uniformcovered_percent(:branch)/covered_percent(:method).covered_percent(andcovered_strength) now take a criterion argument (defaulting to:line), so the same call reaches any criterion instead of line being the unprefixed default while branch and method had their own differently-named methods.coverage_statisticsalso now accepts a criterion (e.g.coverage_statistics(:branch)) to return that oneCoverageStatisticsrather than the whole Hash.minimum_coverage_by_fileandminimum_coverage_by_groupare deprecated in favor of thecoveragemethod'sminimum_per_file/minimum_per_groupverbs. The legacy methods overloaded a single hash to carry both per-criterion defaults and per-path / per-group overrides, withminimum_coverage_by_filefurther distinguishing Symbol keys (criterion defaults) from String / Regexp keys (path overrides) and accepting either a bare number or a per-criterion hash as the value. Thecoverageblock fixes the criterion so every threshold is a plain percentage with anonly:target. The setter form emits a deprecation warning naming the replacement; the no-arg getter (read internally) is unchanged. Replace e.g.minimum_coverage_by_file line: 70, 'app/x.rb' => 100withcoverage(:line) { minimum_per_file 70; minimum_per_file 100, only: 'app/x.rb' }. See the "Per-criterion thresholds withcoverage" README section.Enhancements
simplecov uncoveredgained--criterion line|branch|method(defaultline) so the lowest-coverage listing can rank by branch or method coverage, not just line.coverageconfiguration method — a uniform way to configure each coverage criterion (:line,:branch,:method) in one place.coverage :line do minimum 90; minimum_per_file 80; maximum_drop 5 end(or the one-linercoverage :branch, minimum: 80) enables the criterion and declares its thresholds with identical syntax regardless of criterion, because the criterion is fixed by the enclosing call rather than smuggled into the argument as the historical "a bare number means line coverage, every other criterion needs a Hash" special case. Verbs:minimum,maximum,exact,maximum_drop,minimum_per_file(withonly:String-path / Regexp overrides), andminimum_per_group. Options:primary:(the report's leading criterion),oneshot:(oneshot-lines mode for:line), and:eval. The flatminimum_coveragefamily remains as suite-wide sugar. Thresholds feed the same internal stores, so exit-code enforcement is unchanged. See the "Per-criterion thresholds withcoverage" section in the README.coverage.jsonnow carries a top-level$schemafield holding the URL of the versioned canonical JSON Schema the document conforms to, plus a human-readablemeta.schema_version("major.minor", currently"1.0"). The versioned canonical lives atschemas/coverage-v1.0.schema.jsonand is immutable per version, an unversioned convenience alias atschemas/coverage.schema.jsonalways tracks the latest. Downstream tools can validate inputs, generate types, or pin to a known shape, and the document-level$schemamakes each payload self-describing. The schema version is independent of the gem version: additive changes bump minor, removals or shape changes bump major and ship as a newschemas/coverage-vX.0.schema.jsonfile so prior-version consumers stay valid.meta.commitcarries the git commit SHA the report was generated against (or null outside a git checkout), so tools can recover the exact source from history even whensource_in_json falseomits the per-file source arrays.SimpleCov::ParallelAdapters— a pluggable adapter interface for parallel test runners. SimpleCov's coordination with parallel test runners (deciding which worker does final-result work, waiting for siblings, knowing how many resultsets to expect) now routes through an adapter chain rather than hard-coding theparallel_testsgem's API. Two adapters ship:ParallelTestsAdapterwraps the historical grosser/parallel_tests gem (precise, gem-API-based);GenericAdapterhandles any runner that follows theTEST_ENV_NUMBER/PARALLEL_TEST_GROUPSenv-var convention without shipping a Ruby API. The practical impact: parallel_rspec (and any similar env-var-only runner) now works out of the box — previously every worker thought it was the "final" one and they clobbered each other's resultsets. Custom runners can register their own adapter viaSimpleCov::ParallelAdapters.register MyAdapter, whereMyAdaptersubclassesSimpleCov::ParallelAdapters::Baseand overrides the four contract methods (active?,first_worker?,wait_for_siblings,expected_worker_count). See #1065.SimpleCov.ignore_branchesfor opting out of synthetic:elsebranches that Ruby'sCoveragelibrary reports for constructs with no literalelsekeyword — exhaustivecase/inpattern matches,case/whenwithoutelse,||=/&&=, andif/unlesswithoutelse. Variadic; only:implicit_elseis supported today, with room for future synthetic branch types. Calling it without (or before)enable_coverage :branchis harmless — the setting is stored and applies once branch coverage is enabled. Explicitelsearms still count. See #1033.SimpleCov.coverfor declaring a positive coverage scope (the long-requested allowlist counterpart toadd_filter). Accepts string globs, Regexps, blocks, or arrays of those; multiple calls union. When anycovermatcher is configured the report drops every source file that doesn't match at least one of them, and string-glob matchers also expand on disk so files that exist but were never required during the run still appear in the report (at 0% coverage). Resolves the long-standing requests in #696 and #869. The companionSimpleCov.no_default_skipsopts out of the filters thatSimpleCov.startinstalls (hidden files,vendor/bundle/, test directories) so users who want to opt out wholesale don't have to callclear_filtersthemselves.SimpleCov.formatter false(and the equivalentSimpleCov.formatters []) now opts out of formatting entirely instead of raisingConfigurationError.SimpleCov::Result#format!returnsnilwhen no formatter is configured. Intended for worker processes in big parallel CI runs (hundreds of jobs) where only a finalSimpleCov.collatestep needs a report — every other worker just drops its.resultset.jsonand exits without paying for HTML or multi-formatter output. See #964.TEST_ENV_NUMBERandPARALLEL_TEST_GROUPSno longer triggers a spurious"SimpleCov guessed you were running inside parallel tests but couldn't load it"warning when theparallel_testsgem isn't actually installed. SimpleCov now treats aLoadErroron the auto-require as "the user set those env vars for some other reason (custom subprocess coordination, CI sharding) and isn't using parallel_tests" and silently skips. The newSimpleCov.parallel_tests true/falsesetting forces the auto-require on or off when finer control is needed. See #1018.SimpleCov.minimum_coverage_by_filenow accepts per-path overrides alongside the existing per-criterion defaults: pass String or Regexp keys to declare file- or directory-specific thresholds, e.g.minimum_coverage_by_file line: 70, 'app/mailers/request_mailer.rb' => 100. A String ending in/matches as a directory prefix; otherwise it must equal the project-relative path. Regexp keys match against the project-relative path. Per-path values may be a Numeric (primary criterion) or a per-criterion Hash; for each file the effective threshold is the defaults merged with any matching overrides (later overrides win per criterion, overrides win over defaults). The new overrides surface incoverage.jsonunder the existingerrors.minimum_coverage_by_fileblock. See #575.SimpleCov.maximum_coverage(and the convenienceSimpleCov.expected_coverage, which setsminimum_coverageandmaximum_coverageto the same value) so the suite can be pinned to an exact coverage figure. A drop fails per the minimum; an unexpected increase also fails, prompting you to bump the threshold up rather than silently absorbing the improvement. Accepts the same Numeric / per-criterion Hash forms asminimum_coverage. Exits with status 4 (SimpleCov::ExitCodes::MAXIMUM_COVERAGE) when violated, and surfaces incoverage.jsonundererrors.maximum_coverage. Comparisons floor the actual percent to two decimal places, soexpected_coverage 95.42still passes when the actual is e.g. 95.4287. See #187.strictprofile (SimpleCov.start "strict") that enables line, branch, and method coverage and pins the minimum threshold for each at 100%. Drops to line-only on engines without branch/method support (JRuby). See #1061.SimpleCov.coverage_pathis now explicitly settable rather than always computed fromSimpleCov.root + SimpleCov.coverage_dir. Setting it pins the report destination regardless of laterroot/coverage_dirchanges — useful for out-of-tree build directories (CMake/CTest etc.) where the coverage report doesn't live under the source root. See #716.coverage/index.htmlfrom the HTML formatter,coverage/coverage.jsonfrom the JSON formatter — so the line points at a concrete file (and is clickable in terminals that hyperlink paths). Paths outside cwd stay absolute. See #197.SimpleCov.disable_coverage(criterion)so a project can opt out of line coverage entirely — e.g.enable_coverage :branch; disable_coverage :linefor a branch-only run.SimpleCov.startnow raisesSimpleCov::ConfigurationErrorwhen every criterion has been disabled. The formatter summary and JSON output emit only the criteria that were actually measured, so a branch-only run produces noLine coverage:line, nolineskey incoverage.json, and no zero-padded line numbers in the HTML report. See #845.SimpleCov.remove_filter(arg)to drop a specific filter (matching byfilter_argument) andSimpleCov.clear_filtersto wipe the entire chain. Useful for selectively turning off one of the defaults loaded bySimpleCov.start— e.g.remove_filter(/\A\..*/)to stop hiding paths that begin with a dot. The README's "Default filters" section enumerates what's loaded by default and how to disable each piece. See #803.NO_COLOR(force off, per no-color.org) andFORCE_COLOR(force on);NO_COLORwins if both are set. See #1157.coverage,report,uncovered, anddiffnow colorize their printed percentages by the same threshold (anddiffcolors regressions red, improvements green). Auto-detect based on whether stdout is a TTY; the sameNO_COLOR/FORCE_COLORenv vars apply. Each subcommand also accepts a--no-colorflag as a per-invocation override.# simplecov:disable/# simplecov:enabledirective comments for selectively skippingline,branch, andmethodcoverage. Block form (own line) opens a region until the matching# simplecov:enable; inline form (trailing a code line) skips just that line. Categories may be combined (# simplecov:disable line, branch); omitting categories targets all three. Any trailing text is treated as a free-form reason and discarded (e.g.# simplecov:disable line legacy adapter). Directive markers inside string literals or heredocs are ignored.SimpleCov.source_in_json(default true) to make the per-filesourcearray incoverage.jsonopt-out. Tools that read the project's source files from disk don't need the embedded copy, and on larger projects it dominates the JSON payload. The HTML report'scoverage_data.jsstill embeds source unconditionally because the client-side viewer renders source from there. See #1143.meta.timestampis now emitted with millisecond precision (iso8601(3)) so the concurrent-overwrite warning can distinguish writes within the same wall-clock secondtotalsection with aggregate coverage statistics (covered, missed, total, percent, strength) for line, branch, and method coverage. Line stats additionally includeomitted(count of blank/comment lines, i.e. lines that cannot be covered)total_lines,lines_covered_percent, and when enabled:branches_covered_percent,methodsarray, andmethods_covered_percentsilent:keyword toJSONFormatter.newto suppress console outputsimplecov-htmlformatter into the main gem. A backward-compatibility shim ensuresrequire "simplecov-html"still works.simplecov_json_formatterinto the main gem. A backward-compatibility shim ensuresrequire "simplecov_json_formatter"still works.CommandGuessernow appends the framework name to parallel test data (e.g."RSpec (1/2)"instead of"(1/2)")SimpleCov::Result.newis roughly 7× faster for already-string-keyed input (theSimpleCov.collatehot path). The previous implementation deep-cloned each file's coverage data withJSON.parse(JSON.dump(coverage))per source file — a useful normalization for liveCoverage.resultsymbol keys, but pure overhead for resultsets loaded from disk that already have string keys.Resultnow stringifies the outer hash keys withtransform_keysonly when needed; the inner branch/method-key shape is already handled bySourceFile#restore_ruby_data_structure. See #916.SimpleCov.parallel_wait_timeout(default 60 seconds), which controls how long the process that writes the final report waits for the other parallel-test workers to finish writing their resultsets before it merges. Raise it when one worker runs much heavier test files and routinely finishes well after the others, so its coverage is included in the merge and the minimum and maximum coverage checks run against the full total instead of being skipped against a partial one. See #1171.SimpleCov.finalize_mergeto separate storing mergeable worker resultsets from owning final report finalization. Parallel workers that write to explicit custom coverage destinations can now store their shard.resultset.jsonfiles without waiting on sibling shards they cannot see; an explicitSimpleCov.collatecleanup step then formats the merged report, enforces thresholds, and writes.last_run.json. SimpleCov infers this external-finalization mode only for recognized multi-worker parallel runs with merging enabled and a custom coverage destination, and emits a configuration warning until users setfinalize_merge false(ortrue) explicitly. See #1215.CHANGELOG.md, trimming the largest avoidable part of the payload (the changelog grew with every release). Thechangelog_urigem metadata already links the copy on GitHub.SimpleCov.primary_coverage, line by default), ascending, so the least-covered files lead the list. To carry the primary criterion to the report,coverage.jsonincludes aprimary_coveragefield inmeta, also documented in the coverage schema. See #1171.Bugfixes
:eval_generatedtokens toSimpleCov.ignore_branchesand the newSimpleCov.ignore_methodsso projects using macros like Rails'delegate(or any pattern that callsmodule_eval(body, __FILE__, __LINE__)) can drop the synthetic branch and method entries those macros inject. Ruby'sCoverageattributes eval'd code to the caller's__FILE__/__LINE__, so adelegate :foo, to: :barline surfaces as if it had adef fooand anifbranch right there. Detection uses Prism to walk the static source and treats any Coverage entry whose start_line lacks a realdefkeyword (for methods) or branch construct (for branches) as eval-generated. Opt in withignore_methods :eval_generatedand / orignore_branches :eval_generated. Prism ships with Ruby 3.3+; on older Rubiesgem install prismenables the filter, otherwise the setting is a no-op. See #1046.cover/track_filesthat were neverrequire'd during the run now contribute branch and method entries to the report, not just lines. PreviouslySimulateCoverageleft those fields as empty hashes (because parsing source ourselves felt risky), which made unloaded files invisible to the branch and method denominators while their lines DID count — so acover "{app,lib}/**/*.rb"glob over files without specs silently inflated branch% relative to line% (the OP's reproduction was via SonarQube, which surfaces the asymmetry more visibly than the SimpleCov HTML report). Branches and methods are now enumerated statically viaSimpleCov::StaticCoverageExtractor, which uses Prism to walk the AST and emits Coverage-shaped tuples without loading the file. The shape matches what Ruby's ownCoveragelibrary reports for the same source::if/:case/:while/:untilconstructs plus their:then/:else/:when/:in/:bodyarms, with the synthetic:elsefor case-without-explicit-else that theignore_branches :implicit_elsesetting (see Enhancements) targets. Prism is bundled with Ruby 3.3+; on older Rubiesgem install prismenables the fix, otherwise SimulateCoverage falls back to the previous "empty hashes" behavior. See #1059.">100LOC"/"<10LOC", or any pair using different special characters) no longer render into the same DOM container. The JS that built HTML ids from group names stripped every non-letter prefix and then every remaining non-alphanumeric char, so both names sanitized to"LOC"and the second group silently replaced the first in the rendered tabs. The new encoding ("g-" + each-non-id-char-as-hex) preserves uniqueness across all input shapes. See #1038."or'characters are now escaped when rendered intotitle="..."attributes. The previous DOM-basedescapeHTMLonly escaped&,<, and>, so a project with such filenames could break out of the attribute. The replacement encodes all five HTML-attribute-sensitive characters via areplacecallback (also avoids allocating a DOM node per call).f.branches_covered_percent || 100.0(and the method equivalent), which treated a real0as falsy and substituted the disabled-criterion fallback. The check now distinguishes "criterion disabled" (undefined) from "criterion measured zero" (0).SimpleCov::Resultnow warns when it drops source files because their absolute paths aren't on the local filesystem, instead of silently producing an empty0 / 0 (100.00%)report. The most common trigger isSimpleCov.collateinvoked from a machine or working directory different from where the individual resultsets were generated — when every entry is missing the warning explicitly names that case and points at the issue; when only some are missing the warning is quieter and lists up to five paths with a(+N more)suffix. See #980.track_filesthat were never loaded now use the same line classification as loaded files. Previously,SimulateCoverageran the file throughLinesClassifier, which marks every non-blank, non-comment line as relevant — so a multi-line method chain@x = a.foo.barreported 4 relevant lines for the unloaded copy and 2 for the loaded copy, throwing off per-file and overall percentages.SimulateCoveragenow usesCoverage.line_stub(the same stub Ruby would have produced if the file were required), then overlays# :nocov:toggles and# simplecov:disable linedirective ranges that the runtime doesn't know about. The two paths now agree on every shape: multi-line statements,endkeywords, blank lines, and SimpleCov-specific exclusion comments. Some projects will see theirtracked_filespercentages shift as a result. See #654.Bundler.require) caused.simplecovto auto-loadSimpleCov.startin the rake parent, which then shelled out to a test runner subprocess; the subprocess wrote a correct report, then the parent'sat_exitwould clobber it with an empty 0% report. Three layers of defense now apply: (1).simplecovis treated as configuration only and no longer starts tracking from the parent (see DeprecatConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.