Merge pull request #100 from Ortus-Solutions/development #324
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
| 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.0 | |
| 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.0 | |
| 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 }} |