Releases: simplecov-ruby/simplecov
Releases · simplecov-ruby/simplecov
Release list
v1.3.2
Bugfixes
- The HTML report is generated again on Rails 8.1.4 when a
parallelize_teardownhook callsSimpleCov.result. Rails 8.1.4 runs those hooks in the parent process as well as in each worker, and collecting the result there stopsCoverage, which the exit handler took as a sign that nothing was left to report. The exit handler now formats a result that was already collected. See #1308.
v1.3.1
Bugfixes
cover_viewscompiles templates on Rails main again. Rails removedActionView::Template.registered_template_handler; the lookup readsActionView::Template::Handlers.template_handlersand still skips an extension with no handler. See #1300.require "simplecov"works again on JRuby on Windows, where 1.3.0 raisedLoadError: Could not open library '.../libprism.dll'. Prism's FFI backend cannot open its native library there, and 1.3.0 required Prism as soon as SimpleCov loaded. Prism now loads only when branch or method coverage needs the static extractor, which a line-only run never does. Where it cannot load at all, the extractor falls back to empty branch and method tables for never-loaded files, as it did before 1.3.0. See #1299.simplecov affected --runworks on JRuby on Windows, where it crashed withNoMethodErrorbecauseProcess.wait2answers no status there. On that platform the runner starts throughKernel#systeminstead.simplecov serverefuses a symlink that points outside the report on JRuby on Windows too. JRuby'sFile.realpathfollows no symlinks there, soservewould have served the file the link pointed to, andsimplecov cleanand thecoverage.jsonlookup compared paths that were never resolved. On JRuby the CLI now resolves paths through the JDK.
v1.3.0
SimpleCov 1.3 raises the minimum Ruby to 3.3, brings the coverage directives to ERB, Haml, and Slim templates,
teaches simplecov patch and simplecov uncovered to annotate CI hosts natively, and settles what the report says
about files and groups that hold nothing.
Highlights
- Ruby 3.2 is no longer supported. The minimum is Ruby 3.3, which bundles Prism, so the static coverage extractor stops probing for it and the emulation of 3.2's constant folding is gone.
# simplecov:disableand# simplecov:enablework inside ERB, Haml, and Slim templates measured withcover_views, in each language's own comment syntax or as Ruby comments on a code line.--annotate KINDturnssimplecov patchandsimplecov uncoveredinto inline CI annotations for GitHub, GitLab, reviewdog, Azure, TeamCity, and Buildkite, so one CI step can both annotate and gate.- Groups that match no files are omitted from the report instead of padding it at 100%, and the
railsprofile declares its groups alphabetically. cover_viewsis the only way to measure a template now: acoverglob that matches one warns and leaves it out, andignore: :eval_generatedno longer drops a template's real branches and methods.- A file with nothing to cover reports the same percentage in the file list as it does in the source view.
Upgrade notes
- The minimum supported Ruby is now 3.3. Ruby 3.2 reached end of life in March 2026. JRuby 10 remains supported for line coverage.
- A group that matched no files disappears from the HTML report,
coverage.json, and the history file, and a per-group minimum on it passes silently rather than complaining that the group does not exist. - The
railsprofile's group tabs come out in alphabetical order, so an existing project's tabs move. - A never-loaded file with no branches or methods reports 100% for those criteria rather than 0%, so a per-file branch or method threshold that failed such a file passes now. A file the report carries no branch or method table for at all is still unaccounted for, and keeps its 0%.
- A
coverglob matching.erb,.haml, or.slimwarns and drops those files from the report. Measure templates withcover_viewsinstead. coverage.jsonstays at schema 1.3, unchanged by this release.
Breaking Changes
- Dropped support for Ruby 3.2. The minimum supported Ruby is now 3.3 (
required_ruby_version >= 3.3), with JRuby 10 still supported and TruffleRuby exercised only by the nightly unstable build. Prism is bundled with every supported Ruby, so the static coverage extractor stops probing for it:StaticCoverageExtractor.available?and the empty-hash fallbacks for its absence are gone. So is the emulation of Ruby 3.2's constant folding, where parentheses were transparent for every literal and a folded dead arm's branches survived in the branch table.
Enhancements
# simplecov:disableand# simplecov:enablework inside ERB, Haml, and Slim templates measured withcover_views, in each language's own comment syntax (<%# simplecov:disable %>,-# simplecov:disable,/ simplecov:disable) or as Ruby comments on a code line. A template's directives were never found before: the comment scan tokenizes a file as Ruby, and in ERB%>opens a percent literal that swallowed every comment after the template's first tag, while Haml and Slim comments are not Ruby comments at all and a Slim- # simplecov:disableline even read as an inline directive that disabled only itself. The scan now reads only the Ruby a template holds, at the template's own lines, so a Devise app can disable theconfirmablelink it never renders instead of carrying it as uncovered. See #1295.- Groups that match no files are omitted from the report instead of appearing as 100% covered with nothing in them. Formatters,
coverage.json, and the history file all skip them, so therailsprofile'sChannels,Mailers, andViewstabs no longer pad the HTML report of an app without those directories, and a project can declare a group per directory it might have (Dir["app/*"].each { |dir| group File.basename(dir).capitalize, dir }) without checking each one for Ruby files first. Aminimum_coverage_by_groupthreshold on a group that matched nothing passes silently, as it did when the empty group reported 100%, rather than complaining that the group does not exist. See #1293. - The
railsprofile declares its groups in alphabetical order:Channels,Controllers,Helpers,Jobs,Libraries,Mailers,Models,Views. Group tabs render in declaration order, so the report of a Rails app lists them that way instead of in the order they accumulated over the years. Nothing else about the groups changes, and a project that declares its own groups is unaffected. simplecov patchandsimplecov uncoveredannotate CI hosts natively.--annotate KINDon both commands turns the answer into inline annotations in the host's own channel, one per contiguous missed range with project-relative paths (patchadds one per uncovered touched branch or method when the report measured them):githubemits::warningworkflow commands,gitlaba Code Quality report for thecodequalityartifact,rdjsonreviewdog's Diagnostic Format for any host reviewdog posts to,azure##vso[task.logissue]logging commands,teamcitycode inspection service messages, andbuildkitethe Markdown body forbuildkite-agent annotate.uncoveredpreviously offered onlygithub, and its annotations now name the chosen criterion the waypatch's do. Nothing else reaches stdout in that mode andpatch --minimumstill sets the exit status, so one CI step can annotate and gate. Documented under CI annotations in docs/CLI.md.
Bugfixes
- A file with no branches or no methods reports the same percentage everywhere. A file tracked but never loaded had its empty branch and method sets forced to 0% (#902), from a time when simulation recorded no tuples for such a file and an empty set really did mean "nobody knows". Simulation has synthesized those tuples statically for a while now, so an empty set is a fact about the file: it has no branches, or a directive skipped the ones it has. Such a file now reports 100% the way a loaded file with none always has, so the file list stops showing 0% beside a source view that says 100%, and a per-file branch or method minimum stops failing a file that has nothing to cover. A file carrying no table at all for the criterion is still unaccounted for, and 0% stands there. The HTML report's source view also takes each header percentage from the report rather than recomputing it from the fraction, so the two views cannot drift again. See #1296.
- A
coverglob that matches a template warns and leaves it out instead of simulating it. Simulation classifies lines as Ruby and parses for branches, so a swept-in template appeared with a comment counted as a missed line, an#idtag counted as never relevant, and no branches at all. The warning names the templates and points atcover_views, which compiles them and measures the real thing. - The deprecated
# :nocov:toggle works in a template's own comment syntax (<%# :nocov: %>,-# :nocov:,/ :nocov:) and emits its deprecation warning there. The matcher read raw lines and needed the line to begin with#, so those forms were silently ignored while the Ruby-comment form inside an ERB code tag happened to work. The matcher now reads the same extracted Ruby the directives do. ignore: :eval_generatedno longer drops a template's real branches and methods. The filter keeps a Coverage entry only when Prism finds a matching construct in the static source, which for a template measured withcover_viewsmeant parsing ERB, Haml, or Slim as Ruby. That usually fails and the entry is kept, but a template whose text happens to parse (a Haml or Slim#idtag reads as a Ruby comment, and so does an ERB text line starting with#) yielded a confident wrong parse, and the template's own conditionals vanished from branch coverage. Templates now skip the parse, since everything a template reports is eval-generated by construction and the filter has nothing to distinguish there.
v1.2.0
SimpleCov 1.2 adds change-focused coverage, per-test attribution, production coverage, and a substantially expanded
CLI while keeping the existing configuration API working through deprecation aliases.
Highlights
track_tests,simplecov tests, andsimplecov affectedconnect covered lines to the tests that exercised them; the HTML report displays the same attribution andsimplecov watchuses it for focused reruns.simplecov patch, per-file baselines, missed-count caps, and coverage history make coverage gates useful for both new changes and legacy codebases.SimpleCov::Productionrecords low-overhead production line coverage, whilesimplecov dead-codeand the bundled reports cross it with test coverage.- ActionView templates can be measured with
cover_views, including ERB, Haml, and Slim source highlighting. - The CLI gains annotated source, report freshness, history, badges, shell completions, a man page, and richer machine-readable output.
Upgrade notes
- The minimum supported Ruby remains 3.2; JRuby 10 remains supported for line coverage.
- Successful runs now maintain the bounded
coverage/.history.jsonfile by default. Sethistory_limit 0to disable it. - Existing configuration continues to work, but criterion-specific filters and threshold scopes now prefer
coverage(:criterion) { ignore ... }andminimum ..., per: .... The legacy forms warn with their exact replacements, anddeprecations :raisecan enforce a completed migration. coverage.jsonadvances additively to schema 1.3 for test-context, history, baseline-error, and production data. Previously published versioned schemas remain frozen for pinned consumers.
Enhancements
- The HTML report's source view renders the
track_testsrecording. A covered line no recorded test executed drains from green to a slate tint, with a "Covered outside tests" legend chip, so coverage produced only by load time, suite setup, or helpers stops passing for tested code at a glance. Every executed line carries a tests badge naming its count, and clicking it opens an inline panel listing the covering tests, the same ids in the same ordersimplecov tests file:lineprints, each one selectable with a click for handing to a runner. Drained lines explain themselves in the same panel instead of listing nothing. The file header's Line coverage row splits its fraction by the same attribution ("Line coverage: 100.00% 21/30 relevant lines covered by tests, 9/30 relevant lines covered outside tests"), the legend's covered chip splits to match (green "Covered by tests" beside the slate "Covered outside tests"), keyboard access rides on real buttons with the report's focus ring, and the panel closes on Escape without closing the source dialog. The file list draws the same distinction: each line coverage bar splits its fill into the share recorded tests produced (in the usual band colour) and a slate share covered only outside them, in the file rows and the live-filtered totals row alike, and sorting by line coverage breaks ties on the by-tests share, so of two files at 100% the one whose coverage rests on its tests ranks above the one warmed by load time. All of it appears only when the report was generated withtrack_testsenabled, so other reports render exactly as before. simplecov patchreports coverage of just the lines a change touched, the questiondiffdoes not answer. Wherediffcompares two reports and asks whether the overall number moved — which a large or legacy project cannot shift in one pull request —patchreadsgit diff --unified=0 --merge-base <base>, intersects the added and modified line numbers with the current report, and prints line coverage — and, when the report measured branches or methods, branch and method coverage over the branches and methods those lines carry — for only that change, so a project sitting at 40% can still insist that everything it adds is tested.--minimum Nexits non-zero below a floor (every measured criterion must clear it), composing with CI as a per-change gate alongside the existing thresholds;--baseselects the ref to diff against (defaulting to the branch origin's HEAD points at, elsemain; in CI, the target branch or its merge-base);--find-renamesfollows a moved file instead of counting it as all-new; and--jsonemits the rows the other read-only commands do. Only files the report already carries are scored, and a lineLinesClassifierdeems never relevant stays out of the denominator the same way it stays out of a file's total, so a comment-only or whitespace change reads as nothing to cover rather than as a gap. A brand-new file that was nevergit added appears in no diff yet is still the change's work, so untracked files are scored too, every report-known line of them as new. The diff is anchored at the repository root rather than the working directory, so a run from a subdirectory reports the same change, and changed files resolve against the report by exact path, so a lookalike entry elsewhere in the report can never be scored in a changed file's place. A changed line beyond what the report knows for its file draws a staleness warning instead of silently scoring nothing, a git failure reports git's own words rather than a guess, and a path that matches more than one report entry names its candidates, incoverageandteststoo, instead of a bare "no entry". Almost none of this is new machinery: the report already knows which lines are relevant and which were hit, leaving a hunk-header parser and path resolution against the report's root. Prior art isdiff-cover, Codecov's patch status, and theundercovergem, which does this for Ruby but needs its own formatter and a git dependency to get there. See #1262.track_testsrecording got a cost model and the levers to control it. Recording now settles at segment boundaries: consecutive tests share their boundary coverage snapshot (one snapshot closes one test's segment and opens the next, attributing any in-between code to the later test), which halves the per-test sampling cost outright, and the project-root check is memoized per file. On top of that,track_tests granularity: :filerecords one context per test file instead of per test, so the suite pays one snapshot per change of file in run order rather than one per test, and test selection needs no more than file identity anyway. On a real 1,756-test Minitest suite measuring line, branch, and method coverage, the two changes together cut tracking overhead from 52 seconds to 28 at the default granularity and to 13 at:file. The remaining floor is Ruby's ownCoverage.peek_resultcopy, which scales with the criteria the run measures: a millisecond or two under line coverage alone, an order of magnitude more with branch and method tables, which the docs now spell out.simplecov testsanswers which tests cover a file or line, from the terminal. Bare, it lists every test recorded undertrack_tests. With a path it narrows to the tests touching that file, and withpath:lineto one line. Text output is one test id per line and nothing else on stdout, sorted, so the list can feed a runner directly (simplecov tests lib/foo.rb:42 | xargs bundle exec rspec), with empty answers noted on stderr instead.--jsonemits a JSON array, and--inputpicks the report like the other read-only subcommands. It reads thecontextsdata incoverage.json, so it works on any report generated aftertrack_testswas enabled, and explains what to enable when the recording is missing.simplecov tests --redundantlists the tests whose covered lines other tests also cover, the tests contributing no coverage of their own, computed from the sametrack_testsrecording with no new measurement. The flag composes with the narrowing, sosimplecov tests --redundant lib/foo.rblists the redundant tests among those touching the file. The listed ids are candidates for review rather than a delete list: assertions and mutation-killing power are invisible to coverage, and two tests covering exactly the same lines subsume each other, so both are listed and deleting both would lose the lines. An empty answer over a real recording is good news and says so on stderr.simplecov affectedselects the tests that touch changed code. It diffs the working tree against the merge base of a git ref (--base, defaulting to the branch origin's HEAD points at, elsemain) and HEAD, so uncommitted work counts as part of the change while commits that landed on the base after the branch point do not, includes untracked files, and prints the test files whose recorded tests touch the changed files, so the local inner loop can runsimplecov affected --run bundle exec rspecinstead of the whole suite. Everything after--runis the runner command, the selection is appended to it, and the exit status is the command's own. The set intersection is the easy half. The hard half is knowing when to distrust the map, because a test map is stale the moment something changes that no test mentions by name, so any changed file outside the tracked set fails open to the full suite, out loud: a changedGemfile.lock,.simplecov, spec helper, runner configuration, or any file the report has no data for is named on stderr as the trigger, while stdout prints nothing, which a bare runner reads as run everything. Changed or brand-new test files always select themselves, recorded or not, a test file deleted by the change drops out of the answer, and a recorded test whose file no longer exists anywhere else reads as staleness rather than being silently skipped.--jsonemits the selection with itsfull_suiteverdict and triggers for tooling, and--inputpicks the report like the other read-only subcommands. Likepatch, the diff is anchored at the repository root, so a run from a subdirectory selects over the whole change, with--runstarting the runner at that root, and changed fi...
v1.1.1
What's Changed
- Bump step-security/harden-runner from 2.20.0 to 2.20.1 by @dependabot[bot] in #1258
- rspec-conductor Support by @sferik in #1259
Full Changelog: v1.1.0...v1.1.1
v1.1.0
What's Changed
- Bump actions/checkout from 7.0.0 to 7.0.1 by @dependabot[bot] in #1243
- Bump ruby/setup-ruby from 1.318.0 to 1.320.0 by @dependabot[bot] in #1242
- Improve collate performance by @danielwestendorf in #1244
- Bump ruby/setup-ruby from 1.320.0 to 1.321.0 by @dependabot[bot] in #1247
- Make the HTML report a single self-contained index.html by @sferik in #1245
- Cut unloaded-file injection cost, fix 100% coverage in merged reports by @sferik in #1252
- Stop matching the :nocov: regex twice on every classified line by @andriytyurnikov in #1253
- Absorb resultsets into one accumulator instead of folding pairwise by @andriytyurnikov in #1254
- Inject unloaded files once at the merge point, not once per process by @sferik in #1255
- Fix CommandGuesser mislabelling suites from incidental path substrings by @sferik in #1251
- Speed up SimpleCov.collate with optional multi-process merge by @danielwestendorf in #1246
- Keep branch and method data the resultsets carried by @sferik in #1256
- Colorblind mode by @sferik in #1257
New Contributors
- @danielwestendorf made their first contribution in #1244
- @andriytyurnikov made their first contribution in #1253
Full Changelog: v1.0.3...v1.1.0
v1.0.3
What's Changed
- Bump ruby/setup-ruby from 1.316.0 to 1.318.0 by @dependabot[bot] in #1238
- fix: memoise key parsing in RubyDataParser to fix combiner performance regression by @oleksii-leonov in #1239
New Contributors
- @oleksii-leonov made their first contribution in #1239
Full Changelog: v1.0.2...v1.0.3
v1.0.2
What's Changed
- Bump ruby/setup-ruby from 1.315.0 to 1.316.0 by @dependabot[bot] in #1229
- Bump step-security/harden-runner from 2.19.4 to 2.20.0 by @dependabot[bot] in #1230
Full Changelog: v1.0.1...v1.0.2
v1.0.1
What's Changed
- Fix
NoMethodErrorinformatters=for non-Array arguments by @koic in #1224 - Explicitly write formatter's status message to STDERR by @viralpraxis in #1225
New Contributors
- @viralpraxis made their first contribution in #1225
Full Changelog: v1.0.0...v1.0.1
v1.0.0
What's Changed
- Adds Ruby 3.2 to the CI matrix. by @petergoldstein in #1042
- Fix incorrect comment on "Gemfile" by @nishidayuya in #1027
- Fix typo in documentation by @eyupatis in #995
- Readme: Fix Coverage link by @camsteffen in #1049
- Cleanup archived project by @borisrorsvort in #1056
- Added dependabot for GitHub Actions and bundler by @ydah in #1048
- Bump rubocop from 1.24.1 to 1.42.0 by @ydah in #1047
- Bump actions/checkout from 3 to 4 by @dependabot[bot] in #1070
- Fix typo by @zenspider in #1076
- CI debugging by @PragTob in #1086
- Add TruffleRuby in CI by @eregon in #1079
- allow Coverage to start when Coverage.running? is not implemented by @notEthan in #1043
- Run Rubocop only once in CI by @PragTob in #1087
- Unexclude skipped on TruffleRuby test case by @andrykonchin in #1089
- Set up the trusted publisher together with @segiddins by @PragTob in #1094
- Bump step-security/harden-runner from 2.7.1 to 2.8.1 by @dependabot[bot] in #1095
- Trying to update cucumber & co but running into conflicts by @PragTob in #1088
- Technical/Fix documentation formatters usage example by @bestwebua in #1096
- Fix minor typo in README by @chris-hewitt in #1080
- Update gems & fix new rubocop offenses by @PragTob in #1098
- Bring Ruby 2.7 support back by @amatsuda in #1107
- Bump step-security/harden-runner from 2.8.1 to 2.9.1 by @dependabot[bot] in #1104
- Bring Ruby 2.5 and 2.6 support back by @amatsuda in #1108
- Bump step-security/harden-runner from 2.9.1 to 2.10.2 by @dependabot[bot] in #1117
- Bump rubygems/release-gem from 612653d273a73bdae1df8453e090060bb4db5f31 to a25424ba2ba8b387abc8ef40807c2c85b96cbe32 by @dependabot[bot] in #1119
- Follow the repo convention to use
floorinstead ofroundto provide actionable coverage metrics by @corsonknowles in #1116 - Ensure branches Hash is present when supported by @marcotc in #972
- Add logger to deps and load in early in test Rails app. by @simi in #1131
- Bump step-security/harden-runner from 2.10.2 to 2.11.1 by @dependabot[bot] in #1128
- Reduce GC pressure in LinesCombiner by ~90% by @KevSlashNull in #1144
- Add support for
oneshot_linescoverage mode by @fatkodima in #1154 - Bump actions/checkout from 4 to 6 by @dependabot[bot] in #1148
- Bump rubygems/release-gem from 1.1.1 to 1.1.2 by @dependabot[bot] in #1145
- Bump step-security/harden-runner from 2.13.0 to 2.14.1 by @dependabot[bot] in #1153
- Fixed typos and grammatical errors by @AmritD in #1147
- Fix crash in oneshot coverage when file is missing or not valid Ruby by @skryukov in #1158
- Prevent test_frameworks profile to hide source directories by @splattael in #1133
- Minimum coverage by group check by @mikhliuk-k in #1105
- Fallback to empty array if branches is missing by @exoego in #1140
- patch simplecov-html dep by @timkellogg in #1072
- minimum_coverage_by_file now prints the name of the violating file. by @philipritchey in #1103
- Add support for method coverage by @sferik in #1161
- Update commercial services docs: replace Code Climate with Qlty Cloud by @brynary in #1162
- Fix misleading 100% branch/method coverage for unloaded tracked files by @55728 in #1163
- add line and branch coverage output expectation by @philipritchey in #1102
- Support parallel_tests with multiple commands by @BenoitMC in #1022
- Bump step-security/harden-runner from 2.16.0 to 2.16.1 by @dependabot[bot] in #1166
- Bump ruby/setup-ruby from 1 to 1.300.0 by @dependabot[bot] in #1168
- Bump rubygems/release-gem from 1.1.4 to 1.2.0 by @dependabot[bot] in #1169
- Add richer metrics to JSON formatter by @sferik in #1164
- Drop warning and ruby 1.9 support. by @coorasse in #1172
- Bump step-security/harden-runner from 2.16.1 to 2.17.0 by @dependabot[bot] in #1173
- Bump step-security/harden-runner from 2.17.0 to 2.19.0 by @dependabot[bot] in #1176
- Bump ruby/setup-ruby from 1 to 1.305.0 by @dependabot[bot] in #1175
- Simplify formatter architecture by @sferik in #1165
- Restore capture_stderr helper used by JSON formatter specs by @sferik in #1177
- Fix race when parallel workers copy static assets by @sferik in #1178
- Add simplecov:disable / simplecov:enable directive comments by @sferik in #1179
- Bump ruby/setup-ruby from 1.305.0 to 1.306.0 by @dependabot[bot] in #1180
- Bump step-security/harden-runner from 2.19.0 to 2.19.1 by @dependabot[bot] in #1183
- simplecov CLI by @sferik in #1182
- Bump ruby/setup-ruby from 1.306.0 to 1.307.0 by @dependabot[bot] in #1185
- Bump step-security/harden-runner from 2.19.1 to 2.19.2 by @dependabot[bot] in #1186
- Run CI on macOS and Windows by @sferik in #1187
- Redesign configuration DSL around cover/skip/group by @sferik in #1188
- Add ignore_branches for synthetic else branches by @sferik in #1189
- Document explicit receiver in .simplecov file by @bquorning in #1190
- Bump ruby/setup-ruby from 1.307.0 to 1.308.0 by @dependabot[bot] in #1191
- Bump step-security/harden-runner from 2.19.2 to 2.19.3 by @dependabot[bot] in #1192
- README: Update to preferable coverage pattern for Rails by @runephilosof-abtion in #1193
- Synthesize branch and method coverage for unloaded files by @sferik in #1194
- Pluggable parallel-test-runner adapter interface by @sferik in #1195
- Add :eval_generated filter for ignore_branches and ignore_methods by @sferik in #1196
- Publish a JSON Schema for coverage.json by @sferik in #1184
- Create a GitHub Release when pushing a gem by @sferik in #1198
- Bump actions/checkout from 6 to 6.0.2 by @dependabot[bot] in #1202
- Bump ruby/setup-ruby from 1.308.0 to 1.310.0 by @dependabot[bot] in #1201
- Bump step-security/harden-runner from 2.19.3 to 2.19.4 by @dependabot[bot] in #1199
- Bump rubygems/configure-rubygems-credentials from 1.0.0 to 2.0.0 by @dependabot[bot] in #1200
- Bump actions/checkout from 6.0.2 to 6.0.3 by @dependabot[bot] in #1203
- Fix branch tuple identity mismatches by @pboling in #1207
- Fix generic parallel adapter opt-out and result wait ordering by @pboling in #1209
- Bump rubygems/configure-rubygems-credentials from 2.0.0 to 2.1.0 by @dependabot[bot] in htt...