From 9b014c54e9b90d58edd8b6acae488f245bed7774 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Wed, 10 Jul 2019 13:28:43 -0700 Subject: [PATCH 01/32] Integration test wip --- DotNetTry.sln | 7 ++ NotIntegrationTests/DotnetTry.cs | 91 +++++++++++++++++++ NotIntegrationTests/IntegrationTests.cs | 54 +++++++++++ .../NotIntegrationTests.csproj | 23 +++++ WorkspaceServer/Dotnet.cs | 8 ++ 5 files changed, 183 insertions(+) create mode 100644 NotIntegrationTests/DotnetTry.cs create mode 100644 NotIntegrationTests/IntegrationTests.cs create mode 100644 NotIntegrationTests/NotIntegrationTests.csproj diff --git a/DotNetTry.sln b/DotNetTry.sln index ce79c7ad8..276363d89 100644 --- a/DotNetTry.sln +++ b/DotNetTry.sln @@ -55,6 +55,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.ProjectTem EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharpWorkspaceShim", "FSharpWorkspaceShim\FSharpWorkspaceShim.fsproj", "{9128FCED-2A19-4502-BCEE-BE1BAB6882EB}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NotIntegrationTests", "NotIntegrationTests\NotIntegrationTests.csproj", "{EA6DDD48-941D-43C6-BAC1-07CF24F4C792}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -157,6 +159,10 @@ Global {9128FCED-2A19-4502-BCEE-BE1BAB6882EB}.Debug|Any CPU.Build.0 = Debug|Any CPU {9128FCED-2A19-4502-BCEE-BE1BAB6882EB}.Release|Any CPU.ActiveCfg = Release|Any CPU {9128FCED-2A19-4502-BCEE-BE1BAB6882EB}.Release|Any CPU.Build.0 = Release|Any CPU + {EA6DDD48-941D-43C6-BAC1-07CF24F4C792}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EA6DDD48-941D-43C6-BAC1-07CF24F4C792}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EA6DDD48-941D-43C6-BAC1-07CF24F4C792}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EA6DDD48-941D-43C6-BAC1-07CF24F4C792}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -186,6 +192,7 @@ Global {1F1A7554-1E88-4514-8602-EC00899E0C49} = {8192FEAD-BCE6-4E62-97E5-2E9EA884BD71} {E047D81A-7A18-4A1A-98E8-EDBB51EBB7DB} = {6EE8F484-DFA2-4F0F-939F-400CE78DFAC2} {9128FCED-2A19-4502-BCEE-BE1BAB6882EB} = {6EE8F484-DFA2-4F0F-939F-400CE78DFAC2} + {EA6DDD48-941D-43C6-BAC1-07CF24F4C792} = {8192FEAD-BCE6-4E62-97E5-2E9EA884BD71} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D6CD99BA-B16B-4570-8910-225CBDFFA3AD} diff --git a/NotIntegrationTests/DotnetTry.cs b/NotIntegrationTests/DotnetTry.cs new file mode 100644 index 000000000..7492719d7 --- /dev/null +++ b/NotIntegrationTests/DotnetTry.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Net.Http; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; +using MLS.Agent; +using MLS.Agent.Tools; +using WorkspaceServer; + +namespace NotIntegrationTests +{ + public class DotnetTryFixture : IDisposable + { + private DisposableDirectory _disposableDirectory; + private Process _process; + private HttpClient _client; + private AsyncLazy _lazyReady; + + public DotnetTryFixture() + { + _disposableDirectory = DisposableDirectory.Create(); + _lazyReady = new AsyncLazy(ReadyAsync); + } + + public void Dispose() + { + _process?.Kill(); + _disposableDirectory.Dispose(); + } + + private async Task ReadyAsync() + { + var disposable = DisposableDirectory.Create(); + var dotnet = new Dotnet(); + await dotnet.ToolInstall("dotnet try", disposable.Directory, addSource: GetPackageSource()); + + await Start(); + return true; + } + + private async Task Start() + { + var tcs = new TaskCompletionSource(); + var dotnet = new Dotnet(_disposableDirectory.Directory); + _process = dotnet.StartProcess("try --port 7891", + output => + { + if (output.Contains("Now listening on")) + { + tcs.SetResult(true); + } + }, + error => + { + if (!string.IsNullOrWhiteSpace(error)) + { + tcs.SetException(new Exception(error)); + } + }); + + _client = new HttpClient(); + _client.BaseAddress = new Uri("https://localhost:7891"); + await tcs.Task; + } + + private PackageSource GetPackageSource([CallerFilePath] string callerFile = "") + { + var dotnetTryPackageSource = Environment.GetEnvironmentVariable("dotnetTryPackageSource"); + + var directory = !string.IsNullOrWhiteSpace(dotnetTryPackageSource) + ? new DirectoryInfo(dotnetTryPackageSource) + : new DirectoryInfo(Path.Combine(Path.GetDirectoryName(callerFile), "../artifacts/packages/Debug/Shipping")); + + if (!directory.Exists) + { + throw new Exception($"Expected packages directory {directory.FullName} to exist but it does not"); + } + + return new PackageSource(directory.FullName); + } + + public async Task GetAsync(string requestUri) + { + await _lazyReady.ValueAsync(); + return await _client.GetAsync(requestUri); + } + } +} diff --git a/NotIntegrationTests/IntegrationTests.cs b/NotIntegrationTests/IntegrationTests.cs new file mode 100644 index 000000000..21fb57538 --- /dev/null +++ b/NotIntegrationTests/IntegrationTests.cs @@ -0,0 +1,54 @@ +using System; +using System.Threading.Tasks; +using FluentAssertions; +using Xunit; + +namespace NotIntegrationTests +{ + public class UnitTest1 : IClassFixture + { + private readonly DotnetTryFixture _fixture; + + public UnitTest1(DotnetTryFixture fixture) + { + _fixture = fixture; + } + + [Fact(Skip = "This doesn't work yet")] + public async Task Can_serve_blazor_console_code_runner() + { + var response = await _fixture.GetAsync(@"/LocalCodeRunner/blazor-console"); + + response.StatusCode.Should().Be(200); + var result = await response.Content.ReadAsStringAsync(); + result.Should().Contain("Loading..."); + } + + [Fact] + public async Task Can_serve_bundleCss() + { + var response = await _fixture.GetAsync(@"/client/bundle.css"); + response.StatusCode.Should().Be(200); + var content = await response.Content.ReadAsStringAsync(); + content.Should().NotBeNullOrEmpty(); + } + + [Fact] + public async Task Can_serve_bundlejs() + { + var response = await _fixture.GetAsync(@"/client/2.bundle.js"); + response.StatusCode.Should().Be(200); + var content = await response.Content.ReadAsStringAsync(); + content.Should().NotBeNullOrEmpty(); + } + + [Fact] + public async Task Can_serve_clientapi() + { + var response = await _fixture.GetAsync(@"/api/trydotnet.min.js"); + response.StatusCode.Should().Be(200); + var content = await response.Content.ReadAsStringAsync(); + content.Should().NotBeNullOrEmpty(); + } + } +} diff --git a/NotIntegrationTests/NotIntegrationTests.csproj b/NotIntegrationTests/NotIntegrationTests.csproj new file mode 100644 index 000000000..da67d1bce --- /dev/null +++ b/NotIntegrationTests/NotIntegrationTests.csproj @@ -0,0 +1,23 @@ + + + + netcoreapp3.0 + + false + + + + + + + + + + + + + + + + + diff --git a/WorkspaceServer/Dotnet.cs b/WorkspaceServer/Dotnet.cs index 8c4d09b1d..27eff7ca0 100644 --- a/WorkspaceServer/Dotnet.cs +++ b/WorkspaceServer/Dotnet.cs @@ -60,6 +60,14 @@ public Task Execute(string args, Budget budget = null) => _workingDirectory, budget); + public Process StartProcess(string args, Action output = null, Action error = null) => + CommandLine.StartProcess( + Path.FullName, + args, + _workingDirectory, + output, + error); + public Task Publish(string args, Budget budget = null) => Execute("publish".AppendArgs(args), budget); From 35ed8659d6a75cb5eecd8ddc1d8148aa7cb60abf Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Wed, 10 Jul 2019 14:04:44 -0700 Subject: [PATCH 02/32] Start working on integration test --- azure-pipelines.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 61dcca5ab..bab8bfa2b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -126,6 +126,30 @@ jobs: enableTelemetry: true helixRepo: dotnet/try jobs: + - job: IntegrationTest + pool: + vmImage: ubuntu-16.04 + steps: + - checkout: none #skip checking out the default repository resource + - task: UseDotNet@2 + displayName: Add dotnet + inputs: + packageType: sdk + version: $(DotNetSdkVersion) + installationPath: $(Agent.ToolsDirectory)/dotnet + + - script: dotnet new -i Microsoft.AspNetCore.Blazor.Templates::$(BlazorTemplateVersion) + displayName: Install Blazor templates + + - task: DownloadBuildArtifacts@0 + displayName: 'Download Build Artifacts' + inputs: + artifactName: drop + downloadPath: $(System.DefaultWorkingDirectory) + + dependsOn: Linux + condition: succeeded() + - job: Linux pool: vmImage: ubuntu-16.04 @@ -181,6 +205,11 @@ jobs: env: TRYDOTNET_PACKAGES_PATH: $(TryDotNetPackagesPath) + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: '$(Build.SourcesDirectory)/artifacts' + artifactName: drop + - task: PublishTestResults@2 displayName: Publish NPM Test Results inputs: From 9d8ca530b6cad3f2406f0c9796ff371bddc8bcb8 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Wed, 10 Jul 2019 14:58:44 -0700 Subject: [PATCH 03/32] publish better --- azure-pipelines.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index bab8bfa2b..c6ed7e90f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -205,9 +205,19 @@ jobs: env: TRYDOTNET_PACKAGES_PATH: $(TryDotNetPackagesPath) + - task: CopyFiles@2 + inputs: + contents: '$(Build.SourcesDirectory)/artifacts/bin/**' + targetFolder: $(Build.ArtifactStagingDirectory)/bin/ + + - task: CopyFiles@2 + inputs: + contents: '_buildOutput/artifacts/packages/**' + targetFolder: $(Build.ArtifactStagingDirectory)/packages + - task: PublishBuildArtifacts@1 inputs: - pathtoPublish: '$(Build.SourcesDirectory)/artifacts' + pathtoPublish: '$(Build.ArtifactStagingDirectory)' artifactName: drop - task: PublishTestResults@2 From 62342941eddac8e87926f446b119d051c33dd50f Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Thu, 11 Jul 2019 11:48:39 -0700 Subject: [PATCH 04/32] Copy files better --- azure-pipelines.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c6ed7e90f..a12af4aa5 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -212,8 +212,8 @@ jobs: - task: CopyFiles@2 inputs: - contents: '_buildOutput/artifacts/packages/**' - targetFolder: $(Build.ArtifactStagingDirectory)/packages + contents: '$(Build.SourcesDirectory)/artifacts/packages/**' + targetFolder: $(Build.ArtifactStagingDirectory)/packages/ - task: PublishBuildArtifacts@1 inputs: From 2f1c8c97cc900ac93af62a19657c53cfc33d97d1 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Thu, 11 Jul 2019 11:54:20 -0700 Subject: [PATCH 05/32] pack tests --- NotIntegrationTests/NotIntegrationTests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NotIntegrationTests/NotIntegrationTests.csproj b/NotIntegrationTests/NotIntegrationTests.csproj index da67d1bce..fa7d9bbd9 100644 --- a/NotIntegrationTests/NotIntegrationTests.csproj +++ b/NotIntegrationTests/NotIntegrationTests.csproj @@ -3,7 +3,7 @@ netcoreapp3.0 - false + true From e405038cad3743d2799539df5aed9c002a770bb5 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Thu, 11 Jul 2019 12:15:06 -0700 Subject: [PATCH 06/32] brett feedback --- azure-pipelines.yml | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a12af4aa5..8368d8834 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -108,13 +108,12 @@ jobs: continueOnError: true condition: always() - - ${{ if and(ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - task: PublishBuildArtifacts@1 - displayName: Publish packages to artifacts container - inputs: - pathToPublish: $(Build.SourcesDirectory)\artifacts\packages\$(_BuildConfig) - artifactName: packages - artifactType: container + - task: PublishBuildArtifacts@1 + displayName: Publish packages to artifacts container + inputs: + pathToPublish: $(Build.SourcesDirectory)\artifacts\packages\$(_BuildConfig) + artifactName: packages + artifactType: container - template: /eng/common/templates/jobs/jobs.yml parameters: @@ -205,20 +204,20 @@ jobs: env: TRYDOTNET_PACKAGES_PATH: $(TryDotNetPackagesPath) - - task: CopyFiles@2 - inputs: - contents: '$(Build.SourcesDirectory)/artifacts/bin/**' - targetFolder: $(Build.ArtifactStagingDirectory)/bin/ + # - task: CopyFiles@2 + # inputs: + # contents: '$(Build.SourcesDirectory)/artifacts/bin/**' + # targetFolder: $(Build.ArtifactStagingDirectory)/bin/ - - task: CopyFiles@2 - inputs: - contents: '$(Build.SourcesDirectory)/artifacts/packages/**' - targetFolder: $(Build.ArtifactStagingDirectory)/packages/ + # - task: CopyFiles@2 + # inputs: + # contents: '$(Build.SourcesDirectory)/artifacts/packages/**' + # targetFolder: $(Build.ArtifactStagingDirectory)/packages/ - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: '$(Build.ArtifactStagingDirectory)' - artifactName: drop + # - task: PublishBuildArtifacts@1 + # inputs: + # pathtoPublish: '$(Build.ArtifactStagingDirectory)' + # artifactName: drop - task: PublishTestResults@2 displayName: Publish NPM Test Results From 534d01212cf7c5807ec2e6a2bc42604d75dde48f Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Thu, 11 Jul 2019 12:15:55 -0700 Subject: [PATCH 07/32] Depend on windows --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 8368d8834..47ccbe8f8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -146,7 +146,7 @@ jobs: artifactName: drop downloadPath: $(System.DefaultWorkingDirectory) - dependsOn: Linux + dependsOn: Windows_NT condition: succeeded() - job: Linux From ad11f2165971caf61ec313d3e0aff144339ef34f Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Thu, 11 Jul 2019 12:18:21 -0700 Subject: [PATCH 08/32] use packages artifact --- azure-pipelines.yml | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 47ccbe8f8..591406722 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -143,7 +143,7 @@ jobs: - task: DownloadBuildArtifacts@0 displayName: 'Download Build Artifacts' inputs: - artifactName: drop + artifactName: packages downloadPath: $(System.DefaultWorkingDirectory) dependsOn: Windows_NT @@ -204,21 +204,6 @@ jobs: env: TRYDOTNET_PACKAGES_PATH: $(TryDotNetPackagesPath) - # - task: CopyFiles@2 - # inputs: - # contents: '$(Build.SourcesDirectory)/artifacts/bin/**' - # targetFolder: $(Build.ArtifactStagingDirectory)/bin/ - - # - task: CopyFiles@2 - # inputs: - # contents: '$(Build.SourcesDirectory)/artifacts/packages/**' - # targetFolder: $(Build.ArtifactStagingDirectory)/packages/ - - # - task: PublishBuildArtifacts@1 - # inputs: - # pathtoPublish: '$(Build.ArtifactStagingDirectory)' - # artifactName: drop - - task: PublishTestResults@2 displayName: Publish NPM Test Results inputs: From 8f9bf22e5707fa9b107c61f94d36707b1fba4cc2 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Thu, 11 Jul 2019 12:19:21 -0700 Subject: [PATCH 09/32] improve readability --- azure-pipelines.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 591406722..7d31e1c38 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -126,6 +126,8 @@ jobs: helixRepo: dotnet/try jobs: - job: IntegrationTest + dependsOn: Windows_NT + condition: succeeded() pool: vmImage: ubuntu-16.04 steps: From f06739104667d34251cf3c600bf88d1a40adbbe6 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Thu, 11 Jul 2019 12:20:53 -0700 Subject: [PATCH 10/32] really improve readability --- azure-pipelines.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 7d31e1c38..228c8b690 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -148,9 +148,6 @@ jobs: artifactName: packages downloadPath: $(System.DefaultWorkingDirectory) - dependsOn: Windows_NT - condition: succeeded() - - job: Linux pool: vmImage: ubuntu-16.04 From 36aa0e226784904d2549304988f4d253a419ea9c Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Fri, 12 Jul 2019 10:17:59 -0700 Subject: [PATCH 11/32] run tests --- azure-pipelines.yml | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 228c8b690..ca5ae0b99 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -115,6 +115,13 @@ jobs: artifactName: packages artifactType: container + - task: PublishBuildArtifacts@1 + displayName: Publish integration tests dll + inputs: + pathToPublish: $(Build.SourcesDirectory)\artifacts\bin\NotIntegrationTests\$(_BuildConfig) + artifactName: integrationTests + artifactType: container + - template: /eng/common/templates/jobs/jobs.yml parameters: enableMicrobuild: true @@ -143,11 +150,28 @@ jobs: displayName: Install Blazor templates - task: DownloadBuildArtifacts@0 - displayName: 'Download Build Artifacts' + displayName: 'Download built packages' inputs: artifactName: packages downloadPath: $(System.DefaultWorkingDirectory) + - task: DownloadBuildArtifacts@0 + displayName: 'Download built integrationtests' + inputs: + artifactName: integrationTests + downloadPath: $(System.DefaultWorkingDirectory) + + - script: dotnet vstest $(System.DefaultWorkingDirectory) --ResultDirectory $(SystemWorkingDirectory)/testResults + displayName: Run integration tests + + - task: PublishTestResults@2 + displayName: Publish NPM Test Results + inputs: + testResultsFormat: 'VSTest' + testResultsFiles: '*.trx' + searchFolder: '$(SystemWorkingDirectory)/testResults' + continueOnError: true + condition: always() - job: Linux pool: vmImage: ubuntu-16.04 From 8d618b7db41db18d10d48a57d9d7a72a94118885 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Fri, 12 Jul 2019 13:09:57 -0700 Subject: [PATCH 12/32] path --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ca5ae0b99..c980e6d76 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -161,7 +161,7 @@ jobs: artifactName: integrationTests downloadPath: $(System.DefaultWorkingDirectory) - - script: dotnet vstest $(System.DefaultWorkingDirectory) --ResultDirectory $(SystemWorkingDirectory)/testResults + - script: dotnet vstest $(System.DefaultWorkingDirectory)/integrationTests/netcoreapp3.0/NotIntegrationTests.dll --ResultDirectory $(SystemWorkingDirectory)/testResults displayName: Run integration tests - task: PublishTestResults@2 From fb85085dce3be4bc7d3f85bacac1bbee48673eb1 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Fri, 12 Jul 2019 13:28:14 -0700 Subject: [PATCH 13/32] paths are hard --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index c980e6d76..fea6d014e 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -161,7 +161,7 @@ jobs: artifactName: integrationTests downloadPath: $(System.DefaultWorkingDirectory) - - script: dotnet vstest $(System.DefaultWorkingDirectory)/integrationTests/netcoreapp3.0/NotIntegrationTests.dll --ResultDirectory $(SystemWorkingDirectory)/testResults + - script: dotnet vstest $(System.DefaultWorkingDirectory)/integrationTests/netcoreapp3.0/NotIntegrationTests.dll --ResultDirectory $((System.DefaultWorkingDirectory)/testResults displayName: Run integration tests - task: PublishTestResults@2 From 31a2ddaf4f123801d2bf1b8d79ea169f7c40b38a Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Fri, 12 Jul 2019 13:57:45 -0700 Subject: [PATCH 14/32] parens --- MLS.Agent/Properties/launchSettings.json | 1 - azure-pipelines.yml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/MLS.Agent/Properties/launchSettings.json b/MLS.Agent/Properties/launchSettings.json index 69def8824..8cd99d635 100644 --- a/MLS.Agent/Properties/launchSettings.json +++ b/MLS.Agent/Properties/launchSettings.json @@ -18,7 +18,6 @@ }, "MLS.Agent": { "commandName": "Project", - "commandLineArgs": "try C:/Users/dicolomb/source/repos/Public/TryDotNet.XamU.CSharp", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/azure-pipelines.yml b/azure-pipelines.yml index fea6d014e..d29f7beec 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -161,7 +161,7 @@ jobs: artifactName: integrationTests downloadPath: $(System.DefaultWorkingDirectory) - - script: dotnet vstest $(System.DefaultWorkingDirectory)/integrationTests/netcoreapp3.0/NotIntegrationTests.dll --ResultDirectory $((System.DefaultWorkingDirectory)/testResults + - script: dotnet vstest $(System.DefaultWorkingDirectory)/integrationTests/netcoreapp3.0/NotIntegrationTests.dll --ResultDirectory $(System.DefaultWorkingDirectory)/testResults displayName: Run integration tests - task: PublishTestResults@2 From f48a9f777b0a5907468bc97d2d54909e6dc2cd70 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Tue, 16 Jul 2019 08:34:44 -0700 Subject: [PATCH 15/32] typo --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d29f7beec..e48bdfc85 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -161,7 +161,7 @@ jobs: artifactName: integrationTests downloadPath: $(System.DefaultWorkingDirectory) - - script: dotnet vstest $(System.DefaultWorkingDirectory)/integrationTests/netcoreapp3.0/NotIntegrationTests.dll --ResultDirectory $(System.DefaultWorkingDirectory)/testResults + - script: dotnet vstest $(System.DefaultWorkingDirectory)/integrationTests/netcoreapp3.0/NotIntegrationTests.dll --ResultsDirectory $(System.DefaultWorkingDirectory)/testResults displayName: Run integration tests - task: PublishTestResults@2 From 3578c810c5c2fb3de3fbb175c1b068997324698f Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Tue, 16 Jul 2019 09:01:37 -0700 Subject: [PATCH 16/32] syntax is hard --- azure-pipelines.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index e48bdfc85..517ef2e67 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -161,7 +161,7 @@ jobs: artifactName: integrationTests downloadPath: $(System.DefaultWorkingDirectory) - - script: dotnet vstest $(System.DefaultWorkingDirectory)/integrationTests/netcoreapp3.0/NotIntegrationTests.dll --ResultsDirectory $(System.DefaultWorkingDirectory)/testResults + - script: dotnet vstest $(System.DefaultWorkingDirectory)/integrationTests/netcoreapp3.0/NotIntegrationTests.dll --ResultsDirectory:$(System.DefaultWorkingDirectory)/testResults displayName: Run integration tests - task: PublishTestResults@2 From 1e0dcbb09ec068fe4b64af3e3a51dc5e9c067610 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Tue, 16 Jul 2019 09:44:59 -0700 Subject: [PATCH 17/32] add variable --- azure-pipelines.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 517ef2e67..0e43317ed 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -137,6 +137,8 @@ jobs: condition: succeeded() pool: vmImage: ubuntu-16.04 + variables: + dotnetTryPackageSource: $(System.DefaultWorkingDirectory)/packages/Shipping steps: - checkout: none #skip checking out the default repository resource - task: UseDotNet@2 From 8eb51bcfde3099e40f79e3e04e14b794b1cf3395 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Tue, 16 Jul 2019 10:10:05 -0700 Subject: [PATCH 18/32] use right variable syntax? --- azure-pipelines.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0e43317ed..b20997455 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -138,7 +138,8 @@ jobs: pool: vmImage: ubuntu-16.04 variables: - dotnetTryPackageSource: $(System.DefaultWorkingDirectory)/packages/Shipping + - name: dotnetTryPackageSource + value: $(System.DefaultWorkingDirectory)/packages/Shipping steps: - checkout: none #skip checking out the default repository resource - task: UseDotNet@2 @@ -174,6 +175,7 @@ jobs: searchFolder: '$(SystemWorkingDirectory)/testResults' continueOnError: true condition: always() + - job: Linux pool: vmImage: ubuntu-16.04 From c0998c66fb327e823cf58828bad50bf49a4e0a12 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Tue, 16 Jul 2019 10:50:19 -0700 Subject: [PATCH 19/32] debug print value --- azure-pipelines.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index b20997455..cdea55e0b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -164,6 +164,8 @@ jobs: artifactName: integrationTests downloadPath: $(System.DefaultWorkingDirectory) + - script: echo $(dotnetTryPackageSources) + displayName: print value - script: dotnet vstest $(System.DefaultWorkingDirectory)/integrationTests/netcoreapp3.0/NotIntegrationTests.dll --ResultsDirectory:$(System.DefaultWorkingDirectory)/testResults displayName: Run integration tests From 7c9fd73d3f174a5f50db928ce93306245a3a480e Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Tue, 16 Jul 2019 11:16:38 -0700 Subject: [PATCH 20/32] PACKAGESOURCE --- NotIntegrationTests/DotnetTry.cs | 2 +- azure-pipelines.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/NotIntegrationTests/DotnetTry.cs b/NotIntegrationTests/DotnetTry.cs index 7492719d7..01820f3ec 100644 --- a/NotIntegrationTests/DotnetTry.cs +++ b/NotIntegrationTests/DotnetTry.cs @@ -68,7 +68,7 @@ private async Task Start() private PackageSource GetPackageSource([CallerFilePath] string callerFile = "") { - var dotnetTryPackageSource = Environment.GetEnvironmentVariable("dotnetTryPackageSource"); + var dotnetTryPackageSource = Environment.GetEnvironmentVariable("PACKAGESOURCE"); var directory = !string.IsNullOrWhiteSpace(dotnetTryPackageSource) ? new DirectoryInfo(dotnetTryPackageSource) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index cdea55e0b..5d25d533e 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -138,7 +138,7 @@ jobs: pool: vmImage: ubuntu-16.04 variables: - - name: dotnetTryPackageSource + - name: PACKAGESOURCE value: $(System.DefaultWorkingDirectory)/packages/Shipping steps: - checkout: none #skip checking out the default repository resource @@ -164,7 +164,7 @@ jobs: artifactName: integrationTests downloadPath: $(System.DefaultWorkingDirectory) - - script: echo $(dotnetTryPackageSources) + - script: echo $(PACKAGESOURCE) displayName: print value - script: dotnet vstest $(System.DefaultWorkingDirectory)/integrationTests/netcoreapp3.0/NotIntegrationTests.dll --ResultsDirectory:$(System.DefaultWorkingDirectory)/testResults displayName: Run integration tests From e81fde84058328a4b52296ae8c87f0d365bcf4a5 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Tue, 16 Jul 2019 12:13:58 -0700 Subject: [PATCH 21/32] more logging --- NotIntegrationTests/DotnetTry.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/NotIntegrationTests/DotnetTry.cs b/NotIntegrationTests/DotnetTry.cs index 01820f3ec..e5ad0ba06 100644 --- a/NotIntegrationTests/DotnetTry.cs +++ b/NotIntegrationTests/DotnetTry.cs @@ -68,6 +68,11 @@ private async Task Start() private PackageSource GetPackageSource([CallerFilePath] string callerFile = "") { + var env = Environment.GetEnvironmentVariables(); + foreach (var key in env.Keys) + { + Console.WriteLine($"{key}:{env[key]}"); + } var dotnetTryPackageSource = Environment.GetEnvironmentVariable("PACKAGESOURCE"); var directory = !string.IsNullOrWhiteSpace(dotnetTryPackageSource) From 683185dea5982d3503403a03787592ff17c86016 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Tue, 16 Jul 2019 13:00:50 -0700 Subject: [PATCH 22/32] TrySetException --- NotIntegrationTests/DotnetTry.cs | 3 ++- azure-pipelines.yml | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/NotIntegrationTests/DotnetTry.cs b/NotIntegrationTests/DotnetTry.cs index e5ad0ba06..f082ffdbd 100644 --- a/NotIntegrationTests/DotnetTry.cs +++ b/NotIntegrationTests/DotnetTry.cs @@ -57,7 +57,8 @@ private async Task Start() { if (!string.IsNullOrWhiteSpace(error)) { - tcs.SetException(new Exception(error)); + tcs.TrySetException(new Exception(error)); + Console.Write(error); } }); diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 5d25d533e..bd38576cc 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -140,6 +140,8 @@ jobs: variables: - name: PACKAGESOURCE value: $(System.DefaultWorkingDirectory)/packages/Shipping + - name: TryDotNetPackagesPath + value: $(Build.SourcesDirectory)/.trydotnet/packages steps: - checkout: none #skip checking out the default repository resource - task: UseDotNet@2 From 8c99a6714ef5748ab8c2df39bb572e10380a3112 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Tue, 16 Jul 2019 15:24:12 -0700 Subject: [PATCH 23/32] logging --- NotIntegrationTests/DotnetTry.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/NotIntegrationTests/DotnetTry.cs b/NotIntegrationTests/DotnetTry.cs index f082ffdbd..3f18d0f0d 100644 --- a/NotIntegrationTests/DotnetTry.cs +++ b/NotIntegrationTests/DotnetTry.cs @@ -35,7 +35,8 @@ private async Task ReadyAsync() { var disposable = DisposableDirectory.Create(); var dotnet = new Dotnet(); - await dotnet.ToolInstall("dotnet try", disposable.Directory, addSource: GetPackageSource()); + var installResult = await dotnet.ToolInstall("dotnet try", disposable.Directory, addSource: GetPackageSource()); + Console.WriteLine(string.Join("\n", installResult.Output)); await Start(); return true; From ca75f0177cf16a8e8305a7262b9d0b3a6ea3b078 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Tue, 16 Jul 2019 16:06:08 -0700 Subject: [PATCH 24/32] fix typo --- NotIntegrationTests/DotnetTry.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NotIntegrationTests/DotnetTry.cs b/NotIntegrationTests/DotnetTry.cs index 3f18d0f0d..375ac727a 100644 --- a/NotIntegrationTests/DotnetTry.cs +++ b/NotIntegrationTests/DotnetTry.cs @@ -35,7 +35,7 @@ private async Task ReadyAsync() { var disposable = DisposableDirectory.Create(); var dotnet = new Dotnet(); - var installResult = await dotnet.ToolInstall("dotnet try", disposable.Directory, addSource: GetPackageSource()); + var installResult = await dotnet.ToolInstall("dotnet-try", disposable.Directory, addSource: GetPackageSource()); Console.WriteLine(string.Join("\n", installResult.Output)); await Start(); From eef5590f16ea900686d09222d34e30169c7cec73 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Wed, 17 Jul 2019 11:09:55 -0700 Subject: [PATCH 25/32] Fix tests? --- NotIntegrationTests/DotnetTry.cs | 8 ++++---- WorkspaceServer/Dotnet.cs | 5 +++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/NotIntegrationTests/DotnetTry.cs b/NotIntegrationTests/DotnetTry.cs index 3f18d0f0d..b6f3c56cb 100644 --- a/NotIntegrationTests/DotnetTry.cs +++ b/NotIntegrationTests/DotnetTry.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.Linq; using System.Net.Http; using System.Runtime.CompilerServices; using System.Text; @@ -33,9 +34,8 @@ public void Dispose() private async Task ReadyAsync() { - var disposable = DisposableDirectory.Create(); var dotnet = new Dotnet(); - var installResult = await dotnet.ToolInstall("dotnet try", disposable.Directory, addSource: GetPackageSource()); + var installResult = await dotnet.ToolInstall("dotnet-try", _disposableDirectory.Directory, version: "1.0.44142.42", addSource: GetPackageSource()); Console.WriteLine(string.Join("\n", installResult.Output)); await Start(); @@ -45,8 +45,8 @@ private async Task ReadyAsync() private async Task Start() { var tcs = new TaskCompletionSource(); - var dotnet = new Dotnet(_disposableDirectory.Directory); - _process = dotnet.StartProcess("try --port 7891", + var dotnetTry = _disposableDirectory.Directory.GetFiles("dotnet-try*").First().FullName; + _process = CommandLine.StartProcess(dotnetTry, "--port 7891", _disposableDirectory.Directory, output => { if (output.Contains("Now listening on")) diff --git a/WorkspaceServer/Dotnet.cs b/WorkspaceServer/Dotnet.cs index 27eff7ca0..8df973404 100644 --- a/WorkspaceServer/Dotnet.cs +++ b/WorkspaceServer/Dotnet.cs @@ -112,9 +112,10 @@ public Task ToolInstall( string packageName, DirectoryInfo toolPath, PackageSource addSource = null, - Budget budget = null) + Budget budget = null, + string version = null) { - var args = $@"{packageName} --tool-path ""{RemoveTrailingSlash(toolPath.FullName)}"" --version 1.0.0"; + var args = $@"{packageName} --tool-path ""{RemoveTrailingSlash(toolPath.FullName)}"" --version {version}"; if (addSource != null) { args += $@" --add-source ""{addSource}"""; From 8a194b3f0f890003ab8ac9b742306c6d675efad4 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Wed, 17 Jul 2019 13:14:39 -0700 Subject: [PATCH 26/32] version --- WorkspaceServer/Dotnet.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/WorkspaceServer/Dotnet.cs b/WorkspaceServer/Dotnet.cs index 8df973404..a48f959a0 100644 --- a/WorkspaceServer/Dotnet.cs +++ b/WorkspaceServer/Dotnet.cs @@ -115,7 +115,8 @@ public Task ToolInstall( Budget budget = null, string version = null) { - var args = $@"{packageName} --tool-path ""{RemoveTrailingSlash(toolPath.FullName)}"" --version {version}"; + var versionArg = version != null ? $"--version {version}" : ""); + var args = $@"{packageName} --tool-path ""{RemoveTrailingSlash(toolPath.FullName)}"" {versionArg}"; if (addSource != null) { args += $@" --add-source ""{addSource}"""; From 1dc938bb671044bb1f400109939c63bc920af631 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Wed, 17 Jul 2019 13:14:58 -0700 Subject: [PATCH 27/32] version --- WorkspaceServer/Dotnet.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WorkspaceServer/Dotnet.cs b/WorkspaceServer/Dotnet.cs index a48f959a0..8d5e4188e 100644 --- a/WorkspaceServer/Dotnet.cs +++ b/WorkspaceServer/Dotnet.cs @@ -115,7 +115,7 @@ public Task ToolInstall( Budget budget = null, string version = null) { - var versionArg = version != null ? $"--version {version}" : ""); + var versionArg = version != null ? $"--version {version}" : ""; var args = $@"{packageName} --tool-path ""{RemoveTrailingSlash(toolPath.FullName)}"" {versionArg}"; if (addSource != null) { From 36752870616bd7dc2c1517d469dc400ceb5b9d4c Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Wed, 17 Jul 2019 14:22:37 -0700 Subject: [PATCH 28/32] use http --- NotIntegrationTests/DotnetTry.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NotIntegrationTests/DotnetTry.cs b/NotIntegrationTests/DotnetTry.cs index b6f3c56cb..c0a755388 100644 --- a/NotIntegrationTests/DotnetTry.cs +++ b/NotIntegrationTests/DotnetTry.cs @@ -46,7 +46,7 @@ private async Task Start() { var tcs = new TaskCompletionSource(); var dotnetTry = _disposableDirectory.Directory.GetFiles("dotnet-try*").First().FullName; - _process = CommandLine.StartProcess(dotnetTry, "--port 7891", _disposableDirectory.Directory, + _process = CommandLine.StartProcess(dotnetTry, "hosted --port 7891", _disposableDirectory.Directory, output => { if (output.Contains("Now listening on")) @@ -64,7 +64,7 @@ private async Task Start() }); _client = new HttpClient(); - _client.BaseAddress = new Uri("https://localhost:7891"); + _client.BaseAddress = new Uri("http://localhost:7891"); await tcs.Task; } From 0de4baf5d9118bda5b284d1d18d499b82a02e087 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Wed, 17 Jul 2019 15:18:03 -0700 Subject: [PATCH 29/32] rearrange args --- NotIntegrationTests/DotnetTry.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NotIntegrationTests/DotnetTry.cs b/NotIntegrationTests/DotnetTry.cs index c0a755388..b474962a8 100644 --- a/NotIntegrationTests/DotnetTry.cs +++ b/NotIntegrationTests/DotnetTry.cs @@ -46,7 +46,7 @@ private async Task Start() { var tcs = new TaskCompletionSource(); var dotnetTry = _disposableDirectory.Directory.GetFiles("dotnet-try*").First().FullName; - _process = CommandLine.StartProcess(dotnetTry, "hosted --port 7891", _disposableDirectory.Directory, + _process = CommandLine.StartProcess(dotnetTry, "--port 7891 hosted", _disposableDirectory.Directory, output => { if (output.Contains("Now listening on")) From 7fd07ff30e816fac81e2196c6cc48658e069f6c6 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Thu, 18 Jul 2019 11:01:38 -0700 Subject: [PATCH 30/32] Create log file --- azure-pipelines.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index bd38576cc..83767a72f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -166,9 +166,7 @@ jobs: artifactName: integrationTests downloadPath: $(System.DefaultWorkingDirectory) - - script: echo $(PACKAGESOURCE) - displayName: print value - - script: dotnet vstest $(System.DefaultWorkingDirectory)/integrationTests/netcoreapp3.0/NotIntegrationTests.dll --ResultsDirectory:$(System.DefaultWorkingDirectory)/testResults + - script: dotnet vstest $(System.DefaultWorkingDirectory)/integrationTests/netcoreapp3.0/NotIntegrationTests.dll --ResultsDirectory:$(System.DefaultWorkingDirectory)/testResults | tee $(Build.SourcesDirectory)\artifacts\log\$(_BuildConfig)\log.txt displayName: Run integration tests - task: PublishTestResults@2 From 8f8cade59f8c2fb293f8797186e6ff7fb9f86444 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Thu, 18 Jul 2019 11:12:58 -0700 Subject: [PATCH 31/32] cleanup --- NotIntegrationTests/DotnetTry.cs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/NotIntegrationTests/DotnetTry.cs b/NotIntegrationTests/DotnetTry.cs index b474962a8..f99c91125 100644 --- a/NotIntegrationTests/DotnetTry.cs +++ b/NotIntegrationTests/DotnetTry.cs @@ -36,7 +36,7 @@ private async Task ReadyAsync() { var dotnet = new Dotnet(); var installResult = await dotnet.ToolInstall("dotnet-try", _disposableDirectory.Directory, version: "1.0.44142.42", addSource: GetPackageSource()); - Console.WriteLine(string.Join("\n", installResult.Output)); + installResult.ThrowOnFailure(); await Start(); return true; @@ -70,11 +70,6 @@ private async Task Start() private PackageSource GetPackageSource([CallerFilePath] string callerFile = "") { - var env = Environment.GetEnvironmentVariables(); - foreach (var key in env.Keys) - { - Console.WriteLine($"{key}:{env[key]}"); - } var dotnetTryPackageSource = Environment.GetEnvironmentVariable("PACKAGESOURCE"); var directory = !string.IsNullOrWhiteSpace(dotnetTryPackageSource) From 0c84608b3c4c72feea929f5f2dd8f6a9b1e14743 Mon Sep 17 00:00:00 2001 From: Ravi Chande Date: Thu, 18 Jul 2019 14:34:24 -0700 Subject: [PATCH 32/32] Fix sln --- DotNetTry.sln | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/DotNetTry.sln b/DotNetTry.sln index e9b0d4230..3fd5c8c9d 100644 --- a/DotNetTry.sln +++ b/DotNetTry.sln @@ -1,5 +1,4 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 +Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.28803.352 MinimumVisualStudioVersion = 10.0.40219.1 @@ -204,7 +203,6 @@ Global {E047D81A-7A18-4A1A-98E8-EDBB51EBB7DB} = {6EE8F484-DFA2-4F0F-939F-400CE78DFAC2} {9128FCED-2A19-4502-BCEE-BE1BAB6882EB} = {6EE8F484-DFA2-4F0F-939F-400CE78DFAC2} {EA6DDD48-941D-43C6-BAC1-07CF24F4C792} = {8192FEAD-BCE6-4E62-97E5-2E9EA884BD71} - {FBEA5F71-23F5-4412-A936-9B8E6E228968} = {6EE8F484-DFA2-4F0F-939F-400CE78DFAC2} {B4B9DC70-6BA2-4BC1-A780-7FCEBDB1D218} = {8192FEAD-BCE6-4E62-97E5-2E9EA884BD71} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution