Skip to content

Commit 750fe59

Browse files
authored
Allow snapshot publishing and add ShouldPublish parameter (Azure#23889)
* Allow snapshot publishing and add ShouldPublish parameter * Improve snapshot support in Publish-MavinPackages - Throw an exception if publishing snapshots and StageOnly is set - Avoid creating a local gpg signing directory for snapshot packages
1 parent a5868e2 commit 750fe59

File tree

4 files changed

+93
-53
lines changed

4 files changed

+93
-53
lines changed

eng/pipelines/partner-release.yml

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,20 @@
11
trigger: none
22
pr: none
33

4+
parameters:
5+
- name: BlobPath
6+
displayName: 'Container relative blob path'
7+
type: string
8+
default: '<team>/java/<version>'
9+
- name: ShouldPublish
10+
displayName: 'Should publish'
11+
type: boolean
12+
default: true
13+
- name: StageOnly
14+
displayName: 'Stage Only'
15+
type: boolean
16+
default: false
17+
418
resources:
519
repositories:
620
- repository: azure-sdk-build-tools
@@ -27,7 +41,7 @@ steps:
2741
inputs:
2842
targetType: filePath
2943
filePath: '$(BuildToolScripts)/copy-from-azuresdkpartnerdrops.ps1'
30-
arguments: '$(Artifacts) $(BlobPath) $(azuresdkpartnerdrops-access-key)'
44+
arguments: '$(Artifacts) ${{ parameters.BlobPath }} $(azuresdkpartnerdrops-access-key)'
3145

3246
- template: tools/java-esrp-signing/java-esrp-signing.yml@azure-sdk-build-tools
3347
parameters:
@@ -36,11 +50,12 @@ steps:
3650
- publish: $(Artifacts)
3751
artifact: packages-signed
3852

39-
- template: tools/gpg/gpg.yml@azure-sdk-build-tools
40-
- template: /eng/pipelines/templates/steps/java-publishing.yml
41-
parameters:
42-
ArtifactDirectory: $(Artifacts)
43-
Target: MavenCentral
44-
BuildToolsPath: $(Pipeline.Workspace)/azure-sdk-build-tools
45-
JavaRepoRoot: $(Pipeline.Workspace)/azure-sdk-for-java
46-
StageOnly: $(StageOnly)
53+
- ${{ if eq(parameters.ShouldPublish, 'true') }}:
54+
- template: tools/gpg/gpg.yml@azure-sdk-build-tools
55+
- template: /eng/pipelines/templates/steps/java-publishing.yml
56+
parameters:
57+
ArtifactDirectory: $(Artifacts)
58+
Target: MavenCentral
59+
BuildToolsPath: $(Pipeline.Workspace)/azure-sdk-build-tools
60+
JavaRepoRoot: $(Pipeline.Workspace)/azure-sdk-for-java
61+
StageOnly: ${{ parameters.StageOnly }}

eng/pipelines/templates/steps/java-publishing.yml

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ steps:
1616
workingDirectory: $(Agent.BuildDirectory)
1717
filePath: ${{ parameters.JavaRepoRoot }}/eng/scripts/Publish-MavenPackages.ps1
1818
arguments: >
19-
-ArtifactDirectory ${{ parameters.ArtifactDirectory }}
20-
-GroupIDFilter ${{ parameters.GroupID }}
21-
-ArtifactIDFilter ${{ parameters.ArtifactID }}
22-
-RepositoryUrl https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-$(Build.BuildID)/maven/v1
23-
-RepositoryUsername nobody
24-
-RepositoryPassword $(System.AccessToken)
25-
-GPGExecutablePath ${{ parameters.BuildToolsPath }}/tools/gpg/bin/gpg.exe
19+
-ArtifactDirectory '${{ parameters.ArtifactDirectory }}'
20+
-GroupIDFilter '${{ parameters.GroupID }}'
21+
-ArtifactIDFilter '${{ parameters.ArtifactID }}'
22+
-RepositoryUrl 'https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-$(Build.BuildID)/maven/v1'
23+
-RepositoryUsername 'nobody'
24+
-RepositoryPassword '$(System.AccessToken)'
25+
-GPGExecutablePath '${{ parameters.BuildToolsPath }}/tools/gpg/bin/gpg.exe'
2626
-InformationAction Continue
2727
2828
- ${{if eq(parameters.Target, 'JavaDevFeed')}}:
@@ -33,13 +33,13 @@ steps:
3333
workingDirectory: $(Agent.BuildDirectory)
3434
filePath: ${{ parameters.JavaRepoRoot }}/eng/scripts/Publish-MavenPackages.ps1
3535
arguments: >
36-
-ArtifactDirectory ${{ parameters.ArtifactDirectory }}
37-
-GroupIDFilter ${{ parameters.GroupID }}
38-
-ArtifactIDFilter ${{ parameters.ArtifactID }}
39-
-RepositoryUrl ${{ parameters.RepositoryUrl }}
40-
-RepositoryUsername nobody
41-
-RepositoryPassword $(System.AccessToken)
42-
-GPGExecutablePath ${{ parameters.BuildToolsPath }}/tools/gpg/bin/gpg.exe
36+
-ArtifactDirectory '${{ parameters.ArtifactDirectory }}'
37+
-GroupIDFilter '${{ parameters.GroupID }}'
38+
-ArtifactIDFilter '${{ parameters.ArtifactID }}'
39+
-RepositoryUrl '${{ parameters.RepositoryUrl }}'
40+
-RepositoryUsername 'nobody'
41+
-RepositoryPassword '$(System.AccessToken)'
42+
-GPGExecutablePath '${{ parameters.BuildToolsPath }}/tools/gpg/bin/gpg.exe'
4343
-InformationAction Continue
4444
4545
- ${{if eq(parameters.Target, 'AndroidDevFeed')}}:
@@ -50,13 +50,13 @@ steps:
5050
workingDirectory: $(Agent.BuildDirectory)
5151
filePath: ${{ parameters.JavaRepoRoot }}/eng/scripts/Publish-MavenPackages.ps1
5252
arguments: >
53-
-ArtifactDirectory ${{ parameters.ArtifactDirectory }}
54-
-GroupIDFilter ${{ parameters.GroupID }}
55-
-ArtifactIDFilter ${{ parameters.ArtifactID }}
56-
-RepositoryUrl https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-android/maven/v1
57-
-RepositoryUsername nobody
58-
-RepositoryPassword $(System.AccessToken)
59-
-GPGExecutablePath ${{ parameters.BuildToolsPath }}/tools/gpg/bin/gpg.exe
53+
-ArtifactDirectory '${{ parameters.ArtifactDirectory }}'
54+
-GroupIDFilter '${{ parameters.GroupID }}'
55+
-ArtifactIDFilter '${{ parameters.ArtifactID }}'
56+
-RepositoryUrl 'https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-android/maven/v1'
57+
-RepositoryUsername 'nobody'
58+
-RepositoryPassword '$(System.AccessToken)'
59+
-GPGExecutablePath '${{ parameters.BuildToolsPath }}/tools/gpg/bin/gpg.exe'
6060
-InformationAction Continue
6161
6262
- ${{if eq(parameters.Target, 'MavenCentral')}}:
@@ -67,12 +67,12 @@ steps:
6767
workingDirectory: $(Agent.BuildDirectory)
6868
filePath: ${{ parameters.JavaRepoRoot }}/eng/scripts/Publish-MavenPackages.ps1
6969
arguments: >
70-
-ArtifactDirectory ${{ parameters.ArtifactDirectory }}
71-
-GroupIDFilter "${{ parameters.GroupID }}"
72-
-ArtifactIDFilter "${{ parameters.ArtifactID }}"
73-
-RepositoryUrl https://oss.sonatype.org/service/local/staging/deploy/maven2/
74-
-RepositoryUsername azuresdk
75-
-RepositoryPassword $(azuresdk-sonatype-password)
76-
-GPGExecutablePath ${{ parameters.BuildToolsPath }}/tools/gpg/bin/gpg.exe
70+
-ArtifactDirectory '${{ parameters.Artifact'Directory }}'
71+
-GroupIDFilter '${{ parameters.GroupID }}'
72+
-ArtifactIDFilter '${{ parameters.ArtifactID }}'
73+
-RepositoryUrl 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
74+
-RepositoryUsername 'azuresdk'
75+
-RepositoryPassword '$(azuresdk-sonatype-password)'
76+
-GPGExecutablePath '${{ parameters.BuildToolsPath }}/tools/gpg/bin/gpg.exe'
7777
-StageOnly:$${{parameters.StageOnly}}
7878
-InformationAction Continue

eng/scripts/MavenPackaging.ps1

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class MavenPackageDetail {
99
[string]$GroupID
1010
[string]$ArtifactID
1111
[string]$Version
12+
[bool]$IsSnapshot
1213
[string]$SonaTypeProfileID
1314
[AssociatedArtifact[]]$AssociatedArtifacts
1415
}
@@ -116,7 +117,10 @@ function Get-MavenPackageDetails([string]$ArtifactDirectory) {
116117
Write-Information "Artifact ID is: $($packageDetail.ArtifactID)"
117118

118119
$packageDetail.Version = $pomDocument.project.version
119-
Write-Information "Version is: $($packageDetail.Version)"
120+
Write-Information "Version is: $($packageDetail.Version)"
121+
122+
$packageDetail.IsSnapshot = $packageDetail.Version.EndsWith("-SNAPSHOT")
123+
Write-Information "IsSnapshot is: $($packageDetail.IsSnapshot)"
120124

121125
$packageDetail.SonaTypeProfileID = Get-SonaTypeProfileID($packageDetail.GroupID)
122126
Write-Information "SonaType Profile ID is: $($packageDetail.SonaTypeProfileID)"

eng/scripts/Publish-MavenPackages.ps1

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,19 @@ if ($packageDetails.Length -eq 0) {
4848
throw "Aborting, no packages to publish."
4949
}
5050

51+
if($StageOnly)
52+
{
53+
foreach ($packageDetail in $packageDetails) {
54+
if ($packageDetail.IsSnapshot) {
55+
throw "Package $($packageDetail.FullyQualifiedName) is a Snapshot and StageOnly is set to 'true'. Staging of snapshot packages is not supported."
56+
}
57+
}
58+
}
59+
5160
Write-Host "Starting GPG signing and publishing"
5261

5362
foreach ($packageDetail in $packageDetails) {
5463
Write-Host "GPG signing and publishing package: $($packageDetail.FullyQualifiedName)"
55-
$localRepositoryDirectory = Get-RandomRepositoryDirectory
56-
$localRepositoryDirectoryUri = $([Uri]$localRepositoryDirectory.FullName).AbsoluteUri
57-
Write-Information "Local Repository Directory URI is: $localRepositoryDirectoryUri"
5864

5965
$pomAssociatedArtifact = $packageDetail.AssociatedArtifacts | Where-Object { ($_.Classifier -eq $null) -and ($_.Type -eq "pom") }
6066
$pomOption = "-DpomFile=$($pomAssociatedArtifact.File.FullName)"
@@ -117,21 +123,9 @@ foreach ($packageDetail in $packageDetails) {
117123
Write-Information "Classifiers Option is: $classifiersOption"
118124
Write-Information "Types Option is: $typesOption"
119125

120-
$urlOption = "-Durl=$localRepositoryDirectoryUri"
121-
Write-Information "URL Option is: $urlOption"
122-
123-
$repositoryDirectoryOption = "-DrepositoryDirectory=$localRepositoryDirectory"
124-
Write-Information "Repository Directory Option is: $repositoryDirectoryOption"
125-
126126
$gpgexeOption = "-Dgpgexe=$GPGExecutablePath"
127127
Write-Information "GPG Executable Option is: $gpgexeOption"
128128

129-
$stagingProfileIdOption = "-DstagingProfileId=$($packageDetail.SonaTypeProfileID)"
130-
Write-Information "Staging Profile ID Option is: $stagingProfileIdOption"
131-
132-
$stagingDescriptionOption = "-DstagingDescription=$($packageDetail.FullyQualifiedName)"
133-
Write-Information "Staging Description Option is: $stagingDescriptionOption"
134-
135129
if ($RepositoryUrl -match "https://pkgs.dev.azure.com/azure-sdk/\b(internal|public)\b/*") {
136130
if (Test-ReleasedPackage -RepositoryUrl $RepositoryUrl -PackageDetail $packageDetail -BearerToken $RepositoryPassword) {
137131
Write-Information "Package $($packageDetail.FullyQualifiedName) already deployed. Skipping deployment."
@@ -144,6 +138,17 @@ foreach ($packageDetail in $packageDetails) {
144138
if ($LASTEXITCODE) { exit $LASTEXITCODE }
145139
}
146140
elseif ($RepositoryUrl -like "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
141+
if ($packageDetail.IsSnapshot) {
142+
# If $StageOnly, don't release to /snapshots
143+
# If snapshot, no need to stage first
144+
$RepositoryUrl = "https://oss.sonatype.org/content/repositories/snapshots/"
145+
Write-Information "GPG Signing and deploying package in one step to Sonatype snapshots: $RepositoryUrl"
146+
Write-Information "mvn gpg:sign-and-deploy-file `"--batch-mode`" `"$pomOption`" `"$fileOption`" `"$javadocOption`" `"$sourcesOption`" `"$filesOption`" $classifiersOption `"$typesOption`" `"-Durl=$RepositoryUrl`" `"$gpgexeOption`" `"-DrepositoryId=target-repo`" `"-Drepo.username=`"`"$RepositoryUsername`"`"`" `"-Drepo.password=[redacted]`" `"--settings=$PSScriptRoot\..\maven.publish.settings.xml`""
147+
mvn gpg:sign-and-deploy-file "--batch-mode" "$pomOption" "$fileOption" "$javadocOption" "$sourcesOption" "$filesOption" $classifiersOption "$typesOption" "-Durl=$RepositoryUrl" "$gpgexeOption" "-DrepositoryId=target-repo" "-Drepo.username=""$RepositoryUsername""" "-Drepo.password=""$RepositoryPassword""" "--settings=$PSScriptRoot\..\maven.publish.settings.xml"
148+
if ($LASTEXITCODE) { exit $LASTEXITCODE }
149+
continue
150+
}
151+
147152
if (!$StageOnly) {
148153
Write-Information "Checking to see if package $($packageDetail.FullyQualifiedName) is already deployed."
149154

@@ -152,6 +157,22 @@ foreach ($packageDetail in $packageDetails) {
152157
continue
153158
}
154159
}
160+
161+
$localRepositoryDirectory = Get-RandomRepositoryDirectory
162+
$localRepositoryDirectoryUri = $([Uri]$localRepositoryDirectory.FullName).AbsoluteUri
163+
Write-Information "Local Repository Directory URI is: $localRepositoryDirectoryUri"
164+
165+
$urlOption = "-Durl=$localRepositoryDirectoryUri"
166+
Write-Information "URL Option is: $urlOption"
167+
168+
$repositoryDirectoryOption = "-DrepositoryDirectory=$localRepositoryDirectory"
169+
Write-Information "Repository Directory Option is: $repositoryDirectoryOption"
170+
171+
$stagingProfileIdOption = "-DstagingProfileId=$($packageDetail.SonaTypeProfileID)"
172+
Write-Information "Staging Profile ID Option is: $stagingProfileIdOption"
173+
174+
$stagingDescriptionOption = "-DstagingDescription=$($packageDetail.FullyQualifiedName)"
175+
Write-Information "Staging Description Option is: $stagingDescriptionOption"
155176

156177
Write-Information "Signing and deploying package to $localRepositoryDirectoryUri"
157178
Write-Information "mvn gpg:sign-and-deploy-file `"--batch-mode`" `"$pomOption`" `"$fileOption`" `"$javadocOption`" `"$sourcesOption`" `"$filesOption`" $classifiersOption `"$typesOption`" `"$urlOption`" `"$gpgexeOption`" `"-DrepositoryId=target-repo`" `"--settings=$PSScriptRoot\..\maven.publish.settings.xml`""

0 commit comments

Comments
 (0)