Skip to content

1.2.1: test case filters in delta builds, build/vendor copying, paths in plugin per-file tasks - #1363

Merged
mkarlesky merged 7 commits into
masterfrom
fix/1.2.1-delta-filters-vendor-copy-plugin-paths
Oct 24, 2026
Merged

mkarlesky merged 7 commits into
masterfrom
fix/1.2.1-delta-filters-vendor-copy-plugin-paths

Conversation

@mkarlesky

Copy link
Copy Markdown
Member

Three fixes to 1.2.0 for a 1.2.1 patch release.

Fixes #1360
Fixes #1361
Fixes #1362

#1360: changed test case filters replayed cached results

A test fixture's cache entry now includes the --test-case and --exclude_test_case filters (TestBuildExecutor#fixture_meta). Before this, any :use_backtrace other than :none, including the :simple default, already turned :cmdline_args on. A filtered and an unfiltered executable were then identical, so a changed filter skipped the run and reported the last run's results.

  • A changed filter reruns the executable without recompiling or relinking it.
  • An unchanged filter still reuses the cache.
  • After upgrading, each test executable reruns once, because its cache key changed.

#1361: every command rewrote build/vendor/

  • Only builds vendor. bin/cli_handler.rb uses the task registry to classify the requested tasks as test and release builds, and passes the result through app_cfg, Setupinator and Configurator to ConfiguratorSetup#vendor_frameworks_and_support_files.
    • A test build vendors what it did before, under the same conditions.
    • A release build vendors only CException, and only when exceptions are enabled.
    • Any other command (files:, dumpconfig, clean, and so on) vendors nothing.
  • Smart, atomic copy. FileWrapper#cp_r_with_retry is replaced by sync_tree, sync_file and replace_file.
    • A destination file whose size and content match its source is skipped.
    • A file that differs is written to a temporary name in the same directory, then renamed over the destination.
    • The transient I/O retry behavior and its error message are unchanged.
    • The path-length check covers the temporary name, the longest path written.
  • Registry guard. A new integration spec runs the registry against the real core and plugin rakefiles in both passes. It also checks that every test and release pipeline call sits where the registry can place it.

#1362: per-file plugin tasks rejected paths

A new TestTaskName.test_name helper prefixes only a task name's basename and keeps any directory typed ahead of it. It is shared by:

  • test: and gen: rules;
  • gcov:, valgrind:, sanitize: and bullseye: per-file rules.

The plugins' task descriptions and wildcard messages now describe paths the way test: does.

Also

  • lib/version.rb is bumped to 1.2.1.
  • New entries in the Changelog and README.
  • Path examples in the plugin docs.

Verification

🤖 Generated with Claude Code

mkarlesky and others added 7 commits October 23, 2026 20:45
With :test_runner ↳ :cmdline_args on, as any :use_backtrace other than :none
makes it, a filtered and an unfiltered executable are identical. A delta build
then skipped the run and reported the last run's results. The filters are now
part of the fixture's cache metadata (GH #1360).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e per-file tasks

Each plugin's per-file rule prefixed the test file prefix to the whole name, so
gcov:test/test_foo.c looked for test_test/test_foo.c. The core test: and gen:
rules prefixed only the basename. All seven rules now share TestTaskName, which
keeps any directory and prefixes only the file name (GH #1362).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every project-loading command, files:test and dumpconfig included, rewrote
build/vendor in place, so a concurrent build could read a half-written header.
Now only a test build brings Unity, CMock, CException and the support files up
to date, and a release build only CException. A file that already matches its
source is not written. One that differs is replaced whole by renaming a
temporary copy over it (GH #1361).

The task registry's identification of plugin test builds is now covered against
the real rakefiles, before and after plugin constants load.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he registry must place

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

CI summary · d306fa1 · ✅ 23/23 jobs passed · no baseline

Tests (Linux 3.3) Examples Failures Pending
units 4926 0 0
integration 493 0 19
system 371 0 35
Coverage Lines Δ
units 89.35% —
integration 47.77% —
system 83.57% —
combined 98.35% —

Diff coverage: 100.00% (43/43 changed lines).

All legs (examples / failures / pending)
Leg units integration system
Linux 3.0 4926 / 0 / 0 493 / 0 / 19 371 / 0 / 35
Linux 3.1 4926 / 0 / 0 493 / 0 / 19 371 / 0 / 35
Linux 3.2 4926 / 0 / 0 493 / 0 / 19 371 / 0 / 35
Linux 3.3 4926 / 0 / 0 493 / 0 / 19 371 / 0 / 35
Linux 3.4 4926 / 0 / 0 493 / 0 / 19 371 / 0 / 35
Linux 3.5 4926 / 0 / 0 493 / 0 / 19 371 / 0 / 35
Windows 3.0 4926 / 0 / 1 493 / 0 / 19 371 / 0 / 62
Windows 3.1 4926 / 0 / 1 493 / 0 / 19 371 / 0 / 62
Windows 3.2 4926 / 0 / 1 493 / 0 / 19 371 / 0 / 62
Windows 3.3 4926 / 0 / 1 493 / 0 / 19 371 / 0 / 62
Windows 3.4 4926 / 0 / 1 493 / 0 / 19 371 / 0 / 62
macOS 3.1 4926 / 0 / 0 493 / 0 / 19 371 / 0 / 51
macOS 3.2 4926 / 0 / 0 493 / 0 / 19 371 / 0 / 51
macOS 3.3 4926 / 0 / 0 493 / 0 / 19 371 / 0 / 51
macOS 3.4 4926 / 0 / 0 493 / 0 / 19 371 / 0 / 51
macOS 3.5 4926 / 0 / 0 493 / 0 / 19 371 / 0 / 51
Jobs

@mkarlesky
mkarlesky merged commit 47d2c5e into master Oct 24, 2026
24 checks passed
@mkarlesky
mkarlesky deleted the fix/1.2.1-delta-filters-vendor-copy-plugin-paths branch October 24, 2026 04:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant