From a1301a487855f5d34c1645318be26500829ca024 Mon Sep 17 00:00:00 2001 From: Bruce Haley Date: Tue, 27 Sep 2022 10:56:01 -0700 Subject: [PATCH 1/6] Drop task 'Verify publish compat results success' --- build/yaml/botbuilder-dotnet-ci.yml | 8 +-- build/yaml/ci-api-validation-steps.yml | 27 ++++---- build/yaml/ci-post-to-github-steps.yml | 90 ++++++-------------------- build/yaml/ci-test-steps.yml | 2 +- 4 files changed, 37 insertions(+), 90 deletions(-) diff --git a/build/yaml/botbuilder-dotnet-ci.yml b/build/yaml/botbuilder-dotnet-ci.yml index ee29a100f2..3b61d6ad16 100644 --- a/build/yaml/botbuilder-dotnet-ci.yml +++ b/build/yaml/botbuilder-dotnet-ci.yml @@ -16,7 +16,7 @@ pr: none # pr trigger is set in ADO variables: ApiCompatVersion: 4.6.3 - BotBuilderDll: Microsoft.Bot.Builder.AI.Luis,Microsoft.Bot.Builder.AI.QnA,Microsoft.Bot.Builder.ApplicationInsights,Microsoft.Bot.Builder.Azure,Microsoft.Bot.Builder.Dialogs,Microsoft.Bot.Builder.Integration.ApplicationInsights.Core,Microsoft.Bot.Builder.Integration.AspNet.Core,Microsoft.Bot.Builder.TemplateManager,Microsoft.Bot.Builder.Testing,Microsoft.Bot.Builder,Microsoft.Bot.Configuration,Microsoft.Bot.Connector,Microsoft.Bot.Schema,Microsoft.Bot.Streaming + PackageNames: Microsoft.Bot.Builder.AI.Luis,Microsoft.Bot.Builder.AI.QnA,Microsoft.Bot.Builder.ApplicationInsights,Microsoft.Bot.Builder.Azure,Microsoft.Bot.Builder.Dialogs,Microsoft.Bot.Builder.Integration.ApplicationInsights.Core,Microsoft.Bot.Builder.Integration.AspNet.Core,Microsoft.Bot.Builder.TemplateManager,Microsoft.Bot.Builder.Testing,Microsoft.Bot.Builder,Microsoft.Bot.Configuration,Microsoft.Bot.Connector,Microsoft.Bot.Schema,Microsoft.Bot.Streaming BuildConfiguration: Debug-Windows BuildPlatform: any cpu IsBuildServer: true # This is consumed by tests\Microsoft.Bot.Builder.Dialogs.Declarative.Tests\SchemaTestsFixture.cs. @@ -87,10 +87,10 @@ stages: - powershell: | $multiconfig = '{'; if ("$(Build.Reason)" -in ('Schedule', 'Manual')) { - $env:BotBuilderDll.Split(",") | ForEach { + $env:PackageNames.Split(",") | ForEach { $library = $_.Trim() $threadName = $library -replace "Microsoft.", ""; - $multiconfig += "'" + $threadName + "':{'BotBuilderDll':'" + $library + "'}, "; + $multiconfig += "'" + $threadName + "':{'PackageName':'" + $library + "'}, "; } } else { @@ -117,7 +117,7 @@ stages: if ($changedLibrary.Length -gt 0) { Write-Host $changedLibrary $threadName = $changedLibrary.Split(".")[-1]; - $multiconfig += "'" + $threadName + "':{'BotBuilderDll':'" + $changedLibrary + "'}, "; + $multiconfig += "'" + $threadName + "':{'PackageName':'" + $changedLibrary + "'}, "; } } } diff --git a/build/yaml/ci-api-validation-steps.yml b/build/yaml/ci-api-validation-steps.yml index f2fb440f4e..4c83e7fa60 100644 --- a/build/yaml/ci-api-validation-steps.yml +++ b/build/yaml/ci-api-validation-steps.yml @@ -1,15 +1,16 @@ steps: -- task: DownloadPipelineArtifact@1 - displayName: 'Download BotBuilderDLLs artifact' +- task: DownloadPipelineArtifact@2 + displayName: 'Download $(PackageName).dll from Artifacts' inputs: artifactName: 'BotBuilderDLLs-Debug-Windows-netcoreapp31' + patterns: '$(PackageName).dll' targetPath: '$(System.ArtifactsDirectory)/Artifacts' - task: NuGetCommand@2 - displayName: 'NuGet Install of Compatability Target Package: $(BotBuilderDll)' + displayName: 'NuGet install $(PackageName) v $(ApiCompatVersion)' inputs: command: custom - arguments: 'install $(BotBuilderDll) -Version $(ApiCompatVersion) -OutputDirectory $(System.DefaultWorkingDirectory)\DownloadedNuGet' + arguments: 'install $(PackageName) -Version $(ApiCompatVersion) -OutputDirectory $(System.DefaultWorkingDirectory)\DownloadedNuGet' - task: CmdLine@1 displayName: 'Run dir' @@ -21,24 +22,24 @@ steps: - task: SOUTHWORKS.binaries-comparer.custom-build-release-task.binaries-comparer@0 displayName: 'Compare Binaries' inputs: - contractsRootFolder: 'DownloadedNuGet\$(BotBuilderDll).$(ApiCompatVersion)\lib\netstandard2.0' - contractsFileName: '$(BotBuilderDll).dll' + contractsRootFolder: 'DownloadedNuGet\$(PackageName).$(ApiCompatVersion)\lib\netstandard2.0' + contractsFileName: '$(PackageName).dll' implFolder: '$(System.ArtifactsDirectory)/Artifacts' failOnIssue: false resolveFx: false generateLog: true - outputFilename: '$(BotBuilderDll).$(ApiCompatVersion).CompatResults.txt' + outputFilename: '$(PackageName).$(ApiCompatVersion).CompatResults.txt' outputFolder: '$(Build.ArtifactStagingDirectory)' useBaseline: false - powershell: | - $filePath = "$(Build.ArtifactStagingDirectory)\$(BotBuilderDll).$(ApiCompatVersion).CompatResults.txt" - $nugetLink = "compared against [version $(ApiCompatVersion)](https://www.nuget.org/packages/$(BotBuilderDll)/$(ApiCompatVersion))."; + $filePath = "$(Build.ArtifactStagingDirectory)\$(PackageName).$(ApiCompatVersion).CompatResults.txt" + $nugetLink = "compared against [version $(ApiCompatVersion)](https://www.nuget.org/packages/$(PackageName)/$(ApiCompatVersion))."; Write-Host "Compatibility Check:"; if (-not (Test-Path $filePath)) { - $content = "The binary compatibility report for library '$(BotBuilderDll)' wasn't generated. This may have happened because the NuGet library '$(BotBuilderDll)' for version '$(ApiCompatVersion)' was unavailable or a connectivity issue." - New-Item -Path '$(Build.ArtifactStagingDirectory)' -Name '$(BotBuilderDll).$(ApiCompatVersion).CompatResults.txt' -ItemType "file" -Value $content + $content = "The binary compatibility report for library '$(PackageName)' wasn't generated. This may have happened because the NuGet library '$(PackageName)' for version '$(ApiCompatVersion)' was unavailable or a connectivity issue." + New-Item -Path '$(Build.ArtifactStagingDirectory)' -Name '$(PackageName).$(ApiCompatVersion).CompatResults.txt' -ItemType "file" -Value $content $content; return; } @@ -102,7 +103,7 @@ steps: Write-Host "##vso[task.complete result=Failed;]"; } else { - $newFile = ":heavy_check_mark: No Binary Compatibility issues for **$(BotBuilderDll)** $nugetLink"; + $newFile = ":heavy_check_mark: No Binary Compatibility issues for **$(PackageName)** $nugetLink"; } $baseline = $newFile; @@ -116,7 +117,7 @@ steps: - task: PublishBuildArtifacts@1 displayName: 'Publish Compat Results artifact' inputs: - ArtifactName: '$(BotBuilderDll).$(ApiCompatVersion).CompatResults' + ArtifactName: '$(PackageName).$(ApiCompatVersion).CompatResults' condition: succeededOrFailed() - script: | diff --git a/build/yaml/ci-post-to-github-steps.yml b/build/yaml/ci-post-to-github-steps.yml index b1378f0702..8ad6a2c3bc 100644 --- a/build/yaml/ci-post-to-github-steps.yml +++ b/build/yaml/ci-post-to-github-steps.yml @@ -5,84 +5,30 @@ steps: downloadType: specific itemPattern: '**\*.txt' downloadPath: '$(System.ArtifactsDirectory)\ApiCompat' - condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'), ne(variables['System.PullRequest.IsFork'], 'True')) + +- task: CopyFiles@2 + displayName: 'Copy results for publish to Artifacts' + inputs: + SourceFolder: '$(System.ArtifactsDirectory)\ApiCompat' + Contents: '**\*.txt' + TargetFolder: '$(System.ArtifactsDirectory)\ApiCompatibilityResults' + flattenFolders: true + +- task: PublishPipelineArtifact@1 + inputs: + artifactName: 'ApiCompatibilityResults' + targetPath: '$(System.ArtifactsDirectory)\ApiCompatibilityResults' + displayName: 'Publish compat results to Artifacts' + continueOnError: true - task: SOUTHWORKS.github-pr-comment.custom-publish-comment-task.github-pr-comment@0 - displayName: 'Publish compat results to Github' + displayName: 'Publish compat results to GitHub' inputs: userToken: '$(GitHubCommentApiKey)' bodyFilePath: '$(System.ArtifactsDirectory)\ApiCompat' getSubFolders: true - # Skip forks, as they can't get credentials. - condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'), ne(variables['System.PullRequest.IsFork'], 'True')) - -- powershell: | - Start-Sleep -Seconds 30 - displayName: 'Wait for last task log to finish writing' - condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'), ne(variables['System.PullRequest.IsFork'], 'True')) - -- powershell: | - # This task compensates for the 'Publish compat results...' task above which can fail silently. - # Check task log for a "success" string in the current pipeline run. - # If not succeeded, fail this task. - # - # Note: The target task needs time to finish writing its log. Hence the wait task above. - # Calls the Azure DevOps REST API. - # Enable OAuth token access in the pipeline agent job for $(System.Accesstoken) to populate. - - $taskToCheck = 'Publish compat results to Github'; - $successStringToCheckFor = 'status: 201'; - - $collectionUri = "$env:SYSTEM_COLLECTIONURI"; # e.g. 'https://fuselabs.visualstudio.com' - $teamProjectId = "$env:SYSTEM_TEAMPROJECTID"; # e.g. '86659c66-c9df-418a-a371-7de7aed35064' = SDK_v4 - - # Get the current build ID. - $buildId = "$env:BUILD_BUILDID"; - Write-Host 'Build ID = ' $buildId; - - # Get the log containers for the run. - $uri = "$collectionUri/$teamProjectId/_apis/build/builds/$buildId/logs"; - - $token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$(System.AccessToken)")); - $header = @{authorization = "Basic $token"}; - - $runLogContainers = Invoke-RestMethod "$uri" -Method Get -ContentType "application/json" -Headers $header; - $containersCount = $runLogContainers.count; - - # Get the log from each log container. - Write-Host 'Checking the logs:'; - $found = $false; - foreach ($container in $runLogContainers.value) { - # Search only the last 3 task logs. - if ($container.id -gt $containersCount - 3) { - $container.id; - $uri = $container.url; - $uri; - $log = Invoke-RestMethod "$uri" -Method Get -ContentType "application/json" -Headers $header; - - # Search for the success string. - if ($log.Contains($taskToCheck)) { - $log; - if ($log.Contains($successStringToCheckFor)) { - $found = $true; - $mess = 'String "' + $successStringToCheckFor + '" found in log #' + $container.id; - Write-Host $mess; - } - } else { - ($log -split '\r?\n')[0] + '...'; # Print first line - } - } - } - - # If not found, throw an error. - if (!$found) { - Write-Host; - $mess = "$taskToCheck failed. Is there a PR associated with this build? String '" + $successStringToCheckFor + "' not found in the log."; - throw $mess; - } - displayName: 'Verify publish compat results success' - ignoreLASTEXITCODE: true - continueOnError: true + keepCommentHistory: false + # Skip for forks, as secret tokens are not available to them. condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'), ne(variables['System.PullRequest.IsFork'], 'True')) - script: | diff --git a/build/yaml/ci-test-steps.yml b/build/yaml/ci-test-steps.yml index b59cf3d99e..6a2e1d617e 100644 --- a/build/yaml/ci-test-steps.yml +++ b/build/yaml/ci-test-steps.yml @@ -75,7 +75,7 @@ steps: $buildTarget = $env:BuildConfiguration.Split("-")[0]; - $env:BotBuilderDll.Split(",") | ForEach { + $env:PackageNames.Split(",") | ForEach { $library = $_.Trim() Write-Host $library From 26025a822355004f6810d720606d5eca21804cc1 Mon Sep 17 00:00:00 2001 From: Bruce Haley Date: Mon, 3 Oct 2022 15:05:21 -0700 Subject: [PATCH 2/6] Load all DLLs for compare --- build/yaml/botbuilder-dotnet-ci.yml | 48 ++++++++++++++++++++++++-- build/yaml/ci-api-validation-steps.yml | 42 ++++++++++------------ build/yaml/ci-test-steps.yml | 2 +- 3 files changed, 64 insertions(+), 28 deletions(-) diff --git a/build/yaml/botbuilder-dotnet-ci.yml b/build/yaml/botbuilder-dotnet-ci.yml index 3b61d6ad16..e3e63b9592 100644 --- a/build/yaml/botbuilder-dotnet-ci.yml +++ b/build/yaml/botbuilder-dotnet-ci.yml @@ -15,8 +15,8 @@ trigger: none # ci trigger is set in ADO pr: none # pr trigger is set in ADO variables: - ApiCompatVersion: 4.6.3 - PackageNames: Microsoft.Bot.Builder.AI.Luis,Microsoft.Bot.Builder.AI.QnA,Microsoft.Bot.Builder.ApplicationInsights,Microsoft.Bot.Builder.Azure,Microsoft.Bot.Builder.Dialogs,Microsoft.Bot.Builder.Integration.ApplicationInsights.Core,Microsoft.Bot.Builder.Integration.AspNet.Core,Microsoft.Bot.Builder.TemplateManager,Microsoft.Bot.Builder.Testing,Microsoft.Bot.Builder,Microsoft.Bot.Configuration,Microsoft.Bot.Connector,Microsoft.Bot.Schema,Microsoft.Bot.Streaming + ApiContractVersion: 4.6.3 + PackagesToValidate: Microsoft.Bot.Builder.AI.Luis,Microsoft.Bot.Builder.AI.QnA,Microsoft.Bot.Builder.ApplicationInsights,Microsoft.Bot.Builder.Azure,Microsoft.Bot.Builder.Dialogs,Microsoft.Bot.Builder.Integration.ApplicationInsights.Core,Microsoft.Bot.Builder.Integration.AspNet.Core,Microsoft.Bot.Builder.TemplateManager,Microsoft.Bot.Builder.Testing,Microsoft.Bot.Builder,Microsoft.Bot.Configuration,Microsoft.Bot.Connector,Microsoft.Bot.Schema,Microsoft.Bot.Streaming BuildConfiguration: Debug-Windows BuildPlatform: any cpu IsBuildServer: true # This is consumed by tests\Microsoft.Bot.Builder.Dialogs.Declarative.Tests\SchemaTestsFixture.cs. @@ -84,10 +84,52 @@ stages: jobs: - job: generate_multiconfig_var steps: + # Download contract .dlls + - powershell: | + # Set up tokens for private sources + $file = "$(Build.SourcesDirectory)\nuget.config"; + $ErrorActionPreference = 'SilentlyContinue'; + nuget sources update -ConfigFile "$file" -Name "SDK_Dotnet_V4_org" -username "ContractDlls" -password "$(System.AccessToken)"; + nuget sources update -ConfigFile "$file" -Name "PowerFx" -username "ContractDlls" -password "$(System.AccessToken)"; + $ErrorActionPreference = 'Continue'; + '-------------'; get-content "$file"; '==================='; + + $PackageNames = "$(PackagesToValidate)"; + $ApiContractVersion = "$(ApiContractVersion)"; + $TempContractInstallDirectory = ".\TempContractInstallDir"; + $OutputDirectory = ".\ContractDlls"; + + Write-Host "`nDownloading packages version $ApiContractVersion."; + + New-Item -ItemType directory -Path $OutputDirectory -Force | Out-Null; + + $Names = $PackageNames.Split(','); + + foreach ($Name in $Names) { + "---- $Name ------------------"; + nuget install $Name -Version $ApiContractVersion -OutputDirectory $TempContractInstallDirectory -DirectDownload -NonInteractive; + + if ($LASTEXITCODE -eq 0) { + Copy-Item "$TempContractInstallDirectory\$Name.$ApiContractVersion\lib\netstandard2.0\$Name.dll" $OutputDirectory; + } + else { + Write-Host "##vso[task.complete result=Failed;]"; + } + } + displayName: 'Download Contract DLLs to ContractDlls folder' + continueOnError: true + + - task: PublishPipelineArtifact@0 + inputs: + artifactName: 'ContractDlls' + targetPath: ContractDlls + displayName: 'Push to ContractDlls in Artifacts' + continueOnError: true + - powershell: | $multiconfig = '{'; if ("$(Build.Reason)" -in ('Schedule', 'Manual')) { - $env:PackageNames.Split(",") | ForEach { + $env:PackagesToValidate.Split(",") | ForEach { $library = $_.Trim() $threadName = $library -replace "Microsoft.", ""; $multiconfig += "'" + $threadName + "':{'PackageName':'" + $library + "'}, "; diff --git a/build/yaml/ci-api-validation-steps.yml b/build/yaml/ci-api-validation-steps.yml index 4c83e7fa60..be50d1c572 100644 --- a/build/yaml/ci-api-validation-steps.yml +++ b/build/yaml/ci-api-validation-steps.yml @@ -1,46 +1,40 @@ steps: - task: DownloadPipelineArtifact@2 - displayName: 'Download $(PackageName).dll from Artifacts' + displayName: 'Download BotBuilderDLLs from Artifacts' inputs: artifactName: 'BotBuilderDLLs-Debug-Windows-netcoreapp31' - patterns: '$(PackageName).dll' - targetPath: '$(System.ArtifactsDirectory)/Artifacts' + targetPath: '$(System.ArtifactsDirectory)/OutputDlls' -- task: NuGetCommand@2 - displayName: 'NuGet install $(PackageName) v $(ApiCompatVersion)' - inputs: - command: custom - arguments: 'install $(PackageName) -Version $(ApiCompatVersion) -OutputDirectory $(System.DefaultWorkingDirectory)\DownloadedNuGet' - -- task: CmdLine@1 - displayName: 'Run dir' +- task: DownloadPipelineArtifact@2 + displayName: 'Download ContractDlls from Artifacts' inputs: - filename: dir - arguments: '..\*.* /s' - enabled: false + artifactName: 'ContractDlls' + targetPath: '$(System.ArtifactsDirectory)/ContractDlls' - task: SOUTHWORKS.binaries-comparer.custom-build-release-task.binaries-comparer@0 displayName: 'Compare Binaries' inputs: - contractsRootFolder: 'DownloadedNuGet\$(PackageName).$(ApiCompatVersion)\lib\netstandard2.0' + contractsRootFolder: '$(System.ArtifactsDirectory)/ContractDlls' contractsFileName: '$(PackageName).dll' - implFolder: '$(System.ArtifactsDirectory)/Artifacts' + implFolder: '$(System.ArtifactsDirectory)/OutputDlls' failOnIssue: false resolveFx: false generateLog: true - outputFilename: '$(PackageName).$(ApiCompatVersion).CompatResults.txt' + outputFilename: '$(PackageName).$(ApiContractVersion).CompatResults.txt' outputFolder: '$(Build.ArtifactStagingDirectory)' useBaseline: false + continueOnError: false - powershell: | - $filePath = "$(Build.ArtifactStagingDirectory)\$(PackageName).$(ApiCompatVersion).CompatResults.txt" - $nugetLink = "compared against [version $(ApiCompatVersion)](https://www.nuget.org/packages/$(PackageName)/$(ApiCompatVersion))."; + $filePath = "$(Build.ArtifactStagingDirectory)\$(PackageName).$(ApiContractVersion).CompatResults.txt" + $nugetLink = "compared against [version $(ApiContractVersion)](https://www.nuget.org/packages/$(PackageName)/$(ApiContractVersion))."; Write-Host "Compatibility Check:"; if (-not (Test-Path $filePath)) { - $content = "The binary compatibility report for library '$(PackageName)' wasn't generated. This may have happened because the NuGet library '$(PackageName)' for version '$(ApiCompatVersion)' was unavailable or a connectivity issue." - New-Item -Path '$(Build.ArtifactStagingDirectory)' -Name '$(PackageName).$(ApiCompatVersion).CompatResults.txt' -ItemType "file" -Value $content + $content = "The binary compatibility report for library '$(PackageName)' wasn't generated. This may have happened because the NuGet library '$(PackageName)' for version '$(ApiContractVersion)' was unavailable or a connectivity issue." + New-Item -Path '$(Build.ArtifactStagingDirectory)' -Name '$(PackageName).$(ApiContractVersion).CompatResults.txt' -ItemType "file" -Value $content $content; + Write-Host "##vso[task.complete result=Failed;]"; return; } @@ -112,17 +106,17 @@ steps: $baseline; } displayName: 'Compatibility Check' + continueOnError: false condition: succeededOrFailed() - task: PublishBuildArtifacts@1 displayName: 'Publish Compat Results artifact' inputs: - ArtifactName: '$(PackageName).$(ApiCompatVersion).CompatResults' + ArtifactName: '$(PackageName).$(ApiContractVersion).CompatResults' condition: succeededOrFailed() - script: | - cd .. - dir /s + dir .. /s displayName: 'Dir workspace' continueOnError: true condition: succeededOrFailed() diff --git a/build/yaml/ci-test-steps.yml b/build/yaml/ci-test-steps.yml index 6a2e1d617e..88ccf6fee2 100644 --- a/build/yaml/ci-test-steps.yml +++ b/build/yaml/ci-test-steps.yml @@ -75,7 +75,7 @@ steps: $buildTarget = $env:BuildConfiguration.Split("-")[0]; - $env:PackageNames.Split(",") | ForEach { + $env:PackagesToValidate.Split(",") | ForEach { $library = $_.Trim() Write-Host $library From 1fa03f497c25b5c37821c8e173780df6e53c1b25 Mon Sep 17 00:00:00 2001 From: Bruce Haley Date: Mon, 3 Oct 2022 15:31:34 -0700 Subject: [PATCH 3/6] Add test compares --- build/yaml/botbuilder-dotnet-ci.yml | 1 - build/yaml/ci-api-validation-steps.yml | 28 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/build/yaml/botbuilder-dotnet-ci.yml b/build/yaml/botbuilder-dotnet-ci.yml index e3e63b9592..d6db6a88cc 100644 --- a/build/yaml/botbuilder-dotnet-ci.yml +++ b/build/yaml/botbuilder-dotnet-ci.yml @@ -90,7 +90,6 @@ stages: $file = "$(Build.SourcesDirectory)\nuget.config"; $ErrorActionPreference = 'SilentlyContinue'; nuget sources update -ConfigFile "$file" -Name "SDK_Dotnet_V4_org" -username "ContractDlls" -password "$(System.AccessToken)"; - nuget sources update -ConfigFile "$file" -Name "PowerFx" -username "ContractDlls" -password "$(System.AccessToken)"; $ErrorActionPreference = 'Continue'; '-------------'; get-content "$file"; '==================='; diff --git a/build/yaml/ci-api-validation-steps.yml b/build/yaml/ci-api-validation-steps.yml index be50d1c572..8c097d0227 100644 --- a/build/yaml/ci-api-validation-steps.yml +++ b/build/yaml/ci-api-validation-steps.yml @@ -25,6 +25,34 @@ steps: useBaseline: false continueOnError: false +- task: SOUTHWORKS.binaries-comparer.custom-build-release-task.binaries-comparer@0 + displayName: 'Compare Binaries - Contract-to-contract' + inputs: + contractsRootFolder: '$(System.ArtifactsDirectory)/ContractDlls' + contractsFileName: '$(PackageName).dll' + implFolder: '$(System.ArtifactsDirectory)/ContractDlls' + failOnIssue: false + resolveFx: false + generateLog: true + outputFilename: '$(PackageName).$(ApiContractVersion).CompatResults-c2c.txt' + outputFolder: '$(Build.ArtifactStagingDirectory)' + useBaseline: false + continueOnError: false + +- task: SOUTHWORKS.binaries-comparer.custom-build-release-task.binaries-comparer@0 + displayName: 'Compare Binaries - Implementation-to-implementation' + inputs: + contractsRootFolder: '$(System.ArtifactsDirectory)/OutputDlls' + contractsFileName: '$(PackageName).dll' + implFolder: '$(System.ArtifactsDirectory)/OutputDlls' + failOnIssue: false + resolveFx: false + generateLog: true + outputFilename: '$(PackageName).$(ApiContractVersion).CompatResults-i2i.txt' + outputFolder: '$(Build.ArtifactStagingDirectory)' + useBaseline: false + continueOnError: false + - powershell: | $filePath = "$(Build.ArtifactStagingDirectory)\$(PackageName).$(ApiContractVersion).CompatResults.txt" $nugetLink = "compared against [version $(ApiContractVersion)](https://www.nuget.org/packages/$(PackageName)/$(ApiContractVersion))."; From 36ba422114de5a6a9beb1859e4800831ef3f32fc Mon Sep 17 00:00:00 2001 From: Bruce Haley Date: Mon, 3 Oct 2022 16:11:06 -0700 Subject: [PATCH 4/6] Cleanup --- build/yaml/botbuilder-dotnet-ci.yml | 2 ++ build/yaml/ci-api-validation-steps.yml | 28 -------------------------- build/yaml/ci-post-to-github-steps.yml | 3 +-- build/yaml/ci-test-steps.yml | 3 +-- 4 files changed, 4 insertions(+), 32 deletions(-) diff --git a/build/yaml/botbuilder-dotnet-ci.yml b/build/yaml/botbuilder-dotnet-ci.yml index d6db6a88cc..17d53f8f85 100644 --- a/build/yaml/botbuilder-dotnet-ci.yml +++ b/build/yaml/botbuilder-dotnet-ci.yml @@ -84,6 +84,8 @@ stages: jobs: - job: generate_multiconfig_var steps: + - template: sdk_dotnet_v4_org-feed-setup-steps.yml + # Download contract .dlls - powershell: | # Set up tokens for private sources diff --git a/build/yaml/ci-api-validation-steps.yml b/build/yaml/ci-api-validation-steps.yml index 8c097d0227..be50d1c572 100644 --- a/build/yaml/ci-api-validation-steps.yml +++ b/build/yaml/ci-api-validation-steps.yml @@ -25,34 +25,6 @@ steps: useBaseline: false continueOnError: false -- task: SOUTHWORKS.binaries-comparer.custom-build-release-task.binaries-comparer@0 - displayName: 'Compare Binaries - Contract-to-contract' - inputs: - contractsRootFolder: '$(System.ArtifactsDirectory)/ContractDlls' - contractsFileName: '$(PackageName).dll' - implFolder: '$(System.ArtifactsDirectory)/ContractDlls' - failOnIssue: false - resolveFx: false - generateLog: true - outputFilename: '$(PackageName).$(ApiContractVersion).CompatResults-c2c.txt' - outputFolder: '$(Build.ArtifactStagingDirectory)' - useBaseline: false - continueOnError: false - -- task: SOUTHWORKS.binaries-comparer.custom-build-release-task.binaries-comparer@0 - displayName: 'Compare Binaries - Implementation-to-implementation' - inputs: - contractsRootFolder: '$(System.ArtifactsDirectory)/OutputDlls' - contractsFileName: '$(PackageName).dll' - implFolder: '$(System.ArtifactsDirectory)/OutputDlls' - failOnIssue: false - resolveFx: false - generateLog: true - outputFilename: '$(PackageName).$(ApiContractVersion).CompatResults-i2i.txt' - outputFolder: '$(Build.ArtifactStagingDirectory)' - useBaseline: false - continueOnError: false - - powershell: | $filePath = "$(Build.ArtifactStagingDirectory)\$(PackageName).$(ApiContractVersion).CompatResults.txt" $nugetLink = "compared against [version $(ApiContractVersion)](https://www.nuget.org/packages/$(PackageName)/$(ApiContractVersion))."; diff --git a/build/yaml/ci-post-to-github-steps.yml b/build/yaml/ci-post-to-github-steps.yml index 8ad6a2c3bc..e870edc924 100644 --- a/build/yaml/ci-post-to-github-steps.yml +++ b/build/yaml/ci-post-to-github-steps.yml @@ -32,8 +32,7 @@ steps: condition: and(succeeded(), eq(variables['Build.Reason'], 'PullRequest'), ne(variables['System.PullRequest.IsFork'], 'True')) - script: | - cd .. - dir /s + dir .. /s displayName: 'Dir workspace' continueOnError: true condition: succeededOrFailed() diff --git a/build/yaml/ci-test-steps.yml b/build/yaml/ci-test-steps.yml index 88ccf6fee2..4a376ef3b8 100644 --- a/build/yaml/ci-test-steps.yml +++ b/build/yaml/ci-test-steps.yml @@ -92,8 +92,7 @@ steps: continueOnError: true - script: | - cd .. - dir *.* /s + dir .. /s displayName: 'Dir workspace' continueOnError: true condition: succeededOrFailed() From e2dc7490e43a5086d11d06e321e24724cb7eeeeb Mon Sep 17 00:00:00 2001 From: Bruce Haley Date: Mon, 3 Oct 2022 17:13:46 -0700 Subject: [PATCH 5/6] Get contract from nuget.org instead of SDK_Dotnet_V4_org --- build/yaml/botbuilder-dotnet-ci.yml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/build/yaml/botbuilder-dotnet-ci.yml b/build/yaml/botbuilder-dotnet-ci.yml index 17d53f8f85..bd6da345da 100644 --- a/build/yaml/botbuilder-dotnet-ci.yml +++ b/build/yaml/botbuilder-dotnet-ci.yml @@ -84,17 +84,8 @@ stages: jobs: - job: generate_multiconfig_var steps: - - template: sdk_dotnet_v4_org-feed-setup-steps.yml - - # Download contract .dlls + # Download contract .dlls from nuget.org. - powershell: | - # Set up tokens for private sources - $file = "$(Build.SourcesDirectory)\nuget.config"; - $ErrorActionPreference = 'SilentlyContinue'; - nuget sources update -ConfigFile "$file" -Name "SDK_Dotnet_V4_org" -username "ContractDlls" -password "$(System.AccessToken)"; - $ErrorActionPreference = 'Continue'; - '-------------'; get-content "$file"; '==================='; - $PackageNames = "$(PackagesToValidate)"; $ApiContractVersion = "$(ApiContractVersion)"; $TempContractInstallDirectory = ".\TempContractInstallDir"; From c843f998f84944f3ebd4d59f586b6a7391986643 Mon Sep 17 00:00:00 2001 From: Bruce Haley Date: Mon, 3 Oct 2022 18:34:59 -0700 Subject: [PATCH 6/6] Add ApiCompatBaseline.txt --- ApiCompatBaseline.txt | 3 +++ build/yaml/ci-api-validation-steps.yml | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 ApiCompatBaseline.txt diff --git a/ApiCompatBaseline.txt b/ApiCompatBaseline.txt new file mode 100644 index 0000000000..774532d1f4 --- /dev/null +++ b/ApiCompatBaseline.txt @@ -0,0 +1,3 @@ +TypesMustExist : Type 'Microsoft.Bot.Builder.Azure.CosmosDbCustomClientOptions' does not exist in the implementation but it does exist in the contract. +TypesMustExist : Type 'Microsoft.Bot.Builder.Azure.CosmosDbStorage' does not exist in the implementation but it does exist in the contract. +TypesMustExist : Type 'Microsoft.Bot.Builder.Azure.CosmosDbStorageOptions' does not exist in the implementation but it does exist in the contract. \ No newline at end of file diff --git a/build/yaml/ci-api-validation-steps.yml b/build/yaml/ci-api-validation-steps.yml index be50d1c572..0e1b378eb6 100644 --- a/build/yaml/ci-api-validation-steps.yml +++ b/build/yaml/ci-api-validation-steps.yml @@ -22,7 +22,8 @@ steps: generateLog: true outputFilename: '$(PackageName).$(ApiContractVersion).CompatResults.txt' outputFolder: '$(Build.ArtifactStagingDirectory)' - useBaseline: false + useBaseline: true + baselineFile: ApiCompatBaseline.txt continueOnError: false - powershell: |