1- # Joomla Component Builder – Official Docker Images
1+ # Joomla Component Builder - Official Docker Images
22
3- [ ![ JoomEngine – Automated Build & Version Tracking] ( https://github.com/octoleo/joomengine/actions/workflows/joomengine.yml/badge.svg?branch=master )] ( https://github.com/octoleo/joomengine/actions/workflows/joomengine.yml )
3+ [ ![ JoomEngine - Automated Build & Version Tracking] ( https://github.com/octoleo/joomengine/actions/workflows/joomengine.yml/badge.svg?branch=master )] ( https://github.com/octoleo/joomengine/actions/workflows/joomengine.yml )
44
55This repository contains the ** official Docker image build system** for
66** Joomla Component Builder (JCB)** .
@@ -10,7 +10,7 @@ Joomla Component Builder Docker images across supported:
1010
1111- Joomla versions
1212- PHP versions
13- - Runtime variants (Apache / FPM)
13+ - Runtime variants (Apache / FPM / FPM-ALPINE )
1414- Stable and prerelease channels
1515
1616All images are ** generated, versioned, and published automatically** from
@@ -36,7 +36,7 @@ authoritative upstream release data.
3636- A place to hand-edit image definitions
3737- A CI script that hides build logic in YAML
3838
39- > ** All build logic lives in ` joomengine.sh ` .**
39+ > ** All build logic lives in ` src/bin/ joomengine.sh` .**
4040> CI only authenticates, runs it, and commits the results.
4141
4242---
@@ -51,11 +51,11 @@ You can pull images directly, for example:
5151
5252``` bash
5353docker pull octoleo/joomengine:latest
54- docker pull octoleo/joomengine:6.5.7
55- docker pull octoleo/joomengine:6.5.7 -php8.2 -apache
54+ docker pull octoleo/joomengine:6.1.3
55+ docker pull octoleo/joomengine:6.1.3 -php8.3 -apache
5656````
5757
58- [Docker details -> ](https://github.com/octoleo/joomengine/blob/master/DOCKER .md)
58+ [Docker details -> ](https://github.com/octoleo/joomengine/blob/master/docker/README .md)
5959
6060---
6161
@@ -64,7 +64,7 @@ docker pull octoleo/joomengine:6.5.7-php8.2-apache
6464Image generation is driven entirely by the script:
6565
6666```
67- ./joomengine.sh
67+ ./src/bin/ joomengine.sh
6868```
6969
7070At a high level, the build engine performs the following steps:
@@ -79,18 +79,18 @@ At a high level, the build engine performs the following steps:
7979
8080 * Joomla major versions
8181 * Supported PHP versions (per Joomla)
82- * Runtime variants (`apache`, `fpm`)
82+ * Runtime variants (`apache`, `fpm`, `fpm-alpine` )
8383
84843. **Generates build contexts**
8585
86- * Creates versioned directory trees under `build /`
86+ * Creates versioned directory trees under `images /`
8787 * Generates Dockerfiles from templates
8888 * Injects release metadata as build arguments
8989 * Copies and configures the Docker entrypoint
9090
91914. **Tracks build state**
9292
93- * Records processed builds in `hashes.txt`
93+ * Records processed builds in `conf/ hashes.txt`
9494 * Prevents rebuilding identical release+PHP+variant combinations
9595
96965. **Calculates tag leadership**
@@ -102,7 +102,7 @@ At a high level, the build engine performs the following steps:
102102
1031036. **Emits a build manifest**
104104
105- * Outputs a machine-readable NDJSON manifest (`manifest.ndjson`)
105+ * Outputs a machine-readable NDJSON manifest (`conf/ manifest.ndjson`)
106106 * Each line describes exactly one buildable image and its tags
107107
1081087. **Builds and publishes images**
@@ -126,7 +126,7 @@ This repository follows a **strict, predictable tagging policy**.
126126Example:
127127
128128```
129- 6.5.7 -php8.2 -apache
129+ 6.1.3 -php8.3 -apache
130130```
131131
132132---
@@ -195,15 +195,15 @@ Prereleases are tagged **without polluting stable tags**.
195195Examples:
196196
197197```
198- 6.6 -rc
199- 6.6 -rc1
200- 6.6 -rc1-php8.3-apache
198+ 6.1.4 -rc
199+ 6.1.4 -rc1
200+ 6.1.4 -rc1-php8.3-apache
201201```
202202
203203Rules:
204204
205205* Numbered prereleases roll forward correctly
206- * Unnumbered prereleases are treated as “ highest in channel”
206+ * Unnumbered prereleases are treated as " highest in channel"
207207* Stable tags are never reused for prereleases
208208
209209---
@@ -212,19 +212,49 @@ Rules:
212212
213213```
214214.
215- ├── joomengine.sh # The build engine (authoritative logic)
216- ├── versions.json # Supported Joomla / PHP / variant matrix
217- ├── maintainers.json # Image maintainer metadata
218- ├── Dockerfile.template # Template used to generate Dockerfiles
219- ├── docker-entrypoint.sh # Runtime entrypoint copied into images
220- ├── hashes.txt # Tracks built release combinations
221- ├── manifest.ndjson # Generated build manifest (NDJSON)
222- ├── build/ # Generated build contexts
223- └── .github/workflows/ # Automation (thin by design)
215+ ├── conf/ # Declarative data & state
216+ │ ├── versions.json # Supported Joomla / PHP / variant matrix
217+ │ ├── maintainers.json # Image maintainer metadata
218+ │ ├── hashes.txt # Tracks built release combinations
219+ │ └── manifest.ndjson # (generated) build manifest (NDJSON)
220+ │
221+ ├── images/ # Generated Docker build contexts
222+ │ └── jcbX.Y.Z/ # (generated) per-jcb-version
223+ │ └── jX.Y.Z/ # (generated) per-joomla-version
224+ │ └── phpX.Y/ # (generated) per-php-version
225+ │ └── variant/ # (generated) per-variant
226+ │ └── Dockerfile # (generated) dockerfile
227+ │ └── entrypoint # (generated) entrypoint
228+ │
229+ ├── log/ # Logs folder (gitignored)
230+ │ └── joomengine-tag.log # (generated) image tagging log (gitignored)
231+ │
232+ ├── src/ # Executable & reusable source
233+ │ ├── bin/
234+ │ │ └── joomengine.sh # The build engine (authoritative logic)
235+ │ │
236+ │ └── docker/
237+ │ ├── Dockerfile.template # Template used to generate Dockerfiles
238+ │ ├── docker-entrypoint.sh # Runtime entrypoint copied into images
239+ │ ├── jq-template.awk # jq/awk helpers for manifest rendering (gitignored)
240+ │ └── .gitignore
241+ │
242+ ├── docker/ # Developer-facing Docker usage
243+ │ ├── docker-compose.yml # Basic example
244+ │ └── README.md # How to use these images
245+ │
246+ ├── .github/
247+ │ └── workflows/ # Automation (thin by design)
248+ │ └── joomengine.yml
249+ │
250+ ├── .editorconfig
251+ ├── .gitignore
252+ ├── LICENSE
253+ └── README.md # Project overview (what / why)
224254```
225255
226- > **Do not edit generated files manually.**
227- > They are overwritten by `joomengine.sh`.
256+ > **Do not edit generated image files manually.**
257+ > They are overwritten by `./src/bin/ joomengine.sh`.
228258
229259---
230260
@@ -234,7 +264,7 @@ This repository uses GitHub Actions to run the build engine automatically.
234264
235265### Triggers
236266
237- * Once per day (scheduled)
267+ * Once per week (scheduled)
238268* On merge to `master`
239269* Manual dispatch
240270
@@ -243,7 +273,7 @@ This repository uses GitHub Actions to run the build engine automatically.
2432731. Checks out the repository
2442742. Installs required tooling
2452753. Authenticates with Docker
246- 4. Runs `./joomengine.sh`
276+ 4. Runs `./src/bin/ joomengine.sh`
2472775. Commits **any generated changes** back to the repository
248278
249279### What CI does *not* do
@@ -261,15 +291,17 @@ All logic remains reviewable and reproducible locally.
261291You can run the build engine locally:
262292
263293```bash
264- ./joomengine.sh
294+ ./src/bin/ joomengine.sh
265295```
266296
267297Useful flags:
268298
269299``` bash
270- --dry-run # No build, no push
271- --build-only # Build locally, do not push
272- --quiet # Suppress stdout
300+ -q, --quiet Suppress all stdout output (exit code only)
301+ -n, --dry-run Do not build or push anything
302+ -f, --force Force update docker folder/files
303+ --build-only Build images locally, do not push
304+ -h, --help Show this help and exit
273305```
274306
275307This makes local testing identical to CI behavior.
@@ -279,7 +311,7 @@ This makes local testing identical to CI behavior.
279311## 🧾 License
280312
281313``` txt
282- Copyright (C) 2021– 2026
314+ Copyright (C) 2021- 2026
283315Llewellyn van der Merwe
284316
285317Licensed under the **GNU General Public License v2 (GPLv2)**
0 commit comments