From fbb3dfa9eb46155fae81b1d0d4b276e13212b2c2 Mon Sep 17 00:00:00 2001 From: Justin Chung <124807742+jshigetomi@users.noreply.github.com> Date: Mon, 21 Apr 2025 16:44:25 -0500 Subject: [PATCH 1/3] Cherry-pick PR #25398 with conflicts for manual resolution --- .pipelines/PowerShell-Release-Official.yml | 13 ++- ...ols.yml => release-SetTagAndChangelog.yml} | 30 +------ .pipelines/templates/release-githubtasks.yml | 90 ++++++++++++++++++- 3 files changed, 99 insertions(+), 34 deletions(-) rename .pipelines/templates/{release-SetTagAndTools.yml => release-SetTagAndChangelog.yml} (59%) diff --git a/.pipelines/PowerShell-Release-Official.yml b/.pipelines/PowerShell-Release-Official.yml index d83b04465f0..e221b686d5a 100644 --- a/.pipelines/PowerShell-Release-Official.yml +++ b/.pipelines/PowerShell-Release-Official.yml @@ -116,10 +116,10 @@ extends: tsaOptionsFile: .config\tsaoptions.json stages: - - stage: setReleaseTagAndUploadTools - displayName: 'Set Release Tag and Upload Tools' + - stage: setReleaseTagAndChangelog + displayName: 'Set Release Tag and Upload Changelog' jobs: - - template: /.pipelines/templates/release-SetTagAndTools.yml@self + - template: /.pipelines/templates/release-SetTagAndChangelog.yml@self - stage: msixbundle displayName: 'Create MSIX Bundle' @@ -280,10 +280,17 @@ extends: Update and merge the changelog for the release. This step is required for creating GitHub draft release. +<<<<<<< HEAD - stage: PublishGitHubRelease displayName: Publish GitHub Release dependsOn: - setReleaseTagAndUploadTools +======= + - stage: PublishGitHubReleaseAndNuget + displayName: Publish GitHub and Nuget Release + dependsOn: + - setReleaseTagAndChangelog +>>>>>>> fa4f5b6fd (Use GitHubReleaseTask instead of custom script (#25398)) - UpdateChangeLog variables: ob_release_environment: Production diff --git a/.pipelines/templates/release-SetTagAndTools.yml b/.pipelines/templates/release-SetTagAndChangelog.yml similarity index 59% rename from .pipelines/templates/release-SetTagAndTools.yml rename to .pipelines/templates/release-SetTagAndChangelog.yml index 7b8a946e323..f0c516dd28f 100644 --- a/.pipelines/templates/release-SetTagAndTools.yml +++ b/.pipelines/templates/release-SetTagAndChangelog.yml @@ -1,6 +1,6 @@ jobs: -- job: SetTagAndTools - displayName: Set Tag and Tools +- job: setTagAndChangelog + displayName: Set Tag and Upload Changelog condition: succeeded() pool: type: windows @@ -19,32 +19,6 @@ jobs: clean: true env: ob_restore_phase: true - - - checkout: PSInternalTools - clean: true - env: - ob_restore_phase: true - - - pwsh: | - New-Item -ItemType Directory -Path '$(Pipeline.Workspace)/ToolArtifact' - Get-ChildItem -Path '$(Build.SourcesDirectory)/Internal-PowerShellTeam-Tools/Scripts' -Filter 'GitHubRelease.psm1' -ErrorAction SilentlyContinue | - Copy-Item -Destination '$(Pipeline.Workspace)/ToolArtifact' -Verbose - displayName: Move GitHub Tool - - - task: onebranch.pipeline.signing@1 - displayName: Sign Tools - inputs: - command: 'sign' - signing_profile: internal_azure_service - files_to_sign: '*.ps1;*.psm1' - search_root: '$(Pipeline.Workspace)/ToolArtifact' - - - pwsh: | - Write-Verbose -Verbose "Creating output directory for release tools: $(ob_outputDirectory)/ToolArtifact" - New-Item -Path $(ob_outputDirectory)/ToolArtifact -ItemType Directory -Force - Get-ChildItem -Path "$(Pipeline.Workspace)/ToolArtifact/*" -Recurse | - Copy-Item -Destination $(ob_outputDirectory)/ToolArtifact -Recurse -Verbose - displayName: Upload Tools - pwsh: | Write-Verbose -Verbose "Release Tag: $(OutputReleaseTag.releaseTag)" diff --git a/.pipelines/templates/release-githubtasks.yml b/.pipelines/templates/release-githubtasks.yml index 31e66b793a4..960b5dabf56 100644 --- a/.pipelines/templates/release-githubtasks.yml +++ b/.pipelines/templates/release-githubtasks.yml @@ -8,14 +8,14 @@ jobs: templateContext: inputs: - input: pipelineArtifact - artifactName: drop_setReleaseTagAndUploadTools_SetTagAndTools + artifactName: drop_setReleaseTagAndChangelog_SetTagAndChangelog - input: pipelineArtifact pipeline: PSPackagesOfficial artifactName: drop_upload_upload_packages variables: - template: ./variable/release-shared.yml@self parameters: - RELEASETAG: $[ stageDependencies.setReleaseTagAndUploadTools.SetTagAndTools.outputs['OutputReleaseTag.releaseTag'] ] + RELEASETAG: $[ stageDependencies.setReleaseTagAndChangelog.setTagAndChangelog.outputs['OutputReleaseTag.releaseTag'] ] steps: - task: PowerShell@2 @@ -62,7 +62,6 @@ jobs: targetType: inline pwsh: true script: | - Import-module '$(Pipeline.Workspace)/ToolArtifact/GitHubRelease.psm1' $releaseVersion = '$(ReleaseTag)' -replace '^v','' Write-Verbose -Verbose "Available modules: " Get-Module | Write-Verbose -Verbose @@ -84,5 +83,90 @@ jobs: Write-Verbose -Verbose "Selected content: `n$clContent" +<<<<<<< HEAD:.pipelines/templates/release-githubtasks.yml Publish-ReleaseDraft -Tag '$(ReleaseTag)' -Name '$(ReleaseTag) Release of PowerShell' -Description $clContent -User PowerShell -Repository PowerShell -PackageFolder "$(Pipeline.Workspace)/GitHubPackages" -Token $(GitHubReleasePat) displayName: Publish Release Draft +======= + $releaseNotesFilePath = "$(Pipeline.Workspace)/release-notes.md" + $clContent | Out-File -FilePath $releaseNotesFilePath -Encoding utf8 + + Write-Host "##vso[task.setvariable variable=ReleaseNotesFilePath;]$releaseNotesFilePath" + + #if name has prelease then make prerelease true as a variable + if ($releaseVersion -like '*-*') { + Write-Host "##vso[task.setvariable variable=IsPreRelease;]true" + } else { + Write-Host "##vso[task.setvariable variable=IsPreRelease;]false" + } + displayName: Set variables for GitHub release task + + - pwsh: | + Write-Host "ReleaseNotes content:" + Get-Content "$(Pipeline.Workspace)/release-notes.md" -Raw | Out-String -width 9999 | Write-Host + displayName: Verify Release Notes + + - task: GitHubRelease@1 + inputs: + gitHubConnection: GitHubReleasePAT + repositoryName: PowerShell/PowerShell + target: master + assets: '$(Pipeline.Workspace)/GitHubPackages/*' + tagSource: 'userSpecifiedTag' + tag: '$(ReleaseTag)' + isDraft: true + addChangeLog: false + action: 'create' + releaseNotesFilePath: '$(ReleaseNotesFilePath)' + isPrerelease: '$(IsPreRelease)' + +- job: NuGetPublish + displayName: Publish to NuGet + condition: succeeded() + pool: + type: release + os: windows + templateContext: + inputs: + - input: pipelineArtifact + pipeline: PSPackagesOfficial + artifactName: drop_upload_upload_packages + variables: + - template: ./variable/release-shared.yml@self + parameters: + VERSION: $[ stageDependencies.setReleaseTagAndChangelog.SetTagAndChangelog.outputs['OutputVersion.Version'] ] + + steps: + - template: release-install-pwsh.yml + + - pwsh: | + Write-Verbose -Verbose "Version: $(Version)" + Get-ChildItem Env: | Out-String -width 9999 -Stream | write-Verbose -Verbose + displayName: 'Capture Environment Variables' + + - pwsh: | + #Exclude all global tool packages. Their names start with 'PowerShell.' + $null = New-Item -ItemType Directory -Path "$(Pipeline.Workspace)/release" + Copy-Item "$(Pipeline.Workspace)/NuGetPackages/*.nupkg" -Destination "$(Pipeline.Workspace)/release" -Exclude "PowerShell.*.nupkg" -Force -Verbose + + $releaseVersion = '$(Version)' + $globalToolPath = "$(Pipeline.Workspace)/NuGetPackages/PowerShell.$releaseVersion.nupkg" + + if ($releaseVersion -notlike '*-*') { + # Copy the global tool package for stable releases + Copy-Item $globalToolPath -Destination "$(Pipeline.Workspace)/release" + } + + Write-Verbose -Verbose "The .nupkgs below will be pushed:" + Get-ChildItem "$(Pipeline.Workspace)/release" -recurse + displayName: Download and capture nupkgs + condition: and(ne('${{ parameters.skipPublish }}', 'false'), succeeded()) + + - task: NuGetCommand@2 + displayName: 'NuGet push' + condition: and(ne('${{ parameters.skipPublish }}', 'false'), succeeded()) + inputs: + command: push + packagesToPush: '$(Pipeline.Workspace)/release/*.nupkg' + nuGetFeedType: external + publishFeedCredentials: PowerShellNuGetOrgPush +>>>>>>> fa4f5b6fd (Use GitHubReleaseTask instead of custom script (#25398)):.pipelines/templates/release-githubNuget.yml From c42ec35eb5b66d0f95c8ae8350322596fac97d03 Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Mon, 21 Apr 2025 14:52:39 -0700 Subject: [PATCH 2/3] Resolve merge conflicts --- .pipelines/PowerShell-Release-Official.yml | 7 ------- .pipelines/templates/release-githubtasks.yml | 5 ----- 2 files changed, 12 deletions(-) diff --git a/.pipelines/PowerShell-Release-Official.yml b/.pipelines/PowerShell-Release-Official.yml index e221b686d5a..1fd42005125 100644 --- a/.pipelines/PowerShell-Release-Official.yml +++ b/.pipelines/PowerShell-Release-Official.yml @@ -280,17 +280,10 @@ extends: Update and merge the changelog for the release. This step is required for creating GitHub draft release. -<<<<<<< HEAD - - stage: PublishGitHubRelease - displayName: Publish GitHub Release - dependsOn: - - setReleaseTagAndUploadTools -======= - stage: PublishGitHubReleaseAndNuget displayName: Publish GitHub and Nuget Release dependsOn: - setReleaseTagAndChangelog ->>>>>>> fa4f5b6fd (Use GitHubReleaseTask instead of custom script (#25398)) - UpdateChangeLog variables: ob_release_environment: Production diff --git a/.pipelines/templates/release-githubtasks.yml b/.pipelines/templates/release-githubtasks.yml index 960b5dabf56..b0358a1704f 100644 --- a/.pipelines/templates/release-githubtasks.yml +++ b/.pipelines/templates/release-githubtasks.yml @@ -83,10 +83,6 @@ jobs: Write-Verbose -Verbose "Selected content: `n$clContent" -<<<<<<< HEAD:.pipelines/templates/release-githubtasks.yml - Publish-ReleaseDraft -Tag '$(ReleaseTag)' -Name '$(ReleaseTag) Release of PowerShell' -Description $clContent -User PowerShell -Repository PowerShell -PackageFolder "$(Pipeline.Workspace)/GitHubPackages" -Token $(GitHubReleasePat) - displayName: Publish Release Draft -======= $releaseNotesFilePath = "$(Pipeline.Workspace)/release-notes.md" $clContent | Out-File -FilePath $releaseNotesFilePath -Encoding utf8 @@ -169,4 +165,3 @@ jobs: packagesToPush: '$(Pipeline.Workspace)/release/*.nupkg' nuGetFeedType: external publishFeedCredentials: PowerShellNuGetOrgPush ->>>>>>> fa4f5b6fd (Use GitHubReleaseTask instead of custom script (#25398)):.pipelines/templates/release-githubNuget.yml From e9a79b80711080d635e4bfe27d82bab66483ceb0 Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Mon, 21 Apr 2025 14:54:06 -0700 Subject: [PATCH 3/3] Update .pipelines/PowerShell-Release-Official.yml --- .pipelines/PowerShell-Release-Official.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pipelines/PowerShell-Release-Official.yml b/.pipelines/PowerShell-Release-Official.yml index 1fd42005125..f30b19dfd51 100644 --- a/.pipelines/PowerShell-Release-Official.yml +++ b/.pipelines/PowerShell-Release-Official.yml @@ -280,7 +280,7 @@ extends: Update and merge the changelog for the release. This step is required for creating GitHub draft release. - - stage: PublishGitHubReleaseAndNuget + - stage: PublishGitHubRelease displayName: Publish GitHub and Nuget Release dependsOn: - setReleaseTagAndChangelog