trigger: none pr: none pool: vmImage: 'windows-latest' variables: - group: CodeSigning - name: solution value: '**/*.sln' - name: buildPlatform value: 'x86' - name: buildConfiguration value: 'Release' - name: isMain value: $[eq(variables['Build.SourceBranch'], 'refs/heads/master')] steps: - checkout: self persistCredentials: true - task: NuGetCommand@2 displayName: Install GitVersion inputs: command: custom arguments: install GitVersion.CommandLine -Version 5.12.0 -OutputDirectory $(Build.BinariesDirectory)/tools -ExcludeVersion - script: $(Build.BinariesDirectory)/tools/GitVersion.CommandLine/tools/GitVersion.exe /output buildserver /nofetch /updateassemblyinfo displayName: Determine Version (NetFX) - script: $(Build.BinariesDirectory)/tools/GitVersion.CommandLine/tools/GitVersion.exe /output buildserver /nofetch /updateprojectfiles displayName: Determine Version (NetCore) - task: PowerShell@2 displayName: Update version in the vsix manifest inputs: filePath: 'MarkMpn.Sql4Cds.SSMS\update-version.ps1' arguments: '$(GitVersion.AssemblySemVer)' pwsh: true - task: NodeTool@0 displayName: Install Node.js inputs: versionSpec: '20.x' - task: DotNetCoreCLI@2 displayName: dotnet restore inputs: command: restore projects: '**/*.csproj' feedsToUse: 'select' includeNuGetOrg: true - task: VSBuild@1 displayName: Build inputs: solution: '$(solution)' platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' msbuildArgs: '/p:DeployExtension=false /p:Version=$(GitVersion.NuGetVersion)' - task: VSTest@2 inputs: platform: '$(buildPlatform)' configuration: '$(buildConfiguration)' testAssemblyVer2: | **/MarkMpn.*.Tests.dll !**\obj\** - task: NuGetToolInstaller@1 inputs: versionSpec: '*' checkLatest: true - task: NuGetCommand@2 displayName: Pack inputs: command: pack packagesToPack: '**/*.nuspec' packDestination: '$(Build.ArtifactStagingDirectory)' versioningScheme: byEnvVar versionEnvVar: GITVERSION_NUGETVERSION - task: PublishPipelineArtifact@1 displayName: Publish NuGet packages to pipeline inputs: targetPath: '$(Build.ArtifactStagingDirectory)' artifact: 'NuGetPackages' publishLocation: 'pipeline' - task: DownloadSecureFile@1 name: CodeSigningCert displayName: Download code signing certificate inputs: secureFile: 'Code Signing.pfx' - task: PowerShell@2 displayName: Sign MSI inputs: targetType: inline script: | $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $cert.Import("$(CodeSigningCert.secureFilePath)", "$(CodeSigningCertPassword)", [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::DefaultKeySet) Set-AuthenticodeSignature -Certificate $cert -FilePath "MarkMpn.Sql4Cds.SSMS.18.Setup\bin\$(buildConfiguration)\MarkMpn.Sql4Cds.SSMS.18.Setup.msi" -TimestampServer "http://timestamp.digicert.com" Set-AuthenticodeSignature -Certificate $cert -FilePath "MarkMpn.Sql4Cds.SSMS.19.Setup\bin\$(buildConfiguration)\MarkMpn.Sql4Cds.SSMS.19.Setup.msi" -TimestampServer "http://timestamp.digicert.com" Set-AuthenticodeSignature -Certificate $cert -FilePath "MarkMpn.Sql4Cds.SSMS.20.Setup\bin\$(buildConfiguration)\MarkMpn.Sql4Cds.SSMS.20.Setup.msi" -TimestampServer "http://timestamp.digicert.com" - task: PublishPipelineArtifact@1 displayName: Publish SSMS 18 installer to pipeline inputs: targetPath: 'MarkMpn.Sql4Cds.SSMS.18.Setup\bin\$(buildConfiguration)\MarkMpn.Sql4Cds.SSMS.18.Setup.msi' artifact: 'SSMS18Installer' publishLocation: 'pipeline' - task: PublishPipelineArtifact@1 displayName: Publish SSMS 19 installer to pipeline inputs: targetPath: 'MarkMpn.Sql4Cds.SSMS.19.Setup\bin\$(buildConfiguration)\MarkMpn.Sql4Cds.SSMS.19.Setup.msi' artifact: 'SSMS19Installer' publishLocation: 'pipeline' - task: PublishPipelineArtifact@1 displayName: Publish SSMS 20 installer to pipeline inputs: targetPath: 'MarkMpn.Sql4Cds.SSMS.20.Setup\bin\$(buildConfiguration)\MarkMpn.Sql4Cds.SSMS.20.Setup.msi' artifact: 'SSMS20Installer' publishLocation: 'pipeline' - task: PublishPipelineArtifact@1 displayName: Publish Debug Visualizer installer to pipeline inputs: targetPath: 'MarkMpn.Sql4Cds.DebugVisualizer.DebuggerSide\bin\$(buildConfiguration)\net472\MarkMpn.Sql4Cds.DebugVisualizer.DebuggerSide.vsix' artifact: 'DebugVisualizer' publishLocation: 'pipeline' - task: PublishPipelineArtifact@1 displayName: Publish version file to pipeline inputs: targetPath: 'MarkMpn.Sql4Cds.SSMS\sql4cds-version.txt' artifact: 'SSMSVersion' publishLocation: 'pipeline' - script: | call npm --no-git-tag-version version $(GitVersion.SemVer) call npm i -g vsce call git config --global url."https://github".insteadOf ssh://git@github call git config --global url."https://github.com/".insteadOf git@github.com: call yarn install call gulp build call gulp package:offline displayName: Build ADS extension workingDirectory: '$(Build.SourcesDirectory)\AzureDataStudioExtension' - task: PublishPipelineArtifact@1 displayName: Publish ADS Extension installer to pipeline inputs: targetPath: 'AzureDataStudioExtension\azuredatastudio-sql4cds-$(GitVersion.SemVer).vsix' artifact: 'ADSInstaller' publishLocation: 'pipeline' - task: GitTag@5 displayName: Label Source condition: and(succeeded(), eq(variables.isMain, 'true')) inputs: workingdir: '$(Build.SourcesDirectory)' tag: 'v$(GitVersion.NuGetVersion)' env: SYSTEM_ACCESSTOKEN: '$(System.AccessToken)'