Onboard to dotnet/arcade build system#7
Merged
Conversation
- 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>
Contributor
There was a problem hiding this comment.
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 indocs/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 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 |
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>
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>
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
approved these changes
Mar 19, 2026
Redth
added a commit
that referenced
this pull request
Mar 29, 2026
v0.2.0: Handler parity, collection virtualization, font icons, animations & ControlTemplate
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>
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.
Arcade Onboarding
Onboards this repository onto the dotnet/arcade build system using Arcade SDK
11.0.0-beta.26166.3.What changed
global.jsonmsbuild-sdkswith Arcade SDK +tools.dotnetDirectory.Build.propsSdk.propsimport, package metadata,IsShipping=falsedefaultDirectory.Build.targetsSdk.targetsimporteng/Versions.propseng/Version.Details.xmleng/Publishing.propsDirectory.Packages.propseng/Versions.props(CPM kept active)NuGet.configdotnet-toolsfeed +packageSourceMapping(prevents NU1507)eng/common/eng/pipelines/devflow-official.ymltemplates-official/, 1ES, post-build)eng/pipelines/templates/build-test-pack.ymlIsShipping=true(Logging, Agent, Driver, CLI)src/DevFlow/Version.propsdocs/arcade.mdShipping 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)
Post-merge setup commands
After merging, run these commands to set up dependency flow:
Internal mirror setup
To enable official builds at
dnceng/internal:dotnet-maui-labsrepo atdev.azure.com/dnceng/internal/_git/dotnet-maui-labsdnceng/internal/_git/dotnet-mirroringadding todnceng-subscriptions.jsonc:dnceng-public/public:dotnet/maui-labs/maui-labs-cidnceng/internal:dotnet/maui-labs/maui-labs-official