f2d5ae74ad
* Clean up crossgen related build scripts * Fix ci.psm1 * Clean up '-CrossGen' use in a few other files
146 lines
4.9 KiB
PowerShell
146 lines
4.9 KiB
PowerShell
# Copyright (c) Microsoft Corporation.
|
|
# Licensed under the MIT License.
|
|
|
|
# PowerShell Script to build and package PowerShell from specified form and branch
|
|
# Script is intented to use in Docker containers
|
|
# Ensure PowerShell is available in the provided image
|
|
|
|
param (
|
|
[string] $location = "/powershell",
|
|
|
|
# Destination location of the package on docker host
|
|
[string] $destination = '/mnt',
|
|
|
|
[ValidatePattern("^v\d+\.\d+\.\d+(-\w+(\.\d{1,2})?)?$")]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string]$ReleaseTag,
|
|
|
|
[switch]$TarX64,
|
|
[switch]$TarArm,
|
|
[switch]$TarArm64,
|
|
[switch]$TarMinSize,
|
|
[switch]$FxDependent,
|
|
[switch]$Alpine
|
|
)
|
|
|
|
$releaseTagParam = @{}
|
|
if ($ReleaseTag)
|
|
{
|
|
$releaseTagParam = @{ 'ReleaseTag' = $ReleaseTag }
|
|
}
|
|
|
|
#Remove the initial 'v' from the ReleaseTag
|
|
$version = $ReleaseTag -replace '^v'
|
|
$semVersion = [System.Management.Automation.SemanticVersion] $version
|
|
|
|
$metadata = Get-Content "$location/tools/metadata.json" -Raw | ConvertFrom-Json
|
|
|
|
$LTS = $metadata.LTSRelease
|
|
|
|
Write-Verbose -Verbose -Message "LTS is set to: $LTS"
|
|
|
|
function BuildPackages {
|
|
param(
|
|
[switch] $LTS
|
|
)
|
|
|
|
Push-Location
|
|
try {
|
|
Set-Location $location
|
|
Import-Module "$location/build.psm1"
|
|
Import-Module "$location/tools/packaging"
|
|
|
|
Start-PSBootstrap -Package -NoSudo
|
|
|
|
$buildParams = @{ Configuration = 'Release'; PSModuleRestore = $true; Restore = $true }
|
|
|
|
if ($FxDependent.IsPresent) {
|
|
$projectAssetsZipName = 'linuxFxDependantProjectAssetssymbols.zip'
|
|
$buildParams.Add("Runtime", "fxdependent")
|
|
} elseif ($Alpine.IsPresent) {
|
|
$projectAssetsZipName = 'linuxAlpineProjectAssetssymbols.zip'
|
|
$buildParams.Add("Runtime", 'alpine-x64')
|
|
} else {
|
|
# make the artifact name unique
|
|
$projectAssetsZipName = "linuxProjectAssets-$((Get-Date).Ticks)-symbols.zip"
|
|
}
|
|
|
|
Start-PSBuild @buildParams @releaseTagParam
|
|
$options = Get-PSOptions
|
|
|
|
if ($FxDependent) {
|
|
Start-PSPackage -Type 'fxdependent' @releaseTagParam -LTS:$LTS
|
|
} elseif ($Alpine) {
|
|
Start-PSPackage -Type 'tar-alpine' @releaseTagParam -LTS:$LTS
|
|
} else {
|
|
Start-PSPackage @releaseTagParam -LTS:$LTS
|
|
}
|
|
|
|
if ($TarX64) { Start-PSPackage -Type tar @releaseTagParam -LTS:$LTS }
|
|
|
|
if ($TarMinSize) {
|
|
Write-Verbose -Verbose "---- Min-Size ----"
|
|
Write-Verbose -Verbose "options.Output: $($options.Output)"
|
|
Write-Verbose -Verbose "options.Top $($options.Top)"
|
|
|
|
$binDir = Join-Path -Path $options.Top -ChildPath 'bin'
|
|
Write-Verbose -Verbose "Remove $binDir, to get a clean build for min-size package"
|
|
Remove-Item -Path $binDir -Recurse -Force
|
|
|
|
## Build 'min-size' and create 'tar.gz' package for it.
|
|
$buildParams['ForMinimalSize'] = $true
|
|
Start-PSBuild @buildParams @releaseTagParam
|
|
Start-PSPackage -Type min-size @releaseTagParam -LTS:$LTS
|
|
}
|
|
|
|
if ($TarArm) {
|
|
## Build 'linux-arm' and create 'tar.gz' package for it.
|
|
## Note that 'linux-arm' can only be built on Ubuntu environment.
|
|
Start-PSBuild -Configuration Release -Restore -Runtime linux-arm -PSModuleRestore @releaseTagParam
|
|
Start-PSPackage -Type tar-arm @releaseTagParam -LTS:$LTS
|
|
}
|
|
|
|
if ($TarArm64) {
|
|
Start-PSBuild -Configuration Release -Restore -Runtime linux-arm64 -PSModuleRestore @releaseTagParam
|
|
Start-PSPackage -Type tar-arm64 @releaseTagParam -LTS:$LTS
|
|
}
|
|
} finally {
|
|
Pop-Location
|
|
}
|
|
}
|
|
|
|
BuildPackages
|
|
|
|
if ($LTS) {
|
|
Write-Verbose -Verbose "Packaging LTS"
|
|
BuildPackages -LTS
|
|
}
|
|
|
|
$linuxPackages = Get-ChildItem "$location/powershell*" -Include *.deb,*.rpm,*.tar.gz
|
|
|
|
foreach ($linuxPackage in $linuxPackages)
|
|
{
|
|
$filePath = $linuxPackage.FullName
|
|
Write-Verbose "Copying $filePath to $destination" -Verbose
|
|
Copy-Item -Path $filePath -Destination $destination -Force
|
|
}
|
|
|
|
Write-Verbose "Exporting project.assets files ..." -Verbose
|
|
|
|
$projectAssetsCounter = 1
|
|
$projectAssetsFolder = Join-Path -Path $destination -ChildPath 'projectAssets'
|
|
$projectAssetsZip = Join-Path -Path $destination -ChildPath $projectAssetsZipName
|
|
Get-ChildItem $location\project.assets.json -Recurse | ForEach-Object {
|
|
$subfolder = $_.FullName.Replace($location,'')
|
|
$subfolder.Replace('project.assets.json','')
|
|
$itemDestination = Join-Path -Path $projectAssetsFolder -ChildPath $subfolder
|
|
New-Item -Path $itemDestination -ItemType Directory -Force
|
|
$file = $_.FullName
|
|
Write-Verbose "Copying $file to $itemDestination" -Verbose
|
|
Copy-Item -Path $file -Destination "$itemDestination\" -Force
|
|
$projectAssetsCounter++
|
|
}
|
|
|
|
Compress-Archive -Path $projectAssetsFolder -DestinationPath $projectAssetsZip
|
|
Remove-Item -Path $projectAssetsFolder -Recurse -Force -ErrorAction SilentlyContinue
|