From 6d88d4c4c50761adb7814b84b414eaef410fb65e Mon Sep 17 00:00:00 2001 From: Will Ezell Date: Thu, 21 May 2026 08:13:16 -0400 Subject: [PATCH 1/2] fix(docker): install cached custom starter on container restart The startup script only exported DOT_STARTER_DATA_LOAD inside the download branch, so when the starter zip was already cached on disk the container would log "custom starter already downloaded" and boot without applying the starter. Move the export to run whenever the cached file exists and is non-empty, and quote paths to satisfy shellcheck. Fixes #35788 Co-Authored-By: Claude Opus 4.7 (1M context) --- .../docker/original/ROOT/srv/40-custom-starter-zip.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dotCMS/src/main/docker/original/ROOT/srv/40-custom-starter-zip.sh b/dotCMS/src/main/docker/original/ROOT/srv/40-custom-starter-zip.sh index addde6271dd8..899f3b7deff9 100755 --- a/dotCMS/src/main/docker/original/ROOT/srv/40-custom-starter-zip.sh +++ b/dotCMS/src/main/docker/original/ROOT/srv/40-custom-starter-zip.sh @@ -49,14 +49,16 @@ else curl -k -s -L -o $CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER "$CUSTOM_STARTER_URL" || echo "Failed to download starter" fi - if [[ -s $CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER ]] ; then - export DOT_STARTER_DATA_LOAD=$CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER - else - rm -f $CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER + if [[ ! -s "$CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER" ]] ; then + rm -f "$CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER" echo "No starter downloaded, skipping" fi else echo "custom starter already downloaded" echo "if you need to redownload a new starter, delete the existing custom starter file found here: $CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER" fi + + if [[ -s "$CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER" ]] ; then + export DOT_STARTER_DATA_LOAD="$CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER" + fi fi From 6961919c697902bb9ae89f6db330047c4d53fcbf Mon Sep 17 00:00:00 2001 From: Will Ezell Date: Thu, 21 May 2026 08:19:39 -0400 Subject: [PATCH 2/2] fix(docker): self-heal zero-byte starter cache and quote remaining paths Per review feedback on PR #35789: - Switch the cache-presence check from -f to -s so a stale zero-byte file triggers a re-download instead of silently skipping both the download and the DOT_STARTER_DATA_LOAD export. - Quote the remaining path expansions in the file so the shellcheck claim in the PR description holds end-to-end. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../original/ROOT/srv/40-custom-starter-zip.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/dotCMS/src/main/docker/original/ROOT/srv/40-custom-starter-zip.sh b/dotCMS/src/main/docker/original/ROOT/srv/40-custom-starter-zip.sh index 899f3b7deff9..a7db42caabf9 100755 --- a/dotCMS/src/main/docker/original/ROOT/srv/40-custom-starter-zip.sh +++ b/dotCMS/src/main/docker/original/ROOT/srv/40-custom-starter-zip.sh @@ -17,14 +17,14 @@ CUSTOM_STARTER_DATA_FOLDER=${CUSTOM_STARTER_DATA_FOLDER:-"/data/shared"} ## if we dont have a custom starter -if [ -z ${CUSTOM_STARTER_URL} ]; then +if [ -z "${CUSTOM_STARTER_URL}" ]; then echo "Using default starter"; else HASHED_URL=$(echo -n "$CUSTOM_STARTER_URL" | md5sum | cut -d ' ' -f 1) CUSTOM_STARTER=dotcms-starter-$HASHED_URL.zip - if [[ ! -f $CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER ]]; then + if [[ ! -s "$CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER" ]]; then echo "CUSTOM_STARTER_DATA_FOLDER: $CUSTOM_STARTER_DATA_FOLDER" echo "CUSTOM_STARTER_URL: $CUSTOM_STARTER_URL" @@ -36,17 +36,17 @@ else if [[ -n $CUSTOM_STARTER_URL_AUTH_TOKEN ]]; then echo "CUSTOM_STARTER_URL_BASIC_AUTH: XXXXXX:XXXXXX" fi - mkdir -p $CUSTOM_STARTER_DATA_FOLDER + mkdir -p "$CUSTOM_STARTER_DATA_FOLDER" if [[ -n $CUSTOM_STARTER_URL_AUTH_TOKEN ]]; then - echo "Downloading Custom Starter with Auth Token:" $CUSTOM_STARTER_URL + echo "Downloading Custom Starter with Auth Token:" "$CUSTOM_STARTER_URL" echo "curl -s -L -o $CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER -HAuthorization: Bearer $CUSTOM_STARTER_URL_AUTH_TOKEN $CUSTOM_STARTER_URL" - curl -k -s -L -o $CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER -H"Authorization: Bearer $CUSTOM_STARTER_URL_AUTH_TOKEN" "$CUSTOM_STARTER_URL" || echo "Failed to download starter with auth token" + curl -k -s -L -o "$CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER" -H"Authorization: Bearer $CUSTOM_STARTER_URL_AUTH_TOKEN" "$CUSTOM_STARTER_URL" || echo "Failed to download starter with auth token" elif [[ -n $CUSTOM_STARTER_URL_BASIC_AUTH ]]; then - echo "Downloading Custom Starter with Basic Auth:" $CUSTOM_STARTER_URL - curl -k -s -L -o $CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER -u"$CUSTOM_STARTER_URL_BASIC_AUTH" "$CUSTOM_STARTER_URL" || echo "Failed to download starter with basic auth" + echo "Downloading Custom Starter with Basic Auth:" "$CUSTOM_STARTER_URL" + curl -k -s -L -o "$CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER" -u"$CUSTOM_STARTER_URL_BASIC_AUTH" "$CUSTOM_STARTER_URL" || echo "Failed to download starter with basic auth" else - echo "Downloading Custom Starter:" $CUSTOM_STARTER_URL - curl -k -s -L -o $CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER "$CUSTOM_STARTER_URL" || echo "Failed to download starter" + echo "Downloading Custom Starter:" "$CUSTOM_STARTER_URL" + curl -k -s -L -o "$CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER" "$CUSTOM_STARTER_URL" || echo "Failed to download starter" fi if [[ ! -s "$CUSTOM_STARTER_DATA_FOLDER/$CUSTOM_STARTER" ]] ; then