You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PR #9311 (merged 2026-06-22) enabled cross-platform PlainProcess timing in MSTest.Performance.Runner. The nightly perf-timing-nightly.yml workflow still only had a Windows job — the comment at the top of the file even noted "once that lands, this job can move to Linux for better reproducibility." This PR adds the parallel Linux job.
Linux timing is valuable because:
GitHub-hosted Linux runners have more consistent CPU scheduling than Windows, giving lower-variance measurements
Cross-platform data reveals OS-specific performance regressions
Linux is the primary CI platform for most contributors
Approach
Rename the existing collect job to collect-windows and its artifact to perf-timing-result-json-windows (makes the platform explicit; consistent with the new naming).
Add a parallel collect-linux job on ubuntu-latest:
Builds with ./build.sh -pack -c Release
Uses a touch-based reference file (perf-run-start.ref) immediately before the runner invocation, then find -newer to locate only the fresh Result.json files — the same logic as the Windows LastWriteTimeUtc filter, expressed in idiomatic bash
Uploads results as perf-timing-result-json-linux (90-day retention, same as Windows)
Update the workflow header comment to reflect the current state (both platforms now active).
Files Changed
File
Change
.github/workflows/perf-timing-nightly.yml
Rename Windows job; add Linux job; update comments
Performance Evidence
This is an infrastructure change — it adds measurement capability rather than changing measured code. No before/after numbers apply. The benefit is that maintainers will now receive nightly perf-timing-result-json-linux artifacts alongside the existing Windows artifacts.
Trade-offs
Adds one ubuntu-latest runner per nightly run (both jobs run in parallel, so wall-clock latency is unchanged)
No production code is modified; risk is limited to CI configuration
Test Status
YAML validated (PyYAML parse: ✅ both jobs parse correctly with correct runs-on fields)
No production source changes — CI will confirm on first nightly run
Warning
Protected Files — Push Permission Denied
This was originally intended as a pull request, but the patch modifies protected files. A human must create the pull request manually.
The push was rejected because GitHub Actions does not have workflows permission to push these changes, and is never allowed to make such changes, or other authorization being used does not have this permission.
Create the pull request manually
# Download the patch from the workflow run
gh run download 28105007003 -n agent -D /tmp/agent-28105007003
# Create a new branch
git checkout -b perf-assist/add-linux-perf-timing-job-1b26175fe8ecd783 main
# Apply the patch (--3way handles cross-repo patches)
git am --3way /tmp/agent-28105007003/aw-perf-assist-add-linux-perf-timing-job.patch
# Push the branch and create the pull request
git push origin perf-assist/add-linux-perf-timing-job-1b26175fe8ecd783
gh pr create --title '[perf-improver] perf: add Linux parallel job to nightly perf-timing workflow' --base main --head perf-assist/add-linux-perf-timing-job-1b26175fe8ecd783 --repo microsoft/testfx
🤖 Automated content by GitHub Copilot. Posted via a maintainer's GitHub token, so it appears under their account — the account owner did not write or approve this content personally. Generated by the Perf Improver workflow. · 1.1K AIC · ⌖ 59.1 AIC · ⊞ 57.6K · [◷]( · ◷)
Add this agentic workflows to your repo
To install this agentic workflow, run
gh aw add githubnext/agentics/workflows/perf-improver.md@main
Goal and Rationale
PR #9311 (merged 2026-06-22) enabled cross-platform
PlainProcesstiming inMSTest.Performance.Runner. The nightlyperf-timing-nightly.ymlworkflow still only had a Windows job — the comment at the top of the file even noted "once that lands, this job can move to Linux for better reproducibility." This PR adds the parallel Linux job.Linux timing is valuable because:
Approach
collectjob tocollect-windowsand its artifact toperf-timing-result-json-windows(makes the platform explicit; consistent with the new naming).collect-linuxjob onubuntu-latest:./build.sh -pack -c Releasetouch-based reference file (perf-run-start.ref) immediately before the runner invocation, thenfind -newerto locate only the freshResult.jsonfiles — the same logic as the WindowsLastWriteTimeUtcfilter, expressed in idiomatic bashperf-timing-result-json-linux(90-day retention, same as Windows)Files Changed
.github/workflows/perf-timing-nightly.ymlPerformance Evidence
This is an infrastructure change — it adds measurement capability rather than changing measured code. No before/after numbers apply. The benefit is that maintainers will now receive nightly
perf-timing-result-json-linuxartifacts alongside the existing Windows artifacts.Trade-offs
ubuntu-latestrunner per nightly run (both jobs run in parallel, so wall-clock latency is unchanged)Test Status
runs-onfields)Warning
Protected Files — Push Permission Denied
This was originally intended as a pull request, but the patch modifies protected files. A human must create the pull request manually.
Protected files
The push was rejected because GitHub Actions does not have
workflowspermission to push these changes, and is never allowed to make such changes, or other authorization being used does not have this permission.Create the pull request manually
Add this agentic workflows to your repo
To install this agentic workflow, run