diff --git a/.github/skills/find-reviewable-pr/scripts/query-reviewable-prs.ps1 b/.github/skills/find-reviewable-pr/scripts/query-reviewable-prs.ps1 index c9fa57bcb647..dfa6b3d4e4d9 100644 --- a/.github/skills/find-reviewable-pr/scripts/query-reviewable-prs.ps1 +++ b/.github/skills/find-reviewable-pr/scripts/query-reviewable-prs.ps1 @@ -1219,14 +1219,18 @@ function Format-Markdown-Output { $title = $rawTitle.Replace('|', '\|') $link = "[#$($pr.Number)]($($pr.URL))" $turnCol = "$($pr.TurnIcon) $($pr.TurnDetail)" + # Wrap author handles in backticks so GitHub renders them as inline code + # rather than as @mentions — this issue is for MAUI team triage tracking, + # not a notification firehose to every PR author each day. + $author = "``@$($pr.Author)``" if ($showMilestone -and $showTurn) { - [void]$md.AppendLine("| $link | $title | @$($pr.Author) | $($pr.Milestone) | $turnCol | $($pr.Platform) | $($pr.Age)d |") + [void]$md.AppendLine("| $link | $title | $author | $($pr.Milestone) | $turnCol | $($pr.Platform) | $($pr.Age)d |") } elseif ($showMilestone) { - [void]$md.AppendLine("| $link | $title | @$($pr.Author) | $($pr.Milestone) | $($pr.Platform) | $($pr.Age)d | $($pr.Updated)d ago |") + [void]$md.AppendLine("| $link | $title | $author | $($pr.Milestone) | $($pr.Platform) | $($pr.Age)d | $($pr.Updated)d ago |") } elseif ($showTurn) { - [void]$md.AppendLine("| $link | $title | @$($pr.Author) | $turnCol | $($pr.Platform) | $($pr.Age)d |") + [void]$md.AppendLine("| $link | $title | $author | $turnCol | $($pr.Platform) | $($pr.Age)d |") } else { - [void]$md.AppendLine("| $link | $title | @$($pr.Author) | $($pr.Platform) | $($pr.Age)d | $($pr.Updated)d ago |") + [void]$md.AppendLine("| $link | $title | $author | $($pr.Platform) | $($pr.Age)d | $($pr.Updated)d ago |") } } [void]$md.AppendLine("") diff --git a/.github/workflows/pr-review-queue.yml b/.github/workflows/pr-review-queue.yml index f41baf1872a5..4f3f500fa614 100644 --- a/.github/workflows/pr-review-queue.yml +++ b/.github/workflows/pr-review-queue.yml @@ -20,7 +20,9 @@ concurrency: jobs: generate-report: runs-on: ubuntu-latest - if: github.event_name != 'pull_request' + # Guard: only run in dotnet/maui — prevents the scheduled run from firing + # in forks and pinging fork owners with duplicate queue issues. + if: github.repository_owner == 'dotnet' && github.event_name != 'pull_request' permissions: contents: read issues: write @@ -86,7 +88,7 @@ jobs: # Dry-run on PRs: validate the script works without creating issues validate: runs-on: ubuntu-latest - if: github.event_name == 'pull_request' + if: github.repository_owner == 'dotnet' && github.event_name == 'pull_request' permissions: contents: read pull-requests: read diff --git a/eng/pipelines/ci-copilot.yml b/eng/pipelines/ci-copilot.yml index ebce013b91ea..8ee93ed66321 100644 --- a/eng/pipelines/ci-copilot.yml +++ b/eng/pipelines/ci-copilot.yml @@ -124,7 +124,10 @@ stages: skipAndroidPlatformApis: true onlyAndroidPlatformDefaultApis: true skipAndroidEmulatorImages: ${{ ne(parameters.Platform, 'android') }} - skipAndroidCreateAvds: ${{ ne(parameters.Platform, 'android') }} + # AVD is created by the inline 'Create AVD and boot Android Emulator' script below + # with specific config (playstore image variant, partition shrink, ADB key pre-auth) + # that ProvisionAndroidSdkAvdCreateAvds doesn't replicate. + skipAndroidCreateAvds: true androidEmulatorApiLevel: '30' skipSimulatorSetup: ${{ or(eq(parameters.Platform, 'android'), eq(parameters.Platform, 'windows'), eq(parameters.Platform, 'catalyst')) }} skipCertificates: true @@ -871,7 +874,10 @@ stages: skipAndroidPlatformApis: true onlyAndroidPlatformDefaultApis: true skipAndroidEmulatorImages: ${{ ne(parameters.Platform, 'android') }} - skipAndroidCreateAvds: ${{ ne(parameters.Platform, 'android') }} + # AVD is created by the inline 'Create AVD and boot Android Emulator' script below + # with specific config (playstore image variant, partition shrink, ADB key pre-auth) + # that ProvisionAndroidSdkAvdCreateAvds doesn't replicate. + skipAndroidCreateAvds: true androidEmulatorApiLevel: '30' skipSimulatorSetup: ${{ or(eq(parameters.Platform, 'android'), eq(parameters.Platform, 'windows'), eq(parameters.Platform, 'catalyst')) }} skipCertificates: true diff --git a/eng/pipelines/common/variables.yml b/eng/pipelines/common/variables.yml index 8dee742a2525..d878b0ddb12c 100644 --- a/eng/pipelines/common/variables.yml +++ b/eng/pipelines/common/variables.yml @@ -15,6 +15,15 @@ variables: value: 26.0.1 - name: POWERSHELL_VERSION value: 7.4.0 +# Workaround for PowerShell/PowerShell#20802 (open since Nov 2023): +# pwsh 7.4.x intermittently aborts at startup on macOS with +# 'Call to procargs failed with errno 5' +# because AttemptExecPwshLogin() races on sysctl(KERN_PROCARGS2). +# Setting __PWSH_LOGIN_CHECKED makes pwsh short-circuit the login-shell +# detection that triggers the racy syscall (see Program.cs in PowerShell repo). +# Hit on internal dnceng dotnet-maui build 2990586 (release/11.0.1xx-preview5). +- name: __PWSH_LOGIN_CHECKED + value: '1' # Localization variables - name: LocBranchPrefix value: 'loc-hb' diff --git a/src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/PlatformDrawableStyle.java b/src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/PlatformDrawableStyle.java index 7e0d03d7ba64..c205543144ae 100644 --- a/src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/PlatformDrawableStyle.java +++ b/src/Core/AndroidNative/maui/src/main/java/com/microsoft/maui/PlatformDrawableStyle.java @@ -60,6 +60,10 @@ private Shader getShader(int width, int height) { return null; } + if (width == 0 && height == 0) { + return null; + } + if (width != this.shaderWidth || height != this.shaderHeight) { this.shaderWidth = width; this.shaderHeight = height; diff --git a/src/Core/tests/DeviceTests/Graphics/GraphicsTests.Android.cs b/src/Core/tests/DeviceTests/Graphics/GraphicsTests.Android.cs index e4bfd5208df7..1ed2212bf5bc 100644 --- a/src/Core/tests/DeviceTests/Graphics/GraphicsTests.Android.cs +++ b/src/Core/tests/DeviceTests/Graphics/GraphicsTests.Android.cs @@ -1,4 +1,5 @@ using Microsoft.Maui.DeviceTests.Stubs; +using Microsoft.Maui.Graphics; using Xunit; namespace Microsoft.Maui.DeviceTests; @@ -6,6 +7,28 @@ namespace Microsoft.Maui.DeviceTests; [Category(TestCategory.Graphics)] public partial class GraphicsTests : TestBase { + [Fact] + public void RadialGradientWithZeroSizeDoesNotThrow() + { + var paint = new RadialGradientPaintStub(Colors.Red, Colors.Blue) + { + Center = new Point(0.5, 0.5), + Radius = 0.5 + }; + + var context = global::Android.App.Application.Context; + using var drawable = new Microsoft.Maui.Graphics.MauiDrawable(context); + + drawable.SetBounds(0, 0, 0, 0); + drawable.SetBackground(paint); + + using var bitmap = global::Android.Graphics.Bitmap.CreateBitmap(1, 1, global::Android.Graphics.Bitmap.Config.Argb8888!); + using var canvas = new global::Android.Graphics.Canvas(bitmap); + + var ex = Record.Exception(() => drawable.Draw(canvas)); + Assert.Null(ex); + } + [Theory] [InlineData(0, 0, 0, 0)] [InlineData(10, 10, 100, 100)]