diff --git a/tools/packaging/packaging.psm1 b/tools/packaging/packaging.psm1 index d4b3a7064f..afec42cf2a 100644 --- a/tools/packaging/packaging.psm1 +++ b/tools/packaging/packaging.psm1 @@ -655,7 +655,6 @@ function Start-PSPackage { } foreach ($Distro in $Script:RedhatFddDistributions) { $Arguments["Distribution"] = $Distro - $Arguments["HostArchitecture"] = $HostArchitecture if ($PSCmdlet.ShouldProcess("Create RPM Package for $Distro")) { Write-Verbose -Verbose "Creating RPM Package for $Distro" New-UnixPackage @Arguments @@ -4330,6 +4329,7 @@ ${minSizeLinuxBuildFolder} = 'pwshLinuxBuildMinSize' ${arm32LinuxBuildFolder} = 'pwshLinuxBuildArm32' ${arm64LinuxBuildFolder} = 'pwshLinuxBuildArm64' ${amd64MarinerBuildFolder} = 'pwshMarinerBuildAmd64' +${arm64MarinerBuildFolder} = 'pwshMarinerBuildArm64' <# Used in Azure DevOps Yaml to package all the linux packages for a channel. @@ -4409,6 +4409,8 @@ function Invoke-AzDevOpsLinuxPackageCreation { Set-LinuxFilePermission -FilePath $filePermissionFile -RootPath "${env:SYSTEM_ARTIFACTSDIRECTORY}\${arm64LinuxBuildFolder}" Start-PSPackage -Type tar-arm64 @releaseTagParam -LTS:$LTS } elseif ($BuildType -eq 'rpm') { + # Generate mariner amd64 package + Write-Verbose -Verbose "Generating mariner amd64 package" Restore-PSOptions -PSOptionsPath "${env:SYSTEM_ARTIFACTSDIRECTORY}\${amd64MarinerBuildFolder}-meta\psoptions.json" $filePermissionFile = "${env:SYSTEM_ARTIFACTSDIRECTORY}\${amd64MarinerBuildFolder}-meta\linuxFilePermission.json" Set-LinuxFilePermission -FilePath $filePermissionFile -RootPath "${env:SYSTEM_ARTIFACTSDIRECTORY}\${amd64MarinerBuildFolder}" @@ -4418,6 +4420,18 @@ function Invoke-AzDevOpsLinuxPackageCreation { Write-Verbose -Verbose "options.Top $($options.Top)" Start-PSPackage -Type rpm-fxdependent @releaseTagParam -LTS:$LTS + + # Generate mariner arm64 package + Write-Verbose -Verbose "Generating mariner arm64 package" + Restore-PSOptions -PSOptionsPath "${env:SYSTEM_ARTIFACTSDIRECTORY}\${arm64MarinerBuildFolder}-meta\psoptions.json" + $filePermissionFile = "${env:SYSTEM_ARTIFACTSDIRECTORY}\${arm64MarinerBuildFolder}-meta\linuxFilePermission.json" + Set-LinuxFilePermission -FilePath $filePermissionFile -RootPath "${env:SYSTEM_ARTIFACTSDIRECTORY}\${arm64MarinerBuildFolder}" + + Write-Verbose -Verbose "---- rpm-fxdependent-arm64 ----" + Write-Verbose -Verbose "options.Output: $($options.Output)" + Write-Verbose -Verbose "options.Top $($options.Top)" + + Start-PSPackage -Type rpm-fxdependent-arm64 @releaseTagParam -LTS:$LTS } } catch { @@ -4502,14 +4516,14 @@ function Invoke-AzDevOpsLinuxPackageBuild { Remove-Item "${buildFolder}\*.pdb" -Force Get-ChildItem -Path $buildFolder -Recurse -File | Export-LinuxFilePermission -FilePath "${buildFolder}-meta/linuxFilePermission.json" -RootPath ${buildFolder} -Force } elseif ($BuildType -eq 'rpm') { - ## Build for Mariner + ## Build for Mariner amd64 $options = Get-PSOptions - Write-Verbose -Verbose "---- Mariner ----" + Write-Verbose -Verbose "---- Mariner x64 ----" Write-Verbose -Verbose "options.Output: $($options.Output)" Write-Verbose -Verbose "options.Top $($options.Top)" $binDir = Join-Path -Path $options.Top -ChildPath 'bin' if (Test-Path -Path $binDir) { - Write-Verbose -Verbose "Remove $binDir, to get a clean build for Mariner package" + Write-Verbose -Verbose "Remove $binDir, to get a clean build for Mariner x64 package" Remove-Item -Path $binDir -Recurse -Force } @@ -4519,6 +4533,24 @@ function Invoke-AzDevOpsLinuxPackageBuild { # Remove symbol files, xml document files. Remove-Item "${buildFolder}\*.pdb", "${buildFolder}\*.xml" -Force Get-ChildItem -Path $buildFolder -Recurse -File | Export-LinuxFilePermission -FilePath "${buildFolder}-meta/linuxFilePermission.json" -RootPath ${buildFolder} -Force + + ## Build for Mariner arm64 + $options = Get-PSOptions + Write-Verbose -Verbose "---- Mariner arm64 ----" + Write-Verbose -Verbose "options.Output: $($options.Output)" + Write-Verbose -Verbose "options.Top $($options.Top)" + $binDir = Join-Path -Path $options.Top -ChildPath 'bin' + if (Test-Path -Path $binDir) { + Write-Verbose -Verbose "Remove $binDir, to get a clean build for Mariner arm64 package" + Remove-Item -Path $binDir -Recurse -Force + } + + $buildParams['Runtime'] = 'fxdependent-linux-arm64' + $buildFolder = "${env:SYSTEM_ARTIFACTSDIRECTORY}/${arm64MarinerBuildFolder}" + Start-PSBuild -Clean @buildParams @releaseTagParam -Output $buildFolder -PSOptionsPath "${buildFolder}-meta/psoptions.json" + # Remove symbol files, xml document files. + Remove-Item "${buildFolder}\*.pdb", "${buildFolder}\*.xml" -Force + Get-ChildItem -Path $buildFolder -Recurse -File | Export-LinuxFilePermission -FilePath "${buildFolder}-meta/linuxFilePermission.json" -RootPath ${buildFolder} -Force } } catch { diff --git a/tools/releaseBuild/azureDevOps/releaseBuild.yml b/tools/releaseBuild/azureDevOps/releaseBuild.yml index 1b8afb3986..1bab67a0a8 100644 --- a/tools/releaseBuild/azureDevOps/releaseBuild.yml +++ b/tools/releaseBuild/azureDevOps/releaseBuild.yml @@ -194,6 +194,12 @@ stages: unsignedBuildArtifactName: pwshMarinerBuildAmd64.tar.gz signedBuildArtifactName: pwshMarinerBuildAmd64.tar.gz signedArtifactContainer: authenticode-signed + linux-arm64-mariner: + runtime: linux-arm64-mariner + unsignedBuildArtifactContainer: pwshMarinerBuildArm64.tar.gz + unsignedBuildArtifactName: pwshMarinerBuildArm64.tar.gz + signedBuildArtifactName: pwshMarinerBuildArm64.tar.gz + signedArtifactContainer: authenticode-signed linux-minsize: runtime: linux-minsize unsignedBuildArtifactContainer: pwshLinuxBuildMinSize.tar.gz diff --git a/tools/releaseBuild/azureDevOps/templates/linux-authenticode-sign.yml b/tools/releaseBuild/azureDevOps/templates/linux-authenticode-sign.yml index aa0d7ebcb8..8c5a56280a 100644 --- a/tools/releaseBuild/azureDevOps/templates/linux-authenticode-sign.yml +++ b/tools/releaseBuild/azureDevOps/templates/linux-authenticode-sign.yml @@ -48,6 +48,12 @@ jobs: path: $(Build.ArtifactStagingDirectory)/linuxTars displayName: Download mariner build + - task: DownloadPipelineArtifact@2 + inputs: + artifact: pwshMarinerBuildArm64.tar.gz + path: $(Build.ArtifactStagingDirectory)/linuxTars + displayName: Download mariner arm64 build + - task: DownloadPipelineArtifact@2 inputs: artifact: pwshLinuxBuildAlpine.tar.gz @@ -87,6 +93,10 @@ jobs: New-Item -Path $(Build.ArtifactStagingDirectory)/pwshMarinerBuildAmd64 -ItemType Directory tar -xf $(Build.ArtifactStagingDirectory)/linuxTars/pwshMarinerBuildAmd64.tar.gz -C $(Build.ArtifactStagingDirectory)/pwshMarinerBuildAmd64 + Write-Verbose -Verbose -Message "Expanding $(Build.ArtifactStagingDirectory)/linuxTars/pwshMarinerBuildArm64.tar.gz to $(Build.ArtifactStagingDirectory)/pwshMarinerBuildArm64" + New-Item -Path $(Build.ArtifactStagingDirectory)/pwshMarinerBuildArm64 -ItemType Directory + tar -xf $(Build.ArtifactStagingDirectory)/linuxTars/pwshMarinerBuildArm64.tar.gz -C $(Build.ArtifactStagingDirectory)/pwshMarinerBuildArm64 + Write-Verbose -Verbose -Message "Expanding $(Build.ArtifactStagingDirectory)/linuxTars/pwshLinuxBuildAlpine.tar.gz/pwshLinuxBuild.tar.gz to $(Build.ArtifactStagingDirectory)/pwshLinuxBuildAlpine" New-Item -Path $(Build.ArtifactStagingDirectory)/pwshLinuxBuildAlpine -ItemType Directory tar -xf $(Build.ArtifactStagingDirectory)/linuxTars/pwshLinuxBuildAlpine.tar.gz/pwshLinuxBuild.tar.gz -C $(Build.ArtifactStagingDirectory)/pwshLinuxBuildAlpine @@ -141,7 +151,12 @@ jobs: - template: signBuildFiles.yml parameters: binLocation: pwshMarinerBuildAmd64 - buildPrefixName: 'PowerShell Linux x64 Framework Dependent' + buildPrefixName: 'PowerShell Linux x64 (Mariner) Framework Dependent' + + - template: signBuildFiles.yml + parameters: + binLocation: pwshMarinerBuildArm64 + buildPrefixName: 'PowerShell Linux arm64 (Mariner) Framework Dependent' - template: signBuildFiles.yml parameters: diff --git a/tools/releaseBuild/azureDevOps/templates/linux-packaging.yml b/tools/releaseBuild/azureDevOps/templates/linux-packaging.yml index 67decc43ce..1a4fc7ac32 100644 --- a/tools/releaseBuild/azureDevOps/templates/linux-packaging.yml +++ b/tools/releaseBuild/azureDevOps/templates/linux-packaging.yml @@ -59,7 +59,15 @@ jobs: artifact: authenticode-signed path: $(Build.ArtifactStagingDirectory)/pwshMarinerBuildAmd64-signed pattern: '**/pwshMarinerBuildAmd64.tar.gz' - displayName: Download mariner build + displayName: Download mariner amd64 build + + - ${{ if eq(variables.build,'rpm') }} : + - task: DownloadPipelineArtifact@2 + inputs: + artifact: authenticode-signed + path: $(Build.ArtifactStagingDirectory)/pwshMarinerBuildArm64-signed + pattern: '**/pwshMarinerBuildArm64.tar.gz' + displayName: Download mariner arm64 build - ${{ if eq(variables.build,'alpine') }} : - task: DownloadPipelineArtifact@2 @@ -110,7 +118,14 @@ jobs: inputs: artifact: pwshMarinerBuildAmd64-meta path: $(Build.ArtifactStagingDirectory)/pwshMarinerBuildAmd64-meta - displayName: Download mariner build meta + displayName: Download mariner x64 build meta + + - ${{ if eq(variables.build,'rpm') }} : + - task: DownloadPipelineArtifact@2 + inputs: + artifact: pwshMarinerBuildArm64-meta + path: $(Build.ArtifactStagingDirectory)/pwshMarinerBuildArm64-meta + displayName: Download mariner arm64 build meta - ${{ if eq(variables.build,'alpine') }} : - task: DownloadPipelineArtifact@2 @@ -152,9 +167,15 @@ jobs: } if ('$(build)' -eq 'rpm') { + # for mariner x64 Write-Verbose -Verbose "Expanding $(Build.ArtifactStagingDirectory)/pwshMarinerBuildAmd64-signed/pwshMarinerBuildAmd64.tar.gz to $(Build.ArtifactStagingDirectory)/pwshMarinerBuildAmd64" New-Item -Path $(Build.ArtifactStagingDirectory)/pwshMarinerBuildAmd64 -ItemType Directory tar -xf $(Build.ArtifactStagingDirectory)/pwshMarinerBuildAmd64-signed/pwshMarinerBuildAmd64.tar.gz -C $(Build.ArtifactStagingDirectory)/pwshMarinerBuildAmd64 + + # for mariner arm64 + Write-Verbose -Verbose "Expanding $(Build.ArtifactStagingDirectory)/pwshMarinerBuildArm64-signed/pwshMarinerBuildArm64.tar.gz to $(Build.ArtifactStagingDirectory)/pwshMarinerBuildArm64" + New-Item -Path $(Build.ArtifactStagingDirectory)/pwshMarinerBuildArm64 -ItemType Directory + tar -xf $(Build.ArtifactStagingDirectory)/pwshMarinerBuildArm64-signed/pwshMarinerBuildArm64.tar.gz -C $(Build.ArtifactStagingDirectory)/pwshMarinerBuildArm64 } if ('$(build)' -eq 'alpine') { diff --git a/tools/releaseBuild/azureDevOps/templates/linux.yml b/tools/releaseBuild/azureDevOps/templates/linux.yml index 3c8a738efc..e69c5657aa 100644 --- a/tools/releaseBuild/azureDevOps/templates/linux.yml +++ b/tools/releaseBuild/azureDevOps/templates/linux.yml @@ -97,7 +97,17 @@ jobs: parameters: BuildDropPath: '$(System.ArtifactsDirectory)/pwshMarinerBuildAmd64' Build_Repository_Uri: $(Github_Build_Repository_Uri) - displayName: Mariner SBOM + displayName: Mariner x64 SBOM + PackageName: PowerShell Linux Framework Dependent + PackageVersion: $(Version) + sourceScanPath: '$(PowerShellRoot)/tools' + + - ${{ if eq(variables.build,'rpm') }} : + - template: Sbom.yml@ComplianceRepo + parameters: + BuildDropPath: '$(System.ArtifactsDirectory)/pwshMarinerBuildArm64' + Build_Repository_Uri: $(Github_Build_Repository_Uri) + displayName: Mariner arm64 SBOM PackageName: PowerShell Linux Framework Dependent PackageVersion: $(Version) sourceScanPath: '$(PowerShellRoot)/tools' @@ -155,6 +165,12 @@ jobs: tar -czvf $(System.ArtifactsDirectory)/pwshMarinerBuildAmd64.tar.gz * displayName: Compress pwshMarinerBuildAmd64 + - ${{ if eq(variables.build,'rpm') }} : + - pwsh: | + Set-Location '$(System.ArtifactsDirectory)/pwshMarinerBuildArm64' + tar -czvf $(System.ArtifactsDirectory)/pwshMarinerBuildArm64.tar.gz * + displayName: Compress pwshMarinerBuildArm64 + - ${{ if eq(variables.build,'deb') }} : - task: PublishPipelineArtifact@1 inputs: @@ -225,6 +241,20 @@ jobs: artifactName: pwshMarinerBuildAmd64-meta retryCountOnTaskFailure: 2 + - ${{ if eq(variables.build,'rpm') }} : + - task: PublishPipelineArtifact@1 + inputs: + path: '$(System.ArtifactsDirectory)/pwshMarinerBuildArm64.tar.gz' + artifactName: pwshMarinerBuildArm64.tar.gz + retryCountOnTaskFailure: 2 + + - ${{ if eq(variables.build,'rpm') }} : + - task: PublishPipelineArtifact@1 + inputs: + path: '$(System.ArtifactsDirectory)/pwshMarinerBuildArm64-meta' + artifactName: pwshMarinerBuildArm64-meta + retryCountOnTaskFailure: 2 + - ${{ if eq(variables.build,'alpine') }} : - task: PublishPipelineArtifact@1 inputs: diff --git a/tools/releaseBuild/azureDevOps/templates/release-ValidatePackageNames.yml b/tools/releaseBuild/azureDevOps/templates/release-ValidatePackageNames.yml index 8a95ab8201..7ae87f5c41 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-ValidatePackageNames.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-ValidatePackageNames.yml @@ -31,7 +31,7 @@ steps: - pwsh: | $message = @() Get-ChildItem $(System.ArtifactsDirectory)\* -recurse -filter *.rpm | ForEach-Object { - if($_.Name -notmatch 'powershell\-(preview-|lts-)?\d+\.\d+\.\d+(_[a-z]*\.\d+)?-1.(rh|cm).x86_64\.rpm') + if($_.Name -notmatch 'powershell\-(preview-|lts-)?\d+\.\d+\.\d+(_[a-z]*\.\d+)?-1.(rh|cm).(x86_64|aarch64)\.rpm') { $messageInstance = "$($_.Name) is not a valid package name" $message += $messageInstance