|
| 1 | +# Docker Dependency Chain and Update Process |
| 2 | + |
| 3 | +This document describes how `docker-aem` depends on upstream images and how to safely roll updates through the chain. |
| 4 | + |
| 5 | +## Chain Overview |
| 6 | + |
| 7 | +Release order (bottom to top): |
| 8 | + |
| 9 | +1. `aemdesign/oracle-jdk:jdk21` |
| 10 | +2. `aemdesign/java-ffmpeg:jdk21` |
| 11 | +3. `aemdesign/aem-base:jdk21` |
| 12 | +4. `aemdesign/aem:sdk-<sdk-version>` |
| 13 | + |
| 14 | +`docker-aem` is the final SDK image in this chain. |
| 15 | + |
| 16 | +## Current Dependency Map |
| 17 | + |
| 18 | +1. `docker-oracle-jdk` |
| 19 | + - Builds Oracle JDK runtime image. |
| 20 | +2. `docker-java-ffmpeg` |
| 21 | + - `FROM aemdesign/oracle-jdk:jdk21` |
| 22 | + - Adds ffmpeg and media libraries. |
| 23 | +3. `docker-aem-base` |
| 24 | + - `FROM aemdesign/java-ffmpeg:jdk21` |
| 25 | + - Adds AEM Forms/system libraries. |
| 26 | +4. `docker-aem` |
| 27 | + - `FROM aemdesign/aem-base:jdk21` |
| 28 | + - Adds AEM SDK quickstart and startup config. |
| 29 | + |
| 30 | +## Update Strategy |
| 31 | + |
| 32 | +Always update and release in chain order. |
| 33 | + |
| 34 | +1. Update `docker-oracle-jdk` and publish `jdk21`. |
| 35 | +2. Update `docker-java-ffmpeg` to consume latest `oracle-jdk:jdk21`, then publish `jdk21`. |
| 36 | +3. Update `docker-aem-base` to consume latest `java-ffmpeg:jdk21`, then publish `jdk21`. |
| 37 | +4. Update `docker-aem` for new SDK branch/version and publish `sdk-<sdk-version>`. |
| 38 | + |
| 39 | +Do not skip levels. Each level should build and pass tests before moving to the next. |
| 40 | + |
| 41 | +## Branch and Tag Conventions |
| 42 | + |
| 43 | +1. Runtime/base branches: |
| 44 | + - `jdk21` for `docker-oracle-jdk`, `docker-java-ffmpeg`, `docker-aem-base`. |
| 45 | +2. AEM SDK branch: |
| 46 | + - `sdk-<sdk-version>` for `docker-aem` (example: `sdk-2026.2.24464`). |
| 47 | +3. Release tags: |
| 48 | + - Runtime/base: semantic tag or release tag used by that repo. |
| 49 | + - AEM SDK: `sdk-<sdk-version>` tag. |
| 50 | + |
| 51 | +## Standard Update Checklist |
| 52 | + |
| 53 | +For each repo in the chain: |
| 54 | + |
| 55 | +1. Update `Dockerfile` base image reference and Java verification labels. |
| 56 | +2. Update CI workflow: |
| 57 | + - Ensure build step has `id: docker_build` if dive step uses `steps.docker_build.outputs.imageid`. |
| 58 | + - Ensure test step is enabled and validates Java version. |
| 59 | +3. Update local scripts (`build.ps1`, `debug.ps1`) default tags. |
| 60 | +4. Update README badge/branch/tag text. |
| 61 | +5. Run local smoke checks: |
| 62 | + - `docker build ...` |
| 63 | + - `test/run_tests.sh ...` |
| 64 | +6. Push branch and wait for GitHub Actions green. |
| 65 | +7. Create and push release tag. |
| 66 | +8. Confirm image exists in Docker Hub and GHCR. |
| 67 | + |
| 68 | +## `docker-aem` Specific Notes |
| 69 | + |
| 70 | +1. SDK quickstart comes from Google Drive secret (`GOOGLE_DRIVEID_AEM` in workflow). |
| 71 | +2. CIF and Forms packages are optional and handled in separate branches. |
| 72 | +3. Base SDK branch should not require CIF/Forms package downloads. |
| 73 | +4. Full SDK release runbook is in `RELEASE.md`. |
| 74 | + |
| 75 | +## Verification Commands |
| 76 | + |
| 77 | +Example checks after publishing: |
| 78 | + |
| 79 | +```bash |
| 80 | +docker pull aemdesign/oracle-jdk:jdk21 |
| 81 | +docker pull aemdesign/java-ffmpeg:jdk21 |
| 82 | +docker pull aemdesign/aem-base:jdk21 |
| 83 | +docker pull aemdesign/aem:sdk-<sdk-version> |
| 84 | +``` |
| 85 | + |
| 86 | +```bash |
| 87 | +docker run --rm aemdesign/oracle-jdk:jdk21 java --version |
| 88 | +docker run --rm aemdesign/java-ffmpeg:jdk21 java --version |
| 89 | +docker run --rm aemdesign/aem-base:jdk21 java --version |
| 90 | +docker run --rm aemdesign/aem:sdk-<sdk-version> java --version |
| 91 | +``` |
0 commit comments