Skip to content

Commit 46b2c9d

Browse files
committed
fix(make.ps1): fetch jenkins versions from Artifactory and set LATEST_WEEKLY & LATEST_LTS
Amends: - jenkinsci#2189 diff --git a/make.ps1 b/make.ps1 index 665c6ce..abfebdc 100644 --- a/make.ps1 +++ b/make.ps1 @@ -42,21 +42,6 @@ $env:DOCKERHUB_REPO = "$Repository" $env:JENKINS_VERSION = "$JenkinsVersion" $env:COMMIT_SHA = git rev-parse HEAD -# Add 'lts-' prefix to LTS tags not including Jenkins version -# Compared to weekly releases, LTS releases include an additional build number in their version -# Note: the ':' separator is included as trying to set an environment variable to empty on Windows unset it. -$env:SEPARATOR_LTS_PREFIX = ':' -$releaseLine = 'war' -if ($JenkinsVersion.Split('.').Count -eq 3) { - $env:SEPARATOR_LTS_PREFIX = ':lts-' - $releaseLine = 'war-stable' -} - -# If there is no WAR_URL set, using get.jenkins.io URL depending on the release line -if([String]::IsNullOrWhiteSpace($env:WAR_URL)) { - $env:WAR_URL = 'https://get.jenkins.io/{0}/{1}/jenkins.war' -f $releaseLine, $env:JENKINS_VERSION -} - # Check for required commands Function Test-CommandExists { Param ( @@ -121,6 +106,52 @@ function Test-Image { return $failed } +function Test-IsLatestJenkinsRelease { + param ( + [String] $Version + ) + + Write-Host "= PREPARE: Checking if $env:JENKINS_VERSION is latest Weekly or LTS..." + + $metadataUrl = "https://repo.jenkins-ci.org/releases/org/jenkins-ci/main/jenkins-war/maven-metadata.xml" + try { + [xml]$metadata = Invoke-WebRequest $metadataUrl -UseBasicParsing + } + catch { + Write-Error "Failed to retrieve Jenkins versions from Artifactory" + exit 1 + } + $allVersions = $metadata.metadata.versioning.versions.version + + # Weekly + $weeklyVersions = $allVersions | + Where-Object { $_ -match '^\d+\.\d+$' } | + ForEach-Object { [version]$_ } | + Sort-Object + + # LTS + $ltsVersions = $allVersions | + Where-Object { $_ -match '^\d+\.\d+\.\d+$' } | + ForEach-Object { [version]$_ } | + Sort-Object + + $latestWeeklyVersion = $weeklyVersions[-1] + Write-Host "latest Weekly version: $latestWeeklyVersion" + $latestLTSVersion = $ltsVersions[-1] + Write-Host "latest LTS version: $latestLTSVersion" + + $latest = $false + if ($Version -eq $latestWeeklyVersion) { + $latest = $true + } + if ($Version -eq $latestLTSVersion) { + $latest = $true + } + if (!$latest) { + Write-Host "WARNING: $JenkinsVersion is neither the lastest Weekly nor the latest LTS version" + } + return $latest +} function Initialize-DockerComposeFile { param ( @@ -166,6 +197,24 @@ Test-CommandExists 'yq' # Sanity check yq --version +# Add 'lts-' prefix to LTS tags not including Jenkins version +# Compared to weekly releases, LTS releases include an additional build number in their version +$releaseLine = 'war' +# Determine if the current JENKINS_VERSION corresponds to the latest Weekly or LTS version from Artifactory +$isJenkinsVersionLatest = Test-IsLatestJenkinsRelease -Version $JenkinsVersion + +if ($JenkinsVersion.Split('.').Count -eq 3) { + $releaseLine = 'war-stable' + $env:LATEST_LTS = $isJenkinsVersionLatest +} else { + $env:LATEST_WEEKLY = $isJenkinsVersionLatest +} + +# If there is no WAR_URL set, using get.jenkins.io URL depending on the release line +if([String]::IsNullOrWhiteSpace($env:WAR_URL)) { + $env:WAR_URL = 'https://get.jenkins.io/{0}/{1}/jenkins.war' -f $releaseLine, $JenkinsVersion +} + $dockerComposeFile = 'build-windows_{0}.yaml' -f $ImageType $baseDockerCmd = 'docker-compose --file={0}' -f $dockerComposeFile $baseDockerBuildCmd = '{0} build --parallel --pull' -f $baseDockerCmd @@ -239,6 +288,7 @@ if ($target -eq 'test') { if ($target -eq 'publish') { Write-Host '= PUBLISH: push all images and tags' + switch($DryRun) { $true { Write-Host "(dry-run) $baseDockerCmd push" } $false { Invoke-Expression "$baseDockerCmd push" }
1 parent 03b8c73 commit 46b2c9d

File tree

1 file changed

+64
-15
lines changed

1 file changed

+64
-15
lines changed

make.ps1

Lines changed: 64 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,6 @@ $env:DOCKERHUB_REPO = "$Repository"
4242
$env:JENKINS_VERSION = "$JenkinsVersion"
4343
$env:COMMIT_SHA = git rev-parse HEAD
4444

45-
# Add 'lts-' prefix to LTS tags not including Jenkins version
46-
# Compared to weekly releases, LTS releases include an additional build number in their version
47-
# Note: the ':' separator is included as trying to set an environment variable to empty on Windows unset it.
48-
$env:SEPARATOR_LTS_PREFIX = ':'
49-
$releaseLine = 'war'
50-
if ($JenkinsVersion.Split('.').Count -eq 3) {
51-
$env:SEPARATOR_LTS_PREFIX = ':lts-'
52-
$releaseLine = 'war-stable'
53-
}
54-
55-
# If there is no WAR_URL set, using get.jenkins.io URL depending on the release line
56-
if([String]::IsNullOrWhiteSpace($env:WAR_URL)) {
57-
$env:WAR_URL = 'https://get.jenkins.io/{0}/{1}/jenkins.war' -f $releaseLine, $env:JENKINS_VERSION
58-
}
59-
6045
# Check for required commands
6146
Function Test-CommandExists {
6247
Param (
@@ -121,6 +106,52 @@ function Test-Image {
121106

122107
return $failed
123108
}
109+
function Test-IsLatestJenkinsRelease {
110+
param (
111+
[String] $Version
112+
)
113+
114+
Write-Host "= PREPARE: Checking if $env:JENKINS_VERSION is latest Weekly or LTS..."
115+
116+
$metadataUrl = "https://repo.jenkins-ci.org/releases/org/jenkins-ci/main/jenkins-war/maven-metadata.xml"
117+
try {
118+
[xml]$metadata = Invoke-WebRequest $metadataUrl -UseBasicParsing
119+
}
120+
catch {
121+
Write-Error "Failed to retrieve Jenkins versions from Artifactory"
122+
exit 1
123+
}
124+
$allVersions = $metadata.metadata.versioning.versions.version
125+
126+
# Weekly
127+
$weeklyVersions = $allVersions |
128+
Where-Object { $_ -match '^\d+\.\d+$' } |
129+
ForEach-Object { [version]$_ } |
130+
Sort-Object
131+
132+
# LTS
133+
$ltsVersions = $allVersions |
134+
Where-Object { $_ -match '^\d+\.\d+\.\d+$' } |
135+
ForEach-Object { [version]$_ } |
136+
Sort-Object
137+
138+
$latestWeeklyVersion = $weeklyVersions[-1]
139+
Write-Host "latest Weekly version: $latestWeeklyVersion"
140+
$latestLTSVersion = $ltsVersions[-1]
141+
Write-Host "latest LTS version: $latestLTSVersion"
142+
143+
$latest = $false
144+
if ($Version -eq $latestWeeklyVersion) {
145+
$latest = $true
146+
}
147+
if ($Version -eq $latestLTSVersion) {
148+
$latest = $true
149+
}
150+
if (!$latest) {
151+
Write-Host "WARNING: $JenkinsVersion is neither the lastest Weekly nor the latest LTS version"
152+
}
153+
return $latest
154+
}
124155

125156
function Initialize-DockerComposeFile {
126157
param (
@@ -166,6 +197,24 @@ Test-CommandExists 'yq'
166197
# Sanity check
167198
yq --version
168199

200+
# Add 'lts-' prefix to LTS tags not including Jenkins version
201+
# Compared to weekly releases, LTS releases include an additional build number in their version
202+
$releaseLine = 'war'
203+
# Determine if the current JENKINS_VERSION corresponds to the latest Weekly or LTS version from Artifactory
204+
$isJenkinsVersionLatest = Test-IsLatestJenkinsRelease -Version $JenkinsVersion
205+
206+
if ($JenkinsVersion.Split('.').Count -eq 3) {
207+
$releaseLine = 'war-stable'
208+
$env:LATEST_LTS = If ($isJenkinsVersionLatest) { "true" } Else { "false" }
209+
} else {
210+
$env:LATEST_WEEKLY = If ($isJenkinsVersionLatest) { "true" } Else { "false" }
211+
}
212+
213+
# If there is no WAR_URL set, using get.jenkins.io URL depending on the release line
214+
if([String]::IsNullOrWhiteSpace($env:WAR_URL)) {
215+
$env:WAR_URL = 'https://get.jenkins.io/{0}/{1}/jenkins.war' -f $releaseLine, $JenkinsVersion
216+
}
217+
169218
$dockerComposeFile = 'build-windows_{0}.yaml' -f $ImageType
170219
$baseDockerCmd = 'docker-compose --file={0}' -f $dockerComposeFile
171220
$baseDockerBuildCmd = '{0} build --parallel --pull' -f $baseDockerCmd

0 commit comments

Comments
 (0)