diff --git a/.azure/pipelines/helix-test.yml b/.azure/pipelines/helix-test.yml new file mode 100644 index 0000000000..96b9d6ccaa --- /dev/null +++ b/.azure/pipelines/helix-test.yml @@ -0,0 +1,27 @@ +# Don't run CI for this config yet. We're not ready to move official builds on to Azure Pipelines +trigger: none + +# Run PR validation on all branches +pr: + branches: + include: + - '*' + +jobs: +- template: jobs/default-build.yml + parameters: + jobName: Helix_quarantine_x64 + jobDisplayName: 'Tests: Helix Quarantine x64' + agentOs: Windows + timeoutInMinutes: 240 + steps: + - script: .\restore.cmd -ci + displayName: Restore + - script: .\build.cmd -ci -NoRestore -test -projects eng\helix\helix.proj /p:RunQuarantinedTests=true /p:IsRequiredCheck=true /p:IsHelixJob=true /p:BuildAllProjects=true /p:BuildNative=true /p:ASPNETCORE_TEST_LOG_DIR=artifacts/log -bl + displayName: Run build.cmd helix target + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops + artifacts: + - name: Helix_logs + path: artifacts/log/ + publishOnError: true diff --git a/Directory.Build.props b/Directory.Build.props index 6cbe46561b..b68fd8cb66 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -30,6 +30,9 @@ --> false true + + + true diff --git a/eng/Dependencies.props b/eng/Dependencies.props index 097673484f..9d7cb2a34d 100644 --- a/eng/Dependencies.props +++ b/eng/Dependencies.props @@ -22,7 +22,6 @@ and are generated based on the last package release. - @@ -121,6 +120,7 @@ and are generated based on the last package release. + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index edad9a636d..18435f325a 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -401,11 +401,6 @@ https://github.com/dotnet/runtime e793fcc19797f407a1b7e98d5f81b04e25a551c3 - - - https://github.com/dotnet/corefx - 4ac4c0367003fe3973a3648eb0715ddb0e3bbcea - @@ -417,15 +412,15 @@ https://github.com/dotnet/extensions 31b8e7cc01fcb48eca7526c7d8db793493dd58b4 - + https://github.com/dotnet/arcade - cc8fe69635c7c6e791c87540851aea75946945fa + 841c83d8a5b8d8a6bd427f6798b086780138aa9a - + https://github.com/dotnet/arcade - cc8fe69635c7c6e791c87540851aea75946945fa + 841c83d8a5b8d8a6bd427f6798b086780138aa9a - + https://github.com/dotnet/arcade cc8fe69635c7c6e791c87540851aea75946945fa diff --git a/eng/Versions.props b/eng/Versions.props index e0b59d56f9..5528153249 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -60,7 +60,7 @@ --> - 5.0.0-beta.20076.3 + 5.0.0-beta.20074.6 3.5.0-beta2-20074-05 @@ -70,7 +70,6 @@ 5.0.0-alpha.1.20076.2 2.1.0-alpha.1.20076.2 - 1.0.0 5.0.0-alpha.1.20076.2 5.0.0-alpha.1.20076.2 5.0.0-alpha.1.20076.2 @@ -206,6 +205,7 @@ 2.3.2 10.0.1 + 1.0.0 15.8.166 1.2.0 15.8.166 diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index 23a3fd53d7..8e6642a283 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -655,9 +655,6 @@ Write-PipelineSetVariable -Name 'Artifacts.Log' -Value $LogDir Write-PipelineSetVariable -Name 'TEMP' -Value $TempDir Write-PipelineSetVariable -Name 'TMP' -Value $TempDir -$env:TEMP=$TempDir -$env:TMP=$TempDir - # Import custom tools configuration, if present in the repo. # Note: Import in global scope so that the script set top-level variables without qualification. if (!$disableConfigureToolsetImport) { @@ -671,4 +668,4 @@ if (!$disableConfigureToolsetImport) { } } } -} +} \ No newline at end of file diff --git a/eng/helix/content/runtests.cmd b/eng/helix/content/runtests.cmd index b0a910502c..2e1f87878b 100644 --- a/eng/helix/content/runtests.cmd +++ b/eng/helix/content/runtests.cmd @@ -8,6 +8,7 @@ set sdkVersion=%3 set runtimeVersion=%4 set helixQueue=%5 set arch=%6 +set quarantined=%7 set DOTNET_HOME=%HELIX_CORRELATION_PAYLOAD%\sdk set DOTNET_ROOT=%DOTNET_HOME%\%arch% @@ -38,25 +39,25 @@ if not errorlevel 1 ( set exit_code=0 -REM Run non-flaky tests first -REM We need to specify all possible Flaky filters that apply to this environment, because the flaky attribute -REM only puts the explicit filter traits the user provided in -REM Filter syntax: https://github.com/Microsoft/vstest-docs/blob/master/docs/filter.md -set NONFLAKY_FILTER="Flaky:All!=true&Flaky:Helix:All!=true&Flaky:Helix:Queue:All!=true&Flaky:Helix:Queue:%HELIX%!=true" -echo Running non-flaky tests. -%DOTNET_ROOT%\dotnet vstest %target% --logger:xunit --TestCaseFilter:%NONFLAKY_FILTER% -if errorlevel 1 ( - echo Failure in non-flaky test 1>&2 - set exit_code=1 - REM DO NOT EXIT -) - -set FLAKY_FILTER="Flaky:All=true|Flaky:Helix:All=true|Flaky:Helix:Queue:All=true|Flaky:Helix:Queue:%HELIX%=true" -echo Running known-flaky tests. -%DOTNET_ROOT%\dotnet vstest %target% --TestCaseFilter:%FLAKY_FILTER% -if errorlevel 1 ( - echo Failure in flaky test 1>&2 - REM DO NOT EXIT and DO NOT SET EXIT_CODE to 1 +set NONQUARANTINE_FILTER="Flaky:All!=true&Flaky:Helix:All!=true&Flaky:Helix:Queue:All!=true&Flaky:Helix:Queue:%HELIX%!=true" +if (%quarantined%==true) ( + echo Running all tests. + %DOTNET_ROOT%\dotnet vstest %target% --logger:xunit + if errorlevel 1 ( + echo Failure in flaky test 1>&2 + REM DO NOT EXIT and DO NOT SET EXIT_CODE to 1 + ) +) else ( + REM We need to specify all possible Flaky filters that apply to this environment, because the flaky attribute + REM only puts the explicit filter traits the user provided in + REM Filter syntax: https://github.com/Microsoft/vstest-docs/blob/master/docs/filter.md + echo Running non-quarantined tests. + %DOTNET_ROOT%\dotnet vstest %target% --logger:xunit --TestCaseFilter:%NONQUARANTINE_FILTER% + if errorlevel 1 ( + echo Failure in non-flaky test 1>&2 + set exit_code=1 + REM DO NOT EXIT + ) ) echo "Copying TestResults\TestResults.xml to ." diff --git a/eng/helix/content/runtests.sh b/eng/helix/content/runtests.sh index 3934d5541c..663b20afb3 100644 --- a/eng/helix/content/runtests.sh +++ b/eng/helix/content/runtests.sh @@ -4,6 +4,8 @@ test_binary_path="$1" dotnet_sdk_version="$2" dotnet_runtime_version="$3" helix_queue_name="$4" +target_arch="$5" +quarantined="$6" RESET="\033[0m" RED="\033[0;31m" @@ -87,25 +89,27 @@ if grep -q "Exception thrown" discovered.txt; then exit 1 fi -# Run non-flaky tests first -# We need to specify all possible Flaky filters that apply to this environment, because the flaky attribute +exit_code=0 + +# We need to specify all possible quarantined filters that apply to this environment, because the quarantine attribute # only puts the explicit filter traits the user provided in the flaky attribute # Filter syntax: https://github.com/Microsoft/vstest-docs/blob/master/docs/filter.md -NONFLAKY_FILTER="Flaky:All!=true&Flaky:Helix:All!=true&Flaky:Helix:Queue:All!=true&Flaky:Helix:Queue:$helix_queue_name!=true" -echo "Running non-flaky tests." -$DOTNET_ROOT/dotnet vstest $test_binary_path --logger:xunit --TestCaseFilter:"$NONFLAKY_FILTER" -nonflaky_exitcode=$? -if [ $nonflaky_exitcode != 0 ]; then - echo "Non-flaky tests failed!" 1>&2 - # DO NOT EXIT -fi - -FLAKY_FILTER="Flaky:All=true|Flaky:Helix:All=true|Flaky:Helix:Queue:All=true|Flaky:Helix:Queue:$helix_queue_name=true" -echo "Running known-flaky tests." -$DOTNET_ROOT/dotnet vstest $test_binary_path --TestCaseFilter:"$FLAKY_FILTER" -if [ $? != 0 ]; then - echo "Flaky tests failed!" 1>&2 - # DO NOT EXIT +NONQUARANTINE_FILTER="Flaky:All!=true&Flaky:Helix:All!=true&Flaky:Helix:Queue:All!=true&Flaky:Helix:Queue:$helix_queue_name!=true" +if [ "$quarantined" == true ]; then + echo "Running all tests including quarantined." + $DOTNET_ROOT/dotnet vstest $test_binary_path --logger:xunit + if [ $? != 0 ]; then + echo "Quarantined tests failed!" 1>&2 + # DO NOT EXIT + fi +else + echo "Running non-quarantined tests." + $DOTNET_ROOT/dotnet vstest $test_binary_path --logger:xunit --TestCaseFilter:"$NONQUARANTINE_FILTER" + exit_code=$? + if [ $exit_code != 0 ]; then + echo "Non-quarantined tests failed!" 1>&2 + # DO NOT EXIT + fi fi echo "Copying TestResults/TestResults to ." @@ -114,4 +118,4 @@ echo "Copying artifacts/logs to $HELIX_WORKITEM_UPLOAD_ROOT/../" shopt -s globstar cp artifacts/log/**/*.log $HELIX_WORKITEM_UPLOAD_ROOT/../ cp artifacts/log/**/*.log $HELIX_WORKITEM_UPLOAD_ROOT/ -exit $nonflaky_exitcode +exit $exit_code diff --git a/eng/targets/Helix.props b/eng/targets/Helix.props index 8d71616ea6..5a41315124 100644 --- a/eng/targets/Helix.props +++ b/eng/targets/Helix.props @@ -12,9 +12,12 @@ true 00:30:00 + false false true - $(MSBuildProjectName)-$(TargetFramework) + <_HelixRunType Condition="'$(RunQuarantinedTests)' == 'true'">quarantined + <_HelixRunType Condition="'$(RunQuarantinedTests)' != 'true'">unquarantined + $(MSBuildProjectName)--$(TargetFramework)--$(_HelixRunType) false false 10.15.3 diff --git a/eng/targets/Helix.targets b/eng/targets/Helix.targets index 91e952efe3..c6a20b6055 100644 --- a/eng/targets/Helix.targets +++ b/eng/targets/Helix.targets @@ -83,8 +83,8 @@ Usage: dotnet msbuild /t:Helix src/MyTestProject.csproj $(TargetFileName) @(HelixPreCommand) @(HelixPostCommand) - call runtests.cmd $(TargetFileName) $(TargetFrameworkIdentifier) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) - ./runtests.sh $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) + call runtests.cmd $(TargetFileName) $(TargetFrameworkIdentifier) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) + ./runtests.sh $(TargetFileName) $(NETCoreSdkVersion) $(MicrosoftNETCoreAppRuntimeVersion) $(_HelixFriendlyNameTargetQueue) $(TargetArchitecture) $(RunQuarantinedTests) $(HelixTimeout) diff --git a/global.json b/global.json index 8d1cda730a..2606b9bc6e 100644 --- a/global.json +++ b/global.json @@ -25,7 +25,7 @@ }, "msbuild-sdks": { "Yarn.MSBuild": "1.15.2", - "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20076.3", - "Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20076.3" + "Microsoft.DotNet.Arcade.Sdk": "5.0.0-beta.20074.6", + "Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20074.6" } } diff --git a/src/Components/Analyzers/src/InternalUsageAnalyzer.cs b/src/Components/Analyzers/src/InternalUsageAnalyzer.cs index 495e4c90fa..af77a42ecc 100644 --- a/src/Components/Analyzers/src/InternalUsageAnalyzer.cs +++ b/src/Components/Analyzers/src/InternalUsageAnalyzer.cs @@ -126,7 +126,7 @@ namespace Microsoft.Extensions.Internal // Similar logic here to VisitDeclarationSymbol, keep these in sync. private void VisitOperationSymbol(OperationAnalysisContext context, ISymbol symbol) { - if (symbol.ContainingAssembly == context.Compilation.Assembly) + if (symbol == null || symbol.ContainingAssembly == context.Compilation.Assembly) { // The type is being referenced within the same assembly. This is valid use of an "internal" type return; @@ -155,7 +155,7 @@ namespace Microsoft.Extensions.Internal // Similar logic here to VisitOperationSymbol, keep these in sync. private void VisitDeclarationSymbol(SymbolAnalysisContext context, ISymbol symbol, ISymbol symbolForDiagnostic) { - if (symbol.ContainingAssembly == context.Compilation.Assembly) + if (symbol == null || symbol.ContainingAssembly == context.Compilation.Assembly) { // This is part of the compilation, avoid this analyzer when building from source. return; diff --git a/src/Components/Analyzers/test/TestFiles/ComponentInternalUsageDiagnosticsAnalyzerTest/UsesRendererTypesInDeclarations.cs b/src/Components/Analyzers/test/TestFiles/ComponentInternalUsageDiagnosticsAnalyzerTest/UsesRendererTypesInDeclarations.cs index e2877b0df5..0a0bd11b7b 100644 --- a/src/Components/Analyzers/test/TestFiles/ComponentInternalUsageDiagnosticsAnalyzerTest/UsesRendererTypesInDeclarations.cs +++ b/src/Components/Analyzers/test/TestFiles/ComponentInternalUsageDiagnosticsAnalyzerTest/UsesRendererTypesInDeclarations.cs @@ -22,11 +22,15 @@ namespace Microsoft.AspNetCore.Components.Analyzers.Tests.TestFiles.ComponentInt throw new NotImplementedException(); } - /*MMParameter*/protected override Task UpdateDisplayAsync(in RenderBatch renderBatch) + /*MMParameter*/protected override Task UpdateDisplayAsync(in RenderBatch renderBatch) { throw new NotImplementedException(); } /*MMReturnType*/private Renderer GetRenderer() => _field; + + public interface ITestInterface + { + } } } diff --git a/src/Servers/Kestrel/Transport.Sockets/src/Internal/SocketAwaitableEventArgs.cs b/src/Servers/Kestrel/Transport.Sockets/src/Internal/SocketAwaitableEventArgs.cs index 9c8f2aef9d..0d59cd1c43 100644 --- a/src/Servers/Kestrel/Transport.Sockets/src/Internal/SocketAwaitableEventArgs.cs +++ b/src/Servers/Kestrel/Transport.Sockets/src/Internal/SocketAwaitableEventArgs.cs @@ -11,7 +11,7 @@ using System.Threading.Tasks; namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal { - internal class SocketAwaitableEventArgs : SocketAsyncEventArgs, ICriticalNotifyCompletion + internal sealed class SocketAwaitableEventArgs : SocketAsyncEventArgs, ICriticalNotifyCompletion { private static readonly Action _callbackCompleted = () => { }; @@ -20,6 +20,7 @@ namespace Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.Internal private Action _callback; public SocketAwaitableEventArgs(PipeScheduler ioScheduler) + : base(unsafeSuppressExecutionContextFlow: true) { _ioScheduler = ioScheduler; } diff --git a/src/SignalR/clients/java/signalr/gradle/wrapper/gradle-wrapper.jar b/src/SignalR/clients/java/signalr/gradle/wrapper/gradle-wrapper.jar index 1948b9074f..f3d88b1c2f 100644 Binary files a/src/SignalR/clients/java/signalr/gradle/wrapper/gradle-wrapper.jar and b/src/SignalR/clients/java/signalr/gradle/wrapper/gradle-wrapper.jar differ diff --git a/src/SignalR/clients/java/signalr/gradle/wrapper/gradle-wrapper.properties b/src/SignalR/clients/java/signalr/gradle/wrapper/gradle-wrapper.properties index 838e6bc85a..407e71a6cf 100644 --- a/src/SignalR/clients/java/signalr/gradle/wrapper/gradle-wrapper.properties +++ b/src/SignalR/clients/java/signalr/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.3-bin.zip +distributionSha256Sum=d0c43d14e1c70a48b82442f435d06186351a2d290d72afd5b8866f15e6d7038a +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/SignalR/clients/java/signalr/gradlew b/src/SignalR/clients/java/signalr/gradlew index cccdd3d517..2fe81a7d95 100755 --- a/src/SignalR/clients/java/signalr/gradlew +++ b/src/SignalR/clients/java/signalr/gradlew @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,7 +44,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -109,8 +125,8 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` @@ -138,19 +154,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -159,14 +175,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/src/SignalR/clients/java/signalr/gradlew.bat b/src/SignalR/clients/java/signalr/gradlew.bat index f9553162f1..9618d8d960 100644 --- a/src/SignalR/clients/java/signalr/gradlew.bat +++ b/src/SignalR/clients/java/signalr/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome diff --git a/src/SignalR/clients/java/signalr/settings.gradle b/src/SignalR/clients/java/signalr/settings.gradle index 44af7e9984..80beacb801 100644 --- a/src/SignalR/clients/java/signalr/settings.gradle +++ b/src/SignalR/clients/java/signalr/settings.gradle @@ -1,6 +1,2 @@ rootProject.name = 'signalr' include 'main' - -// This is required for Gradle 4.6+ to support importing BOMs, like we do for the Microsoft super pom. -// See here: https://docs.gradle.org/4.6/release-notes.html?_ga=2.220409368.162752831.1539212384-1601231980.1538950297#bom-import -enableFeaturePreview('IMPROVED_POM_SUPPORT') \ No newline at end of file