diff --git a/eng/common/scripts/copy-from-blobstorage.ps1 b/eng/common/scripts/copy-from-blobstorage.ps1 new file mode 100644 index 00000000000..3cc1133aeaf --- /dev/null +++ b/eng/common/scripts/copy-from-blobstorage.ps1 @@ -0,0 +1,12 @@ +param ( + [Parameter(Mandatory = $true)] + [string] $SourceBlobPath, + [Parameter(Mandatory = $true)] + [string] $ApplicationId, + [Parameter(Mandatory = $true)] + [string] $DestinationDirectory +) + +azcopy login --service-principal --application-id $ApplicationId +Write-Host "Copying from $SourceBlobPath to $DestinationDirectory ..." +azcopy cp "${SourceBlobPath}/*" $DestinationDirectory --recursive=true \ No newline at end of file diff --git a/eng/pipelines/azuresdkpartnerdrops-to-devops.yml b/eng/pipelines/azuresdkpartnerdrops-to-devops.yml new file mode 100644 index 00000000000..d4eb79acba6 --- /dev/null +++ b/eng/pipelines/azuresdkpartnerdrops-to-devops.yml @@ -0,0 +1,14 @@ +parameters: +- name: PartnerDropsBlobSourceSuffix + type: string + default: '' +- name: DevOpsFeedID + type: string + # Publish to https://dev.azure.com/azure-sdk/public/_packaging?_a=feed&feed=azure-sdk-for-net + default: '29ec6040-b234-4e31-b139-33dc4287b756/fa8c16a3-dbe0-4de2-a297-03065ec1ba3f' + +extends: + template: /eng/pipelines/templates/jobs/azuresdkpartnerdrops-to-nugetfeed.yml + parameters: + DevOpsFeedID: ${{ parameters.DevOpsFeedID }} + PartnerDropsBlobSourceSuffix: ${{ parameters.PartnerDropsBlobSourceSuffix }} \ No newline at end of file diff --git a/eng/pipelines/azuresdkpartnerdrops-to-nuget.yml b/eng/pipelines/azuresdkpartnerdrops-to-nuget.yml new file mode 100644 index 00000000000..6b1c3ce0d07 --- /dev/null +++ b/eng/pipelines/azuresdkpartnerdrops-to-nuget.yml @@ -0,0 +1,9 @@ +parameters: +- name: PartnerDropsBlobSourceSuffix + type: string + default: '' + +extends: + template: /eng/pipelines/templates/jobs/azuresdkpartnerdrops-to-nugetfeed.yml + parameters: + PartnerDropsBlobSourceSuffix: ${{ parameters.PartnerDropsBlobSourceSuffix }} \ No newline at end of file diff --git a/eng/pipelines/templates/jobs/azuresdkpartnerdrops-to-nugetfeed.yml b/eng/pipelines/templates/jobs/azuresdkpartnerdrops-to-nugetfeed.yml new file mode 100644 index 00000000000..a0a80925f20 --- /dev/null +++ b/eng/pipelines/templates/jobs/azuresdkpartnerdrops-to-nugetfeed.yml @@ -0,0 +1,113 @@ + +resources: + repositories: + - repository: azure-sdk-build-tools + type: git + name: internal/azure-sdk-build-tools + ref: refs/tags/azure-sdk-build-tools_20211215.1 + +parameters: + - name: BuildToolsRepoPath + type: string + default: '$(Build.SourcesDirectory)/azure-sdk-build-tools' + - name: ArtifactsPath + type: string + default: '$(System.DefaultWorkingDirectory)/artifacts' + - name: PartnerDropsBlobBase + type: string + default: 'https://azuresdkpartnerdrops.blob.core.windows.net/drops' + - name: PartnerDropsBlobSourceSuffix + type: string + default: '' + - name: NugetVersion + type: string + default: '5.4.x' + - name: DevOpsFeedID + type: string + default: '' + - name: PartnerDropsSubscription + type: string + default: 'azuresdkpartnerdrops-kv Secrets' + - name: PartnerDropsStorageName + type: string + default: 'azuresdkpartnerdrops' + - name: PartnerDropsContainerName + type: string + default: 'drops-signed' + - name: PartnerDropsBlobDestPrefix + type: string + default: '$(Release.DefinitionName)\$(Release.ReleaseId)-$(Release.AttemptNumber)' + +jobs: + - job: AzurePartnerDropsToNuget + pool: + name: azsdk-pool-mms-win-2019-general + vmImage: MMS2019 + + steps: + - checkout: self + - checkout: azure-sdk-build-tools + + - task: Powershell@2 + inputs: + filePath: $(Build.SourcesDirectory)/azure-sdk-tools/eng/common/scripts/copy-from-blobstorage.ps1 + arguments: > + -SourceBlobPath '${{ parameters.PartnerDropsBlobBase }}/${{ parameters.PartnerDropsBlobSourceSuffix }}' + -ApplicationId $(azuresdkpartnerdrops-application-id) + -DestinationDirectory '${{ parameters.ArtifactsPath }}' + pwsh: true + displayName: 'Copy from AzureSdkPartnerDrops' + env: + AZCOPY_SPA_CLIENT_SECRET: $(azuresdkpartnerdrops-service-principal-key) + condition: and(succeeded(), ne(variables['SkipCopyFromPartnerDrops'], 'true')) + + - ${{ if ne(variables['SkipSigning'], 'true') }}: + - template: pipelines/steps/net-signing.yml@azure-sdk-build-tools + parameters: + PackagesPath: ${{ parameters.ArtifactsPath }} + BuildToolsPath: ${{ parameters.BuildToolsRepoPath }} + + - task: MSBuild@1 + displayName: 'Upload Symbols' + inputs: + solution: '${{ parameters.BuildToolsRepoPath }}/tools/symboltool/SymbolUploader.proj' + msbuildArguments: > + /p:PackagesPath=${{ parameters.ArtifactsPath }} + /p:MSPublicSymbolsPAT=$(azuresdk-microsoftpublicsymbols-devops-pat) + /p:MSSymbolsPAT=$(azuresdk-microsoft-devops-pat) + /p:AzureSDKSymbolsPAT=$(azuresdk-azure-sdk-devops-pat) + condition: and(succeeded(), ne(variables['SkipPublishSymbols'], 'true')) + + - task: NuGetToolInstaller@1 + displayName: 'Use NuGet ${{ parameters.NugetVersion }}' + inputs: + versionSpec: ${{ parameters.NugetVersion }} + condition: and(succeeded(), ne(variables['SkipPublishToNuget'], 'true')) + + - ${{ if ne(parameters.DevOpsFeedID, '') }}: + - task: NuGetCommand@2 + displayName: 'Publish to DevOps Feed' + inputs: + command: push + packagesToPush: '${{ parameters.ArtifactsPath }}/**/*.nupkg;!${{ parameters.ArtifactsPath }}/**/*.symbols.nupkg' + publishVstsFeed: ${{ parameters.DevOpsFeedID }} + + - ${{ if eq(parameters.DevOpsFeedID, '') }}: + - task: NuGetCommand@2 + displayName: 'Publish to Nuget' + inputs: + command: push + packagesToPush: '${{ parameters.ArtifactsPath }}/**/*.nupkg;!${{ parameters.ArtifactsPath }}/**/*.symbols.nupkg' + nuGetFeedType: external + publishFeedCredentials: Nuget.org + + - task: AzureFileCopy@2 + displayName: 'Copy Signed Files to Blob' + inputs: + SourcePath: '${{ parameters.ArtifactsPath }}' + azureSubscription: '${{ parameters.PartnerDropsSubscription }}' + Destination: AzureBlob + storage: '${{ parameters.PartnerDropsStorageName }}' + ContainerName: '${{ parameters.PartnerDropsContainerName }}' + BlobPrefix: '${{ parameters.PartnerDropsBlobDestPrefix }}' + condition: and(succeeded(), ne(variables['SkipCopySignedFilestoBlob'], 'true')) \ No newline at end of file