') + ')', '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('^' + ".*" + ', '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" + ', '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('^' + ".*" + ', '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); } })(); })(); [Android][Testing] Run runtime and libraries tests on all supported Android API versions by simonrozsival · Pull Request #117716 · dotnet/runtime · GitHub
Skip to content

[Android][Testing] Run runtime and libraries tests on all supported Android API versions - #117716

Closed
simonrozsival wants to merge 2 commits into
mainfrom
dev/srozsival/android-test-accross-available-android-api-levels-july
Closed

[Android][Testing] Run runtime and libraries tests on all supported Android API versions#117716
simonrozsival wants to merge 2 commits into
mainfrom
dev/srozsival/android-test-accross-available-android-api-levels-july

Conversation

@simonrozsival

Copy link
Copy Markdown
Member

Part of #107868, follow-up to #115330

This PR won't be merged, it's for testing purposes only.

Increase timeouts for Android emulator jobs
Trigger android emulator on PRs
Update Android lanes
CopilotAI review requested due to automatic review settings July 16, 2025 12:22
@simonrozsivalsimonrozsival added NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) NO-REVIEW Experimental/testing PR, do NOT review it os-android area-Infrastructure-mono labels Jul 16, 2025
@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-androidemulator

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

This PR extends Android testing coverage by configuring the build system to run runtime and libraries tests on all supported Android API versions (21-34) instead of just API 29. The changes enable comprehensive testing across the Android version spectrum while increasing timeout values to accommodate the expanded test matrix.

  • Modifies Android emulator pipeline triggers to enable automatic builds on release branches and PRs
  • Adds Android API versions 21-28 and 30-34 to the existing API 29 test coverage for both runtime and libraries
  • Increases timeout values from 180-240 minutes to 1800 minutes to handle the significantly expanded test execution time

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated no comments.

FileDescription
eng/pipelines/runtime-androidemulator.ymlEnables pipeline triggers for release branches and PRs
eng/pipelines/libraries/helix-queues-setup.ymlAdds comprehensive Android API version coverage (21-34) for libraries testing
eng/pipelines/extra-platforms/runtime-extra-platforms-androidemulator.ymlIncreases timeout values for extended test execution
eng/pipelines/coreclr/templates/helix-queues-setup.ymlAdds comprehensive Android API version coverage (21-34) for CoreCLR runtime testing

@azure-pipelines

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

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

@simonrozsival

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-androidemulator

@azure-pipelines

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

@simonrozsival
simonrozsival deleted the dev/srozsival/android-test-accross-available-android-api-levels-july branch July 29, 2025 08:27
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Aug 28, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-Infrastructure-monoNO-MERGEThe PR is not ready for merge yet (see discussion for detailed reasons)NO-REVIEWExperimental/testing PR, do NOT review itos-android

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@simonrozsival