Skip to content

[automated] Merge branch 'main' => 'net11.0'#34550

Merged
PureWeen merged 238 commits intonet11.0from
merge/main-to-net11.0
Mar 20, 2026
Merged

[automated] Merge branch 'main' => 'net11.0'#34550
PureWeen merged 238 commits intonet11.0from
merge/main-to-net11.0

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

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:

  • PureWeen
  • Copilot
  • jfversluis
  • StephaneDelcroix
  • kubaflo
  • devanathan-vaithiyanathan
  • noiseonwires
  • sheiksyedm
  • sbomer
  • Vignesh-SF3580
  • jpd21122012
  • mattleibow
  • rmarinho
  • rolfbjarne

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.

merge button instructions

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.

git fetch
git checkout main
git pull --ff-only
git checkout net11.0
git pull --ff-only
git merge --no-ff main

# If there are merge conflicts, resolve them and then run git merge --continue to complete the merge
# Pushing the changes to the PR branch will re-trigger PR validation.
git push https://github.com/dotnet/maui HEAD:merge/main-to-net11.0
or if you are using SSH
git push git@github.com:dotnet/maui HEAD:merge/main-to-net11.0

After PR checks are complete push the branch

git push

Instructions for resolving conflicts

⚠️ If there are merge conflicts, you will need to resolve them manually before merging. You can do this using GitHub or using the command line.

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.

git fetch
git checkout -b merge/main-to-net11.0 origin/net11.0
git pull https://github.com/dotnet/maui merge/main-to-net11.0
(make changes)
git commit -m "Updated PR with my changes"
git push https://github.com/dotnet/maui HEAD:merge/main-to-net11.0
or if you are using SSH
git fetch
git checkout -b merge/main-to-net11.0 origin/net11.0
git pull git@github.com:dotnet/maui merge/main-to-net11.0
(make changes)
git commit -m "Updated PR with my changes"
git push git@github.com:dotnet/maui HEAD:merge/main-to-net11.0

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.

rmarinho and others added 30 commits February 11, 2026 20:56
Clarify the Copilot PR-review prompt to execute five explicit phases (Understanding, Test Review, Fix Exploration, Alternative Comparison, Final Review). Add a new pipeline step that invokes a Copilot "post-comment" skill, captures its exit code, logs output to $(Build.ArtifactStagingDirectory)/copilot-logs, and sets a PostCommentFailed variable on failure. Ensure artifacts dir exists, surface warnings on failure, and make the original post-comment fallback step run only when the skill step failed. Update step display names and preserve artifact publishing.
Add a pipeline step (Cache Prompt File) that loads eng/pipelines/prompts/pr-review-prompt.md and copies it to /tmp/copilot-prompts/pr-review-prompt.md before the PR branch checkout. Update the later Copilot step to read the prompt from the cached location and adjust the error message. This prevents failures when the prompt file is absent on the PR branch by ensuring a stable copy is available for the review step.
Replace brittle iPhone Xs + iOS 18.5 lookup with a prioritized selection routine. The script now iterates preferred iOS versions and device models, picks the first available preferred device or falls back to the first available iPhone, and finally falls back to any available simulator. It also surfaces runtime info when listing available simulators and reports the selected device name and UDID before booting.
Replace direct checkout of the PR branch with logic that fetches the PR, computes the merge-base against the current branch, and cherry-picks commits from the merge-base..PR_HEAD onto the current branch (using --no-commit). Adds commit counting, a warning when no commits are found, conflict handling with status and diff output, and extra logging (current branch, merge base, commit count, last commit and status). Also updates the pipeline step display name to 'Cherry-pick PR Changes' and tweaks the fetch message.
Add a CI step to run ./build.ps1 --target=dotnet-buildtasks (Release, diagnostic) to compile MSBuild tasks required for MAUI builds. The step includes a retry on failure and sets DOTNET_TOKEN and PRIVATE_BUILD environment variables for accessing internal artifacts. Placed before the simulator/emulator listing to ensure tasks are available for subsequent MAUI jobs.
Add provisioning steps to eng/pipelines/common/provision.yml to create an iPhone Xs simulator with iOS 18.5 (falling back to iOS 18.x if 18.5 is not available). The script finds the appropriate runtime and device type, checks for an existing simulator to avoid duplicates, attempts creation if missing, and prints available iPhone simulators. This ensures the required simulator is present for UI tests and logs useful diagnostics if runtimes or device types are not available.
jfversluis and others added 6 commits March 18, 2026 10:48
## Description

Adds a new Copilot skill (`evaluate-pr-tests`) that evaluates the
quality, coverage, and appropriateness of tests added in PRs.

## Why This Is Useful

**Problem:** When reviewing PRs, evaluating test quality is one of the
most time-consuming and inconsistent parts of the process. Common issues
slip through:

- Tests that only verify a page loads but never exercise the actual fix
- UI tests for behavior that could be caught by a unit test (which runs
in seconds vs minutes)
- Missing edge cases (null inputs, boundary values, repeated actions)
that lead to regressions later
- Convention violations (wrong base class, missing attributes, obsolete
APIs) that cause CI failures
- Flaky patterns (arbitrary delays, missing `WaitForElement`) that waste
CI time

These issues are tedious to catch manually and easy to miss — especially
across 4 platforms, 4 test types (unit, XAML, device, UI), and hundreds
of existing test patterns.

**Solution:** This skill automates the mechanical checks and guides the
agent through deeper analysis:

1. **Automated (script):** File categorization, convention compliance,
anti-pattern detection, AutomationId consistency, existing similar test
search, platform scope analysis
2. **Agent-guided (SKILL.md):** Fix coverage analysis, edge case gap
identification, test type recommendation (prefer unit > XAML > device >
UI), assertion quality review

**Real-world example:** Running against PR #34324 (Android Shell TabBar
fix), the skill:
- ✅ Correctly identified 1 fix file + 1 UI test + 1 HostApp page + 1
snapshot
- ⚠️ Flagged an inline `#if` platform directive (real convention
violation)
- ℹ️ Noted 3 HostApp AutomationIds not exercised by the test
(informational)
- ✅ Found existing Shell tests for cross-reference
- ✅ Identified this as Android-only based on fix file paths

**Quality bar:** This skill went through 3 rounds of multi-model review
(10 total reviews across Opus, GPT-5.1, Gemini, Sonnet 4.5) to catch
regex bugs, false positive/negative edge cases, and documentation
mismatches.

## Evaluation Criteria (9 checks)

| # | Criterion | What It Checks |
|---|-----------|---------------|
| 1 | **Fix Coverage** | Does the test exercise the actual code paths
changed by the fix? |
| 2 | **Edge Cases & Gaps** | Boundary conditions, null handling,
async/timing, repeated actions |
| 3 | **Test Type Appropriateness** | Could a lighter test type work?
(unit > XAML > device > UI) |
| 4 | **Convention Compliance** | Naming, attributes, base classes,
obsolete APIs |
| 5 | **Flakiness Risk** | Delays, missing WaitForElement, screenshot
hygiene |
| 6 | **Duplicate Coverage** | Does a similar test already exist? |
| 7 | **Platform Scope** | Does test coverage match platforms affected
by the fix? |
| 8 | **Assertion Quality** | Are assertions specific enough to catch
regressions? |
| 9 | **Fix-Test Alignment** | Do test and fix target the same code
paths? |

## Components

- **`SKILL.md`** — Evaluation criteria with decision trees, examples,
and structured report template
- **`Gather-TestContext.ps1`** — Automated convention checks,
anti-pattern detection, AutomationId consistency, platform scope
analysis
- **`copilot-instructions.md`** — Skill registration with trigger
phrases

## Usage

```bash
# Auto-detect PR context
pwsh .github/skills/evaluate-pr-tests/scripts/Gather-TestContext.ps1

# Or ask the agent
# "evaluate the tests in this PR"
# "are these tests good enough?"
# "review test quality for PR #XXXXX"
```

- Fixes #34139

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com>
Update Magick.NET-Q8-AnyCPU from 13.5.0 to 14.10.4 with all breaking
API changes resolved:

- MagickGeometry/MagickImage constructors now take uint for dimensions
- RePage() renamed to ResetPage()
- Width/Height changed from int to uint
- Compare() return type changed to IMagickImage<byte>
- Drawables class moved to ImageMagick.Drawing namespace
- ErrorMetric.Fuzz behavior changed; using RootMeanSquared to preserve
  existing comparison thresholds (see #34524 for follow-up)

Also adds using var for MagickImage disposal and guards against
negative dimensions before uint casts.

Note: ErrorMetric.Fuzz in v14 is significantly more sensitive than v13
and detects real screenshot drift that was previously invisible. A
follow-up issue (#34524) tracks switching back to Fuzz with regenerated
baselines.

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: mattleibow <1096616+mattleibow@users.noreply.github.com>
Co-authored-by: Matthew Leibowitz <mattleibow@live.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
<!-- 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

Removes the dead `OnlyAndroid` method from `BaseTemplateTests` and its 3
call sites in `AOTTemplateTest` and `SimpleTemplateTest`.

### Why this is dead code

`OnlyAndroid` calls `ReplaceInFile` searching for:
```
<TargetFrameworks>net10.0-android;net10.0-ios;net10.0-maccatalyst</TargetFrameworks>
```

But MAUI templates now use MSBuild conditions with `DOTNET_TFM-android`
placeholders — the static string above no longer exists in generated
projects. The method is a silent no-op on every call.

### Why remove it now

On `net11.0`, this method was already removed by PR #33576. When merging
`main → net11.0`, the call sites in `AOTTemplateTest.cs` (added by PR
#33756) cause CS0103 build errors since the method does not exist on
`net11.0`. Removing it from `main` prevents these merge conflicts going
forward.

### Changes

- **`BaseTemplateTests.cs`**: Removed `OnlyAndroid` method definition
- **`AOTTemplateTest.cs`**: Removed 2 call sites (`PublishNativeAOT`,
`PublishNativeAOTRootAllMauiAssemblies`)
- **`SimpleTemplateTest.cs`**: Removed 1 call site (`Build`)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Reset patterns:
- global.json
- NuGet.config
- eng/Version.Details.xml
- eng/Versions.props
- eng/common/*
# Conflicts:
#	src/Controls/src/Core/PublicAPI/net-android/PublicAPI.Unshipped.txt
#	src/Controls/src/Core/PublicAPI/net-ios/PublicAPI.Unshipped.txt
#	src/Controls/src/Core/PublicAPI/net-maccatalyst/PublicAPI.Unshipped.txt
#	src/Controls/src/Core/PublicAPI/net-tizen/PublicAPI.Unshipped.txt
#	src/Controls/src/Core/PublicAPI/net-windows/PublicAPI.Unshipped.txt
#	src/Controls/src/Core/PublicAPI/net/PublicAPI.Unshipped.txt
#	src/Controls/src/Core/PublicAPI/netstandard/PublicAPI.Unshipped.txt
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@PureWeen
Copy link
Copy Markdown
Member

/azp run maui-pr-uitests

@PureWeen
Copy link
Copy Markdown
Member

/azp run maui-pr-devicetests

@github-actions
Copy link
Copy Markdown
Contributor Author

github-actions bot commented Mar 18, 2026

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 34550

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 34550"

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

1 similar comment
@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

The merge brought main's Essentials.AI.Sample.csproj which references
separate version variables for Hosting, Workflows, and Generators packages.
net11.0 only had a single MicrosoftAgentsAIVersion. Add all four properties
with main's values (1.0.0-rc2 / preview.260225.1).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@PureWeen
Copy link
Copy Markdown
Member

/azp run maui-pr-uitests

@PureWeen
Copy link
Copy Markdown
Member

/azp run maui-pr-devicetests

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

1 similar comment
@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

@PureWeen
Copy link
Copy Markdown
Member

#34586

This is for the Known Build Issues
The AOT error on maui-pr will be fixed by this #34552

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.