@@ -13,13 +13,13 @@ concurrency:
1313 cancel-in-progress : true
1414
1515jobs :
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 }}
0 commit comments