chore(windows): use docker bake to generate the docker compose file#2189
Merged
lemeurherve merged 40 commits intojenkinsci:masterfrom Jan 18, 2026
Merged
Conversation
a003e50 to
0979c2d
Compare
6 tasks
1ba5055 to
3a97f50
Compare
6 tasks
1d3fb92 to
4b10981
Compare
e866628 to
8521155
Compare
dduportal
approved these changes
Jan 9, 2026
Contributor
dduportal
left a comment
There was a problem hiding this comment.
If it works on trusted.ci, LGTM
Member
Author
|
Putting in draft until a proper test via a simulated build in a new job on trusted.ci.jenkins.io next Monday. |
lemeurherve
commented
Jan 9, 2026
This was referenced Jan 11, 2026
8521155 to
86a9810
Compare
a332bab to
f360727
Compare
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 14, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 14, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 14, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
lemeurherve
added a commit
to lemeurherve/docker
that referenced
this pull request
Feb 15, 2026
…T_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" }
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This change aligns this repository with https://github.com/jenkinsci/docker-agents and https://github.com/jenkinsci/docker-ssh-agent by transplanting the mechanism allowing to use docker bake to generate the docker compose file used to build Windows images until
docker buildxis able to build Windows images.The main advantage is to get a single place of truth where all images and parameters are defined (the docker bake file), facilitating the maintainance of this repository.
The second potential advantage is the possibility to use this PR to easily ship both Windows 2019 and 2022 images in LTS 2.541.1 release, to be discussed. (cf #2167 (comment))
It also allow a possible differenciation between versions provided in Weekly or LTS releases to ease transitions (cf #2197 (comment)).
Finally, it should reduce maintainance effort for these Windows controller images cf #2197 (comment), and to unlock potential improvements and cleanups.
Similar to:
Refs:
Testing done
Locally
ci.jenkins.io
https://ci.jenkins.io/job/Packaging/job/docker/job/PR-2189
trusted.ci.jenkins.io
Tested the calls to
./make.ps1 buildand./make.ps1 testin an trusted.ci.jenkins.io infra check job replay from this PR branch, using the samewindows-2019andwindows-2022and the same PowerShell version used by the Windows parts of this pipeline: https://trusted.ci.jenkins.io/job/Infra-Team-Validate-Agents/597Test pipeline
Build of multiple Windows versions
See #2189 (comment)
Submitter checklist