From 58cdd5026af7ee1f818af10ccae7672c6d0b005c Mon Sep 17 00:00:00 2001 From: Arlo Date: Thu, 17 Aug 2023 17:43:46 -0500 Subject: [PATCH] Upgrade to .NET 7, enable WASM optimizations (#173) * Fixed build errors caused by .NET 7 upgrade * Updated tooling pointer Update tooling to latest upgrade/net7 * Bump uno-check * Skip vswinworkloads * Update Build Script to support Pull Request Packages Again Cleaned up some logic for diagnostic builds as well so we have a single build command * Update tooling to use maccatalyst * Fix for net7.0-maccatalyst, use dotnet 7.0.100 * Update tooling, additional net7-mobile error suppression * Update tooling: More error suppression for net7 mobile * Fixed invalid symbol references in comments * Update editorconfig * Update editorconfig * Update logic for Versioning of Build and ensure to pass to Packing Script * Use net7.0-android33.0 instead of net7.0-android * Fix and un-suppress CS1574 errors * Remove suppression of CS1587 * Update tooling pointer * Fixed remaining build errors * Update tooling to latest main * Suppress CS1587 * Move platfiorm conditionals to using statements * Fix issue with XML comment for StackedNotificationsBehavior 2023-08-17T20:08:53.7233918Z 5>D:\a\Windows\Windows\components\Behaviors\src\Notification\StackedNotificationsBehavior.cs(16,70): error CS1574: XML comment has cref attribute 'InfoBar' that could not be resolved --------- Co-authored-by: michael-hawker <24302614+michael-hawker@users.noreply.github.com> --- .config/dotnet-tools.json | 2 +- .editorconfig | 2 +- .github/workflows/build.yml | 26 +++++++++---------- .../src/ConnectedAnimations/Connected.cs | 10 +++---- .../Animations/src/Enums/FrameworkLayer.cs | 14 +++++++--- .../Animations/src/Enums/VisualProperty.cs | 6 +++++ .../AmbientLightReferenceNode.cs | 2 +- .../CustomAnimation{TValue,TKeyFrame}.cs | 4 +++ .../Animations/src/Xaml/AnimationSet.cs | 8 +++++- .../StackedNotificationsBehavior.cs | 2 +- .../AdvancedCollectionViewSample.xaml.cs | 2 +- ...IncrementalLoadingCollectionSample.xaml.cs | 6 ++--- .../src/FileSizeToFriendlyStringConverter.cs | 2 +- .../FrameworkElementExtensions.ActualSize.cs | 4 +-- .../FrameworkElementExtensions.Mouse.cs | 6 ++--- .../src/Element/UIElementExtensions.cs | 2 +- .../src/Markup/SymbolIconExtension.cs | 2 +- .../src/Markup/SymbolIconSourceExtension.cs | 2 +- .../src/Shadows/AttachedShadowBase.cs | 2 +- .../Extensions/src/Shadows/IAttachedShadow.cs | 2 +- .../samples/CameraHelperSample.xaml.cs | 5 ++-- .../Primitives/src/WrapPanel/StretchChild.cs | 2 +- components/Sizers/src/SizerBase.cs | 2 +- global.json | 2 +- tooling | 2 +- 25 files changed, 72 insertions(+), 47 deletions(-) diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 98537666..78a89568 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "uno.check": { - "version": "1.10.0", + "version": "1.13.0", "commands": [ "uno-check" ] diff --git a/.editorconfig b/.editorconfig index 21a44161..d0c059e1 100644 --- a/.editorconfig +++ b/.editorconfig @@ -434,4 +434,4 @@ csharp_style_prefer_extended_property_pattern = true:suggestion dotnet_diagnostic.IDE0073.severity = warning # Uno platform exposes IDisposable on Storyboard publicly when it should be internal. Ignore this. -dotnet_code_quality.CA1001.excluded_type_names_with_derived_types = T:Windows.UI.Xaml.Media.Animation.Storyboard +dotnet_code_quality.CA1001.excluded_type_names_with_derived_types = T:Windows.UI.Xaml.Media.Animation.Storyboard \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e7079d4c..58b4b300 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,8 +17,9 @@ on: merge_group: env: - DOTNET_VERSION: ${{ '7.0.x' }} + DOTNET_VERSION: ${{ '7.0.100' }} ENABLE_DIAGNOSTICS: true + MSBUILD_VERBOSITY: normal #COREHOST_TRACE: 1 COREHOST_TRACEFILE: corehosttrace.log MULTI_TARGET_DIRECTORY: tooling/MultiTarget @@ -65,6 +66,7 @@ jobs: # faux-ternary expression to select which platforms to build for each platform vs. duplicating step below. TARGET_PLATFORMS: ${{ matrix.platform != 'WinUI3' && 'all' || 'all-uwp' }} TEST_PLATFORM: ${{ matrix.platform != 'WinUI3' && 'UWP' || 'WinAppSdk' }} + VERSION_PROPERTY: ${{ github.ref == 'refs/heads/main' && format('-p:PreviewVersion=build.{0}', github.run_number) || format('-p:PreviewVersion=pull-{0}.{1}', github.event.number, github.run_number) }} # Steps represent a sequence of tasks that will be executed as part of the job steps: @@ -104,7 +106,7 @@ jobs: run: dotnet tool restore - name: Run Uno Check to Install Dependencies - run: dotnet tool run uno-check --ci --fix --non-interactive --skip wsl --skip androidemulator --verbose + run: dotnet tool run uno-check --ci --fix --non-interactive --skip wsl --skip androidemulator --skip vswinworkloads --verbose - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.3.1 @@ -122,27 +124,25 @@ jobs: run: powershell -version 5.1 -command "./UseUnoWinUI.ps1 3" -ErrorAction Stop if: ${{ matrix.platform == 'WinUI3' }} - - name: MSBuild (With diagnostics) - if: ${{ env.ENABLE_DIAGNOSTICS == 'true' }} - run: msbuild.exe CommunityToolkit.AllComponents.sln /restore /nowarn:MSB4011 -p:Configuration=Release -m /bl -v:diag - - name: MSBuild - if: ${{ env.ENABLE_DIAGNOSTICS == 'false' }} - run: msbuild.exe CommunityToolkit.AllComponents.sln /restore /nowarn:MSB4011 -p:Configuration=Release -m + run: msbuild.exe CommunityToolkit.AllComponents.sln /restore /nowarn:MSB4011 -p:Configuration=Release -m ${{ env.VERSION_PROPERTY }} ${{ env.ENABLE_DIAGNOSTICS == 'true' && '/bl' || '' }} -v:${{ env.MSBUILD_VERBOSITY }} # Build All Packages - name: pack experiments working-directory: ./tooling/Scripts/ - run: ./PackEachExperiment.ps1 all + run: ./PackEachExperiment.ps1 -extraBuildProperties "${{ env.VERSION_PROPERTY }}" # Push Packages to our DevOps Artifacts Feed (see nuget.config) - - name: Add source + - name: Add source (main) if: ${{ github.ref == 'refs/heads/main' }} run: dotnet nuget update source MainLatest --username dummy --password ${{ secrets.DEVOPS_PACKAGE_PUSH_TOKEN }} + - name: Add source (pull requests) + if: ${{ github.ref != 'refs/heads/main' }} + run: dotnet nuget add source https://pkgs.dev.azure.com/dotnet/CommunityToolkit/_packaging/CommunityToolkit-PullRequests/nuget/v3/index.json --name PullRequests --username dummy --password ${{ secrets.DEVOPS_PACKAGE_PUSH_TOKEN }} + - name: Push packages - if: ${{ github.ref == 'refs/heads/main' }} - run: dotnet nuget push "**/*.nupkg" --api-key dummy --source MainLatest --skip-duplicate + run: dotnet nuget push "**/*.nupkg" --api-key dummy --source ${{ github.ref == 'refs/heads/main' && 'MainLatest' || 'PullRequests' }} --skip-duplicate # Run tests - name: Setup VSTest Path @@ -241,7 +241,7 @@ jobs: # 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 + run: dotnet build /r /bl -v:${{ env.MSBUILD_VERBOSITY }} # TODO: Do we want to run tests here? Can we do that on linux easily? diff --git a/components/Animations/src/ConnectedAnimations/Connected.cs b/components/Animations/src/ConnectedAnimations/Connected.cs index 8075233c..903c116c 100644 --- a/components/Animations/src/ConnectedAnimations/Connected.cs +++ b/components/Animations/src/ConnectedAnimations/Connected.cs @@ -53,7 +53,7 @@ public static void SetAnchorElement(DependencyObject obj, UIElement value) /// /// Gets the connected animation key associated with the ListViewBase item being animated /// - /// The + /// The /// The connected animation key public static string GetListItemKey(DependencyObject obj) { @@ -61,9 +61,9 @@ public static string GetListItemKey(DependencyObject obj) } /// - /// Sets the connected animation key for the item being animated + /// Sets the connected animation key for the item being animated /// - /// The + /// The /// The connected animation key public static void SetListItemKey(DependencyObject obj, string value) { @@ -73,7 +73,7 @@ public static void SetListItemKey(DependencyObject obj, string value) /// /// Gets the name of the element in the that is animated /// - /// The + /// The /// The name of the element being animated public static string GetListItemElementName(DependencyObject obj) { @@ -83,7 +83,7 @@ public static string GetListItemElementName(DependencyObject obj) /// /// Sets the name of the element in the that is animated /// - /// The + /// The /// The name of the element to animate public static void SetListItemElementName(DependencyObject obj, string value) { diff --git a/components/Animations/src/Enums/FrameworkLayer.cs b/components/Animations/src/Enums/FrameworkLayer.cs index 44af3d43..108c2aa0 100644 --- a/components/Animations/src/Enums/FrameworkLayer.cs +++ b/components/Animations/src/Enums/FrameworkLayer.cs @@ -2,6 +2,14 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +#if WINUI2 +using Composition = Windows.UI.Composition; +using Animation = Windows.UI.Xaml.Media.Animation; +#elif WINUI3 +using Composition = Microsoft.UI.Composition; +using Animation = Microsoft.UI.Xaml.Media.Animation; +#endif + namespace CommunityToolkit.WinUI.Animations; /// @@ -10,12 +18,12 @@ namespace CommunityToolkit.WinUI.Animations; public enum FrameworkLayer { /// - /// Indicates the APIs. + /// Indicates the APIs. /// Composition, - + /// - /// Indicates the APIs. + /// Indicates the APIs. /// Xaml } diff --git a/components/Animations/src/Enums/VisualProperty.cs b/components/Animations/src/Enums/VisualProperty.cs index 47c53753..b7273a25 100644 --- a/components/Animations/src/Enums/VisualProperty.cs +++ b/components/Animations/src/Enums/VisualProperty.cs @@ -4,6 +4,12 @@ namespace CommunityToolkit.WinUI.Animations; +#if WINUI2 +using Windows.UI.Composition; +#else +using Microsoft.UI.Composition; +#endif + /// /// Indicates a property of a object. /// diff --git a/components/Animations/src/Expressions/ReferenceNodes/AmbientLightReferenceNode.cs b/components/Animations/src/Expressions/ReferenceNodes/AmbientLightReferenceNode.cs index 4481c925..57d8b193 100644 --- a/components/Animations/src/Expressions/ReferenceNodes/AmbientLightReferenceNode.cs +++ b/components/Animations/src/Expressions/ReferenceNodes/AmbientLightReferenceNode.cs @@ -13,7 +13,7 @@ namespace CommunityToolkit.WinUI.Animations.Expressions; /// /// Class AmbientLightReferenceNode. This class cannot be inherited. /// -/// +/// public sealed class AmbientLightReferenceNode : ReferenceNode { /// diff --git a/components/Animations/src/Xaml/Abstract/CustomAnimation{TValue,TKeyFrame}.cs b/components/Animations/src/Xaml/Abstract/CustomAnimation{TValue,TKeyFrame}.cs index dde31d2b..201a8865 100644 --- a/components/Animations/src/Xaml/Abstract/CustomAnimation{TValue,TKeyFrame}.cs +++ b/components/Animations/src/Xaml/Abstract/CustomAnimation{TValue,TKeyFrame}.cs @@ -19,6 +19,9 @@ public abstract class CustomAnimation : ImplicitAnimation public string? Target { get; set; } + +// Suppression required for net7-android. The #if compilation conditionals are preventing the compiler from interpreting it correctly. +#pragma warning disable CS1587 // XML comment is not placed on a valid language element /// /// Gets or sets the target framework layer for the animation. This is only supported /// for a set of animation types (see the docs for more on this). Furthermore, this is @@ -31,6 +34,7 @@ public abstract class CustomAnimation : ImplicitAnimation. /// public FrameworkLayer Layer { get; set; } = FrameworkLayer.Xaml; +#pragma warning restore CS1587 // XML comment is not placed on a valid language element #endif /// diff --git a/components/Animations/src/Xaml/AnimationSet.cs b/components/Animations/src/Xaml/AnimationSet.cs index 0c1035ed..1c717ca2 100644 --- a/components/Animations/src/Xaml/AnimationSet.cs +++ b/components/Animations/src/Xaml/AnimationSet.cs @@ -5,11 +5,17 @@ using System.Diagnostics.Contracts; using System.Runtime.CompilerServices; +#if WINUI2 +using Windows.UI.Xaml.Media.Animation; +#else +using Microsoft.UI.Xaml.Media.Animation; +#endif + namespace CommunityToolkit.WinUI.Animations; /// /// A collection of animations that can be grouped together. This type represents a composite animation -/// (such as ) that can be executed on a given element. +/// (such as ) that can be executed on a given element. /// public sealed class AnimationSet : DependencyObjectCollection { diff --git a/components/Behaviors/src/Notification/StackedNotificationsBehavior.cs b/components/Behaviors/src/Notification/StackedNotificationsBehavior.cs index 8b18a399..34c92d39 100644 --- a/components/Behaviors/src/Notification/StackedNotificationsBehavior.cs +++ b/components/Behaviors/src/Notification/StackedNotificationsBehavior.cs @@ -13,7 +13,7 @@ namespace CommunityToolkit.WinUI.Behaviors; /// -/// A behavior to add the stacked notification support to . +/// A behavior to add the stacked notification support to . /// public class StackedNotificationsBehavior : BehaviorBase { diff --git a/components/Collections/samples/AdvancedCollectionViewSample.xaml.cs b/components/Collections/samples/AdvancedCollectionViewSample.xaml.cs index 58be8d94..118531cd 100644 --- a/components/Collections/samples/AdvancedCollectionViewSample.xaml.cs +++ b/components/Collections/samples/AdvancedCollectionViewSample.xaml.cs @@ -61,7 +61,7 @@ private void Add_Click(object sender, RoutedEventArgs e) } /// - /// A sample class used to show how to use the interface. + /// A sample class used to show how to use the interface. /// public class Person { diff --git a/components/Collections/samples/IncrementalLoadingCollectionSample.xaml.cs b/components/Collections/samples/IncrementalLoadingCollectionSample.xaml.cs index be392d7d..3366f461 100644 --- a/components/Collections/samples/IncrementalLoadingCollectionSample.xaml.cs +++ b/components/Collections/samples/IncrementalLoadingCollectionSample.xaml.cs @@ -32,9 +32,9 @@ private async void RefreshCollection(object sender, RoutedEventArgs e) } /// -/// A sample implementation of the interface. +/// A sample implementation of the interface. /// -/// +/// public class PeopleSource : IIncrementalSource { private readonly List _people; @@ -92,7 +92,7 @@ public PeopleSource() } /// -/// A sample class used to show how to use the interface. +/// A sample class used to show how to use the interface. /// public class Person { diff --git a/components/Converters/src/FileSizeToFriendlyStringConverter.cs b/components/Converters/src/FileSizeToFriendlyStringConverter.cs index e6f35d02..93db3317 100644 --- a/components/Converters/src/FileSizeToFriendlyStringConverter.cs +++ b/components/Converters/src/FileSizeToFriendlyStringConverter.cs @@ -5,7 +5,7 @@ namespace CommunityToolkit.WinUI.Converters; /// -/// Converts a file size in bytes to a more human-readable friendly format using +/// Converts a file size in bytes to a more human-readable friendly format using /// public class FileSizeToFriendlyStringConverter : IValueConverter { diff --git a/components/Extensions/src/Element/FrameworkElementExtensions.ActualSize.cs b/components/Extensions/src/Element/FrameworkElementExtensions.ActualSize.cs index 3d148a85..c5e0a36e 100644 --- a/components/Extensions/src/Element/FrameworkElementExtensions.ActualSize.cs +++ b/components/Extensions/src/Element/FrameworkElementExtensions.ActualSize.cs @@ -5,12 +5,12 @@ namespace CommunityToolkit.WinUI; /// -/// Provides attached dependency properties for the type. +/// Provides attached dependency properties for the type. /// public static partial class FrameworkElementExtensions { /// - /// Attached for enabling actual size binding on any . + /// Attached for enabling actual size binding on any . /// public static readonly DependencyProperty EnableActualSizeBindingProperty = DependencyProperty.RegisterAttached("EnableActualSizeBinding", typeof(bool), typeof(FrameworkElementExtensions), new PropertyMetadata(false, OnEnableActualSizeBindingPropertyChanged)); diff --git a/components/Extensions/src/Element/FrameworkElementExtensions.Mouse.cs b/components/Extensions/src/Element/FrameworkElementExtensions.Mouse.cs index 2866f666..d1bced06 100644 --- a/components/Extensions/src/Element/FrameworkElementExtensions.Mouse.cs +++ b/components/Extensions/src/Element/FrameworkElementExtensions.Mouse.cs @@ -32,14 +32,14 @@ public static partial class FrameworkElementExtensions new() { { CursorShape.Arrow, _defaultCursor } }; /// - /// Dependency property for specifying the target to be shown + /// Dependency property for specifying the target to be shown /// over the target . /// public static readonly DependencyProperty CursorProperty = DependencyProperty.RegisterAttached("Cursor", typeof(CursorShape), typeof(FrameworkElementExtensions), new PropertyMetadata(CursorShape.Arrow, CursorChanged)); /// - /// Set the target . + /// Set the target . /// /// Object where the selector cursor type should be shown. /// Target cursor type value. @@ -49,7 +49,7 @@ public static void SetCursor(FrameworkElement element, CursorShape value) } /// - /// Get the current . + /// Get the current . /// /// Object where the selector cursor type should be shown. /// Cursor type set on target element. diff --git a/components/Extensions/src/Element/UIElementExtensions.cs b/components/Extensions/src/Element/UIElementExtensions.cs index f4c07c70..f6625fc9 100644 --- a/components/Extensions/src/Element/UIElementExtensions.cs +++ b/components/Extensions/src/Element/UIElementExtensions.cs @@ -13,7 +13,7 @@ namespace CommunityToolkit.WinUI; /// -/// Provides attached dependency properties for the +/// Provides attached dependency properties for the /// public static class UIElementExtensions { diff --git a/components/Extensions/src/Markup/SymbolIconExtension.cs b/components/Extensions/src/Markup/SymbolIconExtension.cs index 79d03b94..3a33e533 100644 --- a/components/Extensions/src/Markup/SymbolIconExtension.cs +++ b/components/Extensions/src/Markup/SymbolIconExtension.cs @@ -11,7 +11,7 @@ namespace CommunityToolkit.WinUI; public class SymbolIconExtension : TextIconExtension { /// - /// Gets or sets the value representing the icon to display. + /// Gets or sets the value representing the icon to display. /// public Symbol Symbol { get; set; } diff --git a/components/Extensions/src/Markup/SymbolIconSourceExtension.cs b/components/Extensions/src/Markup/SymbolIconSourceExtension.cs index e2aa99ba..555db096 100644 --- a/components/Extensions/src/Markup/SymbolIconSourceExtension.cs +++ b/components/Extensions/src/Markup/SymbolIconSourceExtension.cs @@ -11,7 +11,7 @@ namespace CommunityToolkit.WinUI; public class SymbolIconSourceExtension : TextIconExtension { /// - /// Gets or sets the value representing the icon to display. + /// Gets or sets the value representing the icon to display. /// public Symbol Symbol { get; set; } diff --git a/components/Extensions/src/Shadows/AttachedShadowBase.cs b/components/Extensions/src/Shadows/AttachedShadowBase.cs index 26583602..90145fe1 100644 --- a/components/Extensions/src/Shadows/AttachedShadowBase.cs +++ b/components/Extensions/src/Shadows/AttachedShadowBase.cs @@ -27,7 +27,7 @@ public abstract partial class AttachedShadowBase : DependencyObject, IAttachedSh /// /// Gets a value indicating whether or not Composition's VisualSurface is supported. /// - protected static readonly bool SupportsCompositionVisualSurface = ApiInformation.IsTypePresent(typeof(CompositionVisualSurface).FullName); + protected static readonly bool SupportsCompositionVisualSurface = typeof(CompositionVisualSurface).FullName is string str && ApiInformation.IsTypePresent(str); #endif /// diff --git a/components/Extensions/src/Shadows/IAttachedShadow.cs b/components/Extensions/src/Shadows/IAttachedShadow.cs index 9f8ac37a..56e412d5 100644 --- a/components/Extensions/src/Shadows/IAttachedShadow.cs +++ b/components/Extensions/src/Shadows/IAttachedShadow.cs @@ -22,7 +22,7 @@ public interface IAttachedShadow double Opacity { get; set; } /// - /// Gets or sets the offset of the shadow as a string representation of a . + /// Gets or sets the offset of the shadow as a string representation of a . /// string Offset { get; set; } diff --git a/components/Helpers/samples/CameraHelperSample.xaml.cs b/components/Helpers/samples/CameraHelperSample.xaml.cs index f4ece300..1f2038f9 100644 --- a/components/Helpers/samples/CameraHelperSample.xaml.cs +++ b/components/Helpers/samples/CameraHelperSample.xaml.cs @@ -7,6 +7,7 @@ using Windows.Media; using Windows.Media.Capture.Frames; using Windows.ApplicationModel; + #if WINAPPSDK using Microsoft.UI.Xaml.Media.Imaging; #else @@ -62,7 +63,7 @@ private void Setup() #endif } - private async void Application_Suspending(object sender, SuspendingEventArgs e) + private async void Application_Suspending(object? sender, SuspendingEventArgs e) { if (IsLoaded) { @@ -72,7 +73,7 @@ private async void Application_Suspending(object sender, SuspendingEventArgs e) } } - private async void Application_Resuming(object sender, object e) + private async void Application_Resuming(object? sender, object e) { await InitializeAsync(); } diff --git a/components/Primitives/src/WrapPanel/StretchChild.cs b/components/Primitives/src/WrapPanel/StretchChild.cs index 754fa2ba..d078aaab 100644 --- a/components/Primitives/src/WrapPanel/StretchChild.cs +++ b/components/Primitives/src/WrapPanel/StretchChild.cs @@ -5,7 +5,7 @@ namespace CommunityToolkit.WinUI.Controls; /// -/// Options for how to calculate the layout of items. +/// Options for how to calculate the layout of items. /// public enum StretchChild { diff --git a/components/Sizers/src/SizerBase.cs b/components/Sizers/src/SizerBase.cs index 4c925054..16d10492 100644 --- a/components/Sizers/src/SizerBase.cs +++ b/components/Sizers/src/SizerBase.cs @@ -7,7 +7,7 @@ namespace CommunityToolkit.WinUI.Controls; /// -/// Base class for splitting/resizing type controls like and . Acts similar to an enlarged type control, but with keyboard support. Subclasses should override the various abstract methods here to implement their behavior. +/// Base class for splitting/resizing type controls like and . Acts similar to an enlarged type control, but with keyboard support. Subclasses should override the various abstract methods here to implement their behavior. /// [TemplateVisualState(Name = NormalState, GroupName = CommonStates)] diff --git a/global.json b/global.json index 1ad7848c..852dfb6d 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "6.0.405", + "version": "7.0.100", "rollForward": "latestFeature" }, "msbuild-sdks": diff --git a/tooling b/tooling index 4c90e49f..3e4623ec 160000 --- a/tooling +++ b/tooling @@ -1 +1 @@ -Subproject commit 4c90e49f544a46cace6e188f7cd509f56e968a2d +Subproject commit 3e4623ecc9575eb60a7535aae61ea538cde83059