-
Notifications
You must be signed in to change notification settings - Fork 1.9k
[net11.0] Merge main to net11.0 #33724
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This reverts commit 16fede6.
# Conflicts: # eng/pipelines/device-tests.yml
This reverts commit 6b8ed99.
This pull request makes updates to the `Directory.Build.props` file to adjust build and target platform configurations, particularly for manual test projects and app packaging. Build and platform configuration changes: * Disabled automatic Appx bundle generation by setting `<AppxBundle>Never</AppxBundle>`, which can help avoid unnecessary packaging steps during builds. Manual test platforms logic update: * Changed the way manual test target frameworks (`MauiManualTestsPlatforms`) are aggregated for each platform (Windows, Android, MacCatalyst, iOS) to append to the existing list instead of the device tests list, improving consistency and potentially preventing duplicate or unintended test platform inclusions.
This pull request updates the following dependencies [marker]: <> (Begin:a71c12d9-5aa4-4b46-e2d6-08da0cf8cd95) ## From https://github.com/dotnet/xharness - **Subscription**: [a71c12d9-5aa4-4b46-e2d6-08da0cf8cd95](https://maestro.dot.net/subscriptions?search=a71c12d9-5aa4-4b46-e2d6-08da0cf8cd95) - **Build**: [20260114.3](https://dev.azure.com/dnceng/internal/_build/results?buildId=2879409) ([297352](https://maestro.dot.net/channel/2/github:dotnet:xharness/build/297352)) - **Date Produced**: January 14, 2026 9:16:36 PM UTC - **Commit**: [31e0b8e08f57890f7b7004b93361d69cd4b21079](dotnet/xharness@31e0b8e) - **Branch**: [main](https://github.com/dotnet/xharness/tree/main) [DependencyUpdate]: <> (Begin) - **Dependency Updates**: - From [11.0.0-prerelease.26062.2 to 11.0.0-prerelease.26064.3][1] - Microsoft.DotNet.XHarness.CLI - Microsoft.DotNet.XHarness.TestRunners.Common - Microsoft.DotNet.XHarness.TestRunners.Xunit [1]: dotnet/xharness@185cb0f...31e0b8e [DependencyUpdate]: <> (End) [marker]: <> (End:a71c12d9-5aa4-4b46-e2d6-08da0cf8cd95) Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
<!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Description of Change <img width="1680" height="102" alt="image" src="https://github.com/user-attachments/assets/e67209d5-74e6-4baf-8043-dcef4ac1301b" /> In collection view, where the binding context changes frequently, it is important for the base class `BindableObject` to be super efficient. In this case I'm doing some micro optimizations (avoiding a `foreach` when not needed) and moving `Shell` related attached properties' binding context propagation to `Page` (the only real target of those properties).
|
Azure Pipelines successfully started running 3 pipeline(s). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Weekly merge bringing main into net11.0, including pipeline, testing infrastructure, and tooling/documentation updates.
Changes:
- Updated Azure Pipelines/Helix configurations (macOS 15 pools, Windows Helix device tests, build id variable rename).
- Enabled stricter XML-doc enforcement (CS1591 as error) in several projects and added/expanded XML docs.
- Expanded repo agent/skill documentation and test scripts (Windows support in local test scripts, updated skill docs).
Reviewed changes
Copilot reviewed 111 out of 2087 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| src/Controls/docs/Microsoft.Maui.Controls.PlatformConfiguration.TizenSpecific/Label.xml | Removed generated API doc XML for Tizen-specific Label |
| src/Controls/docs/Microsoft.Maui.Controls.PlatformConfiguration.TizenSpecific/Entry.xml | Removed generated API doc XML for Tizen-specific Entry |
| src/Controls/docs/Microsoft.Maui.Controls.PlatformConfiguration.GTKSpecific/TabbedPage.xml | Removed generated API doc XML for GTK-specific TabbedPage |
| src/Controls/docs/Microsoft.Maui.Controls.PlatformConfiguration.GTKSpecific/NavigationPage.xml | Removed generated API doc XML for GTK-specific NavigationPage |
| src/Controls/docs/Microsoft.Maui.Controls.PlatformConfiguration.GTKSpecific/BoxView.xml | Removed generated API doc XML for GTK-specific BoxView |
| src/Controls/docs/Microsoft.Maui.Controls.PlatformConfiguration.AndroidSpecific/ViewCell.xml | Removed generated API doc XML for Android-specific ViewCell |
| src/Controls/docs/Microsoft.Maui.Controls.PlatformConfiguration.AndroidSpecific/SwipeView.xml | Removed generated API doc XML for Android-specific SwipeView |
| src/Controls/docs/Microsoft.Maui.Controls.PlatformConfiguration.AndroidSpecific/ShellItem.xml | Removed generated API doc XML for Android-specific ShellItem |
| src/Controls/docs/Microsoft.Maui.Controls.PlatformConfiguration.AndroidSpecific/ListView.xml | Removed generated API doc XML for Android-specific ListView |
| src/Controls/docs/Microsoft.Maui.Controls.PlatformConfiguration.AndroidSpecific/Entry.xml | Removed generated API doc XML for Android-specific Entry |
| src/Controls/docs/Microsoft.Maui.Controls.PlatformConfiguration.AndroidSpecific.AppCompat/NavigationPage.xml | Removed generated API doc XML for Android AppCompat NavigationPage |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/TypedBindingBase.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/ResourcesChangedEventArgs.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/Registrar.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/PropertyPropagationExtensions.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/ProfileDatum.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/PreserveAttribute.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/NotifyCollectionChangedEventArgsExtensions.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/NavigationRequestType.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/NameScope.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/InvalidationTrigger.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/GIFImageParser.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/GIFHeader.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/GIFDecoderFormatException.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/GIFColorTable.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/GIFBitmapDecoder.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/EvalRequested.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/EffectUtilities.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/DynamicResource.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/DependencyResolver.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/DataTemplateExtensions.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/ContentPageEx.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/AsyncValueExtensions.xml | Removed generated API doc XML for internal type |
| src/Controls/docs/Microsoft.Maui.Controls.Internals/ActionSheetArguments.xml | Removed generated API doc XML for internal type |
| src/Controls/Foldable/src/WindowSpanModeStateTrigger.cs | Added missing XML docs for public constructor |
| src/Controls/Foldable/src/TwoPaneView.cs | Added missing XML docs for public constructor |
| src/Controls/Foldable/src/SpanModeStateTrigger.cs | Added missing XML docs for public constructor |
| src/Controls/Foldable/src/HostBuilderExtensions.cs | Added XML docs for extension API |
| src/Controls/Foldable/src/DualScreenInfo.cs | Added XML docs for public constructor |
| src/Controls/Foldable/src/Controls.Foldable.csproj | Enforced CS1591 as error for Foldable controls |
| src/Compatibility/Core/src/Compatibility.csproj | Enforced CS1591 as error for Compatibility project |
| src/BlazorWebView/src/Wpf/Microsoft.AspNetCore.Components.WebView.Wpf.csproj | Enforced CS1591 as error for WPF BlazorWebView |
| src/BlazorWebView/src/WindowsForms/Microsoft.AspNetCore.Components.WebView.WindowsForms.csproj | Enforced CS1591 as error for WinForms BlazorWebView |
| src/BlazorWebView/src/Maui/Microsoft.AspNetCore.Components.WebView.Maui.csproj | Enforced CS1591 as error for MAUI BlazorWebView |
| eng/pipelines/ui-tests.yml | Updated macOS pool and iOS version matrix |
| eng/pipelines/handlers.yml | Fixed build id variable spelling and references |
| eng/pipelines/device-tests.yml | Added Helix path for device tests and updated iOS versions |
| eng/pipelines/common/variables.yml | Fixed build id variable spelling |
| eng/pipelines/common/sdk-insertion.yml | Fixed OfficialBuildId variable reference |
| eng/pipelines/common/device-tests-jobs.yml | Updated iOS “latest” simulator API version |
| eng/pipelines/ci.yml | Switched macOS template test stages to Arm64 pool |
| eng/pipelines/ci-uitests.yml | Updated internal/public pools and macOS image selection |
| eng/pipelines/ci-official.yml | Fixed OfficialBuildId variable reference |
| eng/pipelines/ci-device-tests.yml | Migrated Windows device tests to Helix and updated macOS pools |
| eng/pipelines/arcade/variables.yml | Fixed OfficialBuildId handling and added PR prerelease labeling |
| eng/pipelines/arcade/stage-unit-tests.yml | Enabled fail-on-issue template |
| eng/helix_xharness.proj | Added Windows device test work items and new queues |
| eng/devices/windows.cake | Comment clarifying WindowsAppSDKSelfContained configuration |
| eng/Versions.props | Updated XHarness versions |
| eng/Version.Details.xml | Updated XHarness dependency versions and SHAs |
| Directory.Build.props | Set AppxBundle=Never and fixed MauiManualTestsPlatforms concatenation |
| .github/skills/write-tests/SKILL.md | Added metadata/compatibility |
| .github/skills/verify-tests-fail-without-fix/SKILL.md | Expanded documentation and output artifacts section |
| .github/skills/try-fix/references/output-structure.md | Added reference documentation |
| .github/skills/try-fix/references/example-invocation.md | Added reference documentation |
| .github/skills/try-fix/references/compile-errors.md | Added reference documentation |
| .github/skills/pr-finalize/references/complete-example.md | Added reference documentation |
| .github/skills/pr-build-status/SKILL.md | Expanded functionality docs (Helix log retrieval) |
| .github/skills/find-reviewable-pr/SKILL.md | Updated agent name reference |
| .github/scripts/shared/Build-AndDeploy.ps1 | Added Windows platform support |
| .github/scripts/BuildAndRunSandbox.ps1 | Added Windows platform support |
| .github/scripts/BuildAndRunHostApp.ps1 | Added Windows platform support |
| .github/instructions/uitests.instructions.md | Clarified guidance text |
| .github/instructions/android.instructions.md | Added Android platform guidance doc |
| .github/copilot-instructions.md | Expanded guidance on skills vs agents and added skill list |
| .github/agents/pr/post-gate.md | Added protocol/clarifications for state file usage |
| .github/agents/pr.md | Updated state file location and added completion protocol |
| .github/agents/learn-from-pr.md | Added new agent definition doc |
| .config/dotnet-tools.json | Updated XHarness CLI tool version |
| @@ -59,41 +66,58 @@ | |||
| <HelixPreCommand Include="export XHARNESS_LOG_WITH_TIMESTAMPS=true" /> | |||
Copilot
AI
Jan 27, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This HelixPreCommand uses export, which is POSIX-shell syntax and is likely to fail on Windows Helix work items (where commands typically run under cmd.exe/PowerShell). Since this PR adds Windows Helix work items, the precommand should be conditioned to non-Windows targets or replaced with a Windows-compatible environment setting for Windows runs.
| | File | Description | | ||
| |------|-------------| | ||
| | `verification-report.md` | Comprehensive markdown report with test results and full logs | | ||
| | `verification-log.txt` | Text log of the verification process | | ||
| | `test-without-fix.log` | Full test output from run without fix | | ||
| | `test-with-fix.log` | Full test output from run with fix | |
Copilot
AI
Jan 27, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These markdown tables start each row with ||, which renders as an extra empty column in most markdown renderers. Update the table rows to start with a single | so the table renders correctly.
| | Aspect | Skills | Agents | | ||
| |--------|--------|--------| | ||
| | **Invoke** | `/skill-name` or direct request | Delegate to agent | | ||
| | **Output** | Analysis, recommendations | Actions, changes applied | | ||
| | **Interaction** | Interactive discussion | Autonomous workflow | | ||
| | **Example** | `/learn-from-pr` → recommendations | learn-from-pr agent → applies changes | |
Copilot
AI
Jan 27, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This table uses || at the start of each row, which will render with an unintended leading empty column. Use a single leading | per row to ensure correct markdown table formatting.
> [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Summary Refactors the test-writing infrastructure from a monolithic agent to a dispatcher + skills architecture for better maintainability and extensibility. ## Changes ### Skills - **Renamed** `write-tests` → `write-ui-tests` (clearer naming) - **Added** `write-xaml-tests` skill for XAML unit tests (credit: @StephaneDelcroix) ### Agents - **Renamed** `uitest-coding-agent` → `write-tests-agent` - **Simplified** from 635 lines to 79 lines (dispatcher pattern) - Agent now determines test type and invokes appropriate skill ### References Updated - README-AI.md - copilot-instructions.md - pr.md - sandbox.instructions.md - agents.instructions.md - pr-finalize/SKILL.md ## Architecture | Before | After | |--------|-------| | `uitest-coding-agent.md` (635 lines) | `write-tests-agent.md` (79 lines) - dispatcher | | `write-tests/SKILL.md` | `write-ui-tests/SKILL.md` - UI tests | | — | `write-xaml-tests/SKILL.md` - XAML unit tests | ## Future Work - Wire `write-xaml-tests` into `write-tests-agent` dispatch table - Add additional test type skills (unit tests, integration tests) --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com> Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
### Description of Change This pull request introduces a new developer skill for running .NET MAUI device tests locally on iOS simulators. It adds comprehensive documentation and two PowerShell scripts to streamline building, running, and managing device tests using xharness and the .NET SDK. The scripts automate simulator selection, build configuration, and test execution, making it easier for developers to verify iOS compatibility and run targeted tests. **Skill documentation and workflow:** - Added `.github/skills/run-device-tests/SKILL.md` with detailed instructions, prerequisites, usage scenarios, supported projects, example commands, and workflow for running device tests on iOS simulators using xharness and PowerShell. **Device test automation scripts:** - Added `Run-DeviceTests.ps1` script to build and run specified MAUI device test projects on iOS simulators, supporting options for iOS version selection, test filtering, build-only mode, and output directory customization. The script also summarizes test results and failed tests. - Added `List-Simulators.ps1` script to enumerate available iOS simulators, with support for filtering by iOS version and showing only booted simulators, helping users select appropriate test targets. --------- Co-authored-by: Shane Neuville <shneuvil@microsoft.com> Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
> [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ### Description of Change Adds a new `ai-summary-comment` skill for posting automated progress comments on GitHub PRs. **New files added:** - `.github/skills/ai-summary-comment/SKILL.md` - Skill definition and usage guide - `.github/skills/ai-summary-comment/IMPROVEMENTS.md` - Documentation of dynamic section extraction improvements - `.github/skills/ai-summary-comment/NO-EXTERNAL-REFERENCES-RULE.md` - Self-contained comment requirements - `.github/skills/ai-summary-comment/scripts/post-ai-summary-comment.ps1` - Main script for posting aggregated PR comments - `.github/skills/ai-summary-comment/scripts/post-pr-finalize-comment.ps1` - PR finalize comment script - `.github/skills/ai-summary-comment/scripts/post-try-fix-comment.ps1` - Try-fix phase comment script - `.github/skills/ai-summary-comment/scripts/post-verify-tests-comment.ps1` - Test verification comment script - `.github/skills/ai-summary-comment/scripts/post-write-tests-comment.ps1` - Write tests comment script **Key features:** - Dynamic section extraction from PR state files - Flexible regex pattern matching for section titles - Two-level validation (errors vs warnings) - Debug mode for troubleshooting - Creates single aggregated review comment with collapsible sections per commit
…agnostics (#33705) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Description This PR addresses multiple sources of UI test flakiness identified from analyzing the last 10 main branch UITest CI runs. ### 1. Screenshot Timing Fixes (`retryTimeout` parameter) Many visual tests were failing intermittently because screenshots were taken before animations/transitions completed. Added `retryTimeout: TimeSpan.FromSeconds(2)` to tests that tap buttons and immediately verify screenshots: **FeatureMatrix tests (39 files):** - All BoxView, Border, Brush, Button, CarouselView, CollectionView, ContentView, Frame, GraphicsView, Image, ImageButton, Label, ScrollView, Shadow, Shapes, Stepper, SwipeView, Switch, WebView tests **Issue tests:** - Issue10563 (SwipeView open/close) - Issue27730 (Shadow update when clipping) - Issue26662 (Dynamic FontImageSource color) ### 2. Instrumentation Crash Recovery Added detection and recovery for Android instrumentation crashes that were causing entire test fixtures to fail: - Added `IsInstrumentationCrash()` method with 12 crash signatures (socket hang up, ECONNRESET, session terminated, etc.) - Added recovery in `FixtureSetup` and `TestSetup` that calls `base.Reset()` to recreate the Appium driver session - This allows tests to recover from transient instrumentation failures instead of failing the entire fixture ### 3. OneTimeSetUp Diagnostic Attachment Fix Fixed an issue where diagnostic files (logcat, screenshots) attached during `OneTimeSetUp` failures were not visible in Azure DevOps test results: - NUnit limitation: `TestContext.AddTestAttachment` in `OneTimeSetUp` attaches to fixture context, not individual tests - Azure DevOps only displays per-test attachments - Solution: Store diagnostic file paths during fixture setup failures, then re-attach them to each individual test in `TearDown` ## Changes ### Infrastructure (`src/TestUtils/src/UITest.NUnit/UITestBase.cs`) - Added `_fixtureSetupDiagnosticFiles` list and `_fixtureSetupFailed` flag - Modified `TearDown` to re-attach fixture diagnostic files to each test - Added `storeForReattachment` parameter to `SaveDeviceDiagnosticInfo` and `SaveUIDiagnosticInfo` ### MAUI Test Base (`src/Controls/tests/TestCases.Shared.Tests/UITest.cs`) - Added `IsInstrumentationCrash()` detection with 12 crash signatures - Added crash recovery in `FixtureSetup` and `TestSetup` ### Test Files - 39 FeatureMatrix test files: Added `retryTimeout` - Issue10563.cs: Added `retryTimeout` to SwipeView screenshot tests - Issue27730.cs: Added `retryTimeout` to shadow update test - Issue26662.cs: Added `retryTimeout` to dynamic color test ## Testing Validated through multiple CI runs: - Build 1270034: iOS/macOS all passed, Android CoreClr passed after retry - Build 1270368: Identified additional timing issues in Issue27730 and Issue26662 - Build 1270512: In progress with latest fixes
# Conflicts: # eng/pipelines/common/provision.yml
Adds automatic PR label management to the verify-tests-fail-without-fix skill. After test verification completes, the skill now updates labels on the PR to indicate verification status. **New Labels:** - s/ai-reproduction-confirmed - Tests correctly FAIL without fix - s/ai-reproduction-failed - Tests PASS without fix **Files Changed:** - SKILL.md - Added PR Labels documentation section - verify-tests-fail.ps1 - Added Update-VerificationLabels function --------- Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
This reverts commit d7d5e04.
> [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Summary Updates the try-fix skill based on consolidated review from 4 AI models (Gemini 3 Pro, Claude Sonnet 4.5, Codex 5.2, Claude Opus 4.5), validated against the [agentskills.io specification](https://agentskills.io/specification). ## Changes | Change | Rationale | |--------|-----------| | Add `compatibility` field to frontmatter | Documents PowerShell, git, and device requirements per spec | | Delete `references/output-structure.md` | Content already in SKILL.md - eliminates duplication | | Standardize result values to `Pass`/`Fail`/`Blocked` | Was inconsistent (`PASS`/`FAIL` vs `Pass`/`Fail`) | | Add `Blocked` as valid result.txt value | For device/emulator unavailability scenarios | | Add `Tee-Object` capture to Step 6 | Fixes missing `test-output.log` capture in workflow | | Reduce 🚨 markers from 8 to 4 | Kept only critical warnings to reduce warning fatigue | ## Validation - ✅ SKILL.md under 500 lines (407 lines) - ✅ Under 5000 token recommendation - ✅ No prohibited auxiliary files - ✅ All frontmatter fields valid per spec - ✅ Progressive disclosure maintained (references/ for compile-errors.md, example-invocation.md) --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com> Co-authored-by: Shane Neuville <shneuvil@microsoft.com>
…33771) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ### Description of Change Refactors `post-pr-finalize-comment.ps1` to produce a cleaner, more readable PR finalization comment format: **Before:** Single collapsible section per review with merged Title/Description content **After:** Two separate collapsible sections (Title and Description) for better scannability #### Changes: - Replace per-review collapsible sections with dedicated Title and Description sections - Remove legacy `ReviewNumber` and `ReviewDescription` parameters (no longer needed) - Add `TitleIssues` parameter for direct title issue specification - Auto-detect `TitleStatus` from "Title Assessment" section in summary files - Always replace existing finalize comment instead of merging reviews - Broaden GitHub API comment fetch to `?per_page=100` to handle PRs with many comments - Simplify status defaulting logic ### Issues Fixed N/A - Internal tooling improvement
## Description Improves the issue-triage skill to prevent common workflow mistakes and ensure proper usage of GitHub CLI. ## Changes ### 1. Prerequisites and Validation - Added GitHub CLI (gh) prerequisite checks to both scripts - Scripts now exit gracefully with installation instructions if gh is not found - Updated SKILL.md with Prerequisites section and installation guide for all platforms ### 2. Milestone Logic Fixes - Fixed init-triage-session.ps1 to use Invoke-RestMethod for fetching milestones (doesn't require gh) - Added documentation: milestone names must come from session output, not assumptions - Included examples of correct vs incorrect milestone suggestions ### 3. Workflow Documentation - Added critical rule: ALWAYS use skill scripts, never ad-hoc GitHub API queries - Documented Step 6: Automatically reload issue batches when empty (don't prompt user) - Added Common Mistakes section with anti-patterns table - Explained what each script does and why to use them ### 4. Testing - ✅ Verified init-triage-session.ps1 works with gh installed - ✅ Verified query-issues.ps1 applies proper exclusion filters - ✅ Confirmed prerequisite check catches missing gh CLI ## Why These Changes During a triage session, the agent bypassed the skill's scripts and used ad-hoc GitHub queries, which missed important exclusion filters (s/needs-info, s/needs-repro, area-blazor, etc.). This resulted in incorrect issue counts and suggestions. Additionally, the agent assumed milestone names like "SR2" and "SR3" without checking what milestones actually exist, leading to invalid suggestions. These changes ensure future agents (and users) follow the proper workflow and use accurate data. ## Version Bump - Version: 2.2 → 2.3
…#33727) AGP 8.11.1 auto-selects build-tools 35.0.0 for compileSdk 35, which isn't commonly installed. This causes build failures in the Android native module. ## Changes - **src/Core/AndroidNative/maui/build.gradle** - Bump `compileSdk` from 35 to 36 - Add explicit `buildToolsVersion "36.0.0"` to override AGP's auto-selection - Bump `targetSdk` from 35 to 36 - **src/Core/AndroidNative/build.gradle** - Replace deprecated `buildDir` with `layout.buildDirectory` (Gradle 8+ API) - **eng/Versions.props** - Remove `IsDefault="True"` from API 35 (only API 36 is default now) - Remove `AndroidSdkBuildToolsVersion` property (no longer needed) - **eng/pipelines/common/ui-tests-build-sample.yml** - Remove outdated FIXME comment about API 35 - **src/Provisioning/Provisioning.csproj** - Remove build-tools provisioning line (gradle file now explicitly specifies version) ```gradle android { compileSdk 36 buildToolsVersion "36.0.0" // Override AGP auto-selection namespace "microsoft.maui" defaultConfig { minSdk 21 targetSdk 36 ... } } ``` Explicit buildToolsVersion takes precedence over AGP inference, ensuring builds use an available version. The `AndroidSdkBuildToolsVersion` MSBuild property has been removed as it's no longer necessary - the gradle file now directly manages the build-tools version. Build-tools can be installed through Android SDK Manager or other standard Android development tools as needed. <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> Create a PR with these changes. They should be good to go and need no further updates <analysis> **Chronological Review:** 1. Initial phase: User requested checkout of DecorView-Fix PR branch, rebase to main, and create test sample 2. First build attempt: BuildTasks failed with build-tools 35.0.0 not found error 3. Investigation phase: Determined AGP 8.11.1 tries to use build-tools 35.0.0 for compileSdk 35 4. First fix attempt: Changed compileSdk to 36, still failed until explicit buildToolsVersion added 5. Exploration phase: User asked to test AGP 9.x upgrade on new branch 6. AGP upgrade failure: Microsoft.Android.Sdk.Windows 36.1.12 incompatible with Gradle 9.x due to Kotlin type safety 7. Documentation phase: Created detailed bug reports for Microsoft Android SDK team 8. Final resolution: User decided on minimal build-tools fix approach 9. Branch creation: Created fix-android-build-tools-36 with surgical changes 10. Cleanup phase: Verified changes, removed untracked files from previous experiments **Intent Mapping:** - Message 1: "checkout the following branch...rebase it to main, write a sample on the sandbox project" - Test DecorView-Fix PR - Message 2: "can you build the BuildTasks please" - Compile BuildTasks solution - Message 3: "just build it with debug please and then open the -windows.slnf in VS" - Build configuration clarification - [6 messages omitted in context] - "why do you like that better than option 2?" - Comparing fix approaches - "yes, please make that change and then lets see if it compiles" - Approve specific fix - "did we need to set buildToolsVersion or does just setting compileSdk do enough?" - Understanding fix necessity - "delete the artifacts folder before testing again" - Clean build verification - "why is buildtoolsversion needed now but never was before? please figure it out" - Root cause analysis - "so why doesn't bumping compileSdk to 36 cause it to try and use build-tools 36?" - Understanding AGP behavior - "what is AGP and should we bump AGP?" - Context on Android Gradle Plugin - "switch to the main branch, checkout a new branch, bump AGP and compileSDK and see if things build" - Test AGP upgrade path - "is agp 9.0 a good version to bump to? or should we try even higher?" - Version selection guidance - "are you sure it requires breaking changes? can you work on fixing our code so that AGP 9.2.0 works" - Challenge incompatibility claim - "are you positive about this? are you just blaming MSFT for your own inability to make this work?" - Verify technical accuracy - "can you summarize why you think it's not compatible" - Consolidate reasoning - "is there anything official you can find to indicate that Microsoft.Android.Sdk.Windows 36.1.12 doesn't support gradle 9" - Request documentation - "can you give me specific errors I can show someone from that team?" - Prepare bug report - "alright lets go with the build tools and compilesdk fix for now, can you create a new branch with those changes and make sure we are sync with origin main" - Final decision on approach - "sorry keep going" - Continue after interruption - "what are all the changes made? is there anything lingering or are these all the changes you made for build tools?" - Verify clean state - "yes please clean the untracked files we only want changes around updating gradle bits here" - Final cleanup request **Technical Inventory:** - .NET 10.0.100 (net10.0) - Microsoft.Android.Sdk.Windows 36.1.12 - Android Gradle Plugin (AGP) 8.11.1 (current stable) - Gradle 8.13 - Android compileSdk/targetSdk levels (35 vs 36) - Android build-tools (33.0.0, 36.0.0 installed; 35.0.0 not installed) - Kotlin type safety in Gradle 9.x - MSBuild target system - Git workflow (branches, rebasing, cherry-picking) - DecorView-Fix PR: SafeArea padding handling for AdjustResize mode **Code Archaeology:** - src/Core/AndroidNative/maui/build.gradle: Gradle configuration for MAUI Android native library (compileSdk, targetSdk, buildToolsVersion) - src/Core/AndroidNative/build.gradle: Top-level Gradle config (clean task with buildDir → layout.buildDirectory) - src/Core/AndroidNative/gradle/wrapper/gradle-wrapper.properties: Gradle version definition (8.13) - eng/Versions.props: MSBuild version properties (AndroidSdkBuildToolsVersion) - artifacts/obj/Core/Debug/net10.0-android36.0/gradle/net.android.init.gradle.kts: Generated Kotlin file causing AGP 9.x failures - src/Controls/samples/Controls.Sample.Sandbox/: Test files created for DecorView-Fix testing - KeyboardTestPage.xaml/.cs: Test page with multiple Entry fields - MainActivity.cs: Modified for AdjustResize mode - App.xaml.cs: Modified for Shell with bottom tabs **Progress Assessment:** Completed: - ✅ DecorView-Fix PR analyzed and rebased to main - ✅ Sandbox test sample created (on separate branch) - ✅ Root cause identified: AGP tries to use build-tools 35.0.0 for compileSdk 35 - ✅ AGP 9.x upgrade tested and determined incompatible with current SDK - ✅ Bug reports created for Microsof... </details> <!-- START COPILOT CODING AGENT SUFFIX --> Created from Copilot CLI via the copilot delegate command. <!-- START COPILOT CODING AGENT TIPS --> --- 💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey). --------- Co-authored-by: Shane Neuville (HE/HIM) <shneuvil@microsoft.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: jonathanpeppers <840039+jonathanpeppers@users.noreply.github.com> Co-authored-by: PureWeen <5375137+PureWeen@users.noreply.github.com> Co-authored-by: Shane Neuville <shane94@hotmail.com>
### Description of Change This pull request updates the build and test infrastructure to improve platform-specific builds, streamline build conditions, and enhance macOS integration test reliability. The changes reorganize project selection logic in `Build.props`, update build pipeline pool configurations to use a shared macOS pool, and adjust environment variable handling for integration tests. **Build system and pipeline improvements:** * Refactored `eng/Build.props` to separate build logic for pack-only, full build, and device test scenarios, adding more precise conditions and additional build properties for macOS and Windows builds. * Updated Azure DevOps pipeline pool configurations in `eng/pipelines/ci.yml` to use the `AcesShared` pool with specific demands for macOS jobs, replacing previous references to `Azure Pipelines` and hosted images. [[1]](diffhunk://#diff-07a82fab001c5b336d89cb64918f0a88b6b66f03d88d67e0fa13c65202455120L77-R79) [[2]](diffhunk://#diff-07a82fab001c5b336d89cb64918f0a88b6b66f03d88d67e0fa13c65202455120L100-R113) * Removed the `Agent.OSVersion` demand for macOS device test pools in `eng/pipelines/device-tests.yml`, simplifying agent selection. [[1]](diffhunk://#diff-d2d1c388a0fb3196dbfcdab96421bc88336637a3d44480c96717f92d000facaeL74) [[2]](diffhunk://#diff-d2d1c388a0fb3196dbfcdab96421bc88336637a3d44480c96717f92d000facaeL83) **Integration test and environment variable handling:** * Changed integration test pipeline logic in `eng/pipelines/arcade/stage-integration-tests.yml` to always set `SKIP_XCODE_VERSION_CHECK=true` for macOS jobs, and refactored the logic for setting `IOS_TEST_DEVICE` to be more precise for iOS test categories. * Updated `TestEnvironment.SkipXcodeVersionCheck` in `TestEnvironment.cs` to always return `true` (unless overridden by environment variable), ensuring Xcode version checks are always skipped locally and in CI. **Build script adjustments:** * Removed explicit build properties from the Microsoft.Maui.sln build command in the arcade build pipeline, relying on the new logic in `Build.props` for property management.
# Conflicts: # eng/pipelines/ci.yml # eng/pipelines/common/provision.yml
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Description
Weekly merge of
mainintonet11.0.This PR brings the latest changes from
mainbranch into thenet11.0branch.Merge Conflict Resolutions
Azure Pipelines+macOS-15-arm64)CA2252from net11.0,MAUIG2045from main)Checklist