Skip to content

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility - #129029

Merged
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab
Jun 12, 2026
Merged

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility#129029
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes the RuntimeError: There is no current event loop in thread 'MainThread' crash in crossgen2_comparison.py on macOS Helix machines that have upgraded to Python 3.14.

Changes

Replaced the deprecated pattern:

loop=asyncio.get_event_loop()
loop.run_until_complete(coro)
loop.close()

with the modern equivalent:

asyncio.run(coro)

asyncio.run() was introduced in Python 3.7, respects the event loop policy (including the WindowsProactorEventLoopPolicy set in __init__), and is the recommended replacement for the removed implicit event loop behavior.

Motivation

Python 3.14 removed the deprecated implicit event loop creation in asyncio.get_event_loop() when called from the main thread with no running loop. This broke the crossgen2_comparison.py script on macOS arm64 Helix agents where Homebrew installed Python 3.14.

Affected pipeline: runtime-coreclr crossgen2 outerloop (def 134) — osx-arm64 leg

Fixes#129211

Testing

The fix is a straightforward API migration with identical semantics. The script's existing test coverage (crossgen2 comparison runs) validates correctness.

Note

🔒 Integrity filter blocked 5 items

The following items were blocked because they don't meet the GitHub integrity level.

  • #83226search_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #110472search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #100356search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #104275search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #77540search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
github:
min-integrity: approved # merged | approved | unapproved | none

Generated by CI Outer-Loop Failure Scanner · ● 100.8M ·

Replace deprecated asyncio.get_event_loop()/run_until_complete()/close()
pattern with asyncio.run(), which is compatible with Python 3.7+ and fixes
the RuntimeError on Python 3.14 where get_event_loop() raises when no
current event loop exists.
Fixes#128992
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@jkotasjkotas added area-ReadyToRun and removed area-crossgen2-coreclr only use for closed issues labels Jun 10, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the crossgen2 comparison test script to use asyncio.run(...) instead of manually creating/closing an event loop, improving compatibility with newer Python asyncio behavior.

Changes:

  • Replace asyncio.get_event_loop() + run_until_complete() + close() with asyncio.run(...) in AsyncSubprocessHelper.run_to_completion.
  • Keep the script’s async orchestration model intact (still uses asyncio.gather over scheduled tasks).

Comment threadsrc/tests/Common/scripts/crossgen2_comparison.py
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

jkotas commented Jun 12, 2026

Copy link
Copy Markdown
Member

/ba-g known infra timeouts. Change affects crossgen outerloop only that's not covered by build analysis.

@jkotas
jkotas merged commit 9db0b29 into mainJun 12, 2026
108 of 131 checks passed
@jkotas
jkotas deleted the ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab branch June 12, 2026 04:59
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…ty (#129029)
Fixes the `RuntimeError: There is no current event loop in thread
'MainThread'` crash in `crossgen2_comparison.py` on macOS Helix machines
that have upgraded to Python 3.14.
Fixes#129211
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ci-scan] Build break: crossgen2_comparison.py fails with Python 3.14 asyncio

2 participants

@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility by github-actions[bot] · Pull Request #129029 · dotnet/runtime · GitHub
Skip to content

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility - #129029

Merged
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab
Jun 12, 2026
Merged

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility#129029
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes the RuntimeError: There is no current event loop in thread 'MainThread' crash in crossgen2_comparison.py on macOS Helix machines that have upgraded to Python 3.14.

Changes

Replaced the deprecated pattern:

loop=asyncio.get_event_loop()
loop.run_until_complete(coro)
loop.close()

with the modern equivalent:

asyncio.run(coro)

asyncio.run() was introduced in Python 3.7, respects the event loop policy (including the WindowsProactorEventLoopPolicy set in __init__), and is the recommended replacement for the removed implicit event loop behavior.

Motivation

Python 3.14 removed the deprecated implicit event loop creation in asyncio.get_event_loop() when called from the main thread with no running loop. This broke the crossgen2_comparison.py script on macOS arm64 Helix agents where Homebrew installed Python 3.14.

Affected pipeline: runtime-coreclr crossgen2 outerloop (def 134) — osx-arm64 leg

Fixes#129211

Testing

The fix is a straightforward API migration with identical semantics. The script's existing test coverage (crossgen2 comparison runs) validates correctness.

Note

🔒 Integrity filter blocked 5 items

The following items were blocked because they don't meet the GitHub integrity level.

  • #83226search_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #110472search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #100356search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #104275search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #77540search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
github:
min-integrity: approved # merged | approved | unapproved | none

Generated by CI Outer-Loop Failure Scanner · ● 100.8M ·

Replace deprecated asyncio.get_event_loop()/run_until_complete()/close()
pattern with asyncio.run(), which is compatible with Python 3.7+ and fixes
the RuntimeError on Python 3.14 where get_event_loop() raises when no
current event loop exists.
Fixes#128992
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@jkotasjkotas added area-ReadyToRun and removed area-crossgen2-coreclr only use for closed issues labels Jun 10, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the crossgen2 comparison test script to use asyncio.run(...) instead of manually creating/closing an event loop, improving compatibility with newer Python asyncio behavior.

Changes:

  • Replace asyncio.get_event_loop() + run_until_complete() + close() with asyncio.run(...) in AsyncSubprocessHelper.run_to_completion.
  • Keep the script’s async orchestration model intact (still uses asyncio.gather over scheduled tasks).

Comment threadsrc/tests/Common/scripts/crossgen2_comparison.py
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

jkotas commented Jun 12, 2026

Copy link
Copy Markdown
Member

/ba-g known infra timeouts. Change affects crossgen outerloop only that's not covered by build analysis.

@jkotas
jkotas merged commit 9db0b29 into mainJun 12, 2026
108 of 131 checks passed
@jkotas
jkotas deleted the ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab branch June 12, 2026 04:59
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…ty (#129029)
Fixes the `RuntimeError: There is no current event loop in thread
'MainThread'` crash in `crossgen2_comparison.py` on macOS Helix machines
that have upgraded to Python 3.14.
Fixes#129211
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ci-scan] Build break: crossgen2_comparison.py fails with Python 3.14 asyncio

2 participants

@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility by github-actions[bot] · Pull Request #129029 · dotnet/runtime · GitHub
Skip to content

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility - #129029

Merged
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab
Jun 12, 2026
Merged

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility#129029
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes the RuntimeError: There is no current event loop in thread 'MainThread' crash in crossgen2_comparison.py on macOS Helix machines that have upgraded to Python 3.14.

Changes

Replaced the deprecated pattern:

loop=asyncio.get_event_loop()
loop.run_until_complete(coro)
loop.close()

with the modern equivalent:

asyncio.run(coro)

asyncio.run() was introduced in Python 3.7, respects the event loop policy (including the WindowsProactorEventLoopPolicy set in __init__), and is the recommended replacement for the removed implicit event loop behavior.

Motivation

Python 3.14 removed the deprecated implicit event loop creation in asyncio.get_event_loop() when called from the main thread with no running loop. This broke the crossgen2_comparison.py script on macOS arm64 Helix agents where Homebrew installed Python 3.14.

Affected pipeline: runtime-coreclr crossgen2 outerloop (def 134) — osx-arm64 leg

Fixes#129211

Testing

The fix is a straightforward API migration with identical semantics. The script's existing test coverage (crossgen2 comparison runs) validates correctness.

Note

🔒 Integrity filter blocked 5 items

The following items were blocked because they don't meet the GitHub integrity level.

  • #83226search_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #110472search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #100356search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #104275search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #77540search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
github:
min-integrity: approved # merged | approved | unapproved | none

Generated by CI Outer-Loop Failure Scanner · ● 100.8M ·

Replace deprecated asyncio.get_event_loop()/run_until_complete()/close()
pattern with asyncio.run(), which is compatible with Python 3.7+ and fixes
the RuntimeError on Python 3.14 where get_event_loop() raises when no
current event loop exists.
Fixes#128992
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@jkotasjkotas added area-ReadyToRun and removed area-crossgen2-coreclr only use for closed issues labels Jun 10, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the crossgen2 comparison test script to use asyncio.run(...) instead of manually creating/closing an event loop, improving compatibility with newer Python asyncio behavior.

Changes:

  • Replace asyncio.get_event_loop() + run_until_complete() + close() with asyncio.run(...) in AsyncSubprocessHelper.run_to_completion.
  • Keep the script’s async orchestration model intact (still uses asyncio.gather over scheduled tasks).

Comment threadsrc/tests/Common/scripts/crossgen2_comparison.py
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

jkotas commented Jun 12, 2026

Copy link
Copy Markdown
Member

/ba-g known infra timeouts. Change affects crossgen outerloop only that's not covered by build analysis.

@jkotas
jkotas merged commit 9db0b29 into mainJun 12, 2026
108 of 131 checks passed
@jkotas
jkotas deleted the ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab branch June 12, 2026 04:59
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…ty (#129029)
Fixes the `RuntimeError: There is no current event loop in thread
'MainThread'` crash in `crossgen2_comparison.py` on macOS Helix machines
that have upgraded to Python 3.14.
Fixes#129211
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ci-scan] Build break: crossgen2_comparison.py fails with Python 3.14 asyncio

2 participants

@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility by github-actions[bot] · Pull Request #129029 · dotnet/runtime · GitHub
Skip to content

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility - #129029

Merged
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab
Jun 12, 2026
Merged

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility#129029
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes the RuntimeError: There is no current event loop in thread 'MainThread' crash in crossgen2_comparison.py on macOS Helix machines that have upgraded to Python 3.14.

Changes

Replaced the deprecated pattern:

loop=asyncio.get_event_loop()
loop.run_until_complete(coro)
loop.close()

with the modern equivalent:

asyncio.run(coro)

asyncio.run() was introduced in Python 3.7, respects the event loop policy (including the WindowsProactorEventLoopPolicy set in __init__), and is the recommended replacement for the removed implicit event loop behavior.

Motivation

Python 3.14 removed the deprecated implicit event loop creation in asyncio.get_event_loop() when called from the main thread with no running loop. This broke the crossgen2_comparison.py script on macOS arm64 Helix agents where Homebrew installed Python 3.14.

Affected pipeline: runtime-coreclr crossgen2 outerloop (def 134) — osx-arm64 leg

Fixes#129211

Testing

The fix is a straightforward API migration with identical semantics. The script's existing test coverage (crossgen2 comparison runs) validates correctness.

Note

🔒 Integrity filter blocked 5 items

The following items were blocked because they don't meet the GitHub integrity level.

  • #83226search_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #110472search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #100356search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #104275search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #77540search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
github:
min-integrity: approved # merged | approved | unapproved | none

Generated by CI Outer-Loop Failure Scanner · ● 100.8M ·

Replace deprecated asyncio.get_event_loop()/run_until_complete()/close()
pattern with asyncio.run(), which is compatible with Python 3.7+ and fixes
the RuntimeError on Python 3.14 where get_event_loop() raises when no
current event loop exists.
Fixes#128992
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@jkotasjkotas added area-ReadyToRun and removed area-crossgen2-coreclr only use for closed issues labels Jun 10, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the crossgen2 comparison test script to use asyncio.run(...) instead of manually creating/closing an event loop, improving compatibility with newer Python asyncio behavior.

Changes:

  • Replace asyncio.get_event_loop() + run_until_complete() + close() with asyncio.run(...) in AsyncSubprocessHelper.run_to_completion.
  • Keep the script’s async orchestration model intact (still uses asyncio.gather over scheduled tasks).

Comment threadsrc/tests/Common/scripts/crossgen2_comparison.py
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

jkotas commented Jun 12, 2026

Copy link
Copy Markdown
Member

/ba-g known infra timeouts. Change affects crossgen outerloop only that's not covered by build analysis.

@jkotas
jkotas merged commit 9db0b29 into mainJun 12, 2026
108 of 131 checks passed
@jkotas
jkotas deleted the ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab branch June 12, 2026 04:59
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…ty (#129029)
Fixes the `RuntimeError: There is no current event loop in thread
'MainThread'` crash in `crossgen2_comparison.py` on macOS Helix machines
that have upgraded to Python 3.14.
Fixes#129211
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ci-scan] Build break: crossgen2_comparison.py fails with Python 3.14 asyncio

2 participants

@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' [ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility by github-actions[bot] · Pull Request #129029 · dotnet/runtime · GitHub
Skip to content

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility - #129029

Merged
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab
Jun 12, 2026
Merged

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility#129029
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes the RuntimeError: There is no current event loop in thread 'MainThread' crash in crossgen2_comparison.py on macOS Helix machines that have upgraded to Python 3.14.

Changes

Replaced the deprecated pattern:

loop=asyncio.get_event_loop()
loop.run_until_complete(coro)
loop.close()

with the modern equivalent:

asyncio.run(coro)

asyncio.run() was introduced in Python 3.7, respects the event loop policy (including the WindowsProactorEventLoopPolicy set in __init__), and is the recommended replacement for the removed implicit event loop behavior.

Motivation

Python 3.14 removed the deprecated implicit event loop creation in asyncio.get_event_loop() when called from the main thread with no running loop. This broke the crossgen2_comparison.py script on macOS arm64 Helix agents where Homebrew installed Python 3.14.

Affected pipeline: runtime-coreclr crossgen2 outerloop (def 134) — osx-arm64 leg

Fixes#129211

Testing

The fix is a straightforward API migration with identical semantics. The script's existing test coverage (crossgen2 comparison runs) validates correctness.

Note

🔒 Integrity filter blocked 5 items

The following items were blocked because they don't meet the GitHub integrity level.

  • #83226search_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #110472search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #100356search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #104275search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #77540search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
github:
min-integrity: approved # merged | approved | unapproved | none

Generated by CI Outer-Loop Failure Scanner · ● 100.8M ·

Replace deprecated asyncio.get_event_loop()/run_until_complete()/close()
pattern with asyncio.run(), which is compatible with Python 3.7+ and fixes
the RuntimeError on Python 3.14 where get_event_loop() raises when no
current event loop exists.
Fixes#128992
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@jkotasjkotas added area-ReadyToRun and removed area-crossgen2-coreclr only use for closed issues labels Jun 10, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the crossgen2 comparison test script to use asyncio.run(...) instead of manually creating/closing an event loop, improving compatibility with newer Python asyncio behavior.

Changes:

  • Replace asyncio.get_event_loop() + run_until_complete() + close() with asyncio.run(...) in AsyncSubprocessHelper.run_to_completion.
  • Keep the script’s async orchestration model intact (still uses asyncio.gather over scheduled tasks).

Comment threadsrc/tests/Common/scripts/crossgen2_comparison.py
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

jkotas commented Jun 12, 2026

Copy link
Copy Markdown
Member

/ba-g known infra timeouts. Change affects crossgen outerloop only that's not covered by build analysis.

@jkotas
jkotas merged commit 9db0b29 into mainJun 12, 2026
108 of 131 checks passed
@jkotas
jkotas deleted the ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab branch June 12, 2026 04:59
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…ty (#129029)
Fixes the `RuntimeError: There is no current event loop in thread
'MainThread'` crash in `crossgen2_comparison.py` on macOS Helix machines
that have upgraded to Python 3.14.
Fixes#129211
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ci-scan] Build break: crossgen2_comparison.py fails with Python 3.14 asyncio

2 participants

@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility by github-actions[bot] · Pull Request #129029 · dotnet/runtime · GitHub
Skip to content

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility - #129029

Merged
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab
Jun 12, 2026
Merged

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility#129029
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes the RuntimeError: There is no current event loop in thread 'MainThread' crash in crossgen2_comparison.py on macOS Helix machines that have upgraded to Python 3.14.

Changes

Replaced the deprecated pattern:

loop=asyncio.get_event_loop()
loop.run_until_complete(coro)
loop.close()

with the modern equivalent:

asyncio.run(coro)

asyncio.run() was introduced in Python 3.7, respects the event loop policy (including the WindowsProactorEventLoopPolicy set in __init__), and is the recommended replacement for the removed implicit event loop behavior.

Motivation

Python 3.14 removed the deprecated implicit event loop creation in asyncio.get_event_loop() when called from the main thread with no running loop. This broke the crossgen2_comparison.py script on macOS arm64 Helix agents where Homebrew installed Python 3.14.

Affected pipeline: runtime-coreclr crossgen2 outerloop (def 134) — osx-arm64 leg

Fixes#129211

Testing

The fix is a straightforward API migration with identical semantics. The script's existing test coverage (crossgen2 comparison runs) validates correctness.

Note

🔒 Integrity filter blocked 5 items

The following items were blocked because they don't meet the GitHub integrity level.

  • #83226search_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #110472search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #100356search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #104275search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #77540search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
github:
min-integrity: approved # merged | approved | unapproved | none

Generated by CI Outer-Loop Failure Scanner · ● 100.8M ·

Replace deprecated asyncio.get_event_loop()/run_until_complete()/close()
pattern with asyncio.run(), which is compatible with Python 3.7+ and fixes
the RuntimeError on Python 3.14 where get_event_loop() raises when no
current event loop exists.
Fixes#128992
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@jkotasjkotas added area-ReadyToRun and removed area-crossgen2-coreclr only use for closed issues labels Jun 10, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the crossgen2 comparison test script to use asyncio.run(...) instead of manually creating/closing an event loop, improving compatibility with newer Python asyncio behavior.

Changes:

  • Replace asyncio.get_event_loop() + run_until_complete() + close() with asyncio.run(...) in AsyncSubprocessHelper.run_to_completion.
  • Keep the script’s async orchestration model intact (still uses asyncio.gather over scheduled tasks).

Comment threadsrc/tests/Common/scripts/crossgen2_comparison.py
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

jkotas commented Jun 12, 2026

Copy link
Copy Markdown
Member

/ba-g known infra timeouts. Change affects crossgen outerloop only that's not covered by build analysis.

@jkotas
jkotas merged commit 9db0b29 into mainJun 12, 2026
108 of 131 checks passed
@jkotas
jkotas deleted the ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab branch June 12, 2026 04:59
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…ty (#129029)
Fixes the `RuntimeError: There is no current event loop in thread
'MainThread'` crash in `crossgen2_comparison.py` on macOS Helix machines
that have upgraded to Python 3.14.
Fixes#129211
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ci-scan] Build break: crossgen2_comparison.py fails with Python 3.14 asyncio

2 participants

@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility by github-actions[bot] · Pull Request #129029 · dotnet/runtime · GitHub
Skip to content

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility - #129029

Merged
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab
Jun 12, 2026
Merged

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility#129029
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes the RuntimeError: There is no current event loop in thread 'MainThread' crash in crossgen2_comparison.py on macOS Helix machines that have upgraded to Python 3.14.

Changes

Replaced the deprecated pattern:

loop=asyncio.get_event_loop()
loop.run_until_complete(coro)
loop.close()

with the modern equivalent:

asyncio.run(coro)

asyncio.run() was introduced in Python 3.7, respects the event loop policy (including the WindowsProactorEventLoopPolicy set in __init__), and is the recommended replacement for the removed implicit event loop behavior.

Motivation

Python 3.14 removed the deprecated implicit event loop creation in asyncio.get_event_loop() when called from the main thread with no running loop. This broke the crossgen2_comparison.py script on macOS arm64 Helix agents where Homebrew installed Python 3.14.

Affected pipeline: runtime-coreclr crossgen2 outerloop (def 134) — osx-arm64 leg

Fixes#129211

Testing

The fix is a straightforward API migration with identical semantics. The script's existing test coverage (crossgen2 comparison runs) validates correctness.

Note

🔒 Integrity filter blocked 5 items

The following items were blocked because they don't meet the GitHub integrity level.

  • #83226search_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #110472search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #100356search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #104275search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #77540search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
github:
min-integrity: approved # merged | approved | unapproved | none

Generated by CI Outer-Loop Failure Scanner · ● 100.8M ·

Replace deprecated asyncio.get_event_loop()/run_until_complete()/close()
pattern with asyncio.run(), which is compatible with Python 3.7+ and fixes
the RuntimeError on Python 3.14 where get_event_loop() raises when no
current event loop exists.
Fixes#128992
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@jkotasjkotas added area-ReadyToRun and removed area-crossgen2-coreclr only use for closed issues labels Jun 10, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the crossgen2 comparison test script to use asyncio.run(...) instead of manually creating/closing an event loop, improving compatibility with newer Python asyncio behavior.

Changes:

  • Replace asyncio.get_event_loop() + run_until_complete() + close() with asyncio.run(...) in AsyncSubprocessHelper.run_to_completion.
  • Keep the script’s async orchestration model intact (still uses asyncio.gather over scheduled tasks).

Comment threadsrc/tests/Common/scripts/crossgen2_comparison.py
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

jkotas commented Jun 12, 2026

Copy link
Copy Markdown
Member

/ba-g known infra timeouts. Change affects crossgen outerloop only that's not covered by build analysis.

@jkotas
jkotas merged commit 9db0b29 into mainJun 12, 2026
108 of 131 checks passed
@jkotas
jkotas deleted the ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab branch June 12, 2026 04:59
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…ty (#129029)
Fixes the `RuntimeError: There is no current event loop in thread
'MainThread'` crash in `crossgen2_comparison.py` on macOS Helix machines
that have upgraded to Python 3.14.
Fixes#129211
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ci-scan] Build break: crossgen2_comparison.py fails with Python 3.14 asyncio

2 participants

@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); [ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility by github-actions[bot] · Pull Request #129029 · dotnet/runtime · GitHub
Skip to content

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility - #129029

Merged
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab
Jun 12, 2026
Merged

[ci-scan] Fix crossgen2_comparison.py Python 3.14 asyncio compatibility#129029
jkotas merged 4 commits into
mainfrom
ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes the RuntimeError: There is no current event loop in thread 'MainThread' crash in crossgen2_comparison.py on macOS Helix machines that have upgraded to Python 3.14.

Changes

Replaced the deprecated pattern:

loop=asyncio.get_event_loop()
loop.run_until_complete(coro)
loop.close()

with the modern equivalent:

asyncio.run(coro)

asyncio.run() was introduced in Python 3.7, respects the event loop policy (including the WindowsProactorEventLoopPolicy set in __init__), and is the recommended replacement for the removed implicit event loop behavior.

Motivation

Python 3.14 removed the deprecated implicit event loop creation in asyncio.get_event_loop() when called from the main thread with no running loop. This broke the crossgen2_comparison.py script on macOS arm64 Helix agents where Homebrew installed Python 3.14.

Affected pipeline: runtime-coreclr crossgen2 outerloop (def 134) — osx-arm64 leg

Fixes#129211

Testing

The fix is a straightforward API migration with identical semantics. The script's existing test coverage (crossgen2 comparison runs) validates correctness.

Note

🔒 Integrity filter blocked 5 items

The following items were blocked because they don't meet the GitHub integrity level.

  • #83226search_issues: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #110472search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #100356search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #104275search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".
  • #77540search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
github:
min-integrity: approved # merged | approved | unapproved | none

Generated by CI Outer-Loop Failure Scanner · ● 100.8M ·

Replace deprecated asyncio.get_event_loop()/run_until_complete()/close()
pattern with asyncio.run(), which is compatible with Python 3.7+ and fixes
the RuntimeError on Python 3.14 where get_event_loop() raises when no
current event loop exists.
Fixes#128992
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@jkotasjkotas added area-ReadyToRun and removed area-crossgen2-coreclr only use for closed issues labels Jun 10, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the crossgen2 comparison test script to use asyncio.run(...) instead of manually creating/closing an event loop, improving compatibility with newer Python asyncio behavior.

Changes:

  • Replace asyncio.get_event_loop() + run_until_complete() + close() with asyncio.run(...) in AsyncSubprocessHelper.run_to_completion.
  • Keep the script’s async orchestration model intact (still uses asyncio.gather over scheduled tasks).

Comment threadsrc/tests/Common/scripts/crossgen2_comparison.py
@jkotas

Copy link
Copy Markdown
Member

/azp run runtime-coreclr crossgen2 outerloop

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@jkotas

jkotas commented Jun 12, 2026

Copy link
Copy Markdown
Member

/ba-g known infra timeouts. Change affects crossgen outerloop only that's not covered by build analysis.

@jkotas
jkotas merged commit 9db0b29 into mainJun 12, 2026
108 of 131 checks passed
@jkotas
jkotas deleted the ci-scan/fix-crossgen2-comparison-py314-c0554dc511ac8fab branch June 12, 2026 04:59
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…ty (#129029)
Fixes the `RuntimeError: There is no current event loop in thread
'MainThread'` crash in `crossgen2_comparison.py` on macOS Helix machines
that have upgraded to Python 3.14.
Fixes#129211
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ci-scan] Build break: crossgen2_comparison.py fails with Python 3.14 asyncio

2 participants

@jkotas