Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 22 additions & 9 deletions .pipelines/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -92,19 +92,32 @@ extends:
value: mcr.microsoft.com/dotnet/sdk:10.0-alpine

jobs:
- template: .pipelines/templates/build-alpine.yml@self
- template: .pipelines/templates/build-docker.yml@self
parameters:
ARCHITECTURE: 'linux-musl-x64'
Name: 'Build_Linux_musl_x64'
ARCHITECTURE: 'x64'
Name: 'Linux_musl_x64'
BuildPlatform: 'alpine'
StageName: 'LinuxMuslBuild'


- stage: LinuxRockyBuild
displayName: Linux Rocky Build
variables:
- name: LinuxContainerImage
value: onebranch.azurecr.io/linux/rockylinux

- stage: LinuxBuild
displayName: Linux Build
jobs:
- template: .pipelines/templates/build-linux.yml@self
- template: .pipelines/templates/build-docker.yml@self
parameters:
ARCHITECTURE: 'linux-x64'
Name: 'Build_Linux_x64'
ARCHITECTURE: 'x64'
Name: 'Linux_rocky_x64'
LinuxContainerImage: 'onebranch.azurecr.io/linux/rockylinux'
BuildPlatform: 'rocky'
StageName: 'LinuxRockyBuild'

- stage: LinuxBuild
displayName: Linux Build
jobs:
- template: .pipelines/templates/build-linux.yml@self
parameters:
ARCHITECTURE: 'linux-arm64'
Expand All @@ -129,7 +142,7 @@ extends:
Name: 'Build_Linux_arm'

- stage: Build_Nuget
dependsOn: [WinBuildAndSign, LinuxBuild, LinuxBuildARM, LinuxMuslBuild]
dependsOn: [WinBuildAndSign, LinuxBuild, LinuxBuildARM, LinuxMuslBuild, LinuxRockyBuild]
displayName: Build NuGet
jobs:
- template: .pipelines/templates/build-nuget.yml@self
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,15 @@ parameters:
- name: hostArchitecture
type: string
default: 'amd64'
- name: LinuxContainerImage
type: string
default: 'mcr.microsoft.com/dotnet/sdk:10.0-alpine'
- name: BuildPlatform
type: string
default: 'alpine'
- name: StageName
type: string
default: 'LinuxMuslBuild'

jobs:
- job: PrepareDockerBuild
Expand Down Expand Up @@ -45,11 +54,11 @@ jobs:
os: linux
${{ if eq(parameters.hostArchitecture, 'arm64') }}:
hostArchitecture: 'arm64'
displayName: Linux_MUSL_${{ parameters.ARCHITECTURE }}
displayName: Linux_${{ parameters.BuildPlatform}}_${{ parameters.ARCHITECTURE }}
dependsOn: PrepareDockerBuild
variables:
- name: LinuxContainerImage
value: mcr.microsoft.com/dotnet/sdk:10.0-alpine
value: ${{ parameters.LinuxContainerImage }}
- name: ob_outputDirectory
value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
- name: ob_signing_setup_enabled
Expand All @@ -68,17 +77,17 @@ jobs:
displayName: 'Download prepared Docker build context'
inputs:
buildType: 'current'
artifactName: 'drop_LinuxMuslBuild_PrepareDockerBuild'
targetPath: '$(Build.SourcesDirectory)/dst/drop_LinuxMuslBuild_PrepareDockerBuild'
artifactName: 'drop_${{ parameters.StageName }}_PrepareDockerBuild'
targetPath: '$(Build.SourcesDirectory)/dst/drop_${{ parameters.StageName }}_PrepareDockerBuild'

- task: onebranch.pipeline.imagebuildinfo@1
displayName: 'Build Alpine Image'
displayName: 'Build Image'
inputs:
repositoryName: 'psnative-alpine'
dockerFileRelPath: 'drop_LinuxMuslBuild_PrepareDockerBuild/powershell-native/Dockerfile'
dockerFileContextPath: 'drop_LinuxMuslBuild_PrepareDockerBuild/powershell-native'
repositoryName: 'psnative-${{ parameters.BuildPlatform }}'
dockerFileRelPath: 'drop_${{ parameters.StageName }}_PrepareDockerBuild/powershell-native/docker/${{ parameters.BuildPlatform }}/Dockerfile'
dockerFileContextPath: 'drop_${{ parameters.StageName }}_PrepareDockerBuild/powershell-native'
addPipelineData: false
saveImageToPath: docker-images/psnative-alpine.tar
saveImageToPath: docker-images/psnative-${{ parameters.BuildPlatform }}.tar
build_tag: $(Build.BuildId)
compress: false
enable_isolated_acr_push: false
Expand All @@ -103,18 +112,18 @@ jobs:
clean: true

- download: current
artifact: drop_LinuxMuslBuild_Build_Linux_musl_x64
patterns: docker-images/psnative-alpine.tar
artifact: drop_${{ parameters.StageName }}_${{ parameters.Name }}
patterns: docker-images/psnative-${{ parameters.BuildPlatform}}.tar
displayName: 'Download Docker image artifact'

- pwsh: |
Get-ChildItem $(Pipeline.Workspace)/drop_LinuxMuslBuild_Build_Linux_musl_x64 -Recurse | Out-String -Stream | Write-Verbose -Verbose
Get-ChildItem $(Pipeline.Workspace)/drop_${{ parameters.StageName }}_${{ parameters.Name }} -Recurse | Out-String -Stream | Write-Verbose -Verbose
displayName: Capture downloaded artifacts

- pwsh: |
New-Item -ItemType Directory -Path "$(ob_outputDirectory)" | Out-Null
New-Item -ItemType Directory -Path $(Pipeline.Workspace)/temp | Out-Null
tar -xvf $(Pipeline.Workspace)/drop_LinuxMuslBuild_Build_Linux_musl_x64/docker-images/psnative-alpine.tar -C $(Pipeline.Workspace)/temp
tar -xvf $(Pipeline.Workspace)/drop_${{ parameters.StageName }}_${{ parameters.Name }}/docker-images/psnative-${{ parameters.BuildPlatform}}.tar -C $(Pipeline.Workspace)/temp
$manifest = Get-Content "$(Pipeline.Workspace)/temp/manifest.json"
$manifest | Out-String -Stream | Write-Verbose -Verbose

Expand Down
6 changes: 3 additions & 3 deletions .pipelines/templates/build-nuget.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ jobs:
- pwsh: |
$platforms = @("drop_LinuxBuild_Build_Linux_arm64",
"drop_LinuxMuslBuild_ExtractLibPSL",
"drop_LinuxBuild_Build_Linux_x64",
"drop_LinuxRockyBuild_ExtractLibPSL",
"drop_LinuxBuildARM_Build_Linux_arm",
"drop_WinBuildAndSign_Build_Sign_x64",
"drop_WinBuildAndSign_Build_Sign_x86",
Expand All @@ -47,10 +47,10 @@ jobs:
$WindowsX86ZipPath = "$(ob_outputDirectory)/drop_WinBuildAndSign_Build_Sign_x86.zip"
$WindowsARMZipPath = "$(ob_outputDirectory)/drop_WinBuildAndSign_Build_Sign_arm.zip"
$WindowsARM64ZipPath = "$(ob_outputDirectory)/drop_WinBuildAndSign_Build_Sign_x64_arm64.zip"
$LinuxZipPath = "$(ob_outputDirectory)/drop_LinuxBuild_Build_Linux_x64.zip"
$LinuxARMZipPath = "$(ob_outputDirectory)/drop_LinuxBuildARM_Build_Linux_arm.zip"
$LinuxARM64ZipPath = "$(ob_outputDirectory)/drop_LinuxBuild_Build_Linux_arm64.zip"
$LinuxAlpineZipPath = "$(ob_outputDirectory)/drop_LinuxMuslBuild_ExtractLibPSL.zip"
$LinuxRockyZipPath = "$(ob_outputDirectory)/drop_LinuxRockyBuild_ExtractLibPSL.zip"
$macOSZipPath = "$(ob_outputDirectory)/drop_osx.zip"

$symbolsRoot = "$(ob_outputDirectory)/symbols"
Expand All @@ -72,7 +72,7 @@ jobs:

Import-Module $(Build.SourcesDirectory)/build.psm1 -Force
$PackageRoot = New-Item -ItemType Directory -Path $(ob_outputDirectory)\NugetPackageSrc
Start-BuildPowerShellNativePackage -PackageRoot $PackageRoot -Version $(PackageVersion) -WindowsX64ZipPath $WindowsX64ZipPath -WindowsX86ZipPath $WindowsX86ZipPath -WindowsARM64ZipPath $WindowsARM64ZipPath -LinuxZipPath $LinuxZipPath -LinuxARMZipPath $LinuxARMZipPath -LinuxARM64ZipPath $LinuxARM64ZipPath -LinuxAlpineZipPath $LinuxAlpineZipPath -macOSZipPath $macOSZipPath
Start-BuildPowerShellNativePackage -PackageRoot $PackageRoot -Version $(PackageVersion) -WindowsX64ZipPath $WindowsX64ZipPath -WindowsX86ZipPath $WindowsX86ZipPath -WindowsARM64ZipPath $WindowsARM64ZipPath -LinuxZipPath $LinuxRockyZipPath -LinuxARMZipPath $LinuxARMZipPath -LinuxARM64ZipPath $LinuxARM64ZipPath -LinuxAlpineZipPath $LinuxAlpineZipPath -macOSZipPath $macOSZipPath

Write-Verbose -Verbose "Enumerating $symbolsRoot"
Get-ChildItem -Path $symbolsRoot -Recurse
Expand Down
34 changes: 13 additions & 21 deletions build.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -154,8 +154,9 @@ function Get-EnvironmentInformation
$environment += @{'IsRedHat7' = $environment.IsRedHat -and $LinuxInfo.VERSION_ID -match '7' }
$environment += @{'IsOpenSUSE13' = $environment.IsOpenSUSE -and $LinuxInfo.VERSION_ID -match '13'}
$environment += @{'IsOpenSUSE42.1' = $environment.IsOpenSUSE -and $LinuxInfo.VERSION_ID -match '42.1'}
$environment += @{'IsRocky8' = $LinuxInfo.ID -match 'rocky' -and $LinuxInfo.VERSION_ID -match '8'}
$environment += @{'IsDebianFamily' = $environment.IsDebian -or $environment.IsUbuntu}
$environment += @{'IsRedHatFamily' = $environment.IsCentOS -or $environment.IsFedora -or $environment.IsRedHat}
$environment += @{'IsRedHatFamily' = $environment.IsCentOS -or $environment.IsFedora -or $environment.IsRedHat -or $environment.IsRocky8}
$environment += @{'IsSUSEFamily' = $environment.IsSLES -or $environment.IsOpenSUSE}
$environment += @{'IsAlpine' = $LinuxInfo.ID -match 'alpine'}
$environment += @{'IsMariner' = $LinuxInfo.ID -match 'mariner' -or $LinuxInfo.ID -match 'azurelinux'}
Expand Down Expand Up @@ -530,7 +531,8 @@ function Start-BuildNativeUnixBinaries {
Start-NativeExecution { ctest --verbose }
}
else {
Start-NativeExecution { cmake -DCMAKE_BUILD_TYPE=Debug . }
Start-NativeExecution { cmake -DCMAKE_POLICY_VERSION_MINIMUM='3.5' -DCMAKE_BUILD_TYPE=Debug . }
Get-ChildItem . -Recurse | Out-String -Stream | Write-Verbose -Verbose
Start-NativeExecution { make -j }
Start-NativeExecution { ctest --verbose }
}
Expand Down Expand Up @@ -1946,7 +1948,7 @@ function Install-Dotnet {
function Get-RedHatPackageManager {
if ($environment.IsCentOS -or (Get-Command -Name yum -CommandType Application -ErrorAction SilentlyContinue)) {
"yum install -y -q"
} elseif ($environment.IsFedora -or (Get-Command -Name dnf -CommandType Application -ErrorAction SilentlyContinue)) {
} elseif ($environment.IsFedora -or $environment.IsRocky8 -or (Get-Command -Name dnf -CommandType Application -ErrorAction SilentlyContinue)) {
"dnf install -y -q"
} elseif ($environment.IsMariner -or (Get-Command -Name tdnf -CommandType Application -ErrorAction SilentlyContinue)) {
"tdnf install -y"
Expand Down Expand Up @@ -1985,6 +1987,12 @@ function Start-PSBootstrap {
try {
# Update googletest submodule for linux native cmake
Push-Location $PSScriptRoot

if (-not (Test-Path "$PSScriptRoot/.git")) {
Write-Log "Git repository not initialized. Initializing..."
Start-NativeExecution { git init }
}

$Submodule = "$PSScriptRoot/src/libpsl-native/test/googletest"
Remove-Item -Path $Submodule -Recurse -Force -ErrorAction SilentlyContinue
git submodule --quiet update --init -- $submodule
Expand Down Expand Up @@ -2033,13 +2041,13 @@ function Start-PSBootstrap {
}
} elseif ($Environment.IsRedHatFamily -or $Environment.IsMariner) {
# Build tools
$Deps += "which", "curl", "wget"
$Deps += "which", "curl", "wget", "gcc", "gcc-c++", "cmake", "make", "git"

# .NET Core required runtime libraries
$Deps += "libicu", "openssl-libs"

# Packaging tools
if ($Package) { $Deps += "ruby-devel", "rpm-build", "groff", 'libffi-devel', "gcc-c++" }
if ($Package) { $Deps += "rpm-build", "gcc-c++" }

$PackageManager = Get-RedHatPackageManager

Expand Down Expand Up @@ -2113,22 +2121,6 @@ function Start-PSBootstrap {
Start-NativeExecution { apk update }
Start-NativeExecution { apk add $Deps }
}

# Install [fpm](https://github.com/jordansissel/fpm) and [ronn](https://github.com/rtomayko/ronn)
if ($Package) {
try {
# We cannot guess if the user wants to run gem install as root on linux and windows,
# but macOs usually requires sudo
$gemsudo = ''
if($Environment.IsMacOS) {
$gemsudo = $sudo
}
Start-NativeExecution ([ScriptBlock]::Create("$gemsudo gem install fpm -v 1.9.3"))
Start-NativeExecution ([ScriptBlock]::Create("$gemsudo gem install ronn -v 0.7.3"))
} catch {
Write-Warning "Installation of fpm and ronn gems failed! Must resolve manually."
}
}
}

# Try to locate dotnet-SDK before installing it
Expand Down
File renamed without changes.
11 changes: 11 additions & 0 deletions docker/rocky/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
FROM onebranch.azurecr.io/linux/rockylinux:latest AS build

RUN dnf update
RUN dnf install -y gcc git python3 cmake gcc-c++ rpm-build

COPY . .

RUN pwsh -c "Import-Module ./build.psm1; Start-BuildNativeUnixBinaries";

FROM scratch AS export
COPY --from=build /src/powershell-unix/libpsl-native.so /libpsl-native.so
Loading