Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
9732411
Adopt Uno.Sdk tooling
MartinZikmund Oct 9, 2026
8ab5b3d
Target Uno Platform 7.0 / .NET 10 for WinUI 3
MartinZikmund Oct 9, 2026
369b866
Only use the interface-era DependencyObject constraint on Uno 5
MartinZikmund Oct 9, 2026
60c2e06
Don't pass a null easing function to InsertExpressionKeyFrame
MartinZikmund Oct 9, 2026
5b0c854
Bump tooling to Uno 7
MartinZikmund Oct 9, 2026
a1d0446
Update to Uno.Sdk 7.0.0-dev.89
MartinZikmund Oct 27, 2026
6d61bbe
Suppress IL2111 on Type-typed dependency properties
MartinZikmund Oct 27, 2026
0f61353
Skip ApiInformation checks for APIs always present on WinUI 3
MartinZikmund Oct 27, 2026
a82ea50
Use the Uno 7 build of Uno.Microsoft.Xaml.Behaviors.Interactivity.WinUI
MartinZikmund Oct 27, 2026
c5caff9
Enable RichSuggestBox on Uno
MartinZikmund Oct 27, 2026
6bf8e82
Bump tooling
MartinZikmund Oct 27, 2026
f372a91
Bump tooling
MartinZikmund Oct 27, 2026
2c6e448
Keep RichSuggestBox off Uno 5 Apple targets
MartinZikmund Nov 3, 2026
d7abb95
CI: Build the SampleGen tests in the Uno.Sdk head job
MartinZikmund Nov 3, 2026
14ede83
Bump tooling
MartinZikmund Nov 3, 2026
771ad1e
Build RichSuggestBox on Uno 5 Apple targets again
MartinZikmund Nov 3, 2026
34cdbef
Bump tooling
MartinZikmund Nov 3, 2026
f452c4a
Only hide Description and Paste on Uno 5 Apple targets
MartinZikmund Nov 3, 2026
0e23974
Bump tooling
MartinZikmund Nov 3, 2026
efc93fe
Bump tooling
MartinZikmund Nov 3, 2026
c62d50d
chore: bump Uno.Sdk to 7.0.0-dev.132 and tooling
MartinZikmund Nov 4, 2026
0ba6a5a
Drop the IL2087/IL2111 suppressions around DependencyProperty.Register
MartinZikmund Nov 3, 2026
ee4316d
chore: bump Uno.Sdk to stable 7.0.5 and tooling
MartinZikmund Nov 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 52 additions & 22 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ on:
merge_group:

env:
DOTNET_VERSION: '9.0.310' # Only used by jobs that cannot access global.json (no checkout/artifact-only jobs)
DOTNET_VERSION: '10.0.401' # Only used by jobs that cannot access global.json (no checkout/artifact-only jobs)
ENABLE_DIAGNOSTICS: true
MSBUILD_VERBOSITY: normal
#COREHOST_TRACE: 1
Expand Down Expand Up @@ -88,14 +88,26 @@ jobs:
fail-fast: false # prevent one matrix pipeline from being cancelled if one fails, we want them all to run to completion.
matrix:
winui: [2, 3]
multitarget: ['uwp', 'wasdk', 'wasm', 'wpf', 'linuxgtk', 'macos', 'ios', 'android']
multitarget: ['uwp', 'wasdk', 'wasm', 'wpf', 'win32', 'linux', 'macos', 'ios', 'android']
exclude:
# WinUI 2 not supported on wasdk
- winui: 2
multitarget: wasdk
# WinUI 3 not supported on uwp
- winui: 3
multitarget: uwp
# wpf is the Uno 5 Skia WPF head, which Uno 6 replaced with win32
- winui: 3
multitarget: wpf
# win32 is the Uno 6 Skia desktop head, which has no Uno 5 equivalent
- winui: 2
multitarget: win32
include:
# On WinUI 3 the Uno.Sdk head replaces the classic Wasm head, so it rides on the
# existing wasm job as a flag rather than a fake entry in the multitarget axis.
- winui: 3
multitarget: wasm
unoSdkHead: true

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
Expand Down Expand Up @@ -133,9 +145,9 @@ jobs:
run: dotnet tool restore

- name: Run Uno Check to Install Dependencies
if: ${{ matrix.multitarget != 'wasdk' && matrix.multitarget != 'linuxgtk' && matrix.multitarget != 'wpf' }}
if: ${{ matrix.multitarget != 'wasdk' && matrix.multitarget != 'linux' && matrix.multitarget != 'wpf' && matrix.multitarget != 'win32' && !matrix.unoSdkHead }}
run: >
dotnet tool run uno-check
dotnet tool run uno-check
--ci
--target ${{ matrix.multitarget }}
--fix
Expand All @@ -146,18 +158,26 @@ jobs:
--skip vswin
--verbose

# The Uno.Sdk head builds desktop/browserwasm/android (iOS is filtered on
# Windows). Install the matching workloads directly instead of uno-check.
- name: Install .NET workloads (Uno.Sdk head)
if: ${{ matrix.unoSdkHead }}
run: dotnet workload install wasm-tools android ios maui

- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
with:
vs-version: '[17.9,)'

# Generate full solution with all projects (sample gallery heads, components, tests)
# The Uno.Sdk head also covers Windows desktop, so it asks for win32 alongside wasm.
- name: Generate solution with ${{ matrix.multitarget }} gallery, components and tests
working-directory: ./
run: powershell -version 5.1 -command "./tooling/GenerateAllSolution.ps1 -MultiTargets ${{ matrix.multitarget }} ${{ env.ENABLE_DIAGNOSTICS == 'true' && ' -UseDiagnostics' || '' }} -WinUIMajorVersion ${{ matrix.winui }}" -ErrorAction Stop
run: powershell -version 5.1 -command "./tooling/GenerateAllSolution.ps1 -MultiTargets ${{ matrix.multitarget }}${{ matrix.unoSdkHead && ',win32 -IncludeUnoSdkHead' || '' }} ${{ env.ENABLE_DIAGNOSTICS == 'true' && ' -UseDiagnostics' || '' }} -WinUIMajorVersion ${{ matrix.winui }}" -ErrorAction Stop

# Build solution
- name: MSBuild
if: ${{ !matrix.unoSdkHead }}
run: >
msbuild.exe /restore /nowarn:MSB4011
/p:Configuration=Release
Expand All @@ -166,6 +186,15 @@ jobs:
/v:${{ env.MSBUILD_VERBOSITY }}
CommunityToolkit.AllComponents.sln

# The Uno.Sdk head is a single project covering desktop/browserwasm/android
# (iOS is filtered on Windows); build it directly with dotnet.
- name: Build Uno.Sdk head
if: ${{ matrix.unoSdkHead }}
run: |
dotnet build tooling/ProjectHeads/AllComponents/Uno/CommunityToolkit.App.Uno.csproj -p:Configuration=Release ${{ env.ENABLE_DIAGNOSTICS == 'true' && '/bl' || '' }}
if ($LASTEXITCODE) { exit $LASTEXITCODE }
dotnet build tooling/CommunityToolkit.Tooling.SampleGen.Tests/CommunityToolkit.Tooling.SampleGen.Tests.csproj -p:Configuration=Release

# Run tests
- name: Setup VSTest Path
uses: darenm/setup-vstest@3a16d909a1f3bbc65b52f8270d475d905e7d3e44
Expand Down Expand Up @@ -435,7 +464,7 @@ jobs:
--api-key ${{ secrets.NUGET_PACKAGE_PUSH_TOKEN }}
--skip-duplicate

wasm-linux:
uno-linux:
runs-on: ubuntu-latest

steps:
Expand All @@ -450,6 +479,12 @@ jobs:
with:
global-json-file: global.json

# iOS/maccatalyst aren't installable on Linux (Uno.Sdk filters those TFMs
# there). android + wasm-tools are both required: even a single-TFM build
# restores all of the head's TargetFrameworks, validating net10.0-android.
- name: Install .NET workloads
run: dotnet workload install android wasm-tools

- name: .NET Info (if diagnostics)
if: ${{ env.ENABLE_DIAGNOSTICS == 'true' }}
run: dotnet --info
Expand All @@ -458,31 +493,26 @@ jobs:
- name: Restore dotnet tools
run: dotnet tool restore

- name: Enable WASM TargetFrameworks
shell: pwsh
working-directory: ./${{ env.MULTI_TARGET_DIRECTORY }}
run: ./UseTargetFrameworks.ps1 wasm

# Generate the full solution with the Uno.Sdk gallery head, components and tests
- name: Generate solution
shell: pwsh
working-directory: ./
run: ./tooling/GenerateAllSolution.ps1${{ env.ENABLE_DIAGNOSTICS == 'true' && ' -UseDiagnostics' || '' }}
run: ./tooling/GenerateAllSolution.ps1 -MultiTargets wasm,linux -IncludeUnoSdkHead -WinUIMajorVersion 3${{ env.ENABLE_DIAGNOSTICS == 'true' && ' -UseDiagnostics' || '' }}

- name: Install ninja for WASM native dependencies
run: sudo apt-get install ninja-build
- name: Build Uno head (browserwasm)
shell: pwsh
working-directory: ./
run: dotnet build tooling/ProjectHeads/AllComponents/Uno/CommunityToolkit.App.Uno.csproj -f net10.0-browserwasm -p:Configuration=Release

# Issue with Comment Links currently, see: https://github.com/mrlacey/CommentLinks/issues/38
# See launch.json configuration file for analogous command we're emulating here to build LINK: ../../.vscode/launch.json:CommunityToolkit.App.Wasm.csproj
- name: dotnet build
working-directory: ./${{ env.HEADS_DIRECTORY }}/AllComponents/Wasm/
run: dotnet build /r /bl -v:${{ env.MSBUILD_VERBOSITY }}

# TODO: Do we want to run tests here? Can we do that on linux easily?
- name: Build Uno head (desktop)
shell: pwsh
working-directory: ./
run: dotnet build tooling/ProjectHeads/AllComponents/Uno/CommunityToolkit.App.Uno.csproj -f net10.0-desktop -p:Configuration=Release

- name: Artifact - Diagnostic Logs
uses: actions/upload-artifact@v4
if: ${{ (env.ENABLE_DIAGNOSTICS == 'true' || env.COREHOST_TRACE != '') && always() }}
with:
name: linux-logs
name: uno-linux-logs
path: ./**/*.*log

Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,14 @@ public static void InsertExpressionKeyFrame(this KeyFrameAnimation keyframeAnima
{
expressionNode.ClearReferenceInfo();

keyframeAnimation.InsertExpressionKeyFrame(normalizedProgressKey, expressionNode.ToExpressionString(), easing);
if (easing is null)
{
keyframeAnimation.InsertExpressionKeyFrame(normalizedProgressKey, expressionNode.ToExpressionString());
}
else
{
keyframeAnimation.InsertExpressionKeyFrame(normalizedProgressKey, expressionNode.ToExpressionString(), easing);
}

expressionNode.SetAllParameters(keyframeAnimation);
}
Expand Down
2 changes: 1 addition & 1 deletion components/Animations/src/MultiTarget.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
MultiTarget is a custom property that indicates which target a project is designed to be built for / run on.
Used to create project references, generate solution files, enable/disable TargetFrameworks, and build nuget packages.
-->
<MultiTarget>uwp;wasdk;wpf;wasm;linuxgtk;macos;ios;android;</MultiTarget>
<MultiTarget>uwp;wasdk;wpf;win32;wasm;linux;macos;ios;android;</MultiTarget>
</PropertyGroup>
</Project>
2 changes: 1 addition & 1 deletion components/Behaviors/src/Dependencies.props
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@

<!-- WinUI 3 / Uno -->
<ItemGroup Condition="'$(IsUno)' == 'true' AND '$(WinUIMajorVersion)' == '3'">
<PackageReference Include="Uno.Microsoft.Xaml.Behaviors.Interactivity.WinUI" Version="3.0.3" />
<PackageReference Include="Uno.Microsoft.Xaml.Behaviors.Interactivity.WinUI" Version="4.0.0-dev.10" />

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Should we depend on a dev build here? Is there no new stable release of this?

</ItemGroup>
</Project>
3 changes: 3 additions & 0 deletions components/Behaviors/src/Headers/HeaderBehaviorBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,10 @@ private void ScrollViewer_GotFocus(object sender, RoutedEventArgs e)
}
else
{
// Obsolete on WinUI 3/Uno, but required as a fallback where XamlRoot is unavailable (e.g. UWP).
#pragma warning disable CS0618
focusedElement = FocusManager.GetFocusedElement()!;
#pragma warning restore CS0618
}

// To prevent Popups (Flyouts...) from triggering the autoscroll, we check if the focused element has a valid parent.
Expand Down
2 changes: 1 addition & 1 deletion components/Behaviors/src/MultiTarget.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
MultiTarget is a custom property that indicates which target a project is designed to be built for / run on.
Used to create project references, generate solution files, enable/disable TargetFrameworks, and build nuget packages.
-->
<MultiTarget>uwp;wasdk;wpf;wasm;linuxgtk;macos;ios;android;</MultiTarget>
<MultiTarget>uwp;wasdk;wpf;win32;wasm;linux;macos;ios;android;</MultiTarget>
</PropertyGroup>
</Project>
2 changes: 1 addition & 1 deletion components/Collections/src/MultiTarget.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
MultiTarget is a custom property that indicates which target a project is designed to be built for / run on.
Used to create project references, generate solution files, enable/disable TargetFrameworks, and build nuget packages.
-->
<MultiTarget>uwp;wasdk;wpf;wasm;linuxgtk;macos;ios;android;</MultiTarget>
<MultiTarget>uwp;wasdk;wpf;win32;wasm;linux;macos;ios;android;</MultiTarget>
</PropertyGroup>
</Project>
2 changes: 1 addition & 1 deletion components/ColorPicker/src/MultiTarget.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
MultiTarget is a custom property that indicates which target a project is designed to be built for / run on.
Used to create project references, generate solution files, enable/disable TargetFrameworks, and build nuget packages.
-->
<MultiTarget>uwp;wasdk;wpf;wasm;linuxgtk;macos;ios;android;</MultiTarget>
<MultiTarget>uwp;wasdk;wpf;win32;wasm;linux;macos;ios;android;</MultiTarget>
</PropertyGroup>
</Project>
2 changes: 1 addition & 1 deletion components/Converters/src/MultiTarget.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
MultiTarget is a custom property that indicates which target a project is designed to be built for / run on.
Used to create project references, generate solution files, enable/disable TargetFrameworks, and build nuget packages.
-->
<MultiTarget>uwp;wasdk;wpf;wasm;linuxgtk;macos;ios;android;</MultiTarget>
<MultiTarget>uwp;wasdk;wpf;win32;wasm;linux;macos;ios;android;</MultiTarget>
</PropertyGroup>
</Project>
7 changes: 7 additions & 0 deletions components/DeveloperTools/src/FocusTracker/FocusTracker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,11 @@ protected override void OnApplyTemplate()
private void Start()
{
// Get currently focused control once when we start
#if WINUI3
if (XamlRoot != null)
#else
if (Windows.Foundation.Metadata.ApiInformation.IsPropertyPresent("Windows.UI.Xaml.UIElement", "XamlRoot") && XamlRoot != null)
#endif
{
if (FocusManager.GetFocusedElement(XamlRoot) is FrameworkElement element)
{
Expand All @@ -83,7 +87,10 @@ private void Start()
}
else
{
// Obsolete on WinUI 3/Uno, but required as a fallback where XamlRoot is unavailable (e.g. UWP).
#pragma warning disable CS0618
if (FocusManager.GetFocusedElement() is FrameworkElement element)
#pragma warning restore CS0618
{
FocusOnControl(element);
}
Expand Down
2 changes: 1 addition & 1 deletion components/DeveloperTools/src/MultiTarget.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
MultiTarget is a custom property that indicates which target a project is designed to be built for / run on.
Used to create project references, generate solution files, enable/disable TargetFrameworks, and build nuget packages.
-->
<MultiTarget>uwp;wasdk;wpf;wasm;linuxgtk;macos;ios;android;</MultiTarget>
<MultiTarget>uwp;wasdk;wpf;win32;wasm;linux;macos;ios;android;</MultiTarget>
</PropertyGroup>
</Project>
2 changes: 1 addition & 1 deletion components/Extensions/src/MultiTarget.props
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@
MultiTarget is a custom property that indicates which target a project is designed to be built for / run on.
Used to create project references, generate solution files, enable/disable TargetFrameworks, and build nuget packages.
-->
<MultiTarget>uwp;wasdk;wpf;wasm;linuxgtk;macos;ios;android;</MultiTarget>
<MultiTarget>uwp;wasdk;wpf;win32;wasm;linux;macos;ios;android;</MultiTarget>
</PropertyGroup>
</Project>
Loading
Loading