fix: auto-merge must use PAT_TOKEN to trigger downstream workflows#84
Merged
cloud-hai-vo merged 1 commit intomainfrom Mar 26, 2026
Merged
fix: auto-merge must use PAT_TOKEN to trigger downstream workflows#84cloud-hai-vo merged 1 commit intomainfrom
cloud-hai-vo merged 1 commit intomainfrom
Conversation
GitHub limitation: pushes made by GITHUB_TOKEN do NOT trigger other workflows. When auto-merge used GITHUB_TOKEN, the merge push to main silently skipped publish, CI, and benchmark workflows. Fix: - Auto-merge: switch back to PAT_TOKEN so merge pushes trigger all downstream workflows (publish, CI, benchmarks) - Publish: restore paths filter (src/**) to prevent publishing on README-only benchmark merges The path filters on benchmarks (src/**, scripts/**) still prevent infinite loops when benchmark README PRs merge. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Contributor
📊 Benchmark Results
🔵 Flat Mapping — 10-property object
🟡 Flattening — 2 nested objects → 8 flat properties
🟣 Deep Mapping — 2 nested address objects
🟢 Complex Mapping — nested object + collection
🟠 Collection — 100-item
|
| Method | Mean | Error | StdDev | Min | Median | Max | Ratio | RatioSD | Rank | Gen0 | Gen1 | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Manual | 1.673 μs | 0.1395 μs | 0.0076 μs | 1.667 μs | 1.672 μs | 1.682 μs | 1.00 | 0.01 | 1 | 0.5283 | 0.0172 | 8.65 KB | 1.00 |
| EggMapper | 1.711 μs | 0.3602 μs | 0.0197 μs | 1.699 μs | 1.701 μs | 1.734 μs | 1.02 | 0.01 | 1 | 0.5283 | 0.0172 | 8.65 KB | 1.00 |
| AutoMapper | 2.277 μs | 0.0517 μs | 0.0028 μs | 2.273 μs | 2.278 μs | 2.279 μs | 1.36 | 0.01 | 2 | 0.6065 | 0.0191 | 9.95 KB | 1.15 |
| Mapster | 4.644 μs | 0.2583 μs | 0.0142 μs | 4.631 μs | 4.643 μs | 4.659 μs | 2.78 | 0.01 | 3 | 0.5264 | 0.0153 | 8.65 KB | 1.00 |
| MapperlyMap | 1.792 μs | 1.0533 μs | 0.0577 μs | 1.739 μs | 1.783 μs | 1.854 μs | 1.07 | 0.03 | 1 | 0.5283 | 0.0172 | 8.65 KB | 1.00 |
| AgileMapper | 2.500 μs | 0.4521 μs | 0.0248 μs | 2.471 μs | 2.512 μs | 2.516 μs | 1.49 | 0.01 | 2 | 0.5417 | 0.0153 | 8.91 KB | 1.03 |
🟠 Collection — 100-item List<T>
| Method | Mean | Error | StdDev | Min | Median | Max | Ratio | Rank | Gen0 | Gen1 | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Manual | 5.291 μs | 0.7148 μs | 0.0392 μs | 5.248 μs | 5.301 μs | 5.324 μs | 1.00 | 1 | 1.6708 | 0.0916 | 27.4 KB | 1.00 |
| EggMapper | 5.615 μs | 1.0171 μs | 0.0558 μs | 5.572 μs | 5.595 μs | 5.678 μs | 1.06 | 1 | 1.6708 | 0.0916 | 27.4 KB | 1.00 |
| AutoMapper | 6.562 μs | 1.3469 μs | 0.0738 μs | 6.480 μs | 6.586 μs | 6.621 μs | 1.24 | 1 | 1.7548 | 0.1068 | 28.7 KB | 1.05 |
| Mapster | 5.806 μs | 1.2895 μs | 0.0707 μs | 5.731 μs | 5.818 μs | 5.871 μs | 1.10 | 1 | 1.6708 | 0.0916 | 27.4 KB | 1.00 |
| MapperlyMap | 5.435 μs | 0.3411 μs | 0.0187 μs | 5.418 μs | 5.433 μs | 5.455 μs | 1.03 | 1 | 1.6785 | 0.0992 | 27.42 KB | 1.00 |
| AgileMapper | 5.168 μs | 1.4966 μs | 0.0820 μs | 5.091 μs | 5.159 μs | 5.254 μs | 0.98 | 1 | 1.0223 | 0.0610 | 16.72 KB | 0.61 |
🟠 Collection — 100-item List<T>
| Method | Mean | Error | StdDev | Min | Median | Max | Ratio | RatioSD | Rank | Gen0 | Gen1 | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Manual | 19.77 μs | 2.994 μs | 0.164 μs | 19.60 μs | 19.77 μs | 19.93 μs | 1.00 | 0.01 | 1 | 5.2490 | 1.3123 | 85.99 KB | 1.00 |
| EggMapper | 17.19 μs | 3.478 μs | 0.191 μs | 17.07 μs | 17.08 μs | 17.41 μs | 0.87 | 0.01 | 1 | 5.2490 | 1.3123 | 85.99 KB | 1.00 |
| AutoMapper | 23.85 μs | 4.205 μs | 0.230 μs | 23.60 μs | 23.90 μs | 24.05 μs | 1.21 | 0.01 | 1 | 5.7678 | 1.4343 | 94.34 KB | 1.10 |
| Mapster | 17.42 μs | 6.234 μs | 0.342 μs | 17.07 μs | 17.44 μs | 17.76 μs | 0.88 | 0.02 | 1 | 5.2490 | 1.3123 | 85.99 KB | 1.00 |
| MapperlyMap | 18.23 μs | 3.422 μs | 0.188 μs | 18.08 μs | 18.17 μs | 18.44 μs | 0.92 | 0.01 | 1 | 5.2490 | 1.2817 | 86.02 KB | 1.00 |
| AgileMapper | 20.92 μs | 7.023 μs | 0.385 μs | 20.48 μs | 21.13 μs | 21.16 μs | 1.06 | 0.02 | 1 | 5.2795 | 1.3123 | 86.25 KB | 1.00 |
⚪ Startup / Configuration time
| Method | Mean | Error | StdDev | Min | Median | Max | Ratio | RatioSD | Rank | Gen0 | Gen1 | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| EggMapperStartup | 1,309.112 μs | 1,754.8335 μs | 96.1883 μs | 1,214.536 μs | 1,305.965 μs | 1,406.836 μs | 1.004 | 0.09 | 3 | 3.9063 | 1.9531 | 94.71 KB | 1.00 |
| AutoMapperStartup | 366.552 μs | 876.4636 μs | 48.0419 μs | 332.868 μs | 345.223 μs | 421.566 μs | 0.281 | 0.04 | 2 | 5.8594 | - | 103.96 KB | 1.10 |
| MapsterStartup | 2.511 μs | 0.9357 μs | 0.0513 μs | 2.468 μs | 2.498 μs | 2.568 μs | 0.002 | 0.00 | 1 | 0.7019 | 0.0267 | 11.51 KB | 0.12 |
EggMapper.Benchmarks.ColdStartBenchmark-report-github
| Method | Mean | Error | StdDev | Min | Median | Max | Ratio | RatioSD | Rank | Gen0 | Gen1 | Allocated | Alloc Ratio |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| EggMapper | 1.309 ms | 1.472 ms | 0.0807 ms | 1.220 ms | 1.329 ms | 1.378 ms | 1.00 | 0.08 | 1 | 5.8594 | - | 95.68 KB | 1.00 |
| AutoMapper | 4.165 ms | 10.819 ms | 0.5930 ms | 3.546 ms | 4.222 ms | 4.728 ms | 3.19 | 0.43 | 2 | 15.6250 | 7.8125 | 310.25 KB | 3.24 |
| Mapster | 4.355 ms | 10.466 ms | 0.5737 ms | 3.767 ms | 4.386 ms | 4.913 ms | 3.34 | 0.42 | 2 | 39.0625 | 15.6250 | 756.41 KB | 7.91 |
📝 Notes
- Each benchmark class is decorated with
[MemoryDiagnoser]and[RankColumn]. - The global config (see
src/EggMapper.Benchmarks/Program.cs) addsMin,Median, andMaxcolumns. - Manual is the hand-written baseline (ratio = 1.00). A ratio < 1 means faster than manual.
- Benchmarks run on GitHub-hosted runners — absolute times may vary between runs; focus on Ratio for comparisons.
- To reproduce locally:
cd src/EggMapper.Benchmarks dotnet run --configuration Release -- --filter '*'
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.
Problem
PR #83 merged via auto-merge but publish, CI, and benchmarks did NOT run on the resulting push to main.
Root Cause
GitHub limitation: pushes made by
GITHUB_TOKENdo NOT trigger other workflows. PR #79 switched auto-merge toGITHUB_TOKENto control the merge actor identity. But this silently broke all downstream workflow triggers.Why it wasn't caught earlier
PR #82 was manually merged (not auto-merge) → publish ran → v1.15.0. PR #83 was auto-merged → publish silently skipped.
Fix
PAT_TOKEN— merge pushes now trigger all downstream workflowspaths: ['src/**']filter — prevents publishing on README-only benchmark merges (which will now also trigger pushes via PAT_TOKEN)After this merges
Run
workflow_dispatchon publish to catch up on the missed v1.15.1 (PR #83 changes).Test plan
🤖 Generated with Claude Code