Skip to content

Commit f3525a3

Browse files
committed
refactor(repo): restructure build architecture and improve JoomEngine tooling
Reorganize repository structure by removing the legacy build layout and introducing a new, clearer image architecture. This commit focuses on architectural cleanup, file relocation, and foundational improvements, including refinements to the joomengine script and related tooling, without changing image behavior.
1 parent 475ec58 commit f3525a3

File tree

12 files changed

+367
-195
lines changed

12 files changed

+367
-195
lines changed

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
.idea
2-
.jq-template.awk
3-
.log
2+
/log

hashes.txt renamed to conf/hashes.txt

Lines changed: 94 additions & 47 deletions
Large diffs are not rendered by default.
File renamed without changes.

conf/manifest.ndjson

Lines changed: 141 additions & 0 deletions
Large diffs are not rendered by default.

versions.json renamed to conf/versions.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22
"4": {
33
"php": ["8.1", "8.2"],
44
"joomla": "4.4.14",
5-
"variants": ["apache", "fpm"]
5+
"variants": ["fpm-alpine", "fpm", "apache"]
66
},
77
"5": {
88
"php": ["8.2", "8.3"],
99
"joomla": "5.4.2",
10-
"variants": ["apache", "fpm"]
10+
"variants": ["fpm-alpine", "fpm", "apache"]
1111
},
1212
"6": {
1313
"php": ["8.3"],
1414
"joomla": "6.0.2",
15-
"variants": ["apache", "fpm"]
15+
"variants": ["fpm-alpine", "fpm", "apache"]
1616
}
1717
}
1818

DOCKER.md renamed to docker/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ octoleo/joomengine
3939
Examples:
4040
```bash
4141
docker pull octoleo/joomengine:latest
42-
docker pull octoleo/joomengine:6.5.7
43-
docker pull octoleo/joomengine:6.5.7-php8.2-apache
42+
docker pull octoleo/joomengine:6.1.3
43+
docker pull octoleo/joomengine:6.1.3-php8.2-apache
4444
```
4545

4646
> `latest` always points to the **highest stable JCB release**, Apache variant, using the highest supported PHP version.

manifest.ndjson

Lines changed: 0 additions & 94 deletions
This file was deleted.

joomengine.sh renamed to src/bin/joomengine.sh

Lines changed: 106 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,22 @@
11
#!/usr/bin/env bash
22
set -euo pipefail
33

4+
# --------------------------------------------------
5+
# REPOSITORY ROOT RESOLUTION
6+
# --------------------------------------------------
7+
8+
# Absolute path to this script (resolves symlinks)
9+
SCRIPT_PATH="$(realpath "${BASH_SOURCE[0]}")"
10+
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"
11+
12+
# Try Git first (authoritative)
13+
if REPO_ROOT="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null)"; then
14+
:
15+
else
16+
# Fallback: assume src/bin layout
17+
REPO_ROOT="$(realpath "$SCRIPT_DIR/../..")"
18+
fi
19+
420
# --------------------------------------------------
521
# FLAGS / DEFAULTS
622
# --------------------------------------------------
@@ -70,19 +86,60 @@ if [[ "$QUIET" == "yes" ]]; then
7086
fi
7187

7288
# --------------------------------------------------
73-
# CONFIG
89+
# Safety check
7490
# --------------------------------------------------
75-
VERSIONS_JSON="./versions.json"
76-
MAINTAINERS_JSON="./maintainers.json"
77-
HASHES_FILE="./hashes.txt"
91+
if [[ ! -d "$REPO_ROOT/conf" || ! -d "$REPO_ROOT/src" ]]; then
92+
echo "[ERROR] Unable to determine repository root"
93+
echo "Resolved REPO_ROOT=$REPO_ROOT"
94+
exit 1
95+
fi
7896

79-
DOCKERFILE_TEMPLATE="./Dockerfile.template"
80-
DOCKER_ENTRYPOINT="./docker-entrypoint.sh"
97+
# --------------------------------------------------
98+
# CONFIG (repo-root anchored)
99+
# --------------------------------------------------
100+
VERSIONS_JSON_FILE="$REPO_ROOT/conf/versions.json"
101+
MAINTAINERS_JSON_FILE="$REPO_ROOT/conf/maintainers.json"
102+
HASHES_FILE="$REPO_ROOT/conf/hashes.txt"
103+
BUILD_MANIFEST_FILE="$REPO_ROOT/conf/manifest.ndjson"
81104

82-
TAG_REVIEW_FILE="./.log"
83-
BUILD_MANIFEST="./manifest.ndjson"
105+
# --------------------------------------------------
106+
# Safety check
107+
# --------------------------------------------------
108+
if [[ ! -f "$VERSIONS_JSON_FILE" ]]; then
109+
echo "[ERROR] Unable to determine versions file path"
110+
echo "Resolved VERSIONS_JSON_FILE=$VERSIONS_JSON_FILE"
111+
exit 1
112+
fi
113+
114+
if [[ ! -f "$MAINTAINERS_JSON_FILE" ]]; then
115+
echo "[ERROR] Unable to determine maintainers file path"
116+
echo "Resolved MAINTAINERS_JSON_FILE=$MAINTAINERS_JSON_FILE"
117+
exit 1
118+
fi
84119

85-
AWK_SCRIPT='.jq-template.awk'
120+
DOCKERFILE_TEMPLATE="$REPO_ROOT/src/docker/Dockerfile.template"
121+
DOCKER_ENTRYPOINT="$REPO_ROOT/src/docker/docker-entrypoint.sh"
122+
123+
# --------------------------------------------------
124+
# Safety check
125+
# --------------------------------------------------
126+
if [[ ! -f "$DOCKERFILE_TEMPLATE" ]]; then
127+
echo "[ERROR] Unable to determine docker template file path"
128+
echo "Resolved DOCKERFILE_TEMPLATE=$DOCKERFILE_TEMPLATE"
129+
exit 1
130+
fi
131+
132+
if [[ ! -f "$DOCKER_ENTRYPOINT" ]]; then
133+
echo "[ERROR] Unable to determine docker entrypoint file path"
134+
echo "Resolved DOCKER_ENTRYPOINT=$DOCKER_ENTRYPOINT"
135+
exit 1
136+
fi
137+
138+
IMAGES_PATH="$REPO_ROOT/images"
139+
LOG_PATH="$REPO_ROOT/log"
140+
TAG_LOG_FILE="$LOG_PATH/joomengine-tag.log"
141+
142+
AWK_SCRIPT="$REPO_ROOT/src/docker/.jq-template.awk"
86143
if [ -n "${BASHBREW_SCRIPTS:-}" ]; then
87144
AWK_SCRIPT="$BASHBREW_SCRIPTS/jq-template.awk"
88145
elif [ "$BASH_SOURCE" -nt "$AWK_SCRIPT" ]; then
@@ -107,7 +164,7 @@ done
107164
generated_warning() {
108165
cat <<-EOH
109166
#
110-
# NOTE: THIS DOCKERFILE IS GENERATED VIA "joomengine.sh"
167+
# NOTE: THIS DOCKERFILE IS GENERATED VIA "src/bin/joomengine.sh"
111168
#
112169
# PLEASE DO NOT EDIT IT DIRECTLY.
113170
#
@@ -125,10 +182,26 @@ MAINTAINERS="$(
125182
.email + "> (@" +
126183
.github + ")"
127184
) | join(", ")
128-
' "$MAINTAINERS_JSON"
185+
' "$MAINTAINERS_JSON_FILE"
129186
)"
130187
export MAINTAINERS
131188

189+
# --------------------------------------------------
190+
# MOVE TO WORKING PATH
191+
# --------------------------------------------------
192+
cd "$REPO_ROOT/conf"
193+
194+
# --------------------------------------------------
195+
# INIT FOLDERS
196+
# --------------------------------------------------
197+
mkdir -p "$LOG_PATH"
198+
199+
# --------------------------------------------------
200+
# INIT FILES
201+
# --------------------------------------------------
202+
: > "$TAG_LOG_FILE"
203+
: > "$BUILD_MANIFEST_FILE"
204+
132205
# --------------------------------------------------
133206
# FORCE UPDATE OF ALL FILES
134207
# --------------------------------------------------
@@ -138,12 +211,6 @@ else
138211
touch "$HASHES_FILE"
139212
fi
140213

141-
# --------------------------------------------------
142-
# INIT FILES
143-
# --------------------------------------------------
144-
: > "$TAG_REVIEW_FILE"
145-
: > "$BUILD_MANIFEST"
146-
147214
# --------------------------------------------------
148215
# VERSION PARSING
149216
# --------------------------------------------------
@@ -182,7 +249,7 @@ ver_max() {
182249
# --------------------------------------------------
183250
# LOAD MAJORS
184251
# --------------------------------------------------
185-
mapfile -t MAJORS < <(jq -r 'keys[]' "$VERSIONS_JSON")
252+
mapfile -t MAJORS < <(jq -r 'keys[]' "$VERSIONS_JSON_FILE")
186253

187254
# --------------------------------------------------
188255
# PASS 1: CONTEXT GENERATION + RELEASE COLLECTION
@@ -203,9 +270,9 @@ for MAJOR in "${MAJORS[@]}"; do
203270
continue
204271
fi
205272

206-
mapfile -t PHP_VERSIONS < <(jq -r ".\"$MAJOR\".php[]" "$VERSIONS_JSON")
207-
mapfile -t VARIANTS < <(jq -r ".\"$MAJOR\".variants[]" "$VERSIONS_JSON")
208-
JOOMLA_VERSION="$(jq -r --arg m "$MAJOR" '.[$m].joomla' "$VERSIONS_JSON")"
273+
mapfile -t PHP_VERSIONS < <(jq -r ".\"$MAJOR\".php[]" "$VERSIONS_JSON_FILE")
274+
mapfile -t VARIANTS < <(jq -r ".\"$MAJOR\".variants[]" "$VERSIONS_JSON_FILE")
275+
JOOMLA_VERSION="$(jq -r --arg m "$MAJOR" '.[$m].joomla' "$VERSIONS_JSON_FILE")"
209276

210277
PHP_LIST_BY_MAJOR["$MAJOR"]="${PHP_VERSIONS[*]}"
211278
VARIANT_LIST_BY_MAJOR["$MAJOR"]="${VARIANTS[*]}"
@@ -262,20 +329,21 @@ for MAJOR in "${MAJORS[@]}"; do
262329
export MAJOR_VERSION="$MAJOR"
263330
export JOOMLA_VERSION="$JOOMLA_VERSION"
264331

265-
dir="build/jcb${VERSION}/j${JOOMLA_VERSION}/php${PHP}/${VARIANT}"
266-
mkdir -p "$dir"
332+
target="jcb${VERSION}/j${JOOMLA_VERSION}/php${PHP}/${VARIANT}"
333+
target_dir="${IMAGES_PATH}/${target}"
334+
mkdir -p "$target_dir"
267335

268-
echo " -> generating $dir"
336+
echo " -> generating ${target}"
269337

270-
cp "$DOCKER_ENTRYPOINT" "$dir/docker-entrypoint.sh"
271-
chmod +x "$dir/docker-entrypoint.sh"
338+
cp "$DOCKER_ENTRYPOINT" "${target_dir}/docker-entrypoint.sh"
339+
chmod +x "${target_dir}/docker-entrypoint.sh"
272340

273341
{
274342
generated_warning
275-
gawk -f "$AWK_SCRIPT" "$DOCKERFILE_TEMPLATE"
276-
} > "$dir/Dockerfile"
343+
gawk -f "${AWK_SCRIPT}" "${DOCKERFILE_TEMPLATE}"
344+
} > "${target_dir}/Dockerfile"
277345

278-
printf "%s %s %s %s %s\n" "$VERSION" "${PHP}" "${JOOMLA_VERSION}" "${VARIANT}" "${SHA}" >> "$HASHES_FILE"
346+
printf "%s %s %s %s %s\n" "${VERSION}" "${PHP}" "${JOOMLA_VERSION}" "${VARIANT}" "${SHA}" >> "$HASHES_FILE"
279347
done
280348

281349
done
@@ -308,7 +376,7 @@ done
308376
IMAGE_NAME="octoleo/joomengine"
309377

310378
emit_tag() {
311-
printf " - %s:%s\n" "$IMAGE_NAME" "$1" >> "$TAG_REVIEW_FILE"
379+
printf " - %s:%s\n" "$IMAGE_NAME" "$1" >> "$TAG_LOG_FILE"
312380
}
313381

314382
for i in "${!REL_VERSION[@]}"; do
@@ -368,7 +436,7 @@ for i in "${!REL_VERSION[@]}"; do
368436
echo "JOOMLA : $JOOMLA_VERSION"
369437
echo "LEADERS : stable_major=$IS_HIGHEST_STABLE_MAJOR stable_global=$IS_HIGHEST_STABLE_GLOBAL pr_major=$IS_HIGHEST_PRERELEASE_MAJOR pr_global=$IS_HIGHEST_PRERELEASE_GLOBAL"
370438
echo "TAGS:"
371-
} >> "$TAG_REVIEW_FILE"
439+
} >> "$TAG_LOG_FILE"
372440

373441
# ---- Base tag (always)
374442
emit_once "${VERSION}-php${PHP}-${VARIANT}"
@@ -461,11 +529,11 @@ for i in "${!REL_VERSION[@]}"; do
461529
fi
462530
fi
463531

464-
BUILD_PATH="build/jcb${VERSION}/j${JOOMLA_VERSION}/php${PHP}/${VARIANT}"
532+
build_path="${IMAGES_PATH}/jcb${VERSION}/j${JOOMLA_VERSION}/php${PHP}/${VARIANT}"
465533

466534
jq -nc \
467535
--arg image "$IMAGE_NAME" \
468-
--arg path "$BUILD_PATH" \
536+
--arg path "$build_path" \
469537
--arg version "$VERSION" \
470538
--arg major "$V_MAJOR" \
471539
--arg minor "$V_MINOR" \
@@ -484,15 +552,15 @@ for i in "${!REL_VERSION[@]}"; do
484552
joomla: $joomla,
485553
base_tag: $tags[0],
486554
tags: $tags
487-
}' >> "$BUILD_MANIFEST"
555+
}' >> "$BUILD_MANIFEST_FILE"
488556

489-
echo >> "$TAG_REVIEW_FILE"
557+
echo >> "$TAG_LOG_FILE"
490558
done
491559
done
492560
done
493561

494-
echo "✅ Tag review written to: $TAG_REVIEW_FILE"
495-
echo "✅ Build manifest written to: $BUILD_MANIFEST"
562+
echo "✅ Tag review written to: $TAG_LOG_FILE"
563+
echo "✅ Build manifest written to: $BUILD_MANIFEST_FILE"
496564

497565
# --------------------------------------------------
498566
# DOCKER AUTH VALIDATION (before build+push)
@@ -590,7 +658,7 @@ while IFS= read -r LINE || [[ -n "$LINE" ]]; do
590658
fi
591659
done
592660

593-
done < "$BUILD_MANIFEST"
661+
done < "$BUILD_MANIFEST_FILE"
594662

595663
echo
596664
echo "✅ All images built and tagged successfully"

src/docker/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.jq-template.awk

0 commit comments

Comments
 (0)