[automated] Merge branch 'main' => 'net11.0' - #37784
Open
github-actions[bot] wants to merge 11 commits into
Open
[automated] Merge branch 'main' => 'net11.0'#37784github-actions[bot] wants to merge 11 commits into
github-actions[bot] wants to merge 11 commits into
Conversation
…atic event with WeakEventManager (#37645) <!-- 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! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details When a page or view model subscribes to BindingDiagnostics.BindingFailed (a helpful event that tells you when a data binding fails) and forgets to unsubscribe, that page never gets cleaned up from memory. Every page it holds — plus its images, view models, and data — stays alive until the app closes. Over time, the app uses more and more memory. ### Root Cause BindingFailed is a static event, which means it lives for the whole life of the app. Normal C# events keep a strong reference to whoever subscribed, so as long as the event is alive, its subscribers stay alive too. Since this event never goes away, any subscriber that doesn't call -= is stuck in memory forever. ### Description of Change Switched BindingFailed from a normal event to one backed by WeakEventManager, which keeps only a weak reference to subscribers — so the garbage collector can clean them up even if someone forgets to unsubscribe. Validated the behavior in the following platforms - [x] Android - [x] Windows - [x] iOS - [x] Mac ### Issues Fixed Fixes #37245 ### Fix reference [maui/src/Controls/src/Core/Application/Application.cs at bf62313 · …](https://github.com/dotnet/maui/blob/bf62313db2cecf3215f10c353720b341aba0a4ee/src/Controls/src/Core/Application/Application.cs#L263) [maui/src/Controls/src/Core/Command.cs at bf62313 · dotnet/maui](https://github.com/dotnet/maui/blob/bf62313db2cecf3215f10c353720b341aba0a4ee/src/Controls/src/Core/Command.cs#L128) [maui/src/Controls/src/Core/ImageSource.cs at bf62313 · dotnet/maui](https://github.com/dotnet/maui/blob/bf62313db2cecf3215f10c353720b341aba0a4ee/src/Controls/src/Core/ImageSource.cs#L175) ### Output ScreenShot |Before|After| |--|--| | <video src="https://github.com/user-attachments/assets/86c6d76d-a051-458b-beb3-6c254545f87a" >| <video src="https://github.com/user-attachments/assets/e3b02ce7-71a7-4e90-94e0-dd6587c8e3cf">|
<!-- 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! ## Summary - regenerate all 14 Copilot-based agentic workflows with gh-aw v0.86.2 - stage the installed Copilot CLI in a portable runner-local path instead of invoking `/usr/local/bin/copilot` - explicitly disable shell access in the automatic issue/PR labeler, as required when `min-integrity: none` - adopt gh-aw v0.86.2's intentional disabled-expiry sentinel for action-failure issues when no maintenance workflow exists ## Root cause The failing runs install Copilot CLI successfully, but gh-aw v0.85.4 then invokes `/usr/local/bin/copilot`. That path no longer exists on the hosted runner, so the engine exits with `ENOENT` before producing output or making a model request. gh-aw v0.86.2 includes the upstream path-portability fix and resolves the installed executable from `PATH`. The same generated path affected every Copilot workflow, including the labeler, whose failure reporting is intentionally disabled. Regeneration also incorporates [github/gh-aw#51425](github/gh-aw#51425). Because this repository does not generate an `agentics-maintenance.yml` consumer for the implicit action-failure expiry, all 14 lockfiles now set `GH_AW_ACTION_FAILURE_ISSUE_EXPIRES_HOURS` to `"0"`. In gh-aw v0.86.2, explicit `0` means expiration is disabled; it prevents unenforceable expiry markers and does not make failure issues expire immediately. ## Validation - `gh aw compile --strict --validate --actionlint --no-emit` - verified all 14 lockfiles use gh-aw v0.86.2 and portable Copilot staging - verified no generated workflow references `/usr/local/bin/copilot` - verified all 14 generated locks use gh-aw's `"0"` disabled-expiry sentinel consistently No existing open MAUI PR addresses this gh-aw/Copilot path failure. Fixes #37430 Fixes #37431 Fixes #37432 Fixes #37435 Fixes #37442 --------- Co-authored-by: Copilot CI <copilot-ci@microsoft.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 74cff858-a5a6-486e-a1d3-1d516fc3bdaa Copilot-Session: d00747b7-96f3-4e7a-8dfb-e3a48db04b2d
<!-- 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 Adds .NET MAUI 10.0.100 and 11.0.0-preview.7 to both version selectors in the bug-report issue form. This lets users report issues against the released SR10 build and the active .NET 11 Preview 7 version. ---------
) <!-- 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! ### Problem The internal `dotnet-maui` official build currently fails to compile the pipeline YAML, before any stage runs: ``` /eng/pipelines/common/variables.yml (Line: 81, Col: 7): Expected at least one key-value pair in the mapping ``` ### Cause #37589 removed `- group: Publish-Build-Assets`, but that group was the only child of the conditional that enclosed it, leaving an empty block behind: ```yaml - group: AzureDevOps-Artifact-Feeds-Pats - ${{ if eq(variables['Build.DefinitionName'], 'dotnet-maui') }}: # <- nothing under it ``` Azure DevOps requires a conditional insertion block to contain at least one entry, so template expansion fails outright. ### Why PR validation stayed green The empty block is nested inside an outer guard: ```yaml - ${{ if or(eq(variables['Build.DefinitionName'], 'dotnet-maui'), eq(variables['Build.DefinitionName'], 'dotnet-maui-build')) }}: - ${{ if notin(variables['Build.Reason'], 'PullRequest') }}: ``` For the public `maui-pr` definition that outer condition is false, so Azure DevOps short-circuits and never expands the inner block. The breakage is therefore invisible to PR CI and only manifests on the internal official build. ### Fix Remove the empty conditional. No file in the repository references the `Publish-Build-Assets` variable group any more, so it is deleted outright rather than repopulated. ### Validation - `eng/pipelines/common/variables.yml` parses as valid YAML. - Swept all 39 YAML files under `eng/pipelines/` for conditional blocks with no body — this was the only one. - `grep` for `Publish-Build-Assets` across `eng/` and `.github/` returns no remaining references. This blocks the internal build entirely, so it is worth merging ahead of larger infra work such as #36257 (which carries the same one-line fix, but cannot be validated on the internal pipeline until this is on `main`). Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Updates the dotnet tool version.
…le with keyboard waits (refs #37556) (#37741) > [!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! Workflow artifact: ci-fix Artifact kind: deflake Refs: #37556 Target branch: main Attempt: 1/10 ## Attempt 1 of 10 Synchronize the test with actual keyboard visibility before validating the keyboard-dependent safe-area layouts. ### Previous attempts (prior commits on this PR) None. This attempt differs by: this is the first attempt. ## Root cause The latest `main` build 1563072 failed `SafeAreaNoWhiteSpaceAfterKeyboardDismissAndEdgeToggle` on run 0 because `ContentGrid` had not shrunk after tapping the entry, then passed on built-in retry run 1. The test immediately queried layout after the tap and immediately changed edges after dismissing the keyboard, without first proving either keyboard transition completed. Flake class: test-quality ## Why this was flaky `Issue28986_ContentPage.SafeAreaNoWhiteSpaceAfterKeyboardDismissAndEdgeToggle` retried its layout assertion but had no synchronization point confirming that Android had shown the keyboard. It also dismissed the keyboard and immediately restored all safe-area edges. Depending on keyboard animation timing, the assertions could observe the pre-transition layout; build 1563072 demonstrates the intermittent fail-then-pass behavior. ## De-flake The test now asserts `WaitForKeyboardToShow()` before measuring the keyboard-visible layout and `WaitForKeyboardToHide()` before restoring all safe-area edges. Every existing layout assertion remains unchanged. No timeout was increased, no retry attribute was added, and no assertion was weakened. ## Fix Add the existing Appium keyboard-state waits at the two transition boundaries so the test evaluates the same behavior in deterministic UI states. ## What is unverified / where I need help - The Android UI test could not be run because this runner has no device rig. - Please confirm the API 36 SafeAreaEdges leg consistently observes both transitions and preserves the intended edge-toggle sequence. ## Validation - Command: `not run because no Android device rig is available` - Result: not run ## Evidence - Original failing build: https://dev.azure.com/dnceng-public/public/_build/results?buildId=1554582 - Latest verified-failing build: https://dev.azure.com/dnceng-public/public/_build/results?buildId=1563072 --- Filed by [`ci-status-fix`](https://github.com/dotnet/maui/blob/main/.github/workflows/ci-status-fix.md). This is the single PR for #37556: the workflow watches its own CI and pushes up to **10 attempts on this same PR** (it never opens a second PR). It advances only when the fix's own build settles red and that red is caused by the fix. Comments, reviews, and commits do not transfer ownership; the loop remains autonomous until this PR is closed. Eligible `CHANGES_REQUESTED` reviews are handled through Track C. After 10 attempts it stops and defers to humans. In round 1 a maintainer still needs to comment `/azp run maui-pr` (plus the gated uitests/devicetests legs when relevant) to exercise each new commit. > [!WARNING] > <details> > <summary>Firewall blocked 1 domain</summary> > > The following domain was blocked by the firewall during workflow execution: > > - `dc.services.visualstudio.com` > > To allow these domains, add them to the `network.allowed` list in your workflow frontmatter: > > ```yaml > network: > allowed: > - defaults > - "dc.services.visualstudio.com" > ``` > > See [Network Configuration](https://github.github.com/gh-aw/reference/network/) for more information. > > </details> > Generated by [CI Failure Fixer (main)](https://github.com/dotnet/maui/actions/runs/32573008235) · gpt56 · 446.8 AIC · ⌖ 82.9 AIC · ⊞ 31.1K · [◷](https://github.com/search?q=repo%3Adotnet%2Fmaui+%22gh-aw-workflow-id%3A+ci-status-fix%22&type=pullrequests) <!-- gh-aw-agentic-workflow: CI Failure Fixer (main), engine: copilot, model: gpt-5.6-sol, id: 32573008235, workflow_id: ci-status-fix, run: https://github.com/dotnet/maui/actions/runs/32573008235 --> <!-- gh-aw-workflow-id: ci-status-fix --> <!-- gh-aw-workflow-call-id: dotnet/maui/ci-status-fix --> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com>
…37557) (#37742) > [!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! Workflow artifact: ci-fix Artifact kind: deflake Refs: #37557 Target branch: main Attempt: 1/10 ## Attempt 1 of 10 Synchronize `SafeAreaPerEdgeValidation` with actual keyboard visibility before validating keyboard-dependent safe-area layouts. ### Previous attempts (prior commits on this PR) None. This attempt differs by: this is the first attempt. ## Root cause The latest `main` build 1563072 failed `Issue28986.SafeAreaPerEdgeValidation` on run 0 because `ContentGrid` remained at height 2789 after tapping the entry, then passed on built-in retry run 1. The test immediately queried layout after the tap without proving that Android had shown the keyboard. Flake class: test-quality ## Why this was flaky `Issue28986.SafeAreaPerEdgeValidation` retried its layout assertion but had no synchronization point confirming that Android had completed the keyboard transition. Depending on keyboard animation timing, the assertion could poll the unchanged pre-keyboard layout; build 1563072 demonstrates the intermittent fail-then-pass behavior. ## De-flake The test now asserts `WaitForKeyboardToShow()` before measuring the keyboard-visible layout and `WaitForKeyboardToHide()` before validating the restored layout. Every existing layout assertion remains unchanged. No timeout was increased, no retry attribute was added, and no assertion was weakened. ## Fix Add the existing Appium keyboard-state waits at the two transition boundaries so the test evaluates the same behavior in deterministic UI states. ## What is unverified / where I need help - The Android UI test could not be run because this runner has no device rig. - Please confirm the API 36 SafeAreaEdges leg consistently observes both transitions. ## Validation - Command: `not run because no Android device rig is available` - Result: not run ## Evidence - Original failing build: https://dev.azure.com/dnceng-public/public/_build/results?buildId=1554582 - Latest verified-failing build: https://dev.azure.com/dnceng-public/public/_build/results?buildId=1563072 --- Filed by [`ci-status-fix`](https://github.com/dotnet/maui/blob/main/.github/workflows/ci-status-fix.md). This is the single PR for #37557: the workflow watches its own CI and pushes up to **10 attempts on this same PR** (it never opens a second PR). It advances only when the fix's own build settles red and that red is caused by the fix. Comments, reviews, and commits do not transfer ownership; the loop remains autonomous until this PR is closed. Eligible `CHANGES_REQUESTED` reviews are handled through Track C. After 10 attempts it stops and defers to humans. In round 1 a maintainer still needs to comment `/azp run maui-pr` (plus the gated uitests/devicetests legs when relevant) to exercise each new commit. > [!WARNING] > <details> > <summary>Firewall blocked 1 domain</summary> > > The following domain was blocked by the firewall during workflow execution: > > - `dc.services.visualstudio.com` > > To allow these domains, add them to the `network.allowed` list in your workflow frontmatter: > > ```yaml > network: > allowed: > - defaults > - "dc.services.visualstudio.com" > ``` > > See [Network Configuration](https://github.github.com/gh-aw/reference/network/) for more information. > > </details> > Generated by [CI Failure Fixer (main)](https://github.com/dotnet/maui/actions/runs/32573008235) · gpt56 · 446.8 AIC · ⌖ 82.9 AIC · ⊞ 31.1K · [◷](https://github.com/search?q=repo%3Adotnet%2Fmaui+%22gh-aw-workflow-id%3A+ci-status-fix%22&type=pullrequests) <!-- gh-aw-agentic-workflow: CI Failure Fixer (main), engine: copilot, model: gpt-5.6-sol, id: 32573008235, workflow_id: ci-status-fix, run: https://github.com/dotnet/maui/actions/runs/32573008235 --> <!-- gh-aw-workflow-id: ci-status-fix --> <!-- gh-aw-workflow-call-id: dotnet/maui/ci-status-fix --> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com>
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**: [20260819.1](https://dev.azure.com/dnceng/internal/_build/results?buildId=3051693) ([327705](https://maestro.dot.net/channel/2/github:dotnet:xharness/build/327705)) - **Date Produced**: August 19, 2026 8:47:15 AM UTC - **Commit**: [8dd9b8e6004e22c7b120af0631f0809865ff2088](dotnet/xharness@8dd9b8e) - **Branch**: [main](https://github.com/dotnet/xharness/tree/main) [DependencyUpdate]: <> (Begin) - **Dependency Updates**: - From [11.0.0-prerelease.26230.4 to 11.0.0-prerelease.26419.1][1] - Microsoft.DotNet.XHarness.CLI - Microsoft.DotNet.XHarness.TestRunners.Common - Microsoft.DotNet.XHarness.TestRunners.Xunit [1]: dotnet/xharness@92962e5...8dd9b8e [DependencyUpdate]: <> (End) [marker]: <> (End:a71c12d9-5aa4-4b46-e2d6-08da0cf8cd95) --------- Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com> Co-authored-by: GitHub Actions <github-actions@xamarin.com> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com>
### Description of Change Use the latest version of Mono.Cecil to get a fix to not corrupt pdbs. ### Issues Fixed Fixes #37782.
Reset patterns: - global.json - NuGet.config - eng/Version.Details.xml - eng/Versions.props - eng/common/*
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
Author
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 37784Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 37784" |
kubaflo
approved these changes
Aug 24, 2026
kubaflo
disabled auto-merge
August 24, 2026 21:23
Contributor
Author
Skill Validation Results
✅ Skill Validation Results —
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I detected changes in the main branch which have not been merged yet to net11.0. I'm a robot and am configured to help you automatically keep net11.0 up to date, so I've opened this PR.
This PR merges commits made on main by the following committers:
Instructions for merging from UI
This PR will not be auto-merged. When pull request checks pass, complete this PR by creating a merge commit, not a squash or rebase commit.
If this repo does not allow creating merge commits from the GitHub UI, use command line instructions.
Instructions for merging via command line
Run these commands to merge this pull request from the command line.
or if you are using SSH
After PR checks are complete push the branch
Instructions for resolving conflicts
Instructions for updating this pull request
Contributors to this repo have permission update this pull request by pushing to the branch 'merge/main-to-net11.0'. This can be done to resolve conflicts or make other changes to this pull request before it is merged.
The provided examples assume that the remote is named 'origin'. If you have a different remote name, please replace 'origin' with the name of your remote.
or if you are using SSH
Contact .NET Core Engineering (dotnet/dnceng) if you have questions or issues.
Also, if this PR was generated incorrectly, help us fix it. See https://github.com/dotnet/arcade/blob/main/.github/workflows/scripts/inter-branch-merge.ps1.