diff --git a/Directory.Build.props b/Directory.Build.props index bad6f35800..e214311750 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -19,6 +19,7 @@ https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json; https://dotnet.myget.org/F/dotnet-core/api/v3/index.json; https://dotnet.myget.org/F/roslyn-analyzers/api/v3/index.json; + https://pkgs.dev.azure.com/dnceng/public/_packaging/MachineLearning/nuget/v3/index.json; diff --git a/Microsoft.ML.sln b/Microsoft.ML.sln index 3d76920355..a96740171c 100644 --- a/Microsoft.ML.sln +++ b/Microsoft.ML.sln @@ -285,6 +285,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.ML.Vision", "src\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.ML.TestFrameworkCommon", "test\Microsoft.ML.TestFrameworkCommon\Microsoft.ML.TestFrameworkCommon.csproj", "{A22FAD27-77E8-4460-8B92-EC7090B7173A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.ML.NightlyBuild.Tests", "test\Microsoft.ML.NightlyBuild.Tests\Microsoft.ML.NightlyBuild.Tests.csproj", "{A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.ML.NugetPackageVersionUpdater", "test\Microsoft.ML.NugetPackageVersionUpdater\Microsoft.ML.NugetPackageVersionUpdater.csproj", "{C8DB58DC-6434-4431-A81F-263D86E2A5F3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1716,6 +1720,42 @@ Global {A22FAD27-77E8-4460-8B92-EC7090B7173A}.Release-netfx|Any CPU.Build.0 = Release-netfx|Any CPU {A22FAD27-77E8-4460-8B92-EC7090B7173A}.Release-netfx|x64.ActiveCfg = Release-netfx|Any CPU {A22FAD27-77E8-4460-8B92-EC7090B7173A}.Release-netfx|x64.Build.0 = Release-netfx|Any CPU + {A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E}.Debug|x64.ActiveCfg = Debug|Any CPU + {A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E}.Debug-netcoreapp3_0|Any CPU.ActiveCfg = Debug-netcoreapp3_0|Any CPU + {A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E}.Debug-netcoreapp3_0|x64.ActiveCfg = Debug-netcoreapp3_0|Any CPU + {A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E}.Debug-netfx|Any CPU.ActiveCfg = Debug-netfx|Any CPU + {A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E}.Debug-netfx|x64.ActiveCfg = Debug-netfx|Any CPU + {A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E}.Release|x64.ActiveCfg = Release|Any CPU + {A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E}.Release-netcoreapp3_0|Any CPU.ActiveCfg = Release-netcoreapp3_0|Any CPU + {A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E}.Release-netcoreapp3_0|x64.ActiveCfg = Release-netcoreapp3_0|Any CPU + {A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E}.Release-netfx|Any CPU.ActiveCfg = Release-netfx|Any CPU + {A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E}.Release-netfx|x64.ActiveCfg = Release-netfx|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Debug|x64.ActiveCfg = Debug|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Debug|x64.Build.0 = Debug|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Debug-netcoreapp3_0|Any CPU.ActiveCfg = Debug-netcoreapp3_0|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Debug-netcoreapp3_0|Any CPU.Build.0 = Debug-netcoreapp3_0|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Debug-netcoreapp3_0|x64.ActiveCfg = Debug-netcoreapp3_0|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Debug-netcoreapp3_0|x64.Build.0 = Debug-netcoreapp3_0|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Debug-netfx|Any CPU.ActiveCfg = Debug-netfx|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Debug-netfx|Any CPU.Build.0 = Debug-netfx|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Debug-netfx|x64.ActiveCfg = Debug-netfx|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Debug-netfx|x64.Build.0 = Debug-netfx|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Release|Any CPU.Build.0 = Release|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Release|x64.ActiveCfg = Release|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Release|x64.Build.0 = Release|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Release-netcoreapp3_0|Any CPU.ActiveCfg = Release-netcoreapp3_0|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Release-netcoreapp3_0|Any CPU.Build.0 = Release-netcoreapp3_0|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Release-netcoreapp3_0|x64.ActiveCfg = Release-netcoreapp3_0|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Release-netcoreapp3_0|x64.Build.0 = Release-netcoreapp3_0|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Release-netfx|Any CPU.ActiveCfg = Release-netfx|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Release-netfx|Any CPU.Build.0 = Release-netfx|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Release-netfx|x64.ActiveCfg = Release-netfx|Any CPU + {C8DB58DC-6434-4431-A81F-263D86E2A5F3}.Release-netfx|x64.Build.0 = Release-netfx|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1806,6 +1846,8 @@ Global {3817A875-278C-4140-BF66-3C4A8CA55F0D} = {D3D38B03-B557-484D-8348-8BADEE4DF592} {419F93D5-4135-4DA0-A76E-EFC23E04093D} = {09EADF06-BE25-4228-AB53-95AE3E15B530} {A22FAD27-77E8-4460-8B92-EC7090B7173A} = {AED9C836-31E3-4F3F-8ABC-929555D3F3C4} + {A1CAC86F-F4BB-4B6D-9D18-E9AE15B3C66E} = {AED9C836-31E3-4F3F-8ABC-929555D3F3C4} + {C8DB58DC-6434-4431-A81F-263D86E2A5F3} = {AED9C836-31E3-4F3F-8ABC-929555D3F3C4} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {41165AF1-35BB-4832-A189-73060F82B01D} diff --git a/build.proj b/build.proj index 15fea4e309..b2ce609d3f 100644 --- a/build.proj +++ b/build.proj @@ -97,6 +97,11 @@ Targets="RunTests" /> + + + + diff --git a/build/.night-build.yml b/build/.night-build.yml new file mode 100644 index 0000000000..161e34dbdd --- /dev/null +++ b/build/.night-build.yml @@ -0,0 +1,117 @@ +################################################################################ +# ML.NET's nightly build +################################################################################ + +# no PR builds +pr: none + +# no CI builds +trigger: none + +# scheduled trigger, runs at UTC 8:00 every day which is midnight of GMT-8 +schedules: +- cron: "0 8 * * *" + displayName: Nightly Build at midnight + branches: + include: + - master + - releases/1.0 + - features/automl + - features/integrationPackage + always: true + +resources: + containers: + - container: CentosContainer + image: mcr.microsoft.com/dotnet-buildtools/prereqs:centos-7-mlnet-8bba86b-20190314145033 + + - container: UbuntuContainer + image: mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-16.04-mlnet-207e097-20190312152303 + +jobs: +- template: /build/ci/job-template.yml + parameters: + name: Centos_x64_NetCoreApp30 + buildScript: ./build.sh + container: CentosContainer + customMatrixes: + Debug_Build: + _configuration: Debug-netcoreapp3_0 + _config_short: DI + _includeBenchmarkData: false + Release_Build: + _configuration: Release-netcoreapp3_0 + _config_short: RI + _includeBenchmarkData: true + nightlyBuild: true + pool: + name: Hosted Ubuntu 1604 + +- template: /build/ci/job-template.yml + parameters: + name: Ubuntu_x64_NetCoreApp21 + buildScript: ./build.sh + container: UbuntuContainer + nightlyBuild: true + pool: + name: Hosted Ubuntu 1604 + +- template: /build/ci/job-template.yml + parameters: + name: MacOS_x64_NetCoreApp21 + buildScript: ./build.sh + nightlyBuild: true + pool: + name: Hosted macOS High Sierra + +- template: /build/ci/job-template.yml + parameters: + name: Windows_x64_NetCoreApp30 + buildScript: build.cmd + customMatrixes: + Debug_Build: + _configuration: Debug-netcoreapp3_0 + _config_short: DI + _includeBenchmarkData: false + Release_Build: + _configuration: Release-netcoreapp3_0 + _config_short: RI + _includeBenchmarkData: true + nightlyBuild: true + pool: + name: NetCorePublic-Pool + queue: buildpool.windows.10.amd64.vs2017.open + +- template: /build/ci/job-template.yml + parameters: + name: Windows_x64_NetCoreApp21 + buildScript: build.cmd + nightlyBuild: true + pool: + name: Hosted VS2017 + +- template: /build/ci/job-template.yml + parameters: + name: Windows_x64_NetFx461 + buildScript: build.cmd + customMatrixes: + Debug_Build: + _configuration: Debug-netfx + _config_short: DFX + _includeBenchmarkData: false + Release_Build: + _configuration: Release-netfx + _config_short: RFX + _includeBenchmarkData: false + nightlyBuild: true + pool: + name: Hosted VS2017 + +- template: /build/ci/job-template.yml + parameters: + name: Windows_x86_NetCoreApp21 + architecture: x86 + buildScript: build.cmd + nightlyBuild: true + pool: + name: Hosted VS2017 \ No newline at end of file diff --git a/build/ci/job-template.yml b/build/ci/job-template.yml index b2bbb67eca..ddbecc51b8 100644 --- a/build/ci/job-template.yml +++ b/build/ci/job-template.yml @@ -5,14 +5,24 @@ parameters: pool: {} customMatrixes: '' codeCoverage: false + nightlyBuild: false container: '' jobs: - job: ${{ parameters.name }} - ${{ if eq(parameters.codeCoverage, 'false') }}: + ${{ if eq(parameters.nightlyBuild, 'true') }}: + timeoutInMinutes: 20 + ${{ if and(eq(parameters.nightlyBuild, 'false'), eq(parameters.codeCoverage, 'false')) }}: timeoutInMinutes: 75 ${{ if eq(parameters.codeCoverage, 'true') }}: timeoutInMinutes: 60 + variables: + dotnetPath: $(Build.SourcesDirectory)/Tools/dotnetcli/dotnet + nugetFeed: https://pkgs.dev.azure.com/dnceng/public/_packaging/MachineLearning/nuget/v3/index.json + nightlyBuildProjPath: $(Build.SourcesDirectory)/test/Microsoft.ML.NightlyBuild.Tests/Microsoft.ML.NightlyBuild.Tests.csproj + nightlyBuildRunPath: (Build.SourcesDirectory)/bin/AnyCPU.(_configuration)/Microsoft.ML.NightlyBuild.Tests/netcoreapp2.1 + packageUpdaterProjPath: $(Build.SourcesDirectory)/test/Microsoft.ML.NugetPackageVersionUpdater/Microsoft.ML.NugetPackageVersionUpdater.csproj + versionFilePath: $(Build.SourcesDirectory)/test/Microsoft.ML.NugetPackageVersionUpdater/latest_versions.txt strategy: matrix: ${{ if eq(parameters.customMatrixes, '') }}: @@ -35,12 +45,27 @@ jobs: - ${{ if eq(parameters.pool.name, 'Hosted macOS High Sierra') }}: - script: brew update && brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/f5b1ac99a7fba27c19cee0bc4f036775c889b359/Formula/libomp.rb && brew install mono-libgdiplus gettext && brew link gettext --force && brew link libomp --force displayName: Install build dependencies + - ${{ if and( eq(parameters.nightlyBuild, 'true'), eq(parameters.name, 'Ubuntu_x64_NetCoreApp21')) }}: + - bash: echo "##vso[task.setvariable variable=LD_LIBRARY_PATH]$(nightlyBuildRunPath):$LD_LIBRARY_PATH" + displayName: Set LD_LIBRARY_PATH for Ubuntu to locate Native shared library in current running path - script: ${{ parameters.buildScript }} -$(_configuration) -buildArch=${{ parameters.architecture }} displayName: Build - - script: ${{ parameters.buildScript }} -- /t:DownloadExternalTestFiles /p:IncludeBenchmarkData=$(_includeBenchmarkData) - displayName: Download Benchmark Data - - script: ${{ parameters.buildScript }} -$(_configuration) -runtests -coverage=${{ parameters.codeCoverage }} - displayName: Run Tests. + - ${{ if eq(parameters.nightlyBuild, 'true') }}: + - script: $(dotnetPath) restore $(nightlyBuildProjPath) + displayName: Restore nightly build project + - script: $(dotnetPath) list $(nightlyBuildProjPath) package --source $(nugetFeed) --outdated > $(versionFilePath) + displayName: List latest package versions + - script: $(dotnetPath) run --project $(packageUpdaterProjPath) + displayName: Update package versions for nightly build + - script: $(dotnetPath) msbuild -restore $(nightlyBuildProjPath) /p:ReferenceTypeForTestFramework="Nuget" /p:Configuration=$(_configuration) /p:TargetArchitecture=${{ parameters.architecture }} + displayName: Build Nightly-Build Project with latest package versions + - script: ${{ parameters.buildScript }} -$(_configuration) -runnightlybuildtests + displayName: Run Nightly Build Tests + - ${{ if eq(parameters.nightlyBuild, 'false') }}: + - script: ${{ parameters.buildScript }} -- /t:DownloadExternalTestFiles /p:IncludeBenchmarkData=$(_includeBenchmarkData) + displayName: Download Benchmark Data + - script: ${{ parameters.buildScript }} -$(_configuration) -runtests -coverage=${{ parameters.codeCoverage }} + displayName: Run Tests. - script: $(Build.SourcesDirectory)/Tools/dotnetcli/dotnet msbuild build/Codecoverage.proj /p:CodeCovToken=$(CODECOV_TOKEN) displayName: Upload coverage to codecov.io condition: and(succeeded(), eq(${{ parameters.codeCoverage }}, True)) @@ -77,7 +102,7 @@ jobs: pathToPublish: $(Build.ArtifactStagingDirectory) artifactName: ${{ parameters.name }} $(_config_short) artifactType: container - - ${{ if eq(parameters.buildScript, 'build.cmd') }}: + - ${{ if and(eq(parameters.nightlyBuild, 'false'), eq(parameters.buildScript, 'build.cmd')) }}: - powershell: | $taskListOutput = & TaskList /FI "IMAGENAME eq dotnet.exe" | Out-String if ($taskListOutput.Contains("dotnet.exe")) @@ -107,5 +132,6 @@ jobs: Remove-Item -Force -Recurse .\tmp\ Write-Output "Done cleaning up binary folder..." displayName: Clean up test data - - script: ${{ parameters.buildScript }} -buildPackages - displayName: Build Packages + - ${{ if eq(parameters.nightlyBuild, 'false') }}: + - script: ${{ parameters.buildScript }} -buildPackages + displayName: Build Packages diff --git a/config.json b/config.json index 440bc0b772..69cd962e22 100644 --- a/config.json +++ b/config.json @@ -78,6 +78,12 @@ "values": [], "defaultValue": "" }, + "RunNightlyBuildTests": { + "description": "MsBuild target that run the nightly build tests. Call this after building.", + "valueType": "target", + "values": [], + "defaultValue": "" + }, "Coverage": { "description": "Turn on code coverge.", "valueType": "property", @@ -160,6 +166,12 @@ "RunTests": "default" } }, + "runnightlybuildtests": { + "description": "Runs the nightly build tests. Call this after building.", + "settings": { + "RunNightlyBuildTests": "default" + } + }, "verbose": { "description": "Passes /flp:v=diag to the msbuild command or the value passed by the user.", "settings": { diff --git a/test/Microsoft.ML.Functional.Tests/Microsoft.ML.Functional.Tests.csproj b/test/Microsoft.ML.Functional.Tests/Microsoft.ML.Functional.Tests.csproj index 03ee7f5be6..33926c82de 100644 --- a/test/Microsoft.ML.Functional.Tests/Microsoft.ML.Functional.Tests.csproj +++ b/test/Microsoft.ML.Functional.Tests/Microsoft.ML.Functional.Tests.csproj @@ -5,6 +5,7 @@ false false + Project diff --git a/test/Microsoft.ML.NightlyBuild.Tests/Microsoft.ML.NightlyBuild.Tests.csproj b/test/Microsoft.ML.NightlyBuild.Tests/Microsoft.ML.NightlyBuild.Tests.csproj new file mode 100644 index 0000000000..f8b6adc820 --- /dev/null +++ b/test/Microsoft.ML.NightlyBuild.Tests/Microsoft.ML.NightlyBuild.Tests.csproj @@ -0,0 +1,32 @@ + + + + + false + + false + false + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/Microsoft.ML.NugetPackageVersionUpdater/Microsoft.ML.NugetPackageVersionUpdater.csproj b/test/Microsoft.ML.NugetPackageVersionUpdater/Microsoft.ML.NugetPackageVersionUpdater.csproj new file mode 100644 index 0000000000..0b8b27ab9e --- /dev/null +++ b/test/Microsoft.ML.NugetPackageVersionUpdater/Microsoft.ML.NugetPackageVersionUpdater.csproj @@ -0,0 +1,9 @@ + + + + Exe + Microsoft.ML.NugetPackageVersionUpdater.Program + $(MSBuildProjectDirectory) + + + diff --git a/test/Microsoft.ML.NugetPackageVersionUpdater/Program.cs b/test/Microsoft.ML.NugetPackageVersionUpdater/Program.cs new file mode 100644 index 0000000000..2e70a68bad --- /dev/null +++ b/test/Microsoft.ML.NugetPackageVersionUpdater/Program.cs @@ -0,0 +1,82 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Xml; + +namespace Microsoft.ML.NugetPackageVersionUpdater +{ + class Program + { + private const string tempVersionsFile = "latest_versions.txt"; + private const string targetPropsFiles = "../NightlyBuildDependency.props;../TestFrameworkDependency.props"; + private const string packageNamespace = "Microsoft.ML"; + + public static void Main(string[] args) + { + string projFiles = targetPropsFiles; + var packageVersions = GetLatestPackageVersions(); + UpdatePackageVersion(projFiles, packageVersions); + } + + private static IDictionary GetLatestPackageVersions() + { + Dictionary packageVersions = new Dictionary(); + + using (var file = new StreamReader(tempVersionsFile)) + { + var output = file.ReadToEnd(); + var splits = output.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); + foreach (var split in splits) + { + if (split.Contains(packageNamespace)) + { + var detailSplit = split.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); + + //valida NuGet package version should be separate by space like below: + //> [PackageName]space[Requested PackageVersion]space[Resolved PackageVersion]space[Latest PackageVersion] + //One Example: > Microsoft.ML.LightGbm 1.4.0-preview3-28229-8 1.4.0-preview3-28229-8 1.4.0-preview3-28229-9 + if (detailSplit.Length == 5) + packageVersions.Add(detailSplit[1], detailSplit[4]); + } + } + } + + return packageVersions; + } + + private static void UpdatePackageVersion(string projectFiles, IDictionary latestPackageVersions) + { + string packageReferencePath = "/Project/ItemGroup/PackageReference"; + + var projectFilePaths = projectFiles.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); + + foreach (var projectFilePath in projectFilePaths) + { + var CsprojDoc = new XmlDocument(); + CsprojDoc.Load(projectFilePath); + + var packageReferenceNodes = CsprojDoc.DocumentElement.SelectNodes(packageReferencePath); + + for (int i = 0; i < packageReferenceNodes.Count; i++) + { + var packageName = packageReferenceNodes.Item(i).Attributes.GetNamedItem("Include").InnerText; + + if (latestPackageVersions.ContainsKey(packageName)) + { + var latestVersion = latestPackageVersions[packageName]; + packageReferenceNodes.Item(i).Attributes.GetNamedItem("Version").InnerText = latestVersion; + Console.WriteLine($"Update packege {packageName} to version {latestVersion}."); + } + else + Console.WriteLine($"Can't find newer version of Package {packageName} from NuGet source, don't need to update version."); + } + + CsprojDoc.Save(projectFilePath); + } + } + } +} diff --git a/test/Microsoft.ML.TestFrameworkCommon/Microsoft.ML.TestFrameworkCommon.csproj b/test/Microsoft.ML.TestFrameworkCommon/Microsoft.ML.TestFrameworkCommon.csproj index 0959503ee0..89dc95d7a6 100644 --- a/test/Microsoft.ML.TestFrameworkCommon/Microsoft.ML.TestFrameworkCommon.csproj +++ b/test/Microsoft.ML.TestFrameworkCommon/Microsoft.ML.TestFrameworkCommon.csproj @@ -1,12 +1,5 @@  - - - - - - - - + diff --git a/test/NightlyBuildDependency.props b/test/NightlyBuildDependency.props new file mode 100644 index 0000000000..c17d686208 --- /dev/null +++ b/test/NightlyBuildDependency.props @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/test/TestFrameworkDependency.props b/test/TestFrameworkDependency.props new file mode 100644 index 0000000000..d71ebf2628 --- /dev/null +++ b/test/TestFrameworkDependency.props @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/test/run-night-build-tests.proj b/test/run-night-build-tests.proj new file mode 100644 index 0000000000..2a41ad5ac9 --- /dev/null +++ b/test/run-night-build-tests.proj @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + diff --git a/test/run-tests.proj b/test/run-tests.proj index a5afe75dd3..c2895155ff 100644 --- a/test/run-tests.proj +++ b/test/run-tests.proj @@ -2,7 +2,7 @@ - + @@ -17,4 +17,4 @@ - \ No newline at end of file +