Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
70b2573
Migrate Microsoft.Maui.Essentials.AI from dotnet/maui into maui-labs
mattleibow Apr 28, 2026
ad8574c
Add EssentialsAI job and publish stage to devflow-official.yml
mattleibow Apr 28, 2026
c76adda
Fix build: Controls.Maps package, platform entry points, strip Catego…
mattleibow Apr 28, 2026
3a647e5
Address PR review comments
mattleibow Apr 28, 2026
c7a470b
Merge branch 'main' into mattleibow/ai-migration-plan
mattleibow Apr 29, 2026
341dac6
Remove direct nuget.org feed from NuGet.config
mattleibow Apr 29, 2026
94a8648
Enable cross-platform Windows TFM restore and remove nuget.org
mattleibow Apr 29, 2026
d39547c
Retry CI - packages should be mirrored now
mattleibow Apr 29, 2026
998ad5f
Retry CI - Maps package now mirrored
mattleibow Apr 29, 2026
a161b10
Retry CI - Microsoft.Maui.Maps now mirrored
mattleibow Apr 29, 2026
42fe5aa
Select Xcode 26 for EssentialsAI CI build
mattleibow Apr 29, 2026
0afb5e7
Use Xcode 26.3 for EssentialsAI CI
mattleibow Apr 29, 2026
785cc44
Fix sample build: conditional Windows TFM and duplicate splash screen
mattleibow Apr 29, 2026
2279b97
Suppress CA1416 in EssentialsAI library
mattleibow Apr 29, 2026
663adc3
Suppress CA1416 in device tests project
mattleibow Apr 29, 2026
b7a0450
Fix duplicate dotnet_bot.png bundle resource in device tests
mattleibow Apr 29, 2026
e5fbaed
Add Apple native artifact flow for EssentialsAI CI
mattleibow Apr 30, 2026
237c907
Eliminate macOS job duplication via dynamic matrix
mattleibow Apr 30, 2026
8dfe708
Eliminate Windows step duplication with dynamic needs
mattleibow Apr 30, 2026
03c841d
Merge branch 'main' into mattleibow/ai-migration-plan
mattleibow Apr 30, 2026
7696aa6
Reset _build.yml to main
mattleibow Apr 30, 2026
e8a7f24
Custom EssentialsAI CI with sequential macOS→Windows flow
mattleibow Apr 30, 2026
447b0a9
Eliminate duplication: add pre-build-artifact input to _build.yml
mattleibow Apr 30, 2026
5b23d74
Use JSON array for pre-build-artifacts input
mattleibow Apr 30, 2026
a78e655
Simplify pre-build-artifact to plain string
mattleibow Apr 30, 2026
def9d3a
Trigger CI workflows
mattleibow Apr 30, 2026
faaab46
Address review findings and rename sample project
mattleibow Apr 30, 2026
c149a3b
Fix benchmark build: remove unused EssentialsAISample.Models using
mattleibow Apr 30, 2026
cc3103a
Pack product README instead of repo-root README
mattleibow Apr 30, 2026
f4140b9
Add NuGet consumer README, move dev docs to CONTRIBUTING
mattleibow Apr 30, 2026
80ac06d
Merge branch 'main' into mattleibow/ai-migration-plan
mattleibow Apr 30, 2026
a31202b
Merge remote-tracking branch 'origin/main' into mattleibow/ai-migrati…
Copilot May 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
38 changes: 36 additions & 2 deletions .github/workflows/_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,21 @@ on:
type: string
default: ''
description: 'Shell command to install native dependencies (e.g. apt-get for GTK4)'
xcode-version:
required: false
type: string
default: ''
description: 'Xcode version to select on macOS (e.g. "26.0.1"). Empty uses runner default.'
pre-build-artifact:
required: false
type: string
default: ''
description: 'Artifact name to download into artifacts/bin/ before building. Used to inject pre-built native artifacts (e.g. Apple .resources.zip) from a prior job.'
android-project:
required: false
type: string
default: 'src/DevFlow/Microsoft.Maui.DevFlow.Agent/Microsoft.Maui.DevFlow.Agent.csproj'
description: 'Project path for InstallAndroidDependencies target. Must target net10.0-android.'

env:
CI_PACKAGE_VERSION_SUFFIX: ci.${{ github.run_number }}.${{ github.run_attempt }}
Expand All @@ -46,6 +61,17 @@ jobs:
steps:
- uses: actions/checkout@v6

- name: Download pre-build artifact
if: inputs.pre-build-artifact != ''
uses: actions/download-artifact@v8
Comment thread
mattleibow marked this conversation as resolved.
with:
name: ${{ inputs.pre-build-artifact }}
path: artifacts/bin

- name: Select Xcode
if: inputs.xcode-version != '' && runner.os == 'macOS'
run: sudo xcode-select -s /Applications/Xcode_${{ inputs.xcode-version }}.app/Contents/Developer

- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
Expand All @@ -61,12 +87,12 @@ jobs:

- name: Install Android SDK dependencies (Windows)
if: inputs.install-workloads && matrix.os == 'windows-latest'
run: dotnet build -t:InstallAndroidDependencies -f net10.0-android -p:AndroidSdkDirectory="%ANDROID_HOME%" -p:AcceptAndroidSDKLicenses=true src\DevFlow\Microsoft.Maui.DevFlow.Agent\Microsoft.Maui.DevFlow.Agent.csproj
run: dotnet build -t:InstallAndroidDependencies -f net10.0-android -p:AndroidSdkDirectory="%ANDROID_HOME%" -p:AcceptAndroidSDKLicenses=true ${{ inputs.android-project }}
shell: cmd

- name: Install Android SDK dependencies (macOS)
if: inputs.install-workloads && matrix.os == 'macos-latest'
run: dotnet build -t:InstallAndroidDependencies -f net10.0-android -p:AndroidSdkDirectory="$ANDROID_HOME" -p:AcceptAndroidSDKLicenses=true src/DevFlow/Microsoft.Maui.DevFlow.Agent/Microsoft.Maui.DevFlow.Agent.csproj
run: dotnet build -t:InstallAndroidDependencies -f net10.0-android -p:AndroidSdkDirectory="$ANDROID_HOME" -p:AcceptAndroidSDKLicenses=true ${{ inputs.android-project }}

- name: Build, Test and Pack (Windows)
if: matrix.os == 'windows-latest'
Expand Down Expand Up @@ -192,3 +218,11 @@ jobs:
name: packages-${{ inputs.project-name }}-${{ matrix.os }}
path: artifacts/packages/**/*.nupkg
if-no-files-found: error

- name: Upload native Apple artifacts
if: inputs.pack && runner.os == 'macOS'
uses: actions/upload-artifact@v7
with:
name: native-apple-${{ inputs.project-name }}
path: artifacts/bin/**/Release/**/*.resources.zip
if-no-files-found: ignore
56 changes: 56 additions & 0 deletions .github/workflows/ci-essentialsai.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: CI - EssentialsAI

on:
push:
branches: [main]
paths:
- 'src/AI/**'
- 'tests/AI/**'
- 'samples/EssentialsAISample/**'
- 'eng/**'
- 'Directory.Build.props'
- 'Directory.Build.targets'
- 'Directory.Packages.props'
- 'global.json'
- 'NuGet.config'
pull_request:
types: [opened, synchronize, reopened, edited]
branches: [main]
paths:
- 'src/AI/**'
- 'tests/AI/**'
- 'samples/EssentialsAISample/**'
- 'eng/**'
- 'Directory.Build.props'
- 'Directory.Build.targets'
- 'Directory.Packages.props'
- 'global.json'
- 'NuGet.config'

jobs:
# Step 1: Build on macOS — compiles Swift xcframeworks, produces .resources.zip,
# and uploads them as native-apple-essentialsai artifact via _build.yml.
build-macos:
uses: ./.github/workflows/_build.yml
with:
project-path: src/AI/EssentialsAI.slnf
project-name: essentialsai
Comment thread
mattleibow marked this conversation as resolved.
os: '["macos-latest"]'
run-tests: true
pack: true
xcode-version: '26.3'
Comment thread
mattleibow marked this conversation as resolved.
android-project: src/AI/Microsoft.Maui.Essentials.AI/Microsoft.Maui.Essentials.AI.csproj

# Step 2: Build on Windows — downloads native .resources.zip from macOS build
# via pre-build-artifact so AppleBindings.targets includes them during pack.
build-windows:
needs: build-macos
uses: ./.github/workflows/_build.yml
with:
project-path: src/AI/EssentialsAI.slnf
project-name: essentialsai
os: '["windows-latest"]'
run-tests: true
pack: true
pre-build-artifact: native-apple-essentialsai
android-project: src/AI/Microsoft.Maui.Essentials.AI/Microsoft.Maui.Essentials.AI.csproj
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
*.userosscache
*.sln.docstates
*.env
*.lscache

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
Expand Down
2 changes: 2 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
<PackageProjectUrl>https://github.com/dotnet/maui-labs</PackageProjectUrl>
<RepositoryUrl>https://github.com/dotnet/maui-labs</RepositoryUrl>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<!-- Allow restoring/building Windows TFMs on non-Windows hosts (macOS CI runners) -->
<EnableWindowsTargeting>true</EnableWindowsTargeting>
<!-- NU1507: official builds inject internal feeds via SetupNugetSources that aren't in packageSourceMapping -->
<NoWarn>$(NoWarn);NU1507</NoWarn>
<DebugType>embedded</DebugType>
Expand Down
33 changes: 33 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,19 @@
<PackageVersion Include="Microsoft.Maui.Controls" Version="$(MicrosoftMauiControlsVersion)" />
<PackageVersion Include="Microsoft.Maui.Controls.Compatibility" Version="$(MicrosoftMauiControlsCompatibilityVersion)" />
<PackageVersion Include="Microsoft.Maui.Essentials" Version="$(MicrosoftMauiEssentialsVersion)" />
<PackageVersion Include="Microsoft.Maui.Controls.Maps" Version="$(MicrosoftMauiControlsMapsVersion)" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebView.Maui" Version="$(MicrosoftAspNetCoreComponentsWebViewMauiVersion)" />
</ItemGroup>

<!-- Microsoft Extensions (versions from eng/Versions.props, flowing via maestro) -->
<ItemGroup Label="Extensions">
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsConfigurationVersion)" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(MicrosoftExtensionsDependencyInjectionVersion)" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="$(MicrosoftExtensionsHostingVersion)" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="$(MicrosoftExtensionsHttpVersion)" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="$(MicrosoftExtensionsHostingVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsLoggingAbstractionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="$(MicrosoftExtensionsLoggingVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Debug" Version="$(MicrosoftExtensionsLoggingDebugVersion)" />
</ItemGroup>

Expand Down Expand Up @@ -55,10 +60,38 @@
<PackageVersion Include="GirCore.GdkPixbuf-2.0" Version="0.7.0" />
</ItemGroup>

<!-- EssentialsAI dependencies -->
<ItemGroup Label="EssentialsAI">
<PackageVersion Include="Microsoft.Extensions.AI.Abstractions" Version="$(MicrosoftExtensionsAIAbstractionsVersion)" />
<PackageVersion Include="Microsoft.Extensions.AI" Version="$(MicrosoftExtensionsAIVersion)" />
<!-- Sample app: Microsoft Agents AI -->
<PackageVersion Include="Microsoft.Agents.AI" Version="$(MicrosoftAgentsAIVersion)" />
<PackageVersion Include="Microsoft.Agents.AI.Hosting" Version="$(MicrosoftAgentsAIHostingVersion)" />
<PackageVersion Include="Microsoft.Agents.AI.Workflows" Version="$(MicrosoftAgentsAIWorkflowsVersion)" />
<PackageVersion Include="Microsoft.Agents.AI.Workflows.Generators" Version="$(MicrosoftAgentsAIWorkflowsGeneratorsVersion)" />
<!-- Sample app: additional packages (pinned) -->
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.0" />
<PackageVersion Include="Markdig" Version="0.31.0" />
<PackageVersion Include="Microsoft.Extensions.AI.OpenAI" Version="10.0.0-preview.1.25560.10" />
Comment thread
mattleibow marked this conversation as resolved.
<PackageVersion Include="OpenAI" Version="2.6.0" />
<!-- Unit tests -->
<PackageVersion Include="NSubstitute" Version="5.3.0" />
<!-- Benchmarks -->
<PackageVersion Include="BenchmarkDotNet" Version="0.13.10" />
<!-- Device test runner (OSS) -->
<PackageVersion Include="DeviceRunners.UITesting.Maui" Version="$(DeviceRunnersVersion)" />
<PackageVersion Include="DeviceRunners.UITesting.Xunit" Version="$(DeviceRunnersVersion)" />
<PackageVersion Include="DeviceRunners.VisualRunners.Xunit" Version="$(DeviceRunnersVersion)" />
<PackageVersion Include="DeviceRunners.VisualRunners.Maui" Version="$(DeviceRunnersVersion)" />
<PackageVersion Include="DeviceRunners.XHarness.Xunit" Version="$(DeviceRunnersVersion)" />
<PackageVersion Include="DeviceRunners.XHarness.Maui" Version="$(DeviceRunnersVersion)" />
</ItemGroup>

<!-- Testing (Microsoft.NET.Test.Sdk and xunit.runner.visualstudio are
implicitly provided by the Arcade SDK — do not define PackageVersion for them) -->
<ItemGroup Label="Testing">
<PackageVersion Include="xunit" Version="$(XunitVersion)" />
<PackageVersion Include="xunit.runner.utility" Version="$(XunitVersion)" />
<PackageVersion Include="coverlet.collector" Version="$(CoverletCollectorVersion)" />
<PackageVersion Include="Microsoft.OpenApi" Version="$(MicrosoftOpenApiVersion)" />
<PackageVersion Include="YamlDotNet" Version="$(YamlDotNetVersion)" />
Expand Down
9 changes: 9 additions & 0 deletions MauiLabs.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,12 @@
<Project Path="samples/DevFlow.Sample.Linux/DevFlow.Sample.Linux.csproj" />
<Project Path="samples/DevFlow.Sample.MacOS/DevFlow.Sample.MacOS.csproj" />
<Project Path="samples/DevFlow.Sample/DevFlow.Sample.csproj" />
<Project Path="samples/EssentialsAISample/EssentialsAISample.csproj" />
</Folder>
<Folder Name="/src/" />
<Folder Name="/src/AI/">
<Project Path="src/AI/Microsoft.Maui.Essentials.AI/Microsoft.Maui.Essentials.AI.csproj" />
</Folder>
<Folder Name="/src/Comet/">
<Project Path="src/Comet/src/Comet.SourceGenerator/Comet.SourceGenerator.csproj" />
<Project Path="src/Comet/src/Comet/Comet.csproj" />
Expand Down Expand Up @@ -41,5 +45,10 @@
<Project Path="src/DevFlow/Microsoft.Maui.DevFlow.Tests/Microsoft.Maui.DevFlow.Tests.csproj" />
</Folder>
<Folder Name="/tests/" />
<Folder Name="/tests/AI/">
<Project Path="tests/AI/Microsoft.Maui.Essentials.AI.Benchmarks/Microsoft.Maui.Essentials.AI.Benchmarks.csproj" />
<Project Path="tests/AI/Microsoft.Maui.Essentials.AI.DeviceTests/Microsoft.Maui.Essentials.AI.DeviceTests.csproj" />
<Project Path="tests/AI/Microsoft.Maui.Essentials.AI.UnitTests/Microsoft.Maui.Essentials.AI.UnitTests.csproj" />
</Folder>
<Folder Name="/tests/DevFlow/" />
</Solution>
1 change: 1 addition & 0 deletions NuGet.config
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<add key="dotnet-eng" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-eng/nuget/v3/index.json" protocolVersion="3" />
<add key="dotnet10" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10/nuget/v3/index.json" protocolVersion="3" />
<add key="dotnet11" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet11/nuget/v3/index.json" protocolVersion="3" />

Comment thread
mattleibow marked this conversation as resolved.
</packageSources>
<disabledPackageSources>
<clear />
Expand Down
Loading
Loading