Skip to content

add support for SKIP_PORT_ASSIGNMENTS environment variable #327

add support for SKIP_PORT_ASSIGNMENTS environment variable

add support for SKIP_PORT_ASSIGNMENTS environment variable #327

Workflow file for this run

name: Release
on:
push:
branches:
- main
- development
tags:
- v*
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-base-images:
runs-on: ubuntu-latest
strategy:
matrix:
include:
# Foundation images (builds/base/* - eclipse-temurin based) with promoted tags
- BUILD_IMAGE_DOCKERFILE: builds/base/Dockerfile
BUILD_IMAGE_TAGS: "latest,jre11"
- BUILD_IMAGE_DOCKERFILE: builds/base/JDK11.Dockerfile
BUILD_IMAGE_TAGS: "jdk11"
- BUILD_IMAGE_DOCKERFILE: builds/base/JDK17.Dockerfile
BUILD_IMAGE_TAGS: "jdk17"
- BUILD_IMAGE_DOCKERFILE: builds/base/JDK21.Dockerfile
BUILD_IMAGE_TAGS: "jdk21"
- BUILD_IMAGE_DOCKERFILE: builds/base/JDK24.Dockerfile
BUILD_IMAGE_TAGS: "jdk24"
- BUILD_IMAGE_DOCKERFILE: builds/base/JDK25.Dockerfile
BUILD_IMAGE_TAGS: "jdk25"
- BUILD_IMAGE_DOCKERFILE: builds/base/JRE17.Dockerfile
BUILD_IMAGE_TAGS: "jre17"
- BUILD_IMAGE_DOCKERFILE: builds/base/JRE21.Dockerfile
BUILD_IMAGE_TAGS: "jre21"
- BUILD_IMAGE_DOCKERFILE: builds/base/JRE24.Dockerfile
BUILD_IMAGE_TAGS: "jre24"
- BUILD_IMAGE_DOCKERFILE: builds/base/JRE25.Dockerfile
BUILD_IMAGE_TAGS: "jre25"
# RHEL/UBI9 foundation images with promoted tags
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.Dockerfile
BUILD_IMAGE_TAGS: "ubi9,jre11-rhel"
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK11.Dockerfile
BUILD_IMAGE_TAGS: "jdk11-rhel"
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK17.Dockerfile
BUILD_IMAGE_TAGS: "jdk17-rhel"
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK21.Dockerfile
BUILD_IMAGE_TAGS: "jdk21-rhel"
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK24.Dockerfile
BUILD_IMAGE_TAGS: "jdk24-rhel"
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JRE17.Dockerfile
BUILD_IMAGE_TAGS: "jre17-rhel"
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JRE21.Dockerfile
BUILD_IMAGE_TAGS: "jre21-rhel"
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JRE24.Dockerfile
BUILD_IMAGE_TAGS: "jre24-rhel"
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JDK25.Dockerfile
BUILD_IMAGE_TAGS: "jdk25-rhel"
- BUILD_IMAGE_DOCKERFILE: builds/base/rhel.JRE25.Dockerfile
BUILD_IMAGE_TAGS: "jre25-rhel"
# Alpine foundation images with promoted tags
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.Dockerfile
BUILD_IMAGE_TAGS: "alpine,jre11-alpine"
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JDK11.Dockerfile
BUILD_IMAGE_TAGS: "jdk11-alpine"
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JDK17.Dockerfile
BUILD_IMAGE_TAGS: "jdk17-alpine"
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JDK21.Dockerfile
BUILD_IMAGE_TAGS: "jdk21-alpine"
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JRE17.Dockerfile
BUILD_IMAGE_TAGS: "jre17-alpine"
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JRE21.Dockerfile
BUILD_IMAGE_TAGS: "jre21-alpine"
- BUILD_IMAGE_DOCKERFILE: builds/base/Alpine.JRE25.Dockerfile
BUILD_IMAGE_TAGS: "jre25-alpine"
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up QEMU
uses: docker/setup-qemu-action@master
with:
platforms: all
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@master
- name: Setup Base Image Builds
id: setup
env:
DOCKER_IMAGE: ortussolutions/commandbox
BUILD_IMAGE_TAGS: ${{ matrix.BUILD_IMAGE_TAGS }}
COMMANDBOX_VERSION: 6.3.1
IMAGE_VERSION: 3.15.1
run: |
# Split the comma-separated tags
IFS=',' read -ra TAG_ARRAY <<< "$BUILD_IMAGE_TAGS"
# Initialize arrays for final tags
FINAL_TAGS=()
# Process each tag
for tag in "${TAG_ARRAY[@]}"; do
# Tag Builds
if [[ $GITHUB_REF == refs/tags/* ]]; then
if [[ $tag == "latest" ]]; then
FINAL_TAGS+=("${GITHUB_REF#refs/tags/v}")
else
FINAL_TAGS+=("${tag}-${GITHUB_REF#refs/tags/v}")
fi
elif [[ $GITHUB_REF == 'refs/heads/development' ]]; then
# Snapshot builds
FINAL_TAGS+=("${tag}-snapshot")
else
# Main branch builds
FINAL_TAGS+=("${tag}")
fi
done
# Prefix with Docker image name
FULL_TAGS=""
for tag in "${FINAL_TAGS[@]}"; do
if [[ -z "$FULL_TAGS" ]]; then
FULL_TAGS="${DOCKER_IMAGE}:${tag}"
else
FULL_TAGS="${FULL_TAGS},${DOCKER_IMAGE}:${tag}"
fi
done
# Determine architecture platforms based on tag content
if [[ ${BUILD_IMAGE_TAGS} == *"alpine"* ]] && [[ ${BUILD_IMAGE_TAGS} != *"jdk21-alpine"* ]] && [[ ${BUILD_IMAGE_TAGS} != *"boxlang-alpine"* ]]; then
ARCH_PLATFORMS=linux/amd64
else
ARCH_PLATFORMS=linux/amd64,linux/arm64/v8
fi
# Set output parameters.
echo "arch_platforms=${ARCH_PLATFORMS}" >> $GITHUB_ENV
echo "image_version=${IMAGE_VERSION}" >> $GITHUB_ENV
echo "commandbox_version=${COMMANDBOX_VERSION}" >> $GITHUB_ENV
echo "IMAGE_TAG=${FULL_TAGS}" >> $GITHUB_ENV
# Set the first tag for testing purposes
FIRST_TAG="${TAG_ARRAY[0]}"
echo "BUILD_IMAGE_TAG=${FIRST_TAG}" >> $GITHUB_ENV
- name: Test built image
env:
COMMANDBOX_VERSION: ${{ env.commandbox_version }}
DOCKER_BUILDKIT: 1
COMPOSE_DOCKER_CLI_BUILD: 1
BUILD_IMAGE_DOCKERFILE: ${{ matrix.BUILD_IMAGE_DOCKERFILE }}
BUILD_IMAGE_TAG: ${{ env.BUILD_IMAGE_TAG }}
BASE_IMAGE_ARG:
run: |
docker compose -f docker-compose.test.yml up --build --exit-code-from sut
docker compose -f docker-compose.secret-test.yml up --build --exit-code-from sut
- name: DockerHub Login
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and Push Base Images
if: github.event_name != 'pull_request'
uses: docker/build-push-action@v6
env:
DOCKER_BUILDKIT: 1
with:
provenance: false
builder: ${{ steps.buildx.outputs.name }}
context: .
file: ${{ matrix.BUILD_IMAGE_DOCKERFILE }}
build-args: |
COMMANDBOX_VERSION=${{ env.commandbox_version }}
platforms: ${{ env.arch_platforms }}
push: true
tags: ${{ env.IMAGE_TAG }}
build-engine-images:
runs-on: ubuntu-latest
needs: build-base-images
strategy:
matrix:
include:
# Debian engine builds
- BUILD_IMAGE_DOCKERFILE: builds/debian/Lucee5.Dockerfile
BUILD_IMAGE_TAGS: "lucee5"
BASE_IMAGE: "ortussolutions/commandbox:latest"
- BUILD_IMAGE_DOCKERFILE: builds/debian/Lucee6.Dockerfile
BUILD_IMAGE_TAGS: "lucee6"
BASE_IMAGE: "ortussolutions/commandbox:jre17"
- BUILD_IMAGE_DOCKERFILE: builds/debian/Lucee7.Dockerfile
BUILD_IMAGE_TAGS: "lucee7"
BASE_IMAGE: "ortussolutions/commandbox:jre25"
- BUILD_IMAGE_DOCKERFILE: builds/debian/LuceeLight.Dockerfile
BUILD_IMAGE_TAGS: "lucee-light"
BASE_IMAGE: "ortussolutions/commandbox:latest"
- BUILD_IMAGE_DOCKERFILE: builds/debian/Lucee5Light.Dockerfile
BUILD_IMAGE_TAGS: "lucee5-light"
BASE_IMAGE: "ortussolutions/commandbox:latest"
- BUILD_IMAGE_DOCKERFILE: builds/debian/Adobe2021.Dockerfile
BUILD_IMAGE_TAGS: "adobe2021"
BASE_IMAGE: "ortussolutions/commandbox:jdk11"
- BUILD_IMAGE_DOCKERFILE: builds/debian/Adobe2023.Dockerfile
BUILD_IMAGE_TAGS: "adobe2023"
BASE_IMAGE: "ortussolutions/commandbox:jdk17"
- BUILD_IMAGE_DOCKERFILE: builds/debian/Adobe2025.Dockerfile
BUILD_IMAGE_TAGS: "adobe2025"
BASE_IMAGE: "ortussolutions/commandbox:jdk21"
- BUILD_IMAGE_DOCKERFILE: builds/debian/BoxLang.Dockerfile
BUILD_IMAGE_TAGS: "boxlang"
BASE_IMAGE: "ortussolutions/commandbox:jdk21"
# RHEL engine builds
- BUILD_IMAGE_DOCKERFILE: builds/redhat/Lucee5.Dockerfile
BUILD_IMAGE_TAGS: "lucee5-rhel"
BASE_IMAGE: "ortussolutions/commandbox:ubi9"
- BUILD_IMAGE_DOCKERFILE: builds/redhat/Lucee6.Dockerfile
BUILD_IMAGE_TAGS: "lucee6-rhel"
BASE_IMAGE: "ortussolutions/commandbox:ubi9"
- BUILD_IMAGE_DOCKERFILE: builds/redhat/Lucee7.Dockerfile
BUILD_IMAGE_TAGS: "lucee7-rhel"
BASE_IMAGE: "ortussolutions/commandbox:jre25-rhel"
- BUILD_IMAGE_DOCKERFILE: builds/redhat/LuceeLight.Dockerfile
BUILD_IMAGE_TAGS: "lucee-light-rhel"
BASE_IMAGE: "ortussolutions/commandbox:ubi9"
- BUILD_IMAGE_DOCKERFILE: builds/redhat/Lucee5Light.Dockerfile
BUILD_IMAGE_TAGS: "lucee5-light-rhel"
BASE_IMAGE: "ortussolutions/commandbox:ubi9"
- BUILD_IMAGE_DOCKERFILE: builds/redhat/Adobe2023.Dockerfile
BUILD_IMAGE_TAGS: "adobe2023-rhel"
BASE_IMAGE: "ortussolutions/commandbox:jdk17-rhel"
- BUILD_IMAGE_DOCKERFILE: builds/redhat/Adobe2025.Dockerfile
BUILD_IMAGE_TAGS: "adobe2025-rhel"
BASE_IMAGE: "ortussolutions/commandbox:jdk21-rhel"
- BUILD_IMAGE_DOCKERFILE: builds/redhat/BoxLang.Dockerfile
BUILD_IMAGE_TAGS: "boxlang-rhel"
BASE_IMAGE: "ortussolutions/commandbox:jdk21-rhel"
# Alpine engine builds
- BUILD_IMAGE_DOCKERFILE: builds/alpine/Lucee5.Dockerfile
BUILD_IMAGE_TAGS: "lucee5-alpine"
BASE_IMAGE: "ortussolutions/commandbox:alpine"
- BUILD_IMAGE_DOCKERFILE: builds/alpine/Lucee6.Dockerfile
BUILD_IMAGE_TAGS: "lucee6-alpine"
BASE_IMAGE: "ortussolutions/commandbox:alpine"
- BUILD_IMAGE_DOCKERFILE: builds/alpine/Lucee7.Dockerfile
BUILD_IMAGE_TAGS: "lucee7-alpine"
BASE_IMAGE: "ortussolutions/commandbox:jre25-alpine"
- BUILD_IMAGE_DOCKERFILE: builds/alpine/LuceeLight.Dockerfile
BUILD_IMAGE_TAGS: "lucee-light-alpine"
BASE_IMAGE: "ortussolutions/commandbox:alpine"
- BUILD_IMAGE_DOCKERFILE: builds/alpine/Lucee5Light.Dockerfile
BUILD_IMAGE_TAGS: "lucee5-light-alpine"
BASE_IMAGE: "ortussolutions/commandbox:alpine"
- BUILD_IMAGE_DOCKERFILE: builds/alpine/Adobe2023.Dockerfile
BUILD_IMAGE_TAGS: "adobe2023-alpine"
BASE_IMAGE: "ortussolutions/commandbox:jdk17-alpine"
- BUILD_IMAGE_DOCKERFILE: builds/alpine/Adobe2025.Dockerfile
BUILD_IMAGE_TAGS: "adobe2025-alpine"
BASE_IMAGE: "ortussolutions/commandbox:jdk21-alpine"
- BUILD_IMAGE_DOCKERFILE: builds/alpine/BoxLang.Dockerfile
BUILD_IMAGE_TAGS: "boxlang-alpine"
BASE_IMAGE: "ortussolutions/commandbox:jdk21-alpine"
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up QEMU
uses: docker/setup-qemu-action@master
with:
platforms: all
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@master
- name: Setup Engine Image Builds
id: setup
env:
DOCKER_IMAGE: ortussolutions/commandbox
BUILD_IMAGE_TAGS: ${{ matrix.BUILD_IMAGE_TAGS }}
BASE_IMAGE: ${{ matrix.BASE_IMAGE }}
COMMANDBOX_VERSION: 6.3.1
IMAGE_VERSION: 3.15.1
run: |
# Split the comma-separated tags
IFS=',' read -ra TAG_ARRAY <<< "$BUILD_IMAGE_TAGS"
# Initialize arrays for final tags
FINAL_TAGS=()
# Process each tag
for tag in "${TAG_ARRAY[@]}"; do
# Tag Builds
if [[ $GITHUB_REF == refs/tags/* ]]; then
if [[ $tag == "latest" ]]; then
FINAL_TAGS+=("${GITHUB_REF#refs/tags/v}")
else
FINAL_TAGS+=("${tag}-${GITHUB_REF#refs/tags/v}")
fi
elif [[ $GITHUB_REF == 'refs/heads/development' ]]; then
# Snapshot builds
FINAL_TAGS+=("${tag}-snapshot")
else
# Main branch builds
FINAL_TAGS+=("${tag}")
fi
done
# Process base image tag for version builds
ACTUAL_BASE_IMAGE="$BASE_IMAGE"
if [[ $GITHUB_REF == refs/tags/* ]]; then
# Extract tag from base image and add version suffix
BASE_TAG="${BASE_IMAGE#*:}"
if [[ $BASE_TAG == "latest" ]]; then
ACTUAL_BASE_IMAGE="${BASE_IMAGE%:*}:${GITHUB_REF#refs/tags/v}"
else
ACTUAL_BASE_IMAGE="${BASE_IMAGE%:*}:${BASE_TAG}-${GITHUB_REF#refs/tags/v}"
fi
elif [[ $GITHUB_REF == 'refs/heads/development' ]]; then
# Snapshot builds
BASE_TAG="${BASE_IMAGE#*:}"
ACTUAL_BASE_IMAGE="${BASE_IMAGE%:*}:${BASE_TAG}-snapshot"
fi
# Prefix with Docker image name
FULL_TAGS=""
for tag in "${FINAL_TAGS[@]}"; do
if [[ -z "$FULL_TAGS" ]]; then
FULL_TAGS="${DOCKER_IMAGE}:${tag}"
else
FULL_TAGS="${FULL_TAGS},${DOCKER_IMAGE}:${tag}"
fi
done
# Determine architecture platforms based on tag content
if [[ ${BUILD_IMAGE_TAGS} == *"alpine"* ]] && [[ ${BUILD_IMAGE_TAGS} != *"jdk21-alpine"* ]] && [[ ${BUILD_IMAGE_TAGS} != *"boxlang-alpine"* ]]; then
ARCH_PLATFORMS=linux/amd64
else
ARCH_PLATFORMS=linux/amd64,linux/arm64/v8
fi
# Set output parameters.
echo "arch_platforms=${ARCH_PLATFORMS}" >> $GITHUB_ENV
echo "image_version=${IMAGE_VERSION}" >> $GITHUB_ENV
echo "commandbox_version=${COMMANDBOX_VERSION}" >> $GITHUB_ENV
echo "IMAGE_TAG=${FULL_TAGS}" >> $GITHUB_ENV
echo "ACTUAL_BASE_IMAGE=${ACTUAL_BASE_IMAGE}" >> $GITHUB_ENV
# Set the first tag for testing purposes
FIRST_TAG="${TAG_ARRAY[0]}"
echo "BUILD_IMAGE_TAG=${FIRST_TAG}" >> $GITHUB_ENV
- name: Test Engine Images
env:
COMMANDBOX_VERSION: ${{ env.commandbox_version }}
DOCKER_BUILDKIT: 1
COMPOSE_DOCKER_CLI_BUILD: 1
BUILD_IMAGE_DOCKERFILE: ${{ matrix.BUILD_IMAGE_DOCKERFILE }}
BUILD_IMAGE_TAG: ${{ env.BUILD_IMAGE_TAG }}
BASE_IMAGE_ARG: ${{ env.ACTUAL_BASE_IMAGE }}
run: |
docker compose -f docker-compose.test.yml up --build --exit-code-from sut
docker compose -f docker-compose.secret-test.yml up --build --exit-code-from sut
- name: DockerHub Login
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
if: github.event_name != 'pull_request'
uses: docker/build-push-action@v6
env:
DOCKER_BUILDKIT: 1
with:
provenance: false
builder: ${{ steps.buildx.outputs.name }}
context: ${{ github.workspace }}
file: ${{ github.workspace }}/${{ matrix.BUILD_IMAGE_DOCKERFILE }}
push: true
pull: true
build-args: |
COMMANDBOX_VERSION=${{ env.commandbox_version }}
BASE_IMAGE_ARG=${{ env.ACTUAL_BASE_IMAGE }}
platforms: ${{ env.arch_platforms }}
tags: ${{ env.IMAGE_TAG }}