Skip to content

fix: auto-merge must use PAT_TOKEN to trigger downstream workflows#84

Merged
cloud-hai-vo merged 1 commit intomainfrom
fix/auto-merge-pat-token
Mar 26, 2026
Merged

fix: auto-merge must use PAT_TOKEN to trigger downstream workflows#84
cloud-hai-vo merged 1 commit intomainfrom
fix/auto-merge-pat-token

Conversation

@cloud-hai-vo
Copy link
Copy Markdown
Contributor

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_TOKEN do NOT trigger other workflows. PR #79 switched auto-merge to GITHUB_TOKEN to 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

  • Auto-merge: switch back to PAT_TOKEN — merge pushes now trigger all downstream workflows
  • Publish: restore paths: ['src/**'] filter — prevents publishing on README-only benchmark merges (which will now also trigger pushes via PAT_TOKEN)
  • Benchmarks: already has path filter — no change needed

After this merges

Run workflow_dispatch on publish to catch up on the missed v1.15.1 (PR #83 changes).

Test plan

  • After this PR merges, next code PR should trigger publish
  • Benchmark README PRs should NOT trigger publish (path filter)

🤖 Generated with Claude Code

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>
@cloud-hai-vo cloud-hai-vo enabled auto-merge (squash) March 26, 2026 23:50
@cloud-hai-vo cloud-hai-vo merged commit db1b4f5 into main Mar 26, 2026
5 checks passed
@cloud-hai-vo cloud-hai-vo deleted the fix/auto-merge-pat-token branch March 26, 2026 23:51
@github-actions
Copy link
Copy Markdown
Contributor

📊 Benchmark Results

Generated: 2026-03-26 23:57 UTC  ·  Download full artifacts

Column guide:
Mean = average execution time  ·  Error = half of 99.9 % confidence interval  ·  StdDev = standard deviation  ·  Min / Median / Max = statistical range  ·  Ratio = vs Manual baseline (lower = closer to hand-written speed)  ·  RatioSD = ratio std dev  ·  Rank = 1 is fastest  ·  Gen0/1/2 = GC collections per 1 000 ops  ·  Allocated = managed heap per operation  ·  Alloc Ratio = allocation ratio vs baseline

🔵 Flat Mapping — 10-property object

Method Mean Error StdDev Min Median Max Ratio RatioSD Rank Gen0 Allocated Alloc Ratio
Manual 15.13 ns 2.742 ns 0.150 ns 14.97 ns 15.16 ns 15.27 ns 1.00 0.01 1 0.0048 80 B 1.00
EggMapper 24.99 ns 0.378 ns 0.021 ns 24.98 ns 24.99 ns 25.02 ns 1.65 0.01 2 0.0048 80 B 1.00
AutoMapper 81.84 ns 4.488 ns 0.246 ns 81.61 ns 81.81 ns 82.10 ns 5.41 0.05 3 0.0048 80 B 1.00
Mapster 28.34 ns 2.950 ns 0.162 ns 28.15 ns 28.41 ns 28.45 ns 1.87 0.02 2 0.0048 80 B 1.00
MapperlyMap 15.02 ns 3.107 ns 0.170 ns 14.82 ns 15.10 ns 15.13 ns 0.99 0.01 1 0.0048 80 B 1.00
AgileMapper 511.98 ns 11.252 ns 0.617 ns 511.34 ns 512.04 ns 512.57 ns 33.84 0.29 4 0.0200 344 B 4.30
EggMapperGenerator 15.68 ns 9.214 ns 0.505 ns 15.24 ns 15.57 ns 16.23 ns 1.04 0.03 1 0.0048 80 B 1.00
EggMapperClassMapper 15.16 ns 2.268 ns 0.124 ns 15.02 ns 15.19 ns 15.27 ns 1.00 0.01 1 0.0048 80 B 1.00

🟡 Flattening — 2 nested objects → 8 flat properties

Method Mean Error StdDev Min Median Max Ratio RatioSD Rank Gen0 Allocated Alloc Ratio
Manual 19.06 ns 4.109 ns 0.225 ns 18.80 ns 19.14 ns 19.23 ns 1.00 0.01 1 0.0048 80 B 1.00
EggMap 31.44 ns 9.776 ns 0.536 ns 30.87 ns 31.50 ns 31.94 ns 1.65 0.03 3 0.0048 80 B 1.00
AutoMapper 89.63 ns 2.542 ns 0.139 ns 89.50 ns 89.61 ns 89.78 ns 4.70 0.05 4 0.0048 80 B 1.00
Mapster 36.16 ns 6.797 ns 0.373 ns 35.73 ns 36.32 ns 36.42 ns 1.90 0.03 3 0.0048 80 B 1.00
MapperlyMap 24.10 ns 4.614 ns 0.253 ns 23.83 ns 24.12 ns 24.34 ns 1.26 0.02 2 0.0062 104 B 1.30
AgileMapper 547.53 ns 25.137 ns 1.378 ns 546.27 ns 547.32 ns 549.00 ns 28.73 0.30 5 0.0200 344 B 4.30

🟣 Deep Mapping — 2 nested address objects

Method Mean Error StdDev Min Median Max Ratio RatioSD Rank Gen0 Allocated Alloc Ratio
Manual 53.52 ns 6.534 ns 0.358 ns 53.14 ns 53.58 ns 53.85 ns 1.00 0.01 1 0.0162 272 B 1.00
EggMapper 64.97 ns 11.098 ns 0.608 ns 64.29 ns 65.19 ns 65.44 ns 1.21 0.01 2 0.0162 272 B 1.00
AutoMapper 117.61 ns 9.667 ns 0.530 ns 117.00 ns 117.87 ns 117.96 ns 2.20 0.02 3 0.0162 272 B 1.00
Mapster 67.63 ns 11.586 ns 0.635 ns 66.90 ns 67.94 ns 68.05 ns 1.26 0.01 2 0.0162 272 B 1.00
MapperlyMap 49.13 ns 10.553 ns 0.578 ns 48.47 ns 49.42 ns 49.52 ns 0.92 0.01 1 0.0162 272 B 1.00
AgileMapper 520.39 ns 20.247 ns 1.110 ns 519.13 ns 520.78 ns 521.25 ns 9.72 0.06 4 0.0248 424 B 1.56

🟢 Complex Mapping — nested object + collection

Method Mean Error StdDev Min Median Max Ratio RatioSD Rank Gen0 Allocated Alloc Ratio
Manual 69.25 ns 28.599 ns 1.568 ns 67.58 ns 69.49 ns 70.68 ns 1.00 0.03 1 0.0191 320 B 1.00
EggMapper 89.40 ns 3.343 ns 0.183 ns 89.19 ns 89.49 ns 89.52 ns 1.29 0.03 2 0.0191 320 B 1.00
AutoMapper 153.35 ns 23.915 ns 1.311 ns 151.85 ns 153.97 ns 154.24 ns 2.22 0.05 3 0.0196 328 B 1.02
Mapster 88.28 ns 12.779 ns 0.700 ns 87.73 ns 88.05 ns 89.07 ns 1.28 0.03 2 0.0191 320 B 1.00
MapperlyMap 71.62 ns 6.498 ns 0.356 ns 71.22 ns 71.74 ns 71.91 ns 1.03 0.02 1 0.0191 320 B 1.00
AgileMapper 565.79 ns 34.903 ns 1.913 ns 563.77 ns 566.04 ns 567.57 ns 8.17 0.16 4 0.0315 528 B 1.65

🟠 Collection — 100-item List<T>

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) adds Min, Median, and Max columns.
  • 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 '*'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant