Skip to content

Onboard to dotnet/arcade build system#7

Merged
jfversluis merged 39 commits into
mainfrom
arcade-onboarding-v2
Mar 19, 2026
Merged

Onboard to dotnet/arcade build system#7
jfversluis merged 39 commits into
mainfrom
arcade-onboarding-v2

Conversation

@rmarinho
Copy link
Copy Markdown
Member

Arcade Onboarding

Onboards this repository onto the dotnet/arcade build system using Arcade SDK 11.0.0-beta.26166.3.

What changed

File Change
global.json Added msbuild-sdks with Arcade SDK + tools.dotnet
Directory.Build.props Added Arcade Sdk.props import, package metadata, IsShipping=false default
Directory.Build.targets Added Arcade Sdk.targets import
eng/Versions.props Created — computed VersionPrefix (0.23.1), PreReleaseVersionLabel, all dependency versions
eng/Version.Details.xml Created — 6 product deps (maui, runtime) + 1 toolset dep (arcade)
eng/Publishing.props Created — V3 publishing
Directory.Packages.props Updated to reference version properties from eng/Versions.props (CPM kept active)
NuGet.config Added dotnet-tools feed + packageSourceMapping (prevents NU1507)
eng/common/ Copied 152 files from dotnet/arcade
eng/pipelines/devflow-official.yml Converted to arcade templates (templates-official/, 1ES, post-build)
eng/pipelines/templates/build-test-pack.yml Deleted (replaced by arcade templates)
4 csproj files Added IsShipping=true (Logging, Agent, Driver, CLI)
src/DevFlow/Version.props Converted to no-op (arcade owns versioning)
docs/arcade.md Created — arcade documentation

Shipping packages

  • Microsoft.Maui.DevFlow.Logging
  • Microsoft.Maui.DevFlow.Agent
  • Microsoft.Maui.DevFlow.Driver
  • Microsoft.Maui.DevFlow.CLI

All others are non-shipping.

Dependency flow (flowable via maestro)

Package Source repo
Microsoft.Maui.Controls dotnet/maui
Microsoft.AspNetCore.Components.WebView.Maui dotnet/maui
Microsoft.Extensions.Http dotnet/runtime
Microsoft.Extensions.Hosting dotnet/runtime
Microsoft.Extensions.Logging.Abstractions dotnet/runtime
System.Text.Json dotnet/runtime

Post-merge setup commands

After merging, run these commands to set up dependency flow:

# 1. Install darc CLI
./eng/common/darc-init.sh

# 2. Authenticate (opens browser)
darc authenticate

# 3. Set default channel for this repo
darc add-default-channel \
  --branch refs/heads/main \
  --repo https://github.com/dotnet/maui-labs \
  --channel ".NET 10 Dev"

# 4. Subscribe to Arcade SDK updates
darc add-subscription \
  --channel ".NET Eng - Latest" \
  --source-repo https://github.com/dotnet/arcade \
  --target-repo https://github.com/dotnet/maui-labs \
  --target-branch main \
  --update-frequency everyDay \
  --standard-automerge

# 5. Subscribe to MAUI updates
darc add-subscription \
  --channel ".NET 10.0.1xx SDK" \
  --source-repo https://github.com/dotnet/maui \
  --target-repo https://github.com/dotnet/maui-labs \
  --target-branch main \
  --update-frequency everyDay \
  --standard-automerge

# 6. Subscribe to Runtime updates
darc add-subscription \
  --channel ".NET 10" \
  --source-repo https://github.com/dotnet/runtime \
  --target-repo https://github.com/dotnet/maui-labs \
  --target-branch main \
  --update-frequency everyDay \
  --standard-automerge

# 7. Verify subscriptions
darc get-subscriptions --target-repo https://github.com/dotnet/maui-labs

Internal mirror setup

To enable official builds at dnceng/internal:

  1. Contact @dnceng to create dotnet-maui-labs repo at dev.azure.com/dnceng/internal/_git/dotnet-maui-labs
  2. PR to dnceng/internal/_git/dotnet-mirroring adding to dnceng-subscriptions.jsonc:
    "https://github.com/dotnet/maui-labs": {
      "fastForward": ["main", "release/.*"]
    }
  3. Create pipeline definitions:
    • dnceng-public/public: dotnet/maui-labs/maui-labs-ci
    • dnceng/internal: dotnet/maui-labs/maui-labs-official

- Add Arcade SDK (11.0.0-beta.26166.3) to global.json
- Import Sdk.props/Sdk.targets in Directory.Build.props/targets
- Create eng/Versions.props with computed VersionPrefix (0.23.1-preview)
- Create eng/Version.Details.xml with 6 product deps + 1 toolset dep
- Create eng/Publishing.props (V3 publishing)
- Update Directory.Packages.props to reference version properties (CPM kept)
- Add packageSourceMapping to NuGet.config (prevents NU1507)
- Add dotnet-tools feed to NuGet.config
- Copy eng/common/ (152 files) from dotnet/arcade
- Convert official pipeline to arcade templates (1ES + post-build)
- Remove custom build-test-pack.yml template
- Set IsShipping=true on Logging, Agent, Driver, CLI projects
- Convert src/DevFlow/Version.props to no-op (arcade owns versioning)
- Add docs/arcade.md

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings March 17, 2026 15:46
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Onboards the repository to the dotnet/arcade build system, shifting versioning, dependency flow, packaging, and official build pipeline behavior to Arcade/1ES templates and adding the shared eng/common infrastructure.

Changes:

  • Adds Arcade SDK wiring (global.json MSBuild SDK, Directory.Build.* imports) and centralizes version/dependency metadata in eng/Versions.props + eng/Version.Details.xml.
  • Converts the DevFlow official Azure DevOps pipeline to use Arcade 1ES templates and removes the repo-specific build/test/pack template.
  • Introduces (copied) Arcade eng/common/ scripts/templates and documents Arcade usage in docs/arcade.md.

Reviewed changes

Copilot reviewed 163 out of 163 changed files in this pull request and generated 14 comments.

Show a summary per file
File Description
src/DevFlow/Version.props Keep version import as no-op
src/DevFlow/Microsoft.Maui.DevFlow.Logging/Microsoft.Maui.DevFlow.Logging.csproj Mark package shipping
src/DevFlow/Microsoft.Maui.DevFlow.Driver/Microsoft.Maui.DevFlow.Driver.csproj Mark package shipping
src/DevFlow/Microsoft.Maui.DevFlow.CLI/Microsoft.Maui.DevFlow.CLI.csproj Mark tool package shipping
src/DevFlow/Microsoft.Maui.DevFlow.Agent/Microsoft.Maui.DevFlow.Agent.csproj Mark package shipping
global.json Pin Arcade SDK + tools dotnet
eng/pipelines/templates/build-test-pack.yml Remove repo-specific pipeline template
eng/pipelines/devflow-official.yml Switch to Arcade 1ES templates
eng/common/vmr-sync.ps1 Add VMR sync helper script
eng/common/templates/vmr-build-pr.yml Add VMR PR verification pipeline template
eng/common/templates/variables/pool-providers.yml Add pool provider selection vars
eng/common/templates/steps/vmr-sync.yml Add VMR sync steps template
eng/common/templates/steps/source-index-stage1-publish.yml Shim to core source index step
eng/common/templates/steps/source-build.yml Shim to core source-build step
eng/common/templates/steps/send-to-helix.yml Shim to core Helix step
eng/common/templates/steps/retain-build.yml Shim to core retention step
eng/common/templates/steps/publish-pipeline-artifacts.yml Non-1ES artifact publish logic
eng/common/templates/steps/publish-logs.yml Shim to core publish logs step
eng/common/templates/steps/publish-build-artifacts.yml Non-1ES build artifact publish logic
eng/common/templates/steps/get-federated-access-token.yml Shim to core token step
eng/common/templates/steps/get-delegation-sas.yml Shim to core SAS step
eng/common/templates/steps/generate-sbom.yml Shim to core SBOM step
eng/common/templates/steps/enable-internal-sources.yml Shim to core internal sources step
eng/common/templates/steps/enable-internal-runtimes.yml Shim to core internal runtimes step
eng/common/templates/steps/component-governance.yml Shim to core CG step
eng/common/templates/post-build/setup-maestro-vars.yml Shim to core post-build vars
eng/common/templates/post-build/post-build.yml Shim to core post-build stage
eng/common/templates/post-build/common-variables.yml Shim to core post-build vars
eng/common/templates/jobs/source-build.yml Shim to core source-build jobs
eng/common/templates/jobs/jobs.yml Shim to core job orchestrator
eng/common/templates/job/source-index-stage1.yml Shim to core source index job
eng/common/templates/job/source-build.yml Shim to core source-build job
eng/common/templates/job/publish-build-assets.yml Shim to core publish job
eng/common/templates/job/onelocbuild.yml Shim to core OneLocBuild job
eng/common/templates/job/job.yml Non-1ES job wrapper + publishing
eng/common/templates-official/variables/pool-providers.yml 1ES/internal pool provider vars
eng/common/templates-official/steps/source-index-stage1-publish.yml 1ES shim for core source index
eng/common/templates-official/steps/source-build.yml 1ES shim for core source-build
eng/common/templates-official/steps/send-to-helix.yml 1ES shim for core Helix step
eng/common/templates-official/steps/retain-build.yml 1ES shim for core retention step
eng/common/templates-official/steps/publish-pipeline-artifacts.yml 1ES artifact publish logic
eng/common/templates-official/steps/publish-logs.yml 1ES shim for core publish logs
eng/common/templates-official/steps/publish-build-artifacts.yml 1ES build artifact publish logic
eng/common/templates-official/steps/get-federated-access-token.yml 1ES shim for core token step
eng/common/templates-official/steps/get-delegation-sas.yml 1ES shim for core SAS step
eng/common/templates-official/steps/generate-sbom.yml 1ES shim for core SBOM step
eng/common/templates-official/steps/enable-internal-sources.yml 1ES shim for internal sources
eng/common/templates-official/steps/enable-internal-runtimes.yml 1ES shim for internal runtimes
eng/common/templates-official/steps/component-governance.yml 1ES shim for CG step
eng/common/templates-official/post-build/setup-maestro-vars.yml 1ES shim for post-build vars
eng/common/templates-official/post-build/post-build.yml 1ES shim for post-build stage
eng/common/templates-official/post-build/common-variables.yml 1ES shim for post-build vars
eng/common/templates-official/jobs/source-build.yml 1ES shim for source-build jobs
eng/common/templates-official/jobs/jobs.yml 1ES shim for job orchestrator
eng/common/templates-official/job/source-index-stage1.yml 1ES shim for source index job
eng/common/templates-official/job/source-build.yml 1ES shim for source-build job
eng/common/templates-official/job/publish-build-assets.yml 1ES shim for publish job
eng/common/templates-official/job/onelocbuild.yml 1ES shim for OneLocBuild job
eng/common/templates-official/job/job.yml 1ES job wrapper + outputs
eng/common/template-guidance.md Add template usage guidance
eng/common/sdk-task.sh Add Arcade SDK task runner (bash)
eng/common/sdk-task.ps1 Add Arcade SDK task runner (pwsh)
eng/common/retain-build.ps1 Add build retention script
eng/common/post-build/redact-logs.ps1 Add binlog redaction script
eng/common/post-build/publish-using-darc.ps1 Add darc publishing helper
eng/common/post-build/nuget-verification.ps1 Add NuGet package verification
eng/common/post-build/nuget-validation.ps1 Add NuGet validation wrapper
eng/common/post-build/check-channel-consistency.ps1 Add maestro channel validation
eng/common/pipeline-logging-functions.sh Add AzDO logging helpers (bash)
eng/common/native/install-tool.ps1 Add native tool installer (pwsh)
eng/common/native/install-dependencies.sh Add native deps install script
eng/common/native/install-cmake.sh Add cmake installer (bash)
eng/common/native/install-cmake-test.sh Add cmake-test installer (bash)
eng/common/native/init-os-and-arch.sh Add OS/arch detection
eng/common/native/init-distro-rid.sh Add distro RID detection
eng/common/native/init-compiler.sh Add compiler detection
eng/common/native/common-library.sh Add native install helper lib
eng/common/msbuild.sh Add msbuild wrapper (bash)
eng/common/msbuild.ps1 Add msbuild wrapper (pwsh)
eng/common/loc/P22DotNetHtmlLocalization.lss Add localization settings
eng/common/internal/Tools.csproj Add internal tools project
eng/common/internal/NuGet.config Add internal NuGet config
eng/common/internal/Directory.Build.props Add internal build props
eng/common/internal-feed-operations.sh Add internal feed auth helper (bash)
eng/common/internal-feed-operations.ps1 Add internal feed auth helper (pwsh)
eng/common/init-tools-native.cmd Add native tools cmd wrapper
eng/common/helixpublish.proj Add Helix publish project
eng/common/generate-sbom-prep.sh Add SBOM prep (bash)
eng/common/generate-sbom-prep.ps1 Add SBOM prep (pwsh)
eng/common/enable-cross-org-publishing.ps1 Add cross-org publishing vars
eng/common/dotnet.sh Add dotnet bootstrapper (bash)
eng/common/dotnet.ps1 Add dotnet bootstrapper (pwsh)
eng/common/dotnet.cmd Add dotnet bootstrapper (cmd)
eng/common/dotnet-install.sh Add dotnet install (bash)
eng/common/dotnet-install.ps1 Add dotnet install (pwsh)
eng/common/dotnet-install.cmd Add dotnet install (cmd)
eng/common/darc-init.sh Add darc init (bash)
eng/common/darc-init.ps1 Add darc init (pwsh)
eng/common/cross/tizen-fetch.sh Add Tizen rootfs fetch script
eng/common/cross/tizen-build-rootfs.sh Add Tizen rootfs build script
eng/common/cross/riscv64/tizen/tizen.patch Add Tizen riscv64 patch
eng/common/cross/build-android-rootfs.sh Add Android rootfs builder
eng/common/cross/armel/tizen/tizen.patch Add Tizen armel patch
eng/common/core-templates/variables/pool-providers.yml Core template redirect
eng/common/core-templates/steps/source-index-stage1-publish.yml Core source index publish logic
eng/common/core-templates/steps/source-build.yml Core source-build step logic
eng/common/core-templates/steps/send-to-helix.yml Core Helix step logic
eng/common/core-templates/steps/retain-build.yml Core retention step logic
eng/common/core-templates/steps/publish-pipeline-artifacts.yml Core publish artifacts redirect
eng/common/core-templates/steps/publish-logs.yml Core publish logs logic
eng/common/core-templates/steps/publish-build-artifacts.yml Core publish build artifacts redirect
eng/common/core-templates/steps/install-microbuild.yml Core MicroBuild install orchestration
eng/common/core-templates/steps/install-microbuild-impl.yml Core MicroBuild install impl
eng/common/core-templates/steps/get-federated-access-token.yml Core federated token logic
eng/common/core-templates/steps/get-delegation-sas.yml Core delegation SAS logic
eng/common/core-templates/steps/generate-sbom.yml Core SBOM generation logic
eng/common/core-templates/steps/enable-internal-sources.yml Core internal sources enablement
eng/common/core-templates/steps/enable-internal-runtimes.yml Core internal runtimes enablement
eng/common/core-templates/steps/component-governance.yml Core component governance logic
eng/common/core-templates/steps/cleanup-microbuild.yml Core MicroBuild cleanup logic
eng/common/core-templates/stages/renovate.yml Core Renovate stage template
eng/common/core-templates/post-build/setup-maestro-vars.yml Core maestro var setup
eng/common/core-templates/post-build/common-variables.yml Core post-build variable group
eng/common/core-templates/jobs/source-build.yml Core source-build jobs orchestration
eng/common/core-templates/jobs/jobs.yml Core jobs orchestration template
eng/common/core-templates/job/source-index-stage1.yml Core source index job
eng/common/core-templates/job/source-build.yml Core source-build job
eng/common/core-templates/job/onelocbuild.yml Core OneLocBuild job
eng/common/cibuild.sh Add CI build wrapper
eng/common/build.cmd Add build cmd wrapper
eng/common/README.md Add eng/common management notice
eng/common/PSScriptAnalyzerSettings.psd1 Add analyzer settings
eng/common/CIBuild.cmd Add CI build cmd wrapper
eng/common/BuildConfiguration/build-configuration.json Add build retry configuration
eng/Versions.props Add version + dependency properties
eng/Version.Details.xml Add maestro dependency manifest
eng/Publishing.props Add publishing version config
docs/arcade.md Document Arcade usage
NuGet.config Add dotnet-tools feed + source mapping
Directory.Packages.props Switch to version props from eng/Versions.props
Directory.Build.targets Import Arcade Sdk.targets
Directory.Build.props Import Arcade Sdk.props + packaging metadata

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Comment thread eng/common/vmr-sync.ps1
Comment on lines +87 to +90
if ((git -C $vmrDir diff --quiet) -eq $false) {
Fail "There are changes in the working tree of $vmrDir. Please commit or stash your changes"
exit 1
}
Comment on lines +154 to +160
local message="##vso[task.setvariable variable=$name;isSecret=$secret;isOutput=$is_multi_job_variable]$value"

if [[ "$as_output" == true ]]; then
$message
else
echo "$message"
fi
Comment on lines +14 to +27
echo "Getting 'installcredprovider.ps1' from 'https://github.com/microsoft/artifacts-credprovider'..."

local url="https://raw.githubusercontent.com/microsoft/artifacts-credprovider/master/helpers/installcredprovider.sh"

echo "Writing the contents of 'installcredprovider.ps1' locally..."
local installcredproviderPath="installcredprovider.sh"
if command -v curl > /dev/null; then
curl $url > "$installcredproviderPath"
else
wget -q -O "$installcredproviderPath" "$url"
fi

echo "Installing plugin..."
. "$installcredproviderPath"
Comment on lines +42 to +47
local nugetConfigPath="{$repo_root}NuGet.config"

if [ ! "$nugetConfigPath" ]; then
Write-PipelineTelemetryError -category 'Build' "NuGet.config file not found in repo's root!"
ExitWithExitCode 1
fi
Comment on lines +37 to +43
if (-Not("$env:USERPROFILE\.nuget\plugins\netcore")) {
Write-PipelineTelemetryError -Category 'Arcade' -Message 'CredProvider plugin was not installed correctly!'
ExitWithExitCode 1
}
else {
Write-Host 'CredProvider plugin was installed correctly!'
}

#### The `templateIs1ESManaged` parameter

The `templateIs1ESManaged` is available on most templates and affects which of the variants is used for nested templates. See [Development Notes](#development-notes) below for more information on the `templateIs1ESManaged1 parameter.
source-build.yml (shim)
post-build\
post-build.yml (shim)
common-variabls.yml (shim)
Comment on lines +101 to +103
- script:
git commit --allow-empty -am "Forward-flow $(Build.Repository.Name)"
displayName: Commit local VMR changes
Comment on lines +14 to +16
script: |
New-Item -ItemType Directory $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/
Move-Item -Path $(System.DefaultWorkingDirectory)/artifacts/log/Debug/* $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/
Comment on lines +182 to +186
exit 1
}
displayName: Sync ${{ assetName }} into (Windows)
condition: ne(variables['Agent.OS'], 'Windows_NT')
workingDirectory: $(Agent.BuildDirectory)/repo
rmarinho and others added 26 commits March 17, 2026 15:54
Automates darc installation, authentication, and subscription creation.
Run after merge: ./eng/setup-darc.sh

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove packageSourceMapping from NuGet.config (official builds inject
  internal feeds via SetupNugetSources that break the mapping)
- Add NoWarn NU1507 in Directory.Build.props as safety net
- Add 'publishPackages' boolean parameter to official pipeline
  (default: true, set to false to build without publishing)
- Gate post-build stage and DotNetPublishUsingPipelines on the parameter

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Updated via: darc update-dependencies --channel '.NET 10.0.1xx SDK'

- Microsoft.Maui.Controls: 10.0.31 → 10.0.50-ci.inflight.26166.4
- Microsoft.AspNetCore.Components.WebView.Maui: 10.0.31 → 10.0.50-ci.inflight.26166.4
- SHA: 32655b54fa9f3cb050c5c0d335b49ec01f031849

Runtime Extensions packages (Microsoft.Extensions.Http, Hosting, etc.)
are not individually flowing via maestro — they ship as part of the
shared framework. These should be tracked via the SDK channel or
pinned manually.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use the stable 10.0.41 release instead of CI prerelease version.
SHA: d15964ef4f0a6d0740b655ba7c6be9b96be8b187 (tag 10.0.41)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace $(_SignType) variable reference (requires pipeline variable
group) with hardcoded 'test' for initial onboarding. Can be changed
to $(_SignType) once the SDL_Settings variable group is configured.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Arcade SDK 11.0.0-beta requires System.Runtime v11.0.0.0 which is not
available on build agents running .NET 10 SDK, causing MSB1021 error
loading ArcadeLogging.dll.

Updated via: darc update-dependencies --channel '.NET 10 Eng'
SHA: e365cfcb58176841c2fb80d1a40926f394776970 (release/10.0)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove Microsoft.NET.Test.Sdk and xunit.runner.visualstudio from
  test project — .NET 10 SDK implicitly references these (NETSDK1023)
- Scope official build to src/**/*.csproj to exclude samples that
  require macos/maui-tizen workloads not available on Windows agents
  (NETSDK1147)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add dotnet workload install step for maui, macos, maui-tizen to fix
NETSDK1147 errors. Build the full solution instead of filtering to
src/ only.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The Arcade cibuild.cmd default project discovery globs all csproj files,
including samples/ which target net10.0-macos and require workloads not
installable on Windows. Scope the build to DevFlow.slnf via -projects flag.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Arcade SDK implicitly provides Microsoft.NET.Test.Sdk and
xunit.runner.visualstudio. Having PackageVersion entries for them
in Directory.Packages.props conflicts with CPM's implicit reference
rules, causing NU1009 on restore.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The .dotnet directory is created by Arcade's cibuild.cmd, which hasn't
run yet at the workload install step. Use system dotnet from PATH.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The workload install step runs before Arcade's cibuild.cmd which
bootstraps the SDK from global.json. The agent only has .NET 9.0
pre-installed. Use UseDotNet@2 task to install the correct SDK
before running workload install.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Disable SignAssembly: MAUI and Platform.Maui NuGet packages are not
  strong-named, causing CS8002 when Arcade enables strong naming by default
- Install Android SDK API 36 via InstallAndroidDependencies target before
  build to resolve XA5207

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- LICENSE: Match Arcade's expected MIT template format (no indentation,
  'The MIT License (MIT)' header, trailing period)
- Directory.Build.props: Remove UseMaui gate on SupportedOSPlatformVersion
  because UseMaui is set in project files which evaluate after
  Directory.Build.props, causing Android min to default to 21 instead of 24
  (fixes CA1416)
- BlazorWebViewDebugService.Windows.cs: Null-forgiving operator on
  CoreWebView2 after initialization success check (fixes CS8604)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Arcade's eng/common/build.ps1 defaults warnAsError=true, promoting
warnings to errors in CI. Fix the underlying code issues:

- DevFlowAgentService.cs: Replace obsolete SKFilterQuality with
  SKSamplingOptions.Default (CS0618)
- DevFlowAgentService.cs: Use TryGetValue instead of GetValueOrDefault
  to avoid Dictionary<string,string> vs IReadOnlyDictionary<string,string?>
  nullability mismatch (CS8620)
- NetworkMonitorTui.cs: Change State<string> to State<string?> to match
  TextArea/TextBlock Binding<string?> parameters (CS8620)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- AgentIntegrationTests.cs: Add null-forgiving operators on .Children
  chains after NotNull assertions (CS8604/CS8602)
- DevFlowAgentService.cs (macOS): Fix PerformClick(null) to pass sender,
  use pattern match for Selector, null-forgiving on Target (CS8625/CS8604)
- NativeFrameStatsProviderFactory.cs: Null-forgiving on Choreographer.Instance
  which is always non-null on UI thread (CS8602)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The pattern match 'is Selector action' requires the ObjCRuntime namespace
to be imported. This was introduced in the previous nullable fix commit.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Arcade SDK doesn't support SymbolPackageFormat=snupkg and manages symbol
packaging through its own infrastructure. Also remove IncludeSymbols
since Arcade controls this via DebugType=embedded (already set).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
eng/Common.props already includes the repo-root README in all packable
projects. The per-project include caused NU5118 (duplicate file).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Arcade's Sign.proj errors on .js files that aren't explicitly configured.
Set CertificateName=None for .js extension, same as dotnet/aspire does.
These are Blazor static web assets (chobitsu.js, lib.module.js), not
Windows Script Host files.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Arcade SDK defaults IsPackable=false for all projects. Only the Blazor
csproj had it set, resulting in a single nupkg in artifacts. Add it to
all 8 library projects (Tests remains IsPackable=false).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Arcade's XUnit v2 runner produces .xml (xunit format) but not .trx
(vstest format). When testResultsFormat is unset, the template tries
both publishers — the trx one finds nothing and warns. Setting it to
'xunit' publishes only the format that exists.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Arcade's signing validation (SIGN004) errors when 3rd-party DLLs
bundled inside NuGet packages would be signed with Microsoft's
MicrosoftDotNet500 certificate. These must be explicitly mapped to
the 3PartySHA2 certificate instead.

Affected DLLs: Interop.UIAutomationClient, ModelContextProtocol,
Spectre.Console, Wcwidth, Websocket.Client, XenoAtom.Ansi/Terminal.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jfversluis and others added 2 commits March 19, 2026 08:59
Fresh start under the Microsoft.Maui.DevFlow namespace. The 0.x
prefix signals experimental/pre-release, matching the maui-labs
mission. Arcade will append preview suffixes automatically.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
GitHub auto-discovers CODE_OF_CONDUCT.md, CONTRIBUTING.md, and
SECURITY.md from the .github/ directory. This follows the pattern
used by dotnet/runtime and dotnet/aspire.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jfversluis and others added 10 commits March 19, 2026 09:23
Without IsShipping=true, Arcade puts packages in NonShipping/
which won't be published to public feeds. Agent.Core, Agent.Gtk,
Blazor, and Blazor.Gtk were missing this flag.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Real signing requires the repo to be registered with the ESRP
signing service. Reverting to test until that onboarding is done.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use Arcade's cibuild.cmd/cibuild.sh instead of raw dotnet commands.
This ensures identical behavior:
- Warnings treated as errors (catches nullable/obsolete issues)
- Same Arcade build conventions (IsPackable, restore, pack)
- Same workloads (added maui-tizen)
- Android SDK install step added
- Test results from Arcade's XUnit runner (artifacts/TestResults/)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Arcade's Build.proj resolves the --projects path relative to the
repo root but needs an absolute path. Use %CD% (Windows) and
$(pwd) (macOS) to provide the full path.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- actions/checkout v4 → v6
- actions/setup-dotnet v4 → v5
- actions/upload-artifact v4 → v7

Node.js 20 actions are deprecated and will stop working June 2026.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Version.props was a no-op shim kept for compatibility during the
Arcade migration. All versioning is handled by eng/Versions.props.
Removed the file and all project imports.

Updated docs/arcade.md to list all 8 shipping packages.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
These directories are Arcade SDK local tool/package caches that were
accidentally committed. Adding them to .gitignore and removing from
tracking. The previous 5800+ file commit was causing GitHub Actions
path filters to not evaluate src/DevFlow/** paths (GitHub has a limit
on files evaluated for path-based triggers).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@jfversluis jfversluis merged commit c717e60 into main Mar 19, 2026
3 checks passed
@jfversluis jfversluis deleted the arcade-onboarding-v2 branch March 19, 2026 09:52
Redth added a commit that referenced this pull request Mar 29, 2026
v0.2.0: Handler parity, collection virtualization, font icons, animations & ControlTemplate
@jfversluis jfversluis added this to the v0.1.0-preview.1 milestone May 6, 2026
mattleibow added a commit that referenced this pull request May 12, 2026
Critical/High fixes:
- #1: Use namespace+class for unique hint names (prevents AddSource crash
  when two pages share the same simple class name)
- #2: CrossFileResolver uses FQN lookup + ambiguity detection for
  duplicate simple names across namespaces
- #3: CollectionView conditional rendering fixed — no more [[double brackets]],
  uses unified annotation list builder
- #4: Root ContentPage walks children directly, preventing SemanticProperties
  on root from swallowing the entire page
- #5: Visibility conditions on layout containers now propagate as
  condition group wrappers ('When [visible when X = true]:')
- #6: Property-element content (ContentPage.Content, ScrollView.Content)
  no longer dropped — unknown property elements are transparent by default,
  only known non-visual ones (Resources, Triggers, etc.) are suppressed
- #7: Shell routes stored in UiElement for Shell page markdown

Medium fixes:
- #8: Promoted containers (Border with Description) now walk children too,
  preserving actionable descendants like buttons
- #9: Unresolved user controls kept as placeholders (previously dropped),
  important for third-party controls with SemanticProperties
- #10: DataTrigger with IsVisible=False setter now correctly inverted
  to 'hidden when Property = Value' instead of 'visible when'
- #11: IsVisible=False elements skipped entirely — not reachable by screen
  readers, should not appear in accessibility-first index
- #12: Aggregate namespace validated as legal C# before emitting
- #13: Always use global:: for page references in aggregate, even for
  no-namespace pages
- #14: BindingRegex now requires whitespace after 'Binding' keyword,
  preventing false matches like {BindingSource}
- #15: CrossFileResolver uses in-progress set for cycle detection,
  preventing partial cache on indirect A→B→A cycles

Low fixes:
- #16: Dead emptyViewChildren code block removed
- #17: Removed unused TemplateVariants from dead CollectionView code

104 exact-match tests, all passing.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

3 participants