From 840683e3f0be9e1139c5b7c1cb7a37113a5cf278 Mon Sep 17 00:00:00 2001 From: Anthony Dresser Date: Mon, 18 Nov 2019 13:50:02 -0800 Subject: [PATCH] Build yamls (#8360) * add darwin build * add global product build * add linux build * fix build * fix linux; add win32 * formatting * formatting * formatting * formatting * fix win32 * fix windows * fix python * fix linux display * fix linux * fix windows naming * fix windows timeout * add tagging * add env for building * add schedule --- .../darwin/sql-product-build-darwin.yml | 142 ++++++ .../linux/sql-product-build-linux.yml | 162 +++++++ build/azure-pipelines/sql-product-build.yml | 33 ++ .../win32/sql-product-build-win32.yml | 405 ++++++++++++++++++ 4 files changed, 742 insertions(+) create mode 100644 build/azure-pipelines/darwin/sql-product-build-darwin.yml create mode 100644 build/azure-pipelines/linux/sql-product-build-linux.yml create mode 100644 build/azure-pipelines/sql-product-build.yml create mode 100644 build/azure-pipelines/win32/sql-product-build-win32.yml diff --git a/build/azure-pipelines/darwin/sql-product-build-darwin.yml b/build/azure-pipelines/darwin/sql-product-build-darwin.yml new file mode 100644 index 0000000000..6f676f7a67 --- /dev/null +++ b/build/azure-pipelines/darwin/sql-product-build-darwin.yml @@ -0,0 +1,142 @@ +steps: + - task: NodeTool@0 + inputs: + versionSpec: '10.15.3' + + - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3 + inputs: + versionSpec: '1.x' + + - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 + inputs: + keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock, !samples/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules, !samples/**/node_modules' + vstsFeed: 'BuildCache' + + - script: | + set -e + CHILD_CONCURRENCY=1 yarn --frozen-lockfile + displayName: Install dependencies + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) + + - task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 + inputs: + keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock, !samples/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules, !samples/**/node_modules' + vstsFeed: 'BuildCache' + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) + + - script: | + set -e + yarn postinstall + displayName: Run postinstall scripts + condition: and(succeeded(), eq(variables['CacheRestored'], 'true')) + + - script: | + set -e + yarn gulp mixin + displayName: Mix in quality + + - script: | + set -e + yarn gulp vscode-darwin-min + displayName: Build + + - script: | + set -e + yarn gulp install-sqltoolsservice + displayName: Install sqltoolsservice + + - task: ArchiveFiles@2 # WHY ARE WE DOING THIS? + displayName: 'Archive build scripts source' + inputs: + rootFolderOrFile: '$(Build.SourcesDirectory)/build' + archiveType: tar + archiveFile: '$(Build.BinariesDirectory)/source.tar.gz' + + - task: PublishBuildArtifacts@1 # WHY ARE WE DOING THIS? + displayName: 'Publish Artifact: build scripts source' + inputs: + PathtoPublish: '$(Build.BinariesDirectory)/source.tar.gz' + ArtifactName: source + + - script: | + set -e + cd $(Build.SourcesDirectory)/../azuredatastudio-darwin + zip -r -y $(Build.ArtifactStagingDirectory)/azuredatastudio-darwin.zip "Azure Data Studio.app" + displayName: 'Stable - Run zip' + condition: and(succeeded(), eq(variables['VSCODE_QUALITY'], 'stable')) + + - script: | + set -e + cd $(Build.SourcesDirectory)/../azuredatastudio-darwin + zip -r -y $(Build.ArtifactStagingDirectory)/azuredatastudio-darwin.zip "Azure Data Studio - Insiders.app" + displayName: 'Insiders - Run zip' + condition: and(succeeded(), eq(variables['VSCODE_QUALITY'], 'insider')) + + - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1 + displayName: 'ESRP CodeSigning' + inputs: + ConnectedServiceName: 'Code Signing' + FolderPath: '$(Build.ArtifactStagingDirectory)' + Pattern: 'azuredatastudio-darwin.zip' + signConfigType: inlineSignParams + inlineOperation: | + [ + { + "keyCode": "CP-401337-Apple", + "operationSetCode": "MacAppDeveloperSign", + "parameters": [], + "toolName": "sign", + "toolVersion": "1.0" + } + ] + SessionTimeout: 20 + + - script: | # WHY ARE WE DOING THIS? + set -e + zip -d $(Build.ArtifactStagingDirectory)/azuredatastudio-darwin.zip "Azure Data Studio.pkg" + displayName: 'Stable - Remove .pkg from signed zip' + condition: and(succeeded(), eq(variables['VSCODE_QUALITY'], 'stable')) + + - script: | # WHY ARE WE DOING THIS? + set -e + zip -d $(Build.ArtifactStagingDirectory)/azuredatastudio-darwin.zip "Azure Data Studio - Insiders.pkg" + displayName: 'Insiders - Remove .pkg from signed zip' + condition: and(succeeded(), eq(variables['VSCODE_QUALITY'], 'insider')) + + - script: | + set -e + ./scripts/test.sh --build --coverage --reporter mocha-junit-reporter + displayName: Run unit tests + condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true')) + timeoutInMinutes: 20 + continueOnError: true + + - script: | # WHY ARE WE DOING THIS? + set -e + BUILD="$(Build.SourcesDirectory)/../azuredatastudio-darwin" + PACKAGEJSON=`ls $BUILD/*.app/Contents/Resources/app/package.json` + VERSION=`node -p "require(\"$PACKAGEJSON\").version"` + COMMIT_ID=`git rev-parse HEAD` + + echo -e "{ \"version\": \"$VERSION\", \"quality\": \"$VSCODE_QUALITY\", \"commit\": \"$COMMIT_ID\" }" > "$(Build.ArtifactStagingDirectory)/version.json" + displayName: 'Create version.json' + + - script: | # WHY ARE WE DOING THIS? + set -e + for f in * + do + shasum -a 256 "$f" >> sha256hashes.txt + done + workingDirectory: '$(Build.ArtifactStagingDirectory)' + displayName: 'Get SHA256 Hashes' + continueOnError: true + + - script: 'echo "##vso[build.addbuildtag]Scheduled" ' + displayName: 'Add scheduled tag if needed' + condition: and(in(variables['Agent.JobStatus'], 'Succeeded'), eq(variables['Build.Reason'], 'Schedule')) + + - script: 'echo "##vso[build.addbuildtag]AutoRelease" ' + displayName: 'Add AutoRelease tag if needed' + condition: and(in(variables['Agent.JobStatus'], 'Succeeded'), eq(variables['AUTO_RELEASE'], 'true')) diff --git a/build/azure-pipelines/linux/sql-product-build-linux.yml b/build/azure-pipelines/linux/sql-product-build-linux.yml new file mode 100644 index 0000000000..9a974e84d8 --- /dev/null +++ b/build/azure-pipelines/linux/sql-product-build-linux.yml @@ -0,0 +1,162 @@ +steps: + - task: NodeTool@0 + inputs: + versionSpec: '10.15.1' + + - script: | + set -e + sudo apt-get update + sudo apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb libgtk-3-0 libkrb5-dev #{{SQL CARBON EDIT}} add kerberos dep + sudo cp build/azure-pipelines/linux/xvfb.init /etc/init.d/xvfb + sudo chmod +x /etc/init.d/xvfb + sudo update-rc.d xvfb defaults + sudo service xvfb start + displayName: 'System Installs' + + - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3 + inputs: + versionSpec: "1.x" + + - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 + inputs: + keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock, !samples/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules, !samples/**/node_modules' + vstsFeed: 'BuildCache' + + - script: | + set -e + CHILD_CONCURRENCY=1 yarn --frozen-lockfile + displayName: Install dependencies + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) + + - task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 + inputs: + keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock, !samples/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules, !samples/**/node_modules' + vstsFeed: 'BuildCache' + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) + + - script: | + set -e + yarn postinstall + displayName: Run postinstall scripts + condition: and(succeeded(), eq(variables['CacheRestored'], 'true')) + + - script: | + set -e + yarn gulp mixin + displayName: Mix in quality + + - script: | + set -e + yarn gulp vscode-linux-x64-min + displayName: Build + + - script: | + set -e + yarn gulp install-sqltoolsservice + displayName: Install sqltoolsservice + + - task: ArchiveFiles@2 # WHY ARE WE DOING THIS? + displayName: 'Archive build scripts source' + inputs: + rootFolderOrFile: '$(Build.SourcesDirectory)/build' + archiveType: tar + archiveFile: '$(Build.BinariesDirectory)/source.tar.gz' + + - task: PublishBuildArtifacts@1 # WHY ARE WE DOING THIS? + displayName: 'Publish Artifact: build scripts source' + inputs: + PathtoPublish: '$(Build.BinariesDirectory)/source.tar.gz' + ArtifactName: source + + - script: DISPLAY=:10 ./scripts/test-extensions-unit.sh + displayName: 'Run Stable Extension Unit Tests' + condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true')) + + - script: DISPLAY=:10 ./scripts/test-extensions-unit-unstable.sh + displayName: 'Run Unstable Extension Unit Tests' + continueOnError: true + condition: and(succeeded(), eq(variables['RUN_UNSTABLE_TESTS'], 'true')) + + - script: | + set -e + yarn gulp vscode-linux-x64-build-deb + displayName: Build Deb + + - script: | + set -e + yarn gulp vscode-linux-x64-build-rpm + displayName: Build Rpm + + - task: ArchiveFiles@1 # WHY ARE WE DOING THIS? + displayName: 'Archive files ' + inputs: + rootFolder: '$(Build.SourcesDirectory)/../azuredatastudio-linux-x64' + archiveType: tar + archiveFile: '$(Build.ArtifactStagingDirectory)/azuredatastudio-linux-x64.tar.gz' + + - task: CopyFiles@2 + displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory) (deb)' + inputs: + SourceFolder: '$(Build.SourcesDirectory)/.build/linux/deb/amd64/deb' + Contents: '*.deb' + TargetFolder: '$(Build.ArtifactStagingDirectory)' + + - task: CopyFiles@2 + displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory) (rpm)' + inputs: + SourceFolder: '$(Build.SourcesDirectory)/.build/linux/rpm/x86_64/' + Contents: '*.rpm' + TargetFolder: '$(Build.ArtifactStagingDirectory)' + + - script: | # WHY ARE WE DOING THIS? + set -e + BUILD="$(Build.SourcesDirectory)/../azuredatastudio-linux-x64" + PACKAGEJSON="$BUILD/resources/app/package.json" + VERSION=$(node -p "require(\"$PACKAGEJSON\").version") + COMMIT_ID=$(git rev-parse HEAD) + + echo -e "{ \"version\": \"$VERSION\", \"quality\": \"$VSCODE_QUALITY\", \"commit\": \"$COMMIT_ID\" }" > "$(Build.ArtifactStagingDirectory)/version.json" + displayName: 'Create version.json' + + - script: | # WHY ARE WE DOING THIS? + set -e + for f in * + do + shasum -a 256 "$f" >> sha256hashes.txt + done + workingDirectory: '$(Build.ArtifactStagingDirectory)' + displayName: 'Get SHA256 Hashes' + continueOnError: true + + - task: PublishBuildArtifacts@1 + displayName: 'Publish Artifact: drop' + + - task: PublishTestResults@2 + displayName: 'Publish Test Results test-results.xml' + inputs: + testResultsFiles: 'test-results.xml' + searchFolder: '$(Build.SourcesDirectory)' + continueOnError: true + condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true')) + + - task: PublishCodeCoverageResults@1 + displayName: 'Publish code coverage from $(Build.SourcesDirectory)/.build/coverage/cobertura-coverage.xml' + inputs: + codeCoverageTool: Cobertura + summaryFileLocation: '$(Build.SourcesDirectory)/.build/coverage/cobertura-coverage.xml' + reportDirectory: '$(Build.SourcesDirectory)/.build/coverage' + continueOnError: true + + - script: 'echo "##vso[build.addbuildtag]Scheduled" ' + displayName: 'Add scheduled tag if needed' + condition: and(in(variables['Agent.JobStatus'], 'Succeeded'), eq(variables['Build.Reason'], 'Schedule')) + + - script: 'echo "##vso[build.addbuildtag]AutoRelease" ' + displayName: 'Add AutoRelease tag if needed copy' + condition: and(in(variables['Agent.JobStatus'], 'Succeeded'), eq(variables['AUTO_RELEASE'], 'true')) + + - script: 'echo "##vso[build.addbuildtag]PerfTestCandidate" ' + displayName: 'Add PerfTestCandidate tag if needed' + condition: and(in(variables['Agent.JobStatus'], 'Succeeded'), eq(variables['VSCODE_QUALITY'], 'insider')) diff --git a/build/azure-pipelines/sql-product-build.yml b/build/azure-pipelines/sql-product-build.yml new file mode 100644 index 0000000000..157ede214c --- /dev/null +++ b/build/azure-pipelines/sql-product-build.yml @@ -0,0 +1,33 @@ +jobs: +- job: macOS + condition: eq(variables['VSCODE_BUILD_MACOS'], 'true') + pool: + vmImage: macOS 10.13 + steps: + - template: darwin/sql-product-build-darwin.yml + +- job: Linux + condition: eq(variables['VSCODE_BUILD_LINUX'], 'true') + pool: + vmImage: 'Ubuntu-16.04' + steps: + - template: linux/sql-product-build-linux.yml + +- job: Windows + condition: eq(variables['VSCODE_BUILD_WIN32'], 'true') + pool: + name: mssqltools + steps: + - template: win32/sql-product-build-win32.yml + timeoutInMinutes: 120 + cancelTimeoutInMinutes: 5 + +trigger: none +pr: none + +schedules: +- cron: "0 5 * * Mon-Fri" + displayName: Mon-Fri at 7:00 + branches: + include: + - master diff --git a/build/azure-pipelines/win32/sql-product-build-win32.yml b/build/azure-pipelines/win32/sql-product-build-win32.yml new file mode 100644 index 0000000000..15ca23d384 --- /dev/null +++ b/build/azure-pipelines/win32/sql-product-build-win32.yml @@ -0,0 +1,405 @@ +steps: + - task: NodeTool@0 + inputs: + versionSpec: "10.15.1" + + - task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@3 + inputs: + versionSpec: "1.x" + + # - task: UsePythonVersion@0 + # inputs: + # versionSpec: '2.x' + # addToPath: true + + - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 + inputs: + keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock, !samples/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules, !samples/**/node_modules' + vstsFeed: 'BuildCache' + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + $env:CHILD_CONCURRENCY="1" + exec { yarn --frozen-lockfile } + displayName: Install dependencies + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) + + - task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 + inputs: + keyfile: '.yarnrc, remote/.yarnrc, **/yarn.lock, !**/node_modules/**/yarn.lock, !**/.*/**/yarn.lock, !samples/**/yarn.lock' + targetfolder: '**/node_modules, !**/node_modules/**/node_modules, !samples/**/node_modules' + vstsFeed: 'BuildCache' + condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { yarn postinstall } + displayName: Run postinstall scripts + condition: and(succeeded(), eq(variables['CacheRestored'], 'true')) + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { yarn gulp "mixin" } + displayName: Mix in quality + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { yarn gulp "vscode-win32-x64-min" } + displayName: Build + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { yarn gulp "install-sqltoolsservice" } + displayName: Install sqltoolsservice + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { yarn gulp "install-ssmsmin" } + displayName: Install ssmsmin + + - task: ArchiveFiles@2 # WHY + displayName: 'Archive build scripts source' + inputs: + rootFolderOrFile: '$(Build.SourcesDirectory)/build' + archiveType: tar + archiveFile: '$(Build.BinariesDirectory)/source.tar.gz' + + - task: PublishBuildArtifacts@1 # WHY + displayName: 'Publish Artifact: build scripts source' + inputs: + PathtoPublish: '$(Build.BinariesDirectory)/source.tar.gz' + ArtifactName: source + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { .\scripts\test-unstable.bat --build --coverage --reporter mocha-junit-reporter } + continueOnError: true + condition: and(succeeded(), eq(variables['RUN_UNSTABLE_TESTS'], 'true')) + displayName: Run unstable tests + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { .\scripts\sql-test-integration.bat } + continueOnError: true + condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true')) + displayName: Run stable tests + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { .\scripts\sql-test-integration.bat } + continueOnError: true + condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true')) + displayName: Run release tests + env: + ADS_TEST_GREP: (.*@REL@|integration test setup) + ADS_TEST_INVERT_GREP: 0 + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { .\scripts\sql-test-integration-unstable.bat } + continueOnError: true + condition: and(succeeded(), eq(variables['RUN_UNSTABLE_TESTS'], 'true')) + displayName: Run unstable integration tests + + - task: CopyFiles@2 + displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)/vsix' + inputs: + SourceFolder: '$(Build.SourcesDirectory)/../vsix' + TargetFolder: '$(Build.ArtifactStagingDirectory)/vsix' + + - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1 + displayName: 'ESRP CodeSigning - Build files - sha256 only' + inputs: + ConnectedServiceName: 'Code Signing' + FolderPath: '$(Build.SourcesDirectory)/../azuredatastudio-win32-x64' + Pattern: 'azuredatastudio.exe,azuredatastudio-insider.exe,watcher.exe,inno_updater.exe,7z.exe,mksnapshot.exe,Compil32.exe,ISCC.exe,islzma32.exe,islzma64.exe,winpty-agent.exe,rcedit.exe,rg.exe,CodeHelper.exe,CodeHelper.exe,CodeHelper.exe,CodeHelper.exe,electron.exe,chromedriver.exe,launcher.exe,ffmpeg.dll,libEGL.dll,libGLESv2.dll,node.dll,7-zip.dll,7-zip32.dll,7z.dll,isbunzip.dll,isbzip.dll,ISCmplr.dll,islzma.dll,ISPP.dll,isscint.dll,isunzlib.dll,iszlib.dll,winpty.dll,ffmpeg.dll,libEGL.dll,libGLESv2.dll,node.dll,MicrosoftSqlToolsCredentials.exe,MicrosoftSqlToolsServiceLayer.exe,SqlSerializationService.exe,SqlToolsResourceProviderService.exe,Microsoft.SqlTools.Hosting.dll,Microsoft.SqlTools.ResourceProvider.Core.dll,Microsoft.SqlTools.ResourceProvider.DefaultImpl.dll,MicrosoftSqlToolsCredentials.dll,MicrosoftSqlToolsServiceLayer.dll,Newtonsoft.Json.dll,SqlSerializationService.dll,SqlToolsResourceProviderService.dll,Microsoft.SqlServer.*.dll,Microsoft.Data.Tools.Sql.BatchParser.dll' + signConfigType: inlineSignParams + inlineOperation: | + [ +   { +     "keyCode": "CP-230012", +     "operationSetCode": "SigntoolSign", +     "parameters": [ +     { +       "parameterName": "OpusName", +       "parameterValue": "Azure Data Studio" +     }, +     { +       "parameterName": "OpusInfo", +       "parameterValue": "https://github.com/microsoft/azuredatastudio" +     }, +     { +       "parameterName": "PageHash", +       "parameterValue": "/NPH" +     }, +     { +       "parameterName": "FileDigest", +       "parameterValue": "/fd sha256" +     }, +     { +       "parameterName": "TimeStamp", +       "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" +     } +     ], +     "toolName": "signtool.exe", +     "toolVersion": "6.2.9304.0" +   }, +   { +     "keyCode": "CP-230012", +     "operationSetCode": "SigntoolVerify", +     "parameters": [ +     { +       "parameterName": "VerifyAll", +       "parameterValue": "/all" +     } + ], +     "toolName": "signtool.exe", +     "toolVersion": "6.2.9304.0" +   } + ] + SessionTimeout: 600 + MaxConcurrency: 5 + MaxRetryAttempts: 20 + condition: and(succeeded(), eq(variables['signed'], true)) + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { del $(Build.SourcesDirectory)\..\azuredatastudio-win32-x64\CodeSignSummary*.md } + condition: and(succeeded(), eq(variables['signed'], true)) + displayName: Delete CodeSignSummary.md + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { yarn gulp "vscode-win32-x64-user-setup" } + continueOnError: true + displayName: User setup + + - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1 + displayName: 'ESRP CodeSigning - User Installer - sha256 only' + inputs: + ConnectedServiceName: 'Code Signing' + FolderPath: '$(Build.SourcesDirectory)/.build/win32-x64/user-setup' + signConfigType: inlineSignParams + inlineOperation: | + [ +   { +     "keyCode": "CP-230012", +     "operationSetCode": "SigntoolSign", +     "parameters": [ +     { +       "parameterName": "OpusName", +       "parameterValue": "Azure Data Studio" +     }, +     { +       "parameterName": "OpusInfo", +       "parameterValue": "https://github.com/microsoft/azuredatastudio" +     }, +     { +       "parameterName": "PageHash", +       "parameterValue": "/NPH" +     }, +     { +       "parameterName": "FileDigest", +       "parameterValue": "/fd sha256" +     }, +     { +       "parameterName": "TimeStamp", +       "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" +     } +     ], +     "toolName": "signtool.exe", +     "toolVersion": "6.2.9304.0" +   }, +   { +     "keyCode": "CP-230012", +     "operationSetCode": "SigntoolVerify", +     "parameters": [ +     { +       "parameterName": "VerifyAll", +       "parameterValue": "/all" +     } + ], +     "toolName": "signtool.exe", +     "toolVersion": "6.2.9304.0" +   } + ] + SessionTimeout: 600 + MaxConcurrency: 5 + MaxRetryAttempts: 20 + condition: and(succeeded(), eq(variables['signed'], true)) + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { del $(Build.SourcesDirectory)\.build\win32-x64\user-setup\CodeSignSummary.md } + condition: and(succeeded(), eq(variables['signed'], true)) + continueOnError: true + displayName: Delete CodeSignSummary.md + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { yarn gulp "vscode-win32-x64-system-setup" } + continueOnError: true + displayName: System setup + + - task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1 + displayName: 'ESRP CodeSigning - Installer - sha256 only' + inputs: + ConnectedServiceName: 'Code Signing' + FolderPath: '$(Build.SourcesDirectory)/.build/win32-x64/system-setup' + signConfigType: inlineSignParams + inlineOperation: | + [ +   { +     "keyCode": "CP-230012", +     "operationSetCode": "SigntoolSign", +     "parameters": [ +     { +       "parameterName": "OpusName", +       "parameterValue": "Azure Data Studio" +     }, +     { +       "parameterName": "OpusInfo", +       "parameterValue": "https://github.com/microsoft/azuredatastudio" +     }, +     { +       "parameterName": "PageHash", +       "parameterValue": "/NPH" +     }, +     { +       "parameterName": "FileDigest", +       "parameterValue": "/fd sha256" +     }, +     { +       "parameterName": "TimeStamp", +       "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" +     } +     ], +     "toolName": "signtool.exe", +     "toolVersion": "6.2.9304.0" +   }, +   { +     "keyCode": "CP-230012", +     "operationSetCode": "SigntoolVerify", +     "parameters": [ +     { +       "parameterName": "VerifyAll", +       "parameterValue": "/all" +     } + ], +     "toolName": "signtool.exe", +     "toolVersion": "6.2.9304.0" +   } + ] + SessionTimeout: 600 + MaxConcurrency: 5 + MaxRetryAttempts: 20 + condition: and(succeeded(), eq(variables['signed'], true)) + + - powershell: | + . build/azure-pipelines/win32/exec.ps1 + $ErrorActionPreference = "Stop" + exec { del $(Build.SourcesDirectory)\.build\win32-x64\system-setup\CodeSignSummary.md } + condition: and(succeeded(), eq(variables['signed'], true)) + continueOnError: true + displayName: Delete CodeSignSummary.md + + - script: | + if exist $(Build.SourcesDirectory)\..\azuredatastudio-windows rmdir /s /q $(Build.SourcesDirectory)\..\azuredatastudio-windows + move $(Build.SourcesDirectory)\..\azuredatastudio-win32-x64 $(Build.SourcesDirectory)\..\azuredatastudio-windows + displayName: 'Rename Build Directory' + + - task: ArchiveFiles@1 + displayName: 'Archive files' + inputs: + rootFolder: '$(Build.SourcesDirectory)/../azuredatastudio-windows' + archiveFile: '$(Build.ArtifactStagingDirectory)/azuredatastudio-windows.zip' + + - task: CopyFiles@2 + displayName: 'Copy System Install to: $(Build.ArtifactStagingDirectory)' + inputs: + SourceFolder: '$(Build.SourcesDirectory)/.build/win32-x64/system-setup/' + TargetFolder: '$(Build.ArtifactStagingDirectory)' + + - task: CopyFiles@2 + displayName: 'Copy User Installer to: $(Build.ArtifactStagingDirectory)' + inputs: + SourceFolder: '$(Build.SourcesDirectory)/.build/win32-x64/user-setup/' + TargetFolder: '$(Build.ArtifactStagingDirectory)/user-setup/' + + - script: | + cd $(Build.ArtifactStagingDirectory) + ren *.zip *-UNSIGNED.zip + ren *.exe *-UNSIGNED.exe + displayName: 'Rename unsigned files' + condition: or(failed(), eq(variables['signed'], false)) + + - powershell: | # WHY! + $Build = "$(Build.SourcesDirectory)\..\azuredatastudio-windows" + $PackageJson = Get-Content -Raw -Path "$Build\resources\app\package.json" | ConvertFrom-Json + + $jsonResult = @{ + version = $PackageJson.version + quality = $env:VSCODE_QUALITY + commit = "$(git rev-parse HEAD)" + } + + $jsonResult | ConvertTo-Json | Out-File "$(Build.ArtifactStagingDirectory)\version.json" + displayName: 'Create version.json' + + - powershell: | # WHY + Get-ChildItem "." | + ForEach-Object { + certutil.exe -hashfile $_.FullName SHA256 >> sha256hashes.txt + } + workingDirectory: '$(Build.ArtifactStagingDirectory)' + displayName: 'Get SHA256 Hashes' + continueOnError: true + + - task: PublishBuildArtifacts@1 + displayName: 'Publish Artifact: drop' + + - task: PublishTestResults@2 + displayName: 'Publish Test Results test-results.xml' + inputs: + testResultsFiles: 'test-results.xml' + searchFolder: '$(Build.SourcesDirectory)' + failTaskOnFailedTests: true + continueOnError: true + condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true')) + + - task: PublishTestResults@2 + displayName: 'Publish Integration and Smoke Test Results' + inputs: + testResultsFiles: '*.xml' + searchFolder: '$(Build.ArtifactStagingDirectory)\test-results' + mergeTestResults: true + failTaskOnFailedTests: true + continueOnError: true + condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true')) + + - powershell: 'Write-Host "##vso[build.addbuildtag]Scheduled" ' + displayName: 'Tag build if scheduled' + condition: and(in(variables['Agent.JobStatus'], 'Succeeded'), eq(variables['Build.Reason'], 'Schedule')) + + - powershell: 'Write-Host "##vso[build.addbuildtag]AutoRelease" ' + displayName: 'Tag build for AutoRelease if needed' + condition: and(in(variables['Agent.JobStatus'], 'Succeeded'), eq(variables['AUTO_RELEASE'], 'true')) + + - powershell: 'Write-Host "##vso[build.addbuildtag]PerfTestCandidate" ' + displayName: 'Tag build for PerfTestCandidate if needed' + condition: and(in(variables['Agent.JobStatus'], 'Succeeded'), eq(variables['VSCODE_QUALITY'], 'insider'))