Skip to content

Commit 9b31e5e

Browse files
committed
consolidate build to two-phase approach - base images first and then engine images after
1 parent 71a8b5a commit 9b31e5e

31 files changed

+379
-106
lines changed

.github/workflows/release.yml

Lines changed: 207 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ concurrency:
1313
cancel-in-progress: true
1414

1515
jobs:
16-
publish:
16+
build-base-images:
1717
runs-on: ubuntu-latest
1818
strategy:
1919
matrix:
2020
include:
21-
# Debian builds
22-
- BUILD_IMAGE_DOCKERFILE: builds/debian/Base.Dockerfile
21+
# Foundation images (builds/base/* - eclipse-temurin based) with promoted tags
22+
- BUILD_IMAGE_DOCKERFILE: builds/base/Dockerfile
2323
BUILD_IMAGE_TAGS: "latest,jre11"
2424
- BUILD_IMAGE_DOCKERFILE: builds/base/JDK11.Dockerfile
2525
BUILD_IMAGE_TAGS: "jdk11"
@@ -39,85 +39,230 @@ jobs:
3939
BUILD_IMAGE_TAGS: "jre24"
4040
- BUILD_IMAGE_DOCKERFILE: builds/base/JRE25.Dockerfile
4141
BUILD_IMAGE_TAGS: "jre25"
42+
43+
# RHEL/UBI9 foundation images with promoted tags
44+
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.Dockerfile
45+
BUILD_IMAGE_TAGS: "ubi9,jre11-rhel"
46+
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK11.Dockerfile
47+
BUILD_IMAGE_TAGS: "jdk11-rhel"
48+
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK17.Dockerfile
49+
BUILD_IMAGE_TAGS: "jdk17-rhel"
50+
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK21.Dockerfile
51+
BUILD_IMAGE_TAGS: "jdk21-rhel"
52+
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK24.Dockerfile
53+
BUILD_IMAGE_TAGS: "jdk24-rhel"
54+
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JRE17.Dockerfile
55+
BUILD_IMAGE_TAGS: "jre17-rhel"
56+
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JRE21.Dockerfile
57+
BUILD_IMAGE_TAGS: "jre21-rhel"
58+
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JRE24.Dockerfile
59+
BUILD_IMAGE_TAGS: "jre24-rhel"
60+
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK25.Dockerfile
61+
BUILD_IMAGE_TAGS: "jdk25-rhel"
62+
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JRE25.Dockerfile
63+
BUILD_IMAGE_TAGS: "jre25-rhel"
64+
65+
# Alpine foundation images with promoted tags
66+
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.Dockerfile
67+
BUILD_IMAGE_TAGS: "alpine,jre11-alpine"
68+
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JDK11.Dockerfile
69+
BUILD_IMAGE_TAGS: "jdk11-alpine"
70+
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JDK17.Dockerfile
71+
BUILD_IMAGE_TAGS: "jdk17-alpine"
72+
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JDK21.Dockerfile
73+
BUILD_IMAGE_TAGS: "jdk21-alpine"
74+
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JRE17.Dockerfile
75+
BUILD_IMAGE_TAGS: "jre17-alpine"
76+
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JRE21.Dockerfile
77+
BUILD_IMAGE_TAGS: "jre21-alpine"
78+
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JRE25.Dockerfile
79+
BUILD_IMAGE_TAGS: "jre25-alpine"
80+
81+
steps:
82+
- name: Checkout
83+
uses: actions/checkout@v4
84+
85+
- name: Set up QEMU
86+
uses: docker/setup-qemu-action@master
87+
with:
88+
platforms: all
89+
90+
- name: Set up Docker Buildx
91+
id: buildx
92+
uses: docker/setup-buildx-action@master
93+
94+
- name: Setup Base Image Builds
95+
id: setup
96+
env:
97+
DOCKER_IMAGE: ortussolutions/commandbox
98+
BUILD_IMAGE_TAGS: ${{ matrix.BUILD_IMAGE_TAGS }}
99+
COMMANDBOX_VERSION: 6.2.1
100+
IMAGE_VERSION: 3.14.8
101+
run: |
102+
# Split the comma-separated tags
103+
IFS=',' read -ra TAG_ARRAY <<< "$BUILD_IMAGE_TAGS"
104+
105+
# Initialize arrays for final tags
106+
FINAL_TAGS=()
107+
108+
# Process each tag
109+
for tag in "${TAG_ARRAY[@]}"; do
110+
# Tag Builds
111+
if [[ $GITHUB_REF == refs/tags/* ]]; then
112+
if [[ $tag == "latest" ]]; then
113+
FINAL_TAGS+=("${GITHUB_REF#refs/tags/v}")
114+
else
115+
FINAL_TAGS+=("${tag}-${GITHUB_REF#refs/tags/v}")
116+
fi
117+
elif [[ $GITHUB_REF == 'refs/heads/development' ]]; then
118+
# Snapshot builds
119+
FINAL_TAGS+=("${tag}-snapshot")
120+
else
121+
# Main branch builds
122+
FINAL_TAGS+=("${tag}")
123+
fi
124+
done
125+
126+
# Prefix with Docker image name
127+
FULL_TAGS=""
128+
for tag in "${FINAL_TAGS[@]}"; do
129+
if [[ -z "$FULL_TAGS" ]]; then
130+
FULL_TAGS="${DOCKER_IMAGE}:${tag}"
131+
else
132+
FULL_TAGS="${FULL_TAGS},${DOCKER_IMAGE}:${tag}"
133+
fi
134+
done
135+
136+
# Determine architecture platforms based on tag content
137+
if [[ ${BUILD_IMAGE_TAGS} == *"alpine"* ]] && [[ ${BUILD_IMAGE_TAGS} != *"jdk21-alpine"* ]] && [[ ${BUILD_IMAGE_TAGS} != *"boxlang-alpine"* ]]; then
138+
ARCH_PLATFORMS=linux/amd64
139+
else
140+
ARCH_PLATFORMS=linux/amd64,linux/arm64/v8
141+
fi
142+
143+
# Set output parameters.
144+
echo "arch_platforms=${ARCH_PLATFORMS}" >> $GITHUB_ENV
145+
echo "image_version=${IMAGE_VERSION}" >> $GITHUB_ENV
146+
echo "commandbox_version=${COMMANDBOX_VERSION}" >> $GITHUB_ENV
147+
echo "IMAGE_TAG=${FULL_TAGS}" >> $GITHUB_ENV
148+
149+
# Set the first tag for testing purposes
150+
FIRST_TAG="${TAG_ARRAY[0]}"
151+
echo "BUILD_IMAGE_TAG=${FIRST_TAG}" >> $GITHUB_ENV
152+
153+
- name: Test built image
154+
env:
155+
BUILD_IMAGE_TAG: ${{ env.BUILD_IMAGE_TAG }}
156+
run: |
157+
chmod +x ${{ github.workspace }}/build/run.sh
158+
${{ github.workspace }}/build/run.sh
159+
160+
- name: DockerHub Login
161+
if: github.event_name != 'pull_request'
162+
uses: docker/login-action@v3
163+
with:
164+
username: ${{ secrets.DOCKER_USERNAME }}
165+
password: ${{ secrets.DOCKER_PASSWORD }}
166+
167+
- name: Build and Push Base Images
168+
if: github.event_name != 'pull_request'
169+
uses: docker/build-push-action@v6
170+
env:
171+
DOCKER_BUILDKIT: 1
172+
with:
173+
provenance: false
174+
builder: ${{ steps.buildx.outputs.name }}
175+
context: .
176+
file: ${{ matrix.BUILD_IMAGE_DOCKERFILE }}
177+
build-args: |
178+
COMMANDBOX_VERSION=${{ env.commandbox_version }}
179+
platforms: ${{ env.arch_platforms }}
180+
push: true
181+
tags: ${{ env.IMAGE_TAG }}
182+
183+
build-engine-images:
184+
runs-on: ubuntu-latest
185+
needs: build-base-images
186+
strategy:
187+
matrix:
188+
include:
189+
# Debian engine builds
42190
- BUILD_IMAGE_DOCKERFILE: builds/debian/Lucee5.Dockerfile
43191
BUILD_IMAGE_TAGS: "lucee5"
192+
BASE_IMAGE: "ortussolutions/commandbox:latest"
44193
- BUILD_IMAGE_DOCKERFILE: builds/debian/Lucee6.Dockerfile
45194
BUILD_IMAGE_TAGS: "lucee6"
195+
BASE_IMAGE: "ortussolutions/commandbox:jre17"
46196
- BUILD_IMAGE_DOCKERFILE: builds/debian/Lucee7.Dockerfile
47197
BUILD_IMAGE_TAGS: "lucee7"
198+
BASE_IMAGE: "ortussolutions/commandbox:jre25"
48199
- BUILD_IMAGE_DOCKERFILE: builds/debian/LuceeLight.Dockerfile
49200
BUILD_IMAGE_TAGS: "lucee-light"
201+
BASE_IMAGE: "ortussolutions/commandbox:latest"
50202
- BUILD_IMAGE_DOCKERFILE: builds/debian/Lucee5Light.Dockerfile
51203
BUILD_IMAGE_TAGS: "lucee5-light"
204+
BASE_IMAGE: "ortussolutions/commandbox:latest"
52205
- BUILD_IMAGE_DOCKERFILE: builds/debian/Adobe2023.Dockerfile
53206
BUILD_IMAGE_TAGS: "adobe2023"
207+
BASE_IMAGE: "ortussolutions/commandbox:jdk17"
54208
- BUILD_IMAGE_DOCKERFILE: builds/debian/Adobe2025.Dockerfile
55209
BUILD_IMAGE_TAGS: "adobe2025"
210+
BASE_IMAGE: "ortussolutions/commandbox:jdk21"
56211
- BUILD_IMAGE_DOCKERFILE: builds/debian/BoxLang.Dockerfile
57212
BUILD_IMAGE_TAGS: "boxlang"
213+
BASE_IMAGE: "ortussolutions/commandbox:jdk21"
58214

59-
# RHEL/UBI9 builds
60-
- BUILD_IMAGE_DOCKERFILE: builds/redhat/Base.Dockerfile
61-
BUILD_IMAGE_TAGS: "ubi9,jre11-rhel"
62-
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK11.Dockerfile
63-
BUILD_IMAGE_TAGS: "jdk11-rhel"
64-
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK17.Dockerfile
65-
BUILD_IMAGE_TAGS: "jdk17-rhel"
66-
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK21.Dockerfile
67-
BUILD_IMAGE_TAGS: "jdk21-rhel"
68-
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK24.Dockerfile
69-
BUILD_IMAGE_TAGS: "jdk24-rhel"
70-
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JRE17.Dockerfile
71-
BUILD_IMAGE_TAGS: "jre17-rhel"
72-
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JRE21.Dockerfile
73-
BUILD_IMAGE_TAGS: "jre21-rhel"
74-
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JRE24.Dockerfile
75-
BUILD_IMAGE_TAGS: "jre24-rhel"
215+
# RHEL engine builds
76216
- BUILD_IMAGE_DOCKERFILE: builds/redhat/Lucee5.Dockerfile
77217
BUILD_IMAGE_TAGS: "lucee5-rhel"
218+
BASE_IMAGE: "ortussolutions/commandbox:ubi9"
78219
- BUILD_IMAGE_DOCKERFILE: builds/redhat/Lucee6.Dockerfile
79220
BUILD_IMAGE_TAGS: "lucee6-rhel"
221+
BASE_IMAGE: "ortussolutions/commandbox:ubi9"
80222
- BUILD_IMAGE_DOCKERFILE: builds/redhat/Lucee7.Dockerfile
81223
BUILD_IMAGE_TAGS: "lucee7-rhel"
224+
BASE_IMAGE: "ortussolutions/commandbox:jre25-rhel"
82225
- BUILD_IMAGE_DOCKERFILE: builds/redhat/LuceeLight.Dockerfile
83226
BUILD_IMAGE_TAGS: "lucee-light-rhel"
227+
BASE_IMAGE: "ortussolutions/commandbox:ubi9"
84228
- BUILD_IMAGE_DOCKERFILE: builds/redhat/Lucee5Light.Dockerfile
85229
BUILD_IMAGE_TAGS: "lucee5-light-rhel"
230+
BASE_IMAGE: "ortussolutions/commandbox:ubi9"
86231
- BUILD_IMAGE_DOCKERFILE: builds/redhat/Adobe2023.Dockerfile
87232
BUILD_IMAGE_TAGS: "adobe2023-rhel"
233+
BASE_IMAGE: "ortussolutions/commandbox:jdk17-rhel"
88234
- BUILD_IMAGE_DOCKERFILE: builds/redhat/Adobe2025.Dockerfile
89235
BUILD_IMAGE_TAGS: "adobe2025-rhel"
236+
BASE_IMAGE: "ortussolutions/commandbox:jdk21-rhel"
90237
- BUILD_IMAGE_DOCKERFILE: builds/redhat/BoxLang.Dockerfile
91238
BUILD_IMAGE_TAGS: "boxlang-rhel"
239+
BASE_IMAGE: "ortussolutions/commandbox:jdk21-rhel"
92240

93-
# Alpine builds
94-
# Note: No JDK builders currently support alpine with ARM
95-
- BUILD_IMAGE_DOCKERFILE: builds/alpine/Base.Dockerfile
96-
BUILD_IMAGE_TAGS: "alpine,jre11-alpine"
97-
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JDK11.Dockerfile
98-
BUILD_IMAGE_TAGS: "jdk11-alpine"
99-
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JDK17.Dockerfile
100-
BUILD_IMAGE_TAGS: "jdk17-alpine"
101-
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JDK21.Dockerfile
102-
BUILD_IMAGE_TAGS: "jdk21-alpine"
103-
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JRE17.Dockerfile
104-
BUILD_IMAGE_TAGS: "jre17-alpine"
241+
# Alpine engine builds
105242
- BUILD_IMAGE_DOCKERFILE: builds/alpine/Lucee5.Dockerfile
106243
BUILD_IMAGE_TAGS: "lucee5-alpine"
244+
BASE_IMAGE: "ortussolutions/commandbox:alpine"
107245
- BUILD_IMAGE_DOCKERFILE: builds/alpine/Lucee6.Dockerfile
108246
BUILD_IMAGE_TAGS: "lucee6-alpine"
247+
BASE_IMAGE: "ortussolutions/commandbox:alpine"
109248
- BUILD_IMAGE_DOCKERFILE: builds/alpine/Lucee7.Dockerfile
110249
BUILD_IMAGE_TAGS: "lucee7-alpine"
250+
BASE_IMAGE: "ortussolutions/commandbox:jre25-alpine"
111251
- BUILD_IMAGE_DOCKERFILE: builds/alpine/LuceeLight.Dockerfile
112252
BUILD_IMAGE_TAGS: "lucee-light-alpine"
253+
BASE_IMAGE: "ortussolutions/commandbox:alpine"
113254
- BUILD_IMAGE_DOCKERFILE: builds/alpine/Lucee5Light.Dockerfile
114255
BUILD_IMAGE_TAGS: "lucee5-light-alpine"
256+
BASE_IMAGE: "ortussolutions/commandbox:alpine"
115257
- BUILD_IMAGE_DOCKERFILE: builds/alpine/Adobe2023.Dockerfile
116258
BUILD_IMAGE_TAGS: "adobe2023-alpine"
259+
BASE_IMAGE: "ortussolutions/commandbox:jdk17-alpine"
117260
- BUILD_IMAGE_DOCKERFILE: builds/alpine/Adobe2025.Dockerfile
118261
BUILD_IMAGE_TAGS: "adobe2025-alpine"
262+
BASE_IMAGE: "ortussolutions/commandbox:jdk21-alpine"
119263
- BUILD_IMAGE_DOCKERFILE: builds/alpine/BoxLang.Dockerfile
120264
BUILD_IMAGE_TAGS: "boxlang-alpine"
265+
BASE_IMAGE: "ortussolutions/commandbox:jdk21-alpine"
121266

122267
steps:
123268
- name: Checkout
@@ -132,11 +277,12 @@ jobs:
132277
id: buildx
133278
uses: docker/setup-buildx-action@master
134279

135-
- name: Setup Builds
280+
- name: Setup Engine Image Builds
136281
id: setup
137282
env:
138283
DOCKER_IMAGE: ortussolutions/commandbox
139284
BUILD_IMAGE_TAGS: ${{ matrix.BUILD_IMAGE_TAGS }}
285+
BASE_IMAGE: ${{ matrix.BASE_IMAGE }}
140286
COMMANDBOX_VERSION: 6.2.1
141287
IMAGE_VERSION: 3.14.8
142288
run: |
@@ -164,9 +310,21 @@ jobs:
164310
fi
165311
done
166312
167-
# Join tags with comma for Docker build
168-
printf -v TAGS_STRING '%s,' "${FINAL_TAGS[@]}"
169-
TAGS_STRING="${TAGS_STRING%,}" # Remove trailing comma
313+
# Process base image tag for version builds
314+
ACTUAL_BASE_IMAGE="$BASE_IMAGE"
315+
if [[ $GITHUB_REF == refs/tags/* ]]; then
316+
# Extract tag from base image and add version suffix
317+
BASE_TAG="${BASE_IMAGE#*:}"
318+
if [[ $BASE_TAG == "latest" ]]; then
319+
ACTUAL_BASE_IMAGE="${BASE_IMAGE%:*}:${GITHUB_REF#refs/tags/v}"
320+
else
321+
ACTUAL_BASE_IMAGE="${BASE_IMAGE%:*}:${BASE_TAG}-${GITHUB_REF#refs/tags/v}"
322+
fi
323+
elif [[ $GITHUB_REF == 'refs/heads/development' ]]; then
324+
# Snapshot builds
325+
BASE_TAG="${BASE_IMAGE#*:}"
326+
ACTUAL_BASE_IMAGE="${BASE_IMAGE%:*}:${BASE_TAG}-snapshot"
327+
fi
170328
171329
# Prefix with Docker image name
172330
FULL_TAGS=""
@@ -190,12 +348,13 @@ jobs:
190348
echo "image_version=${IMAGE_VERSION}" >> $GITHUB_ENV
191349
echo "commandbox_version=${COMMANDBOX_VERSION}" >> $GITHUB_ENV
192350
echo "IMAGE_TAG=${FULL_TAGS}" >> $GITHUB_ENV
351+
echo "ACTUAL_BASE_IMAGE=${ACTUAL_BASE_IMAGE}" >> $GITHUB_ENV
193352
194353
# Set the first tag for testing purposes
195354
FIRST_TAG="${TAG_ARRAY[0]}"
196355
echo "BUILD_IMAGE_TAG=${FIRST_TAG}" >> $GITHUB_ENV
197356
198-
- name: Test
357+
- name: Test Engine Images
199358
env:
200359
COMMANDBOX_VERSION: ${{ env.commandbox_version }}
201360
DOCKER_BUILDKIT: 1
@@ -213,17 +372,16 @@ jobs:
213372
username: ${{ secrets.DOCKER_USERNAME }}
214373
password: ${{ secrets.DOCKER_PASSWORD }}
215374

216-
- name: Build Final
217-
if: github.event_name != 'pull_request'
218-
uses: docker/build-push-action@v6
219-
env:
220-
DOCKER_BUILDKIT: 1
375+
- name: Build and push
376+
id: docker_build
377+
uses: docker/build-push-action@v4
221378
with:
222-
provenance: false
223-
builder: ${{ steps.buildx.outputs.name }}
224-
context: .
225-
file: ${{ matrix.BUILD_IMAGE_DOCKERFILE }}
226-
build-args: COMMANDBOX_VERSION=${{ env.commandbox_version }}
227-
platforms: ${{ env.arch_platforms }}
379+
context: ${{ github.workspace }}
380+
file: ${{ github.workspace }}/${{ matrix.dockerfile }}
228381
push: true
229-
tags: ${{ env.IMAGE_TAG }}
382+
pull: true
383+
build-args: |
384+
COMMANDBOX_VERSION=${{ env.commandbox_version }}
385+
platforms: ${{ env.arch_platforms }}
386+
builder: buildx-multi-arch
387+
tags: ${{ env.IMAGE_TAG }}

builds/alpine/Adobe2023.Dockerfile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
# syntax = edrevo/dockerfile-plus
2-
INCLUDE+ builds/base/Alpine.JDK17.Dockerfile
1+
# syntax = docker/dockerfile:1
2+
ARG BASE_IMAGE_ARG
3+
FROM ${BASE_IMAGE_ARG}
34

45
LABEL maintainer "Jon Clausen <[email protected]>"
56
LABEL repository "https://github.com/Ortus-Solutions/docker-commandbox"

builds/alpine/Adobe2025.Dockerfile

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
# syntax = edrevo/dockerfile-plus
2-
INCLUDE+ builds/base/Alpine.JDK21.Dockerfile
1+
# syntax = docker/dockerfile:1
2+
ARG BASE_IMAGE_ARG
3+
FROM ${BASE_IMAGE_ARG}
4+
35

46
LABEL maintainer "Jon Clausen <[email protected]>"
57
LABEL repository "https://github.com/Ortus-Solutions/docker-commandbox"

builds/alpine/Base.Dockerfile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
# syntax = edrevo/dockerfile-plus
2-
INCLUDE+ builds/base/Alpine.Dockerfile
1+
# syntax = docker/dockerfile:1
2+
ARG BASE_IMAGE_ARG
3+
FROM ${BASE_IMAGE_ARG}
34

45
LABEL maintainer "Jon Clausen <[email protected]>"
56
LABEL repository "https://github.com/Ortus-Solutions/docker-commandbox"

builds/alpine/BoxLang.Dockerfile

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
# syntax = edrevo/dockerfile-plus
2-
INCLUDE+ builds/base/Alpine.JDK21.Dockerfile
1+
# syntax = docker/dockerfile:1
2+
ARG BASE_IMAGE_ARG
3+
FROM ${BASE_IMAGE_ARG}
4+
35

46
LABEL maintainer "Jon Clausen <[email protected]>"
57
LABEL repository "https://github.com/Ortus-Solutions/docker-commandbox"

0 commit comments

Comments
 (0)