From 9668356e5df26cf0d38a0652e5c25e814fd65154 Mon Sep 17 00:00:00 2001 From: Ryan Newington Date: Sat, 4 Feb 2023 08:52:11 +1100 Subject: [PATCH] Update azure-pipelines.yml for Azure Pipelines --- azure-pipelines.yml | 118 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 106 insertions(+), 12 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 08f5c34..a72469d 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -19,23 +19,24 @@ variables: - name: build.date value: $[format('{0:yyyy}-{0:MM}-{0:dd}T{0:HH}:{0:mm}:{0:ss}', pipeline.startTime)] - group: Azure KeyVault Code Signing + - group: PSGallery name: $(build.version.major).$(build.version.minor).$(build.version.revision)$(build.version.suffix) trigger: none stages: -- stage: build +- stage: build-provider displayName: Build credential provider dependsOn: [] jobs: - - job: "buildjob" + - job: "build-provider-job" steps: - task: DotNetCoreCLI@2 displayName: dotnet build inputs: command: build publishWebProjects: false - arguments: '-c $(buildConfiguration) -p:Version=$(build.version) -p:PackageOutputPath=$(Build.ArtifactStagingDirectory)' + arguments: '-c $(buildConfiguration) -p:Version=$(build.version) -p:PackageOutputPath=$(Build.ArtifactStagingDirectory)\cp' projects: 'src/Lithnet.CredentialProvider/Lithnet.CredentialProvider.csproj' zipAfterPublish: false @@ -88,7 +89,7 @@ stages: targetType: 'inline' script: | $cmdargs = @( - "sign", "$(Build.ArtifactStagingDirectory)\Lithnet.CredentialProvider.$(build.version).nupkg" + "sign", "$(Build.ArtifactStagingDirectory)\cp\Lithnet.CredentialProvider.$(build.version).nupkg" "-fd", "sha256", "-kvu", "$(akv.url)", "-kvi", "$(akv.applicationID)", @@ -109,7 +110,7 @@ stages: targetType: 'inline' script: | $cmdargs = @( - "sign", "$(Build.ArtifactStagingDirectory)\Lithnet.CredentialProvider.$(build.version).snupkg" + "sign", "$(Build.ArtifactStagingDirectory)\cp\Lithnet.CredentialProvider.$(build.version).snupkg" "-fd", "sha256", "-kvu", "$(akv.url)", "-kvi", "$(akv.applicationID)", @@ -128,7 +129,7 @@ stages: displayName: Publish package to internal feed inputs: command: 'push' - packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg' + packagesToPush: '$(Build.ArtifactStagingDirectory)/cp/*.nupkg' nuGetFeedType: 'internal' publishVstsFeed: '91a552bc-359d-4f28-bdbd-f36f71cfdf81' @@ -136,18 +137,89 @@ stages: displayName: Publish symbols to internal feed inputs: command: 'push' - packagesToPush: '$(Build.ArtifactStagingDirectory)/*.snupkg' + packagesToPush: '$(Build.ArtifactStagingDirectory)/cp/*.snupkg' nuGetFeedType: 'internal' publishVstsFeed: '91a552bc-359d-4f28-bdbd-f36f71cfdf81' - task: PublishPipelineArtifact@1 + displayName: Publish nuget artifact inputs: - targetPath: '$(Build.ArtifactStagingDirectory)' + targetPath: '$(Build.ArtifactStagingDirectory)/cp' publishLocation: 'pipeline' -- stage: publish + - task: PublishPipelineArtifact@1 + displayName: Publish PS artifact + inputs: + targetPath: '$(Build.ArtifactStagingDirectory)/ps' + publishLocation: 'pipeline' + +- stage: build-psmodule + displayName: Build PowerShell module + dependsOn: [] + jobs: + - job: "build-ps-job" + steps: + - task: DotNetCoreCLI@2 + displayName: dotnet build + inputs: + command: build + publishWebProjects: false + arguments: '-c $(buildConfiguration) -p:Version=$(build.version) --output "$(Build.ArtifactStagingDirectory)\ps"' + projects: 'src/Lithnet.CredentialProvider.Management/Lithnet.CredentialProvider.Management.csproj' + zipAfterPublish: false + + - task: PowerShell@2 + displayName: 'Update manifest version' + inputs: + targetType: 'inline' + script: | + Update-ModuleManifest -Path "$(Build.ArtifactStagingDirectory)\ps\Lithnet.CredentialProvider.Management.psd1" -ModuleVersion "$(build.version)" + + - task: DotNetCoreCLI@2 + inputs: + command: 'custom' + custom: 'tool' + arguments: 'update --global azuresigntool' + displayName: Install AzureSignTool + + - task: PowerShell@2 + displayName: 'Sign files with AzureSignTool' + inputs: + targetType: 'inline' + script: | + $files = @() + $files += (Get-ChildItem -Recurse -Path "$(Build.ArtifactStagingDirectory)\ps\Lithnet*.dll").FullName + $files += (Get-ChildItem -Recurse -Path "$(Build.ArtifactStagingDirectory)\ps\Lithnet*.psd1").FullName + + write-host "Signing $($files.Length) files:" + write-output $files + + $cmdargs = @( + "sign", + "-d", "Lithnet Windows Credential Provider", + "-kvu", "$(akv.url)", + "-kvi", "$(akv.applicationID)", + "-kvs", "$(akv.secret)", + "-kvt", "$(akv.tenantId)", + "-kvc", "$(akv.certificateName)", + "-tr", "http://timestamp.digicert.com", + "-td", "sha256" + ) + + $cmdargs += $files + + & AzureSignTool $cmdargs + failOnStderr: true + showWarnings: true + + - task: PublishPipelineArtifact@1 + inputs: + targetPath: '$(Build.ArtifactStagingDirectory)\ps' + publishLocation: 'pipeline' + +- stage: publish-nuget displayName: Publish packages to production feed - dependsOn: "build" + dependsOn: "build-provider" jobs: - deployment: 'PublishPackages' environment: 'Production' @@ -158,7 +230,7 @@ stages: runOnce: deploy: steps: - - checkout: self + - checkout: none - task: NuGetToolInstaller@1 inputs: versionSpec: '>=4.9.0-0' @@ -168,4 +240,26 @@ stages: command: 'push' packagesToPush: '$(Pipeline.Workspace)/**/*.nupkg' nuGetFeedType: 'external' - publishFeedCredentials: 'WindowsCredentialProviderNuget' \ No newline at end of file + publishFeedCredentials: 'WindowsCredentialProviderNuget' + +- stage: publish-psgallery + displayName: Publish module to PSGallery + dependsOn: "build-psmodule" + jobs: + - deployment: 'PublishPackages' + environment: 'Production' + displayName: Publish packages to public PSGallery + pool: + vmImage: windows-2022 + strategy: + runOnce: + deploy: + steps: + - checkout: none + - task: PowerShell@2 + displayName: 'Upload module to PSGallery' + inputs: + targetType: 'inline' + script: | + Publish-Module -Path "$(Pipeline.Workspace)\ps\Lithnet.CredentialProvider.Management.psd1" -NuGetApiKey "$(psgallery.apikey)" +