Skip to content

Commit f75fa73

Browse files
Add new linux-64 build using Rocky Linux (#109)
1 parent 519a0af commit f75fa73

File tree

6 files changed

+71
-46
lines changed

6 files changed

+71
-46
lines changed

.pipelines/release.yml

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -92,19 +92,32 @@ extends:
9292
value: mcr.microsoft.com/dotnet/sdk:10.0-alpine
9393

9494
jobs:
95-
- template: .pipelines/templates/build-alpine.yml@self
95+
- template: .pipelines/templates/build-docker.yml@self
9696
parameters:
97-
ARCHITECTURE: 'linux-musl-x64'
98-
Name: 'Build_Linux_musl_x64'
97+
ARCHITECTURE: 'x64'
98+
Name: 'Linux_musl_x64'
99+
BuildPlatform: 'alpine'
100+
StageName: 'LinuxMuslBuild'
101+
102+
103+
- stage: LinuxRockyBuild
104+
displayName: Linux Rocky Build
105+
variables:
106+
- name: LinuxContainerImage
107+
value: onebranch.azurecr.io/linux/rockylinux
99108

100-
- stage: LinuxBuild
101-
displayName: Linux Build
102109
jobs:
103-
- template: .pipelines/templates/build-linux.yml@self
110+
- template: .pipelines/templates/build-docker.yml@self
104111
parameters:
105-
ARCHITECTURE: 'linux-x64'
106-
Name: 'Build_Linux_x64'
112+
ARCHITECTURE: 'x64'
113+
Name: 'Linux_rocky_x64'
114+
LinuxContainerImage: 'onebranch.azurecr.io/linux/rockylinux'
115+
BuildPlatform: 'rocky'
116+
StageName: 'LinuxRockyBuild'
107117

118+
- stage: LinuxBuild
119+
displayName: Linux Build
120+
jobs:
108121
- template: .pipelines/templates/build-linux.yml@self
109122
parameters:
110123
ARCHITECTURE: 'linux-arm64'
@@ -129,7 +142,7 @@ extends:
129142
Name: 'Build_Linux_arm'
130143

131144
- stage: Build_Nuget
132-
dependsOn: [WinBuildAndSign, LinuxBuild, LinuxBuildARM, LinuxMuslBuild]
145+
dependsOn: [WinBuildAndSign, LinuxBuild, LinuxBuildARM, LinuxMuslBuild, LinuxRockyBuild]
133146
displayName: Build NuGet
134147
jobs:
135148
- template: .pipelines/templates/build-nuget.yml@self
Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,15 @@ parameters:
88
- name: hostArchitecture
99
type: string
1010
default: 'amd64'
11+
- name: LinuxContainerImage
12+
type: string
13+
default: 'mcr.microsoft.com/dotnet/sdk:10.0-alpine'
14+
- name: BuildPlatform
15+
type: string
16+
default: 'alpine'
17+
- name: StageName
18+
type: string
19+
default: 'LinuxMuslBuild'
1120

1221
jobs:
1322
- job: PrepareDockerBuild
@@ -45,11 +54,11 @@ jobs:
4554
os: linux
4655
${{ if eq(parameters.hostArchitecture, 'arm64') }}:
4756
hostArchitecture: 'arm64'
48-
displayName: Linux_MUSL_${{ parameters.ARCHITECTURE }}
57+
displayName: Linux_${{ parameters.BuildPlatform}}_${{ parameters.ARCHITECTURE }}
4958
dependsOn: PrepareDockerBuild
5059
variables:
5160
- name: LinuxContainerImage
52-
value: mcr.microsoft.com/dotnet/sdk:10.0-alpine
61+
value: ${{ parameters.LinuxContainerImage }}
5362
- name: ob_outputDirectory
5463
value: '$(Build.ArtifactStagingDirectory)/ONEBRANCH_ARTIFACT'
5564
- name: ob_signing_setup_enabled
@@ -68,17 +77,17 @@ jobs:
6877
displayName: 'Download prepared Docker build context'
6978
inputs:
7079
buildType: 'current'
71-
artifactName: 'drop_LinuxMuslBuild_PrepareDockerBuild'
72-
targetPath: '$(Build.SourcesDirectory)/dst/drop_LinuxMuslBuild_PrepareDockerBuild'
80+
artifactName: 'drop_${{ parameters.StageName }}_PrepareDockerBuild'
81+
targetPath: '$(Build.SourcesDirectory)/dst/drop_${{ parameters.StageName }}_PrepareDockerBuild'
7382

7483
- task: onebranch.pipeline.imagebuildinfo@1
75-
displayName: 'Build Alpine Image'
84+
displayName: 'Build Image'
7685
inputs:
77-
repositoryName: 'psnative-alpine'
78-
dockerFileRelPath: 'drop_LinuxMuslBuild_PrepareDockerBuild/powershell-native/Dockerfile'
79-
dockerFileContextPath: 'drop_LinuxMuslBuild_PrepareDockerBuild/powershell-native'
86+
repositoryName: 'psnative-${{ parameters.BuildPlatform }}'
87+
dockerFileRelPath: 'drop_${{ parameters.StageName }}_PrepareDockerBuild/powershell-native/docker/${{ parameters.BuildPlatform }}/Dockerfile'
88+
dockerFileContextPath: 'drop_${{ parameters.StageName }}_PrepareDockerBuild/powershell-native'
8089
addPipelineData: false
81-
saveImageToPath: docker-images/psnative-alpine.tar
90+
saveImageToPath: docker-images/psnative-${{ parameters.BuildPlatform }}.tar
8291
build_tag: $(Build.BuildId)
8392
compress: false
8493
enable_isolated_acr_push: false
@@ -103,18 +112,18 @@ jobs:
103112
clean: true
104113

105114
- download: current
106-
artifact: drop_LinuxMuslBuild_Build_Linux_musl_x64
107-
patterns: docker-images/psnative-alpine.tar
115+
artifact: drop_${{ parameters.StageName }}_${{ parameters.Name }}
116+
patterns: docker-images/psnative-${{ parameters.BuildPlatform}}.tar
108117
displayName: 'Download Docker image artifact'
109118

110119
- pwsh: |
111-
Get-ChildItem $(Pipeline.Workspace)/drop_LinuxMuslBuild_Build_Linux_musl_x64 -Recurse | Out-String -Stream | Write-Verbose -Verbose
120+
Get-ChildItem $(Pipeline.Workspace)/drop_${{ parameters.StageName }}_${{ parameters.Name }} -Recurse | Out-String -Stream | Write-Verbose -Verbose
112121
displayName: Capture downloaded artifacts
113122
114123
- pwsh: |
115124
New-Item -ItemType Directory -Path "$(ob_outputDirectory)" | Out-Null
116125
New-Item -ItemType Directory -Path $(Pipeline.Workspace)/temp | Out-Null
117-
tar -xvf $(Pipeline.Workspace)/drop_LinuxMuslBuild_Build_Linux_musl_x64/docker-images/psnative-alpine.tar -C $(Pipeline.Workspace)/temp
126+
tar -xvf $(Pipeline.Workspace)/drop_${{ parameters.StageName }}_${{ parameters.Name }}/docker-images/psnative-${{ parameters.BuildPlatform}}.tar -C $(Pipeline.Workspace)/temp
118127
$manifest = Get-Content "$(Pipeline.Workspace)/temp/manifest.json"
119128
$manifest | Out-String -Stream | Write-Verbose -Verbose
120129

.pipelines/templates/build-nuget.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
- pwsh: |
3636
$platforms = @("drop_LinuxBuild_Build_Linux_arm64",
3737
"drop_LinuxMuslBuild_ExtractLibPSL",
38-
"drop_LinuxBuild_Build_Linux_x64",
38+
"drop_LinuxRockyBuild_ExtractLibPSL",
3939
"drop_LinuxBuildARM_Build_Linux_arm",
4040
"drop_WinBuildAndSign_Build_Sign_x64",
4141
"drop_WinBuildAndSign_Build_Sign_x86",
@@ -47,10 +47,10 @@ jobs:
4747
$WindowsX86ZipPath = "$(ob_outputDirectory)/drop_WinBuildAndSign_Build_Sign_x86.zip"
4848
$WindowsARMZipPath = "$(ob_outputDirectory)/drop_WinBuildAndSign_Build_Sign_arm.zip"
4949
$WindowsARM64ZipPath = "$(ob_outputDirectory)/drop_WinBuildAndSign_Build_Sign_x64_arm64.zip"
50-
$LinuxZipPath = "$(ob_outputDirectory)/drop_LinuxBuild_Build_Linux_x64.zip"
5150
$LinuxARMZipPath = "$(ob_outputDirectory)/drop_LinuxBuildARM_Build_Linux_arm.zip"
5251
$LinuxARM64ZipPath = "$(ob_outputDirectory)/drop_LinuxBuild_Build_Linux_arm64.zip"
5352
$LinuxAlpineZipPath = "$(ob_outputDirectory)/drop_LinuxMuslBuild_ExtractLibPSL.zip"
53+
$LinuxRockyZipPath = "$(ob_outputDirectory)/drop_LinuxRockyBuild_ExtractLibPSL.zip"
5454
$macOSZipPath = "$(ob_outputDirectory)/drop_osx.zip"
5555
5656
$symbolsRoot = "$(ob_outputDirectory)/symbols"
@@ -72,7 +72,7 @@ jobs:
7272
7373
Import-Module $(Build.SourcesDirectory)/build.psm1 -Force
7474
$PackageRoot = New-Item -ItemType Directory -Path $(ob_outputDirectory)\NugetPackageSrc
75-
Start-BuildPowerShellNativePackage -PackageRoot $PackageRoot -Version $(PackageVersion) -WindowsX64ZipPath $WindowsX64ZipPath -WindowsX86ZipPath $WindowsX86ZipPath -WindowsARM64ZipPath $WindowsARM64ZipPath -LinuxZipPath $LinuxZipPath -LinuxARMZipPath $LinuxARMZipPath -LinuxARM64ZipPath $LinuxARM64ZipPath -LinuxAlpineZipPath $LinuxAlpineZipPath -macOSZipPath $macOSZipPath
75+
Start-BuildPowerShellNativePackage -PackageRoot $PackageRoot -Version $(PackageVersion) -WindowsX64ZipPath $WindowsX64ZipPath -WindowsX86ZipPath $WindowsX86ZipPath -WindowsARM64ZipPath $WindowsARM64ZipPath -LinuxZipPath $LinuxRockyZipPath -LinuxARMZipPath $LinuxARMZipPath -LinuxARM64ZipPath $LinuxARM64ZipPath -LinuxAlpineZipPath $LinuxAlpineZipPath -macOSZipPath $macOSZipPath
7676
7777
Write-Verbose -Verbose "Enumerating $symbolsRoot"
7878
Get-ChildItem -Path $symbolsRoot -Recurse

build.psm1

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,9 @@ function Get-EnvironmentInformation
154154
$environment += @{'IsRedHat7' = $environment.IsRedHat -and $LinuxInfo.VERSION_ID -match '7' }
155155
$environment += @{'IsOpenSUSE13' = $environment.IsOpenSUSE -and $LinuxInfo.VERSION_ID -match '13'}
156156
$environment += @{'IsOpenSUSE42.1' = $environment.IsOpenSUSE -and $LinuxInfo.VERSION_ID -match '42.1'}
157+
$environment += @{'IsRocky8' = $LinuxInfo.ID -match 'rocky' -and $LinuxInfo.VERSION_ID -match '8'}
157158
$environment += @{'IsDebianFamily' = $environment.IsDebian -or $environment.IsUbuntu}
158-
$environment += @{'IsRedHatFamily' = $environment.IsCentOS -or $environment.IsFedora -or $environment.IsRedHat}
159+
$environment += @{'IsRedHatFamily' = $environment.IsCentOS -or $environment.IsFedora -or $environment.IsRedHat -or $environment.IsRocky8}
159160
$environment += @{'IsSUSEFamily' = $environment.IsSLES -or $environment.IsOpenSUSE}
160161
$environment += @{'IsAlpine' = $LinuxInfo.ID -match 'alpine'}
161162
$environment += @{'IsMariner' = $LinuxInfo.ID -match 'mariner' -or $LinuxInfo.ID -match 'azurelinux'}
@@ -530,7 +531,8 @@ function Start-BuildNativeUnixBinaries {
530531
Start-NativeExecution { ctest --verbose }
531532
}
532533
else {
533-
Start-NativeExecution { cmake -DCMAKE_BUILD_TYPE=Debug . }
534+
Start-NativeExecution { cmake -DCMAKE_POLICY_VERSION_MINIMUM='3.5' -DCMAKE_BUILD_TYPE=Debug . }
535+
Get-ChildItem . -Recurse | Out-String -Stream | Write-Verbose -Verbose
534536
Start-NativeExecution { make -j }
535537
Start-NativeExecution { ctest --verbose }
536538
}
@@ -1946,7 +1948,7 @@ function Install-Dotnet {
19461948
function Get-RedHatPackageManager {
19471949
if ($environment.IsCentOS -or (Get-Command -Name yum -CommandType Application -ErrorAction SilentlyContinue)) {
19481950
"yum install -y -q"
1949-
} elseif ($environment.IsFedora -or (Get-Command -Name dnf -CommandType Application -ErrorAction SilentlyContinue)) {
1951+
} elseif ($environment.IsFedora -or $environment.IsRocky8 -or (Get-Command -Name dnf -CommandType Application -ErrorAction SilentlyContinue)) {
19501952
"dnf install -y -q"
19511953
} elseif ($environment.IsMariner -or (Get-Command -Name tdnf -CommandType Application -ErrorAction SilentlyContinue)) {
19521954
"tdnf install -y"
@@ -1985,6 +1987,12 @@ function Start-PSBootstrap {
19851987
try {
19861988
# Update googletest submodule for linux native cmake
19871989
Push-Location $PSScriptRoot
1990+
1991+
if (-not (Test-Path "$PSScriptRoot/.git")) {
1992+
Write-Log "Git repository not initialized. Initializing..."
1993+
Start-NativeExecution { git init }
1994+
}
1995+
19881996
$Submodule = "$PSScriptRoot/src/libpsl-native/test/googletest"
19891997
Remove-Item -Path $Submodule -Recurse -Force -ErrorAction SilentlyContinue
19901998
git submodule --quiet update --init -- $submodule
@@ -2033,13 +2041,13 @@ function Start-PSBootstrap {
20332041
}
20342042
} elseif ($Environment.IsRedHatFamily -or $Environment.IsMariner) {
20352043
# Build tools
2036-
$Deps += "which", "curl", "wget"
2044+
$Deps += "which", "curl", "wget", "gcc", "gcc-c++", "cmake", "make", "git"
20372045

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

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

20442052
$PackageManager = Get-RedHatPackageManager
20452053

@@ -2113,22 +2121,6 @@ function Start-PSBootstrap {
21132121
Start-NativeExecution { apk update }
21142122
Start-NativeExecution { apk add $Deps }
21152123
}
2116-
2117-
# Install [fpm](https://github.com/jordansissel/fpm) and [ronn](https://github.com/rtomayko/ronn)
2118-
if ($Package) {
2119-
try {
2120-
# We cannot guess if the user wants to run gem install as root on linux and windows,
2121-
# but macOs usually requires sudo
2122-
$gemsudo = ''
2123-
if($Environment.IsMacOS) {
2124-
$gemsudo = $sudo
2125-
}
2126-
Start-NativeExecution ([ScriptBlock]::Create("$gemsudo gem install fpm -v 1.9.3"))
2127-
Start-NativeExecution ([ScriptBlock]::Create("$gemsudo gem install ronn -v 0.7.3"))
2128-
} catch {
2129-
Write-Warning "Installation of fpm and ronn gems failed! Must resolve manually."
2130-
}
2131-
}
21322124
}
21332125

21342126
# Try to locate dotnet-SDK before installing it
File renamed without changes.

docker/rocky/Dockerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
FROM onebranch.azurecr.io/linux/rockylinux:latest AS build
2+
3+
RUN dnf update
4+
RUN dnf install -y gcc git python3 cmake gcc-c++ rpm-build
5+
6+
COPY . .
7+
8+
RUN pwsh -c "Import-Module ./build.psm1; Start-BuildNativeUnixBinaries";
9+
10+
FROM scratch AS export
11+
COPY --from=build /src/powershell-unix/libpsl-native.so /libpsl-native.so

0 commit comments

Comments
 (0)