diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..f509f2c --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,13 @@ +{ + "permissions": { + "allow": [ + "make help", + "make build-*", + "docker buildx ls" + ], + "deny": [ + "make publish-*", + "docker push *" + ] + } +} diff --git a/.claude/skills/add-version/SKILL.md b/.claude/skills/add-version/SKILL.md new file mode 100644 index 0000000..11b3b42 --- /dev/null +++ b/.claude/skills/add-version/SKILL.md @@ -0,0 +1,55 @@ +--- +name: add-version +description: Add support for a new Magento or PHP version. Use when adding new version support. +--- + +# Add New Version Support + +Add a new Magento/PHP combination using the unified Dockerfile. + +## Steps + +1. **Add entry to versions.json** + ```json + { + "id": "m2.4.9-php8.5", + "tag": "m2.4.9-php8.5", + "php_version": "8.5", + "magento_version": "2.4.9", + "mcrypt_version": null, + "sodium_from_source": false, + "extra_extensions": [] + } + ``` + +2. **Add Makefile targets** + ```makefile + ## Build Magento 2.4.9 on PHP 8.5 + .PHONY: build-m2.4.9-php8.5 + build-m2.4.9-php8.5: + $(call build_image,8.5,2.4.9,,false,,m2.4.9-php8.5) + + ## Publish Magento 2.4.9 on PHP 8.5 + .PHONY: publish-m2.4.9-php8.5 + publish-m2.4.9-php8.5: + $(call push_image,m2.4.9-php8.5) + ``` + +3. **Update build-all and publish-all targets** to include new version + +4. **Test the build** + ```bash + make build-m2.4.9-php8.5 + ``` + +## Version Configuration + +| Field | Description | +|-------|-------------| +| `id` | Unique identifier, format: `m-php` | +| `tag` | Docker Hub tag | +| `php_version` | PHP version (e.g., `8.5`) | +| `magento_version` | Magento version (e.g., `2.4.9`) | +| `mcrypt_version` | mcrypt PECL version or `null` if not needed | +| `sodium_from_source` | `true` for PHP < 8.2 requiring libsodium build | +| `extra_extensions` | Array of additional PHP extensions (e.g., `["ftp"]`) | diff --git a/.claude/skills/build-image/SKILL.md b/.claude/skills/build-image/SKILL.md new file mode 100644 index 0000000..f36382b --- /dev/null +++ b/.claude/skills/build-image/SKILL.md @@ -0,0 +1,52 @@ +--- +name: build-image +description: Build a Docker image for Magento testing. Use when user wants to build or rebuild a test image. +--- + +# Build Docker Image + +Build a multi-platform Docker image for Magento testing. + +## Prerequisites + +Ensure Docker buildx is configured: +```bash +docker buildx ls +``` + +## List Available Versions + +```bash +make list-versions +``` + +## Available Versions + +| Command | Magento | PHP | Tag | +|---------|---------|-----|-----| +| `make build-m2.4.4-p3-php8.1` | 2.4.4-p3 | 8.1 | m2.4-php8.1 | +| `make build-m2.4.6-p3-php8.2` | 2.4.6-p3 | 8.2 | m2.4.6-php8.2 | +| `make build-m2.4.7-php8.2` | 2.4.7 | 8.2 | m2.4.7 | +| `make build-m2.4.7-p5-php8.3` | 2.4.7-p5 | 8.3 | m2.4.7-p5 | +| `make build-m2.4.8-php8.4` | 2.4.8 | 8.4 | m2.4.8-php8.4 | + +Legacy aliases: `build-81`, `build-82`, `build-247`, `build-247-p5`, `build-84` + +## Steps + +1. Run `make list-versions` to see available versions +2. Run `make build-` for specific version +3. Or run `make build-all` for all versions + +## Example + +```bash +# Build specific version +make build-m2.4.8-php8.4 + +# Build all versions +make build-all + +# Using legacy alias +make build-84 +``` diff --git a/.claude/skills/publish-image/SKILL.md b/.claude/skills/publish-image/SKILL.md new file mode 100644 index 0000000..ce62a29 --- /dev/null +++ b/.claude/skills/publish-image/SKILL.md @@ -0,0 +1,49 @@ +--- +name: publish-image +description: Publish a Docker image to Docker Hub. Use when user wants to push/publish a built image. +--- + +# Publish Docker Image + +Push a built image to Docker Hub under `idealpostcodes/magento-test`. + +## Prerequisites + +1. Image must be built first using `/build-image` +2. Must be logged into Docker Hub with push access + +## Available Versions + +| Command | Tag | +|---------|-----| +| `make publish-m2.4.4-p3-php8.1` | m2.4-php8.1 | +| `make publish-m2.4.6-p3-php8.2` | m2.4.6-php8.2 | +| `make publish-m2.4.7-php8.2` | m2.4.7 | +| `make publish-m2.4.7-p5-php8.3` | m2.4.7-p5 | +| `make publish-m2.4.8-php8.4` | m2.4.8-php8.4 | + +Legacy aliases: `publish-81`, `publish-82`, `publish-247`, `publish-247-p5`, `publish-84` + +## Steps + +1. Verify the image is built locally +2. Confirm Docker Hub login: `docker login` +3. Run `make publish-` or `make publish-all` +4. Verify on Docker Hub + +## Example + +```bash +# Publish specific version +make publish-m2.4.8-php8.4 + +# Publish all versions +make publish-all + +# Using legacy alias +make publish-84 +``` + +## Warning + +Publishing overwrites the existing tag on Docker Hub. Ensure the build is tested before publishing. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3f30722 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Claude local settings +.claude/settings.local.json diff --git a/.windsurf/workflows/add-version.md b/.windsurf/workflows/add-version.md new file mode 100644 index 0000000..b00e096 --- /dev/null +++ b/.windsurf/workflows/add-version.md @@ -0,0 +1,54 @@ +--- +description: Add support for a new Magento or PHP version +--- + +# Add New Version Support + +Add a new Magento/PHP combination using the unified Dockerfile. + +## Steps + +1. **Add entry to versions.json** + ```json + { + "id": "m2.4.9-php8.5", + "tag": "m2.4.9-php8.5", + "php_version": "8.5", + "magento_version": "2.4.9", + "mcrypt_version": null, + "sodium_from_source": false, + "extra_extensions": [] + } + ``` + +2. **Add Makefile targets** + ```makefile + ## Build Magento 2.4.9 on PHP 8.5 + .PHONY: build-m2.4.9-php8.5 + build-m2.4.9-php8.5: + $(call build_image,8.5,2.4.9,,false,,m2.4.9-php8.5) + + ## Publish Magento 2.4.9 on PHP 8.5 + .PHONY: publish-m2.4.9-php8.5 + publish-m2.4.9-php8.5: + $(call push_image,m2.4.9-php8.5) + ``` + +3. **Update build-all and publish-all targets** to include new version + +4. **Test the build** + ```bash + make build-m2.4.9-php8.5 + ``` + +## Version Configuration + +| Field | Description | +|-------|-------------| +| `id` | Unique identifier, format: `m-php` | +| `tag` | Docker Hub tag | +| `php_version` | PHP version (e.g., `8.5`) | +| `magento_version` | Magento version (e.g., `2.4.9`) | +| `mcrypt_version` | mcrypt PECL version or `null` if not needed | +| `sodium_from_source` | `true` for PHP < 8.2 requiring libsodium build | +| `extra_extensions` | Array of additional PHP extensions (e.g., `["ftp"]`) | diff --git a/.windsurf/workflows/build-image.md b/.windsurf/workflows/build-image.md new file mode 100644 index 0000000..0da8708 --- /dev/null +++ b/.windsurf/workflows/build-image.md @@ -0,0 +1,51 @@ +--- +description: Build a Docker image for Magento testing +--- + +# Build Docker Image + +Build a multi-platform Docker image for Magento testing. + +## Prerequisites + +Ensure Docker buildx is configured: +```bash +docker buildx ls +``` + +## List Available Versions + +```bash +make list-versions +``` + +## Available Versions + +| Command | Magento | PHP | Tag | +|---------|---------|-----|-----| +| `make build-m2.4.4-p3-php8.1` | 2.4.4-p3 | 8.1 | m2.4-php8.1 | +| `make build-m2.4.6-p3-php8.2` | 2.4.6-p3 | 8.2 | m2.4.6-php8.2 | +| `make build-m2.4.7-php8.2` | 2.4.7 | 8.2 | m2.4.7 | +| `make build-m2.4.7-p5-php8.3` | 2.4.7-p5 | 8.3 | m2.4.7-p5 | +| `make build-m2.4.8-php8.4` | 2.4.8 | 8.4 | m2.4.8-php8.4 | + +Legacy aliases: `build-81`, `build-82`, `build-247`, `build-247-p5`, `build-84` + +## Steps + +1. Run `make list-versions` to see available versions +2. Run `make build-` for specific version +3. Or run `make build-all` for all versions + +## Example + +```bash +# Build specific version +make build-m2.4.8-php8.4 + +# Build all versions +make build-all + +# Using legacy alias +make build-84 +``` diff --git a/.windsurf/workflows/publish-image.md b/.windsurf/workflows/publish-image.md new file mode 100644 index 0000000..af694e9 --- /dev/null +++ b/.windsurf/workflows/publish-image.md @@ -0,0 +1,48 @@ +--- +description: Publish a Docker image to Docker Hub +--- + +# Publish Docker Image + +Push a built image to Docker Hub under `idealpostcodes/magento-test`. + +## Prerequisites + +1. Image must be built first using `/build-image` +2. Must be logged into Docker Hub with push access + +## Available Versions + +| Command | Tag | +|---------|-----| +| `make publish-m2.4.4-p3-php8.1` | m2.4-php8.1 | +| `make publish-m2.4.6-p3-php8.2` | m2.4.6-php8.2 | +| `make publish-m2.4.7-php8.2` | m2.4.7 | +| `make publish-m2.4.7-p5-php8.3` | m2.4.7-p5 | +| `make publish-m2.4.8-php8.4` | m2.4.8-php8.4 | + +Legacy aliases: `publish-81`, `publish-82`, `publish-247`, `publish-247-p5`, `publish-84` + +## Steps + +1. Verify the image is built locally +2. Confirm Docker Hub login: `docker login` +3. Run `make publish-` or `make publish-all` +4. Verify on Docker Hub + +## Example + +```bash +# Publish specific version +make publish-m2.4.8-php8.4 + +# Publish all versions +make publish-all + +# Using legacy alias +make publish-84 +``` + +## Warning + +Publishing overwrites the existing tag on Docker Hub. Ensure the build is tested before publishing. diff --git a/2.4.7-p5/Dockerfile b/2.4.7-p5/Dockerfile deleted file mode 100644 index d022519..0000000 --- a/2.4.7-p5/Dockerfile +++ /dev/null @@ -1,64 +0,0 @@ -FROM php:8.3-apache - -LABEL php_version="8.3.0" -LABEL magento_version="2.4.7-p5" -LABEL description="Magento 2.4.7-p5 with PHP 8.3.0" - -ENV MAGENTO_VERSION 2.4.7-p5 -ENV INSTALL_DIR /var/www/html - -RUN curl -sS https://getcomposer.org/installer | php \ - && mv composer.phar /usr/local/bin/composer -RUN apt-get update && apt-get install -y --no-install-recommends apt-utils -RUN requirements="apache2 apt-utils libpng++-dev libzip-dev libmcrypt-dev libmcrypt4 libcurl3-dev libfreetype6 libjpeg62-turbo libjpeg62-turbo-dev libfreetype6-dev libicu-dev libxslt1-dev libonig-dev unzip libsodium-dev wget" \ - && apt-get update \ - && apt-get install -y $requirements \ - && rm -rf /var/lib/apt/lists/* \ - && docker-php-ext-install pdo_mysql \ - && docker-php-ext-configure gd --with-freetype --with-jpeg \ - && docker-php-ext-install gd \ - && docker-php-ext-install zip \ - && docker-php-ext-install intl \ - && docker-php-ext-install xsl \ - && docker-php-ext-install soap \ - && docker-php-ext-install bcmath \ - && docker-php-ext-install sockets \ - && docker-php-ext-install sodium - -RUN apt-get update \ - && yes '' | pecl install mcrypt-1.0.7 \ - && echo 'extension=mcrypt.so' > /usr/local/etc/php/conf.d/mcrypt.ini - -RUN chsh -s /bin/bash www-data - -RUN cd /tmp && \ - curl https://codeload.github.com/magento/magento2/tar.gz/$MAGENTO_VERSION -o $MAGENTO_VERSION.tar.gz && \ - tar xvf $MAGENTO_VERSION.tar.gz && \ - mv magento2-$MAGENTO_VERSION/* magento2-$MAGENTO_VERSION/.htaccess $INSTALL_DIR - -RUN chown -R www-data:www-data /var/www -RUN su www-data -c "cd $INSTALL_DIR && composer install" -RUN su www-data -c "cd $INSTALL_DIR && composer config repositories.magento composer https://repo.magento.com/" - -RUN cd $INSTALL_DIR \ - && find . -type d -exec chmod 770 {} \; \ - && find . -type f -exec chmod 660 {} \; \ - && chmod u+x bin/magento - -RUN a2enmod rewrite -RUN echo "memory_limit=2048M" > /usr/local/etc/php/conf.d/memory-limit.ini - -RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -ENV DOCKERIZE_VERSION v0.6.0 -RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ - && tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ - && rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz - -# Include test install script -COPY ./install-magento /usr/local/bin/install-magento -RUN chmod u+x /usr/local/bin/install-magento - -WORKDIR $INSTALL_DIR - - diff --git a/2.4.7/Dockerfile b/2.4.7/Dockerfile deleted file mode 100644 index 98bd3a2..0000000 --- a/2.4.7/Dockerfile +++ /dev/null @@ -1,65 +0,0 @@ -FROM php:8.2-apache - -LABEL php_version="8.2.0" -LABEL magento_version="2.4.7" -LABEL description="Magento 2.4.7 with PHP 8.2.0" - -ENV MAGENTO_VERSION 2.4.7 -ENV INSTALL_DIR /var/www/html - -RUN curl -sS https://getcomposer.org/installer | php \ - && mv composer.phar /usr/local/bin/composer -RUN apt-get update && apt-get install -y --no-install-recommends apt-utils -RUN requirements="apache2 apt-utils libpng++-dev libzip-dev libmcrypt-dev libmcrypt4 libcurl3-dev libfreetype6 libjpeg62-turbo libjpeg62-turbo-dev libfreetype6-dev libicu-dev libxslt1-dev libonig-dev unzip libsodium-dev" \ - && apt-get update \ - && apt-get install -y $requirements \ - && rm -rf /var/lib/apt/lists/* \ - && docker-php-ext-install pdo_mysql \ - && docker-php-ext-configure gd --with-freetype --with-jpeg \ - && docker-php-ext-install gd \ - && docker-php-ext-install zip \ - && docker-php-ext-install intl \ - && docker-php-ext-install xsl \ - && docker-php-ext-install soap \ - && docker-php-ext-install bcmath \ - && docker-php-ext-install sockets \ - && docker-php-ext-install sodium - -RUN apt-get update \ - && apt-get install -y wget \ - && yes '' | pecl install mcrypt-1.0.6 \ - && echo 'extension=mcrypt.so' > /usr/local/etc/php/conf.d/mcrypt.ini - -RUN chsh -s /bin/bash www-data - -RUN cd /tmp && \ - curl https://codeload.github.com/magento/magento2/tar.gz/$MAGENTO_VERSION -o $MAGENTO_VERSION.tar.gz && \ - tar xvf $MAGENTO_VERSION.tar.gz && \ - mv magento2-$MAGENTO_VERSION/* magento2-$MAGENTO_VERSION/.htaccess $INSTALL_DIR - -RUN chown -R www-data:www-data /var/www -RUN su www-data -c "cd $INSTALL_DIR && composer install" -RUN su www-data -c "cd $INSTALL_DIR && composer config repositories.magento composer https://repo.magento.com/" - -RUN cd $INSTALL_DIR \ - && find . -type d -exec chmod 770 {} \; \ - && find . -type f -exec chmod 660 {} \; \ - && chmod u+x bin/magento - -RUN a2enmod rewrite -RUN echo "memory_limit=2048M" > /usr/local/etc/php/conf.d/memory-limit.ini - -RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -ENV DOCKERIZE_VERSION v0.6.0 -RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ - && tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ - && rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz - -# Include test install script -COPY ./install-magento /usr/local/bin/install-magento -RUN chmod u+x /usr/local/bin/install-magento - -WORKDIR $INSTALL_DIR - - diff --git a/8.1/Dockerfile b/8.1/Dockerfile deleted file mode 100644 index a07133f..0000000 --- a/8.1/Dockerfile +++ /dev/null @@ -1,72 +0,0 @@ -FROM php:8.1-apache - -LABEL php_version="8.1.0" -LABEL magento_version="2.4.4-p3" -LABEL description="Magento 2.4.4-p3 with PHP 8.1.0" - -ENV MAGENTO_VERSION 2.4.4-p3 -ENV INSTALL_DIR /var/www/html - -RUN curl -sS https://getcomposer.org/installer | php \ - && mv composer.phar /usr/local/bin/composer -RUN apt-get update && apt-get install -y --no-install-recommends apt-utils -RUN requirements="apache2 apt-utils libpng++-dev libzip-dev libmcrypt-dev libmcrypt4 libcurl3-dev libfreetype6 libjpeg62-turbo libjpeg62-turbo-dev libfreetype6-dev libicu-dev libxslt1-dev libonig-dev unzip" \ - && apt-get update \ - && apt-get install -y $requirements \ - && rm -rf /var/lib/apt/lists/* \ - && docker-php-ext-install pdo_mysql \ - && docker-php-ext-configure gd --with-freetype --with-jpeg \ - && docker-php-ext-install gd \ - && docker-php-ext-install zip \ - && docker-php-ext-install intl \ - && docker-php-ext-install xsl \ - && docker-php-ext-install soap \ - && docker-php-ext-install bcmath \ - && docker-php-ext-install sockets - -RUN apt-get update \ - && apt-get install -y wget \ - && yes '' | pecl install mcrypt-1.0.6 \ - && echo 'extension=mcrypt.so' > /usr/local/etc/php/conf.d/mcrypt.ini - -RUN chsh -s /bin/bash www-data - -RUN cd /tmp && \ - curl https://codeload.github.com/magento/magento2/tar.gz/$MAGENTO_VERSION -o $MAGENTO_VERSION.tar.gz && \ - tar xvf $MAGENTO_VERSION.tar.gz && \ - mv magento2-$MAGENTO_VERSION/* magento2-$MAGENTO_VERSION/.htaccess $INSTALL_DIR - -RUN chown -R www-data:www-data /var/www -RUN su www-data -c "cd $INSTALL_DIR && composer install" -RUN su www-data -c "cd $INSTALL_DIR && composer config repositories.magento composer https://repo.magento.com/" - -RUN cd $INSTALL_DIR \ - && find . -type d -exec chmod 770 {} \; \ - && find . -type f -exec chmod 660 {} \; \ - && chmod u+x bin/magento - -RUN a2enmod rewrite -RUN echo "memory_limit=2048M" > /usr/local/etc/php/conf.d/memory-limit.ini - -RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -ENV DOCKERIZE_VERSION v0.6.0 -RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ - && tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ - && rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz - -# Fix for https://github.com/magento/magento2/issues/23405 -RUN curl -O https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz \ - && tar xfvz libsodium-1.0.18.tar.gz \ - && cd libsodium-1.0.18 \ - && ./configure \ - && make && make install \ - && pecl install -f libsodium - -# Include test install script -COPY ../install-magento /usr/local/bin/install-magento -RUN chmod u+x /usr/local/bin/install-magento - -WORKDIR $INSTALL_DIR - - diff --git a/8.2/Dockerfile b/8.2/Dockerfile deleted file mode 100644 index 663b3e5..0000000 --- a/8.2/Dockerfile +++ /dev/null @@ -1,71 +0,0 @@ -FROM php:8.2-apache - -LABEL php_version="8.2.0" -LABEL magento_version="2.4.6-p3" -LABEL description="Magento 2.4.6-p3 with PHP 8.2.0" - -ENV MAGENTO_VERSION 2.4.6-p3 -ENV INSTALL_DIR /var/www/html - -RUN curl -sS https://getcomposer.org/installer | php \ - && mv composer.phar /usr/local/bin/composer -RUN apt-get update && apt-get install -y --no-install-recommends apt-utils -RUN requirements="apache2 apt-utils libpng++-dev libzip-dev libmcrypt-dev libmcrypt4 libcurl3-dev libfreetype6 libjpeg62-turbo libjpeg62-turbo-dev libfreetype6-dev libicu-dev libxslt1-dev libonig-dev unzip" \ - && apt-get update \ - && apt-get install -y $requirements \ - && rm -rf /var/lib/apt/lists/* \ - && docker-php-ext-install pdo_mysql \ - && docker-php-ext-configure gd --with-freetype --with-jpeg \ - && docker-php-ext-install gd \ - && docker-php-ext-install zip \ - && docker-php-ext-install intl \ - && docker-php-ext-install xsl \ - && docker-php-ext-install soap \ - && docker-php-ext-install bcmath \ - && docker-php-ext-install sockets - -RUN apt-get update \ - && apt-get install -y wget \ - && yes '' | pecl install mcrypt-1.0.6 \ - && echo 'extension=mcrypt.so' > /usr/local/etc/php/conf.d/mcrypt.ini - -RUN chsh -s /bin/bash www-data - -RUN cd /tmp && \ - curl https://codeload.github.com/magento/magento2/tar.gz/$MAGENTO_VERSION -o $MAGENTO_VERSION.tar.gz && \ - tar xvf $MAGENTO_VERSION.tar.gz && \ - mv magento2-$MAGENTO_VERSION/* magento2-$MAGENTO_VERSION/.htaccess $INSTALL_DIR - -RUN chown -R www-data:www-data /var/www -RUN su www-data -c "cd $INSTALL_DIR && composer install" -RUN su www-data -c "cd $INSTALL_DIR && composer config repositories.magento composer https://repo.magento.com/" - -RUN cd $INSTALL_DIR \ - && find . -type d -exec chmod 770 {} \; \ - && find . -type f -exec chmod 660 {} \; \ - && chmod u+x bin/magento - -RUN a2enmod rewrite -RUN echo "memory_limit=2048M" > /usr/local/etc/php/conf.d/memory-limit.ini - -RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -ENV DOCKERIZE_VERSION v0.6.0 -RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ - && tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ - && rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz - -# Fix for https://github.com/magento/magento2/issues/23405 -RUN curl -O https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz \ - && tar xfvz libsodium-1.0.18.tar.gz \ - && cd libsodium-1.0.18 \ - && ./configure \ - && make && make install - -# Include test install script -COPY ./install-magento /usr/local/bin/install-magento -RUN chmod u+x /usr/local/bin/install-magento - -WORKDIR $INSTALL_DIR - - diff --git a/8.4/Dockerfile b/8.4/Dockerfile deleted file mode 100644 index 4c988ec..0000000 --- a/8.4/Dockerfile +++ /dev/null @@ -1,65 +0,0 @@ -FROM php:8.4-apache - -LABEL php_version="8.4.0" -LABEL magento_version="2.4.8" -LABEL description="Magento 2.4.8 with PHP 8.4.0" - -ENV MAGENTO_VERSION=2.4.8 -ENV INSTALL_DIR=/var/www/html - -RUN curl -sS https://getcomposer.org/installer | php \ - && mv composer.phar /usr/local/bin/composer -RUN apt-get update && apt-get install -y --no-install-recommends apt-utils -RUN requirements="apache2 apt-utils libpng++-dev libzip-dev libmcrypt-dev libmcrypt4 libcurl3-dev libfreetype6 libjpeg62-turbo libjpeg62-turbo-dev libfreetype6-dev libicu-dev libxslt1-dev libonig-dev unzip libsodium-dev wget" \ - && apt-get update \ - && apt-get install -y $requirements \ - && rm -rf /var/lib/apt/lists/* \ - && docker-php-ext-install pdo_mysql \ - && docker-php-ext-configure gd --with-freetype --with-jpeg \ - && docker-php-ext-install gd \ - && docker-php-ext-install zip \ - && docker-php-ext-install intl \ - && docker-php-ext-install xsl \ - && docker-php-ext-install soap \ - && docker-php-ext-install bcmath \ - && docker-php-ext-install sockets \ - && docker-php-ext-install sodium \ - && docker-php-ext-install ftp - -# mcrypt extension is not compatible with PHP 8.4.6 -# We've included libmcrypt-dev and libmcrypt4 in the requirements above -# Skipping the PECL installation of mcrypt - -RUN chsh -s /bin/bash www-data - -RUN cd /tmp && \ - curl https://codeload.github.com/magento/magento2/tar.gz/$MAGENTO_VERSION -o $MAGENTO_VERSION.tar.gz && \ - tar xvf $MAGENTO_VERSION.tar.gz && \ - mv magento2-$MAGENTO_VERSION/* magento2-$MAGENTO_VERSION/.htaccess $INSTALL_DIR - -RUN chown -R www-data:www-data /var/www -RUN su www-data -c "cd $INSTALL_DIR && composer install" -RUN su www-data -c "cd $INSTALL_DIR && composer config repositories.magento composer https://repo.magento.com/" - -RUN cd $INSTALL_DIR \ - && find . -type d -exec chmod 770 {} \; \ - && find . -type f -exec chmod 660 {} \; \ - && chmod u+x bin/magento - -RUN a2enmod rewrite -RUN echo "memory_limit=2048M" > /usr/local/etc/php/conf.d/memory-limit.ini - -RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -ENV DOCKERIZE_VERSION=v0.6.0 -RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ - && tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ - && rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz - -# Include test install script -COPY ./install-magento /usr/local/bin/install-magento -RUN chmod u+x /usr/local/bin/install-magento - -WORKDIR $INSTALL_DIR - - diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..bb3ecc7 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,36 @@ +# Magento Test Images + +Docker images for testing [ideal-postcodes/magento](https://github.com/ideal-postcodes/magento) plugin. + +## Commands + +- `make help` - Show all available commands +- `make list-versions` - List all available image versions +- `make build-` - Build specific version (e.g., `make build-m2.4.8-php8.4`) +- `make build-all` - Build all versions +- `make publish-` - Publish specific version to Docker Hub +- Legacy aliases: `build-81`, `build-82`, `build-247`, `build-247-p5`, `build-84` + +## Structure + +- `Dockerfile` - Unified parameterized Dockerfile +- `versions.json` - Version matrix (source of truth) +- `scripts/install-magento` - Magento installation script + +## Conventions + +- Images tagged as `idealpostcodes/magento-test:` +- Tags defined in `versions.json` +- Multi-platform builds: linux/amd64, linux/arm64, linux/arm/v7 +- Use `docker buildx` for cross-platform builds + +## Adding Versions + +1. Add entry to `versions.json` with: id, tag, php_version, magento_version, mcrypt_version, sodium_from_source, extra_extensions +2. Add build/publish targets to `Makefile` + +## Skills + +- `/build-image` - Build a Docker image for a specific version +- `/publish-image` - Publish a Docker image to Docker Hub +- `/add-version` - Add support for a new Magento/PHP version diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9bcfea8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,107 @@ +# Unified Dockerfile for Magento Test Images +# Build with: docker buildx build --build-arg PHP_VERSION=8.4 --build-arg MAGENTO_VERSION=2.4.8 ... + +ARG PHP_VERSION=8.4 + +FROM php:${PHP_VERSION}-apache + +ARG PHP_VERSION +ARG MAGENTO_VERSION=2.4.8 +ARG MCRYPT_VERSION="" +ARG SODIUM_FROM_SOURCE="false" +ARG EXTRA_EXTENSIONS="" + +LABEL php_version="${PHP_VERSION}" +LABEL magento_version="${MAGENTO_VERSION}" +LABEL description="Magento ${MAGENTO_VERSION} with PHP ${PHP_VERSION}" + +ENV MAGENTO_VERSION=${MAGENTO_VERSION} +ENV INSTALL_DIR=/var/www/html + +# Install Composer +RUN curl -sS https://getcomposer.org/installer | php \ + && mv composer.phar /usr/local/bin/composer + +# Install system dependencies +RUN apt-get update && apt-get install -y --no-install-recommends apt-utils + +# Base requirements +RUN requirements="apache2 apt-utils libpng++-dev libzip-dev libmcrypt-dev libmcrypt4 libcurl3-dev libfreetype6 libjpeg62-turbo libjpeg62-turbo-dev libfreetype6-dev libicu-dev libxslt1-dev libonig-dev unzip libsodium-dev wget" \ + && apt-get update \ + && apt-get install -y $requirements \ + && rm -rf /var/lib/apt/lists/* \ + && docker-php-ext-install pdo_mysql \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install gd \ + && docker-php-ext-install zip \ + && docker-php-ext-install intl \ + && docker-php-ext-install xsl \ + && docker-php-ext-install soap \ + && docker-php-ext-install bcmath \ + && docker-php-ext-install sockets + +# Install sodium extension (not from source) +RUN if [ "${SODIUM_FROM_SOURCE}" != "true" ]; then \ + docker-php-ext-install sodium; \ + fi + +# Install mcrypt if version specified +RUN if [ -n "${MCRYPT_VERSION}" ]; then \ + yes '' | pecl install mcrypt-${MCRYPT_VERSION} \ + && echo 'extension=mcrypt.so' > /usr/local/etc/php/conf.d/mcrypt.ini; \ + fi + +# Install extra extensions (space-separated list) +RUN if [ -n "${EXTRA_EXTENSIONS}" ]; then \ + for ext in ${EXTRA_EXTENSIONS}; do \ + docker-php-ext-install $ext; \ + done; \ + fi + +# Install libsodium from source for older PHP versions +RUN if [ "${SODIUM_FROM_SOURCE}" = "true" ]; then \ + curl -O https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz \ + && tar xfvz libsodium-1.0.18.tar.gz \ + && cd libsodium-1.0.18 \ + && ./configure \ + && make && make install \ + && pecl install -f libsodium \ + && rm -rf libsodium-1.0.18 libsodium-1.0.18.tar.gz; \ + fi + +RUN chsh -s /bin/bash www-data + +# Download and extract Magento +RUN cd /tmp && \ + curl https://codeload.github.com/magento/magento2/tar.gz/${MAGENTO_VERSION} -o ${MAGENTO_VERSION}.tar.gz && \ + tar xvf ${MAGENTO_VERSION}.tar.gz && \ + mv magento2-${MAGENTO_VERSION}/* magento2-${MAGENTO_VERSION}/.htaccess ${INSTALL_DIR} + +# Set permissions and install dependencies +RUN chown -R www-data:www-data /var/www +RUN su www-data -c "cd ${INSTALL_DIR} && composer install" +RUN su www-data -c "cd ${INSTALL_DIR} && composer config repositories.magento composer https://repo.magento.com/" + +RUN cd ${INSTALL_DIR} \ + && find . -type d -exec chmod 770 {} \; \ + && find . -type f -exec chmod 660 {} \; \ + && chmod u+x bin/magento + +# Apache configuration +RUN a2enmod rewrite +RUN echo "memory_limit=2048M" > /usr/local/etc/php/conf.d/memory-limit.ini + +# Cleanup +RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +# Install dockerize for waiting on dependencies +ENV DOCKERIZE_VERSION=v0.6.0 +RUN wget https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz \ + && tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz \ + && rm dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz + +# Include test install script +COPY scripts/install-magento /usr/local/bin/install-magento +RUN chmod u+x /usr/local/bin/install-magento + +WORKDIR ${INSTALL_DIR} diff --git a/Makefile b/Makefile index 5c89749..edf3f64 100644 --- a/Makefile +++ b/Makefile @@ -1,54 +1,146 @@ .DEFAULT_GOAL := help -## Build Magento 2.4.4 on PHP 7.4 +PLATFORMS := linux/amd64,linux/arm64,linux/arm/v7 +IMAGE_BASE := idealpostcodes/magento-test + +# Build args extracted from versions.json for each target +# Format: PHP_VERSION MAGENTO_VERSION MCRYPT_VERSION SODIUM_FROM_SOURCE EXTRA_EXTENSIONS TAG + +define build_image + docker buildx build \ + --platform=$(PLATFORMS) \ + --build-arg PHP_VERSION=$(1) \ + --build-arg MAGENTO_VERSION=$(2) \ + --build-arg MCRYPT_VERSION=$(3) \ + --build-arg SODIUM_FROM_SOURCE=$(4) \ + --build-arg EXTRA_EXTENSIONS="$(5)" \ + -t $(IMAGE_BASE):$(6) \ + . +endef + +define push_image + docker push $(IMAGE_BASE):$(1) +endef + +## -- Build Targets -- + +## Build Magento 2.4.4-p3 on PHP 8.1 +.PHONY: build-m2.4.4-p3-php8.1 +build-m2.4.4-p3-php8.1: + $(call build_image,8.1,2.4.4-p3,1.0.6,true,,m2.4-php8.1) + +## Build Magento 2.4.6-p3 on PHP 8.2 +.PHONY: build-m2.4.6-p3-php8.2 +build-m2.4.6-p3-php8.2: + $(call build_image,8.2,2.4.6-p3,1.0.6,true,,m2.4.6-php8.2) + +## Build Magento 2.4.7 on PHP 8.2 +.PHONY: build-m2.4.7-php8.2 +build-m2.4.7-php8.2: + $(call build_image,8.2,2.4.7,1.0.6,false,,m2.4.7) + +## Build Magento 2.4.7-p5 on PHP 8.3 +.PHONY: build-m2.4.7-p5-php8.3 +build-m2.4.7-p5-php8.3: + $(call build_image,8.3,2.4.7-p5,1.0.7,false,,m2.4.7-p5) + +## Build Magento 2.4.8 on PHP 8.4 +.PHONY: build-m2.4.8-php8.4 +build-m2.4.8-php8.4: + $(call build_image,8.4,2.4.8,,false,ftp,m2.4.8-php8.4) + +## Build Magento 2.4.8-p4 on PHP 8.4 (64-bit only, no arm/v7) +.PHONY: build-m2.4.8-p4-php8.4 +build-m2.4.8-p4-php8.4: + docker buildx build \ + --platform=linux/amd64,linux/arm64 \ + --build-arg PHP_VERSION=8.4 \ + --build-arg MAGENTO_VERSION=2.4.8-p4 \ + --build-arg MCRYPT_VERSION= \ + --build-arg SODIUM_FROM_SOURCE=false \ + --build-arg EXTRA_EXTENSIONS="ftp" \ + -t $(IMAGE_BASE):m2.4.8-p4-php8.4 \ + --push \ + . + +## Build all images +.PHONY: build-all +build-all: build-m2.4.4-p3-php8.1 build-m2.4.6-p3-php8.2 build-m2.4.7-php8.2 build-m2.4.7-p5-php8.3 build-m2.4.8-php8.4 build-m2.4.8-p4-php8.4 + +## -- Publish Targets -- + +## Publish Magento 2.4.4-p3 on PHP 8.1 +.PHONY: publish-m2.4.4-p3-php8.1 +publish-m2.4.4-p3-php8.1: + $(call push_image,m2.4-php8.1) + +## Publish Magento 2.4.6-p3 on PHP 8.2 +.PHONY: publish-m2.4.6-p3-php8.2 +publish-m2.4.6-p3-php8.2: + $(call push_image,m2.4.6-php8.2) + +## Publish Magento 2.4.7 on PHP 8.2 +.PHONY: publish-m2.4.7-php8.2 +publish-m2.4.7-php8.2: + $(call push_image,m2.4.7) + +## Publish Magento 2.4.7-p5 on PHP 8.3 +.PHONY: publish-m2.4.7-p5-php8.3 +publish-m2.4.7-p5-php8.3: + $(call push_image,m2.4.7-p5) + +## Publish Magento 2.4.8 on PHP 8.4 +.PHONY: publish-m2.4.8-php8.4 +publish-m2.4.8-php8.4: + $(call push_image,m2.4.8-php8.4) + +## Publish Magento 2.4.8-p4 on PHP 8.4 +.PHONY: publish-m2.4.8-p4-php8.4 +publish-m2.4.8-p4-php8.4: + $(call push_image,m2.4.8-p4-php8.4) + +## Publish all images +.PHONY: publish-all +publish-all: publish-m2.4.4-p3-php8.1 publish-m2.4.6-p3-php8.2 publish-m2.4.7-php8.2 publish-m2.4.7-p5-php8.3 publish-m2.4.8-php8.4 publish-m2.4.8-p4-php8.4 + +## -- Legacy Aliases (backward compatibility) -- + .PHONY: build-81 -build-81: - docker build -f 8.1/Dockerfile -t idealpostcodes/magento-test:m2.4-php8.1 . +build-81: build-m2.4.4-p3-php8.1 -## Publish Magento 2.4.4 on PHP 7.4 .PHONY: publish-81 -publish-81: - docker push idealpostcodes/magento-test:m2.4-php8.1 +publish-81: publish-m2.4.4-p3-php8.1 -## Build Magento 2.4.6 on PHP 8.2 .PHONY: build-82 -build-82: - docker build -f 8.2/Dockerfile -t idealpostcodes/magento-test:m2.4.6-php8.2 . +build-82: build-m2.4.6-p3-php8.2 -## Publish Magento 2.4.6 on PHP 8.2 .PHONY: publish-82 -publish-82: - docker push idealpostcodes/magento-test:m2.4.6-php8.2 +publish-82: publish-m2.4.6-p3-php8.2 -## Build Magento 2.4.7 on PHP 8.2 .PHONY: build-247 -build-247: - docker build -f 2.4.7/Dockerfile -t idealpostcodes/magento-test:m2.4.7 . +build-247: build-m2.4.7-php8.2 -## Publish Magento 2.4.7 on PHP 8.2 .PHONY: publish-247 -publish-247: - docker push idealpostcodes/magento-test:m2.4.7 +publish-247: publish-m2.4.7-php8.2 -## Build Magento 2.4.7-p5 on PHP 8.3 .PHONY: build-247-p5 -build-247-p5: - docker build -f 2.4.7-p5/Dockerfile -t idealpostcodes/magento-test:m2.4.7-p5 . +build-247-p5: build-m2.4.7-p5-php8.3 -## Publish Magento 2.4.7-p5 on PHP 8.3 .PHONY: publish-247-p5 -publish-247-p5: - docker push idealpostcodes/magento-test:m2.4.7-p5 +publish-247-p5: publish-m2.4.7-p5-php8.3 -## Build Magento 2.4.8 on PHP 8.4 .PHONY: build-84 -build-84: - docker build -f 8.4/Dockerfile -t idealpostcodes/magento-test:m2.4.8-php8.4 . +build-84: build-m2.4.8-php8.4 -## Publish Magento 2.4.8 on PHP 8.4 .PHONY: publish-84 -publish-84: - docker push idealpostcodes/magento-test:m2.4.8-php8.4 +publish-84: publish-m2.4.8-php8.4 + +## -- Utilities -- + +## List all available images from versions.json +.PHONY: list-versions +list-versions: + @cat versions.json | python3 -c "import sys,json; [print(f\"{i['id']}: {i['tag']}\") for i in json.load(sys.stdin)['images']]" ## Update repository against origin/master .PHONY: update @@ -56,7 +148,7 @@ update: git fetch git merge --ff-only origin/master -## -- Misc -- +## -- Help -- ## How to use this Makefile .PHONY: help @@ -64,29 +156,29 @@ help: @printf "Usage\n"; @awk '{ \ - if ($$0 ~ /^.PHONY: [a-zA-Z\-\_0-9]+$$/) { \ + if ($$0 ~ /^.PHONY: [a-zA-Z\-\_0-9.]+$$/) { \ helpCommand = substr($$0, index($$0, ":") + 2); \ if (helpMessage) { \ - printf "\033[36m%-20s\033[0m %s\n", \ + printf "\033[36m%-30s\033[0m %s\n", \ helpCommand, helpMessage; \ helpMessage = ""; \ } \ } else if ($$0 ~ /^[a-zA-Z\-\_0-9.]+:/) { \ helpCommand = substr($$0, 0, index($$0, ":")); \ if (helpMessage) { \ - printf "\033[36m%-20s\033[0m %s\n", \ + printf "\033[36m%-30s\033[0m %s\n", \ helpCommand, helpMessage; \ helpMessage = ""; \ } \ } else if ($$0 ~ /^##/) { \ if (helpMessage) { \ - helpMessage = helpMessage"\n "substr($$0, 3); \ + helpMessage = helpMessage"\n "substr($$0, 3); \ } else { \ helpMessage = substr($$0, 3); \ } \ } else { \ if (helpMessage) { \ - print "\n "helpMessage"\n" \ + print "\n "helpMessage"\n" \ } \ helpMessage = ""; \ } \ diff --git a/Makefile.old b/Makefile.old new file mode 100644 index 0000000..bd52a8a --- /dev/null +++ b/Makefile.old @@ -0,0 +1,94 @@ +.DEFAULT_GOAL := help + +## Build Magento 2.4.4 on PHP 7.4 +.PHONY: build-81 +build-81: + docker buildx build --platform=linux/amd64,linux/arm64,linux/arm/v7 -f 8.1/Dockerfile -t idealpostcodes/magento-test:m2.4-php8.1 . + +## Publish Magento 2.4.4 on PHP 7.4 +.PHONY: publish-81 +publish-81: + docker push idealpostcodes/magento-test:m2.4-php8.1 + +## Build Magento 2.4.6 on PHP 8.2 +.PHONY: build-82 +build-82: + docker buildx build --platform=linux/amd64,linux/arm64,linux/arm/v7 -f 8.2/Dockerfile -t idealpostcodes/magento-test:m2.4.6-php8.2 . + +## Publish Magento 2.4.6 on PHP 8.2 +.PHONY: publish-82 +publish-82: + docker push idealpostcodes/magento-test:m2.4.6-php8.2 + +## Build Magento 2.4.7 on PHP 8.2 +.PHONY: build-247 +build-247: + docker buildx build --platform=linux/amd64,linux/arm64,linux/arm/v7 -f 2.4.7/Dockerfile -t idealpostcodes/magento-test:m2.4.7 . + +## Publish Magento 2.4.7 on PHP 8.2 +.PHONY: publish-247 +publish-247: + docker push idealpostcodes/magento-test:m2.4.7 + +## Build Magento 2.4.7-p5 on PHP 8.3 +.PHONY: build-247-p5 +build-247-p5: + docker buildx build --platform=linux/amd64,linux/arm64,linux/arm/v7 -f 2.4.7-p5/Dockerfile -t idealpostcodes/magento-test:m2.4.7-p5 . + +## Publish Magento 2.4.7-p5 on PHP 8.3 +.PHONY: publish-247-p5 +publish-247-p5: + docker push idealpostcodes/magento-test:m2.4.7-p5 + +## Build Magento 2.4.8 on PHP 8.4 +.PHONY: build-84 +build-84: + docker buildx build --platform=linux/amd64,linux/arm64,linux/arm/v7 -f 8.4/Dockerfile -t idealpostcodes/magento-test:m2.4.8-php8.4 . + +## Publish Magento 2.4.8 on PHP 8.4 +.PHONY: publish-84 +publish-84: + docker push idealpostcodes/magento-test:m2.4.8-php8.4 + +## Update repository against origin/master +.PHONY: update +update: + git fetch + git merge --ff-only origin/master + +## -- Misc -- + +## How to use this Makefile +.PHONY: help +help: + @printf "Usage\n"; + + @awk '{ \ + if ($$0 ~ /^.PHONY: [a-zA-Z\-\_0-9]+$$/) { \ + helpCommand = substr($$0, index($$0, ":") + 2); \ + if (helpMessage) { \ + printf "\033[36m%-20s\033[0m %s\n", \ + helpCommand, helpMessage; \ + helpMessage = ""; \ + } \ + } else if ($$0 ~ /^[a-zA-Z\-\_0-9.]+:/) { \ + helpCommand = substr($$0, 0, index($$0, ":")); \ + if (helpMessage) { \ + printf "\033[36m%-20s\033[0m %s\n", \ + helpCommand, helpMessage; \ + helpMessage = ""; \ + } \ + } else if ($$0 ~ /^##/) { \ + if (helpMessage) { \ + helpMessage = helpMessage"\n "substr($$0, 3); \ + } else { \ + helpMessage = substr($$0, 3); \ + } \ + } else { \ + if (helpMessage) { \ + print "\n "helpMessage"\n" \ + } \ + helpMessage = ""; \ + } \ + }' \ + $(MAKEFILE_LIST) diff --git a/PLAN.md b/PLAN.md new file mode 100644 index 0000000..294834f --- /dev/null +++ b/PLAN.md @@ -0,0 +1,121 @@ +# Reorganization Plan + +## Current State + +| Directory | PHP | Magento | Tag | Issues | +|-----------|-----|---------|-----|--------| +| 8.1/ | 8.1 | 2.4.4-p3 | m2.4-php8.1 | COPY path bug, libsodium from source | +| 8.2/ | 8.2 | 2.4.6-p3 | m2.4.6-php8.2 | libsodium from source | +| 2.4.7/ | 8.2 | 2.4.7 | m2.4.7 | Uses system sodium | +| 2.4.7-p5/ | 8.3 | 2.4.7-p5 | m2.4.7-p5 | mcrypt 1.0.7 | +| 8.4/ | 8.4 | 2.4.8 | m2.4.8-php8.4 | No mcrypt, has ftp ext | + +## Proposed Structure + +### Option A: Version Matrix with Base Image + +``` +magento-test/ +├── base/ +│ └── Dockerfile.template # Shared base with ARGs +├── images/ +│ ├── m2.4.4-php8.1/ +│ │ └── Dockerfile +│ ├── m2.4.6-php8.2/ +│ │ └── Dockerfile +│ ├── m2.4.7-php8.2/ +│ │ └── Dockerfile +│ ├── m2.4.7-p5-php8.3/ +│ │ └── Dockerfile +│ └── m2.4.8-php8.4/ +│ └── Dockerfile +├── scripts/ +│ └── install-magento +├── versions.json # Version matrix +├── Makefile +└── README.md +``` + +### Option B: Unified Dockerfile with Build Args + +``` +magento-test/ +├── Dockerfile # Single parameterized Dockerfile +├── versions.json # All version combinations +├── scripts/ +│ └── install-magento +├── Makefile # Generated or reads versions.json +└── README.md +``` + +### Option C: Consistent Naming (Minimal Change) + +``` +magento-test/ +├── images/ +│ ├── m2.4.4-p3-php8.1/Dockerfile +│ ├── m2.4.6-p3-php8.2/Dockerfile +│ ├── m2.4.7-php8.2/Dockerfile +│ ├── m2.4.7-p5-php8.3/Dockerfile +│ └── m2.4.8-php8.4/Dockerfile +├── install-magento +├── Makefile +└── README.md +``` + +## Recommendation: Option B + +**Benefits:** +- Single Dockerfile = single source of truth +- `versions.json` makes adding versions trivial +- Makefile can be auto-generated or dynamic +- Differences handled via build args and conditionals + +## Implementation Tasks + +### Phase 1: Normalize Current Structure +- [ ] Fix COPY path in 8.1/Dockerfile +- [ ] Standardize tag naming to `m-php` +- [ ] Document version differences + +### Phase 2: Create Unified Dockerfile +- [ ] Create `versions.json` with all version metadata +- [ ] Build parameterized Dockerfile with ARGs +- [ ] Handle version-specific logic (mcrypt, sodium, ftp) +- [ ] Test all builds + +### Phase 3: Update Build System +- [ ] Update Makefile to read from versions.json +- [ ] Add `make build VERSION=m2.4.8-php8.4` interface +- [ ] Add `make build-all` target + +### Phase 4: Cleanup +- [ ] Remove old directory structure +- [ ] Update README.md +- [ ] Update CLAUDE.md and skills + +## versions.json Schema + +```json +{ + "images": [ + { + "tag": "m2.4.8-php8.4", + "php_version": "8.4", + "magento_version": "2.4.8", + "mcrypt": false, + "sodium_from_source": false, + "extra_extensions": ["ftp"] + } + ] +} +``` + +## Version-Specific Differences + +| Feature | 8.1 | 8.2 | 2.4.7 | 2.4.7-p5 | 8.4 | +|---------|-----|-----|-------|----------|-----| +| mcrypt | 1.0.6 | 1.0.6 | 1.0.6 | 1.0.7 | ✗ | +| sodium ext | pecl | ✗ | docker-php | docker-php | docker-php | +| libsodium source | ✓ | ✓ | ✗ | ✗ | ✗ | +| ftp ext | ✗ | ✗ | ✗ | ✗ | ✓ | diff --git a/README.md b/README.md index 20b93c8..a8f23c9 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,64 @@ # Magento Test Images -This repository stores dockerfiles to build test magento images for [ideal-postcodes/magento](https://github.com/ideal-postcodes/magento) +Docker images for testing [ideal-postcodes/magento](https://github.com/ideal-postcodes/magento) plugin. ## Images -- [Magento 2.2 on PHP 7.1](https://hub.docker.com/layers/idealpostcodes/magento-test/m2.2-php7.1/images/sha256-a1870793f832e989a0ec246b924579d6022ca2f150fe60806dfc554c5cd765d2?context=explore) -- [Magento 2.3 on PHP 7.2](https://hub.docker.com/layers/idealpostcodes/magento-test/m2.3-php7.2/images/sha256-335a2c61d9475beaa32e89f73b0d05288910c4152fffb04705ce202e92a3c7e6) -- [Magento 2.3 on PHP 7.3](https://hub.docker.com/layers/idealpostcodes/magento-test/m2.3-php7.3/images/sha256-0b82c5aa51c9dba421176d95ec7b56dfc64ce7006168f1520fba938e39f6cf8d?context=explore) +| Tag | Magento | PHP | +|-----|---------|-----| +| `m2.4-php8.1` | 2.4.4-p3 | 8.1 | +| `m2.4.6-php8.2` | 2.4.6-p3 | 8.2 | +| `m2.4.7` | 2.4.7 | 8.2 | +| `m2.4.7-p5` | 2.4.7-p5 | 8.3 | +| `m2.4.8-php8.4` | 2.4.8 | 8.4 | ## Usage ### Build Docker Images ```bash -make build-71 -make build-72 -make build-73 -make build-73-m24 +# Build specific version +make build-m2.4.8-php8.4 + +# Build all versions +make build-all + +# Legacy aliases still work +make build-84 ``` -### Incoporate into Dockerfile +### List Available Versions + +```bash +make list-versions +``` + +### Incorporate into Dockerfile ```Dockerfile -FROM idealpostcodes/magento-test:m2.3-php7.2 +FROM idealpostcodes/magento-test:m2.4.8-php8.4 ``` +## Structure + +``` +magento-test/ +├── Dockerfile # Unified parameterized Dockerfile +├── versions.json # Version matrix (source of truth) +├── scripts/ +│ └── install-magento # Magento installation script +├── Makefile +└── README.md +``` + +## Adding New Versions + +1. Add entry to `versions.json` +2. Add build/publish targets to `Makefile` +3. Test with `make build-` + +See `versions.json` for the schema and existing configurations. + ## Licence MIT diff --git a/README.old.md b/README.old.md new file mode 100644 index 0000000..20b93c8 --- /dev/null +++ b/README.old.md @@ -0,0 +1,30 @@ +# Magento Test Images + +This repository stores dockerfiles to build test magento images for [ideal-postcodes/magento](https://github.com/ideal-postcodes/magento) + +## Images + +- [Magento 2.2 on PHP 7.1](https://hub.docker.com/layers/idealpostcodes/magento-test/m2.2-php7.1/images/sha256-a1870793f832e989a0ec246b924579d6022ca2f150fe60806dfc554c5cd765d2?context=explore) +- [Magento 2.3 on PHP 7.2](https://hub.docker.com/layers/idealpostcodes/magento-test/m2.3-php7.2/images/sha256-335a2c61d9475beaa32e89f73b0d05288910c4152fffb04705ce202e92a3c7e6) +- [Magento 2.3 on PHP 7.3](https://hub.docker.com/layers/idealpostcodes/magento-test/m2.3-php7.3/images/sha256-0b82c5aa51c9dba421176d95ec7b56dfc64ce7006168f1520fba938e39f6cf8d?context=explore) + +## Usage + +### Build Docker Images + +```bash +make build-71 +make build-72 +make build-73 +make build-73-m24 +``` + +### Incoporate into Dockerfile + +```Dockerfile +FROM idealpostcodes/magento-test:m2.3-php7.2 +``` + +## Licence + +MIT diff --git a/install-magento b/scripts/install-magento similarity index 100% rename from install-magento rename to scripts/install-magento diff --git a/versions.json b/versions.json new file mode 100644 index 0000000..7ce2448 --- /dev/null +++ b/versions.json @@ -0,0 +1,58 @@ +{ + "images": [ + { + "id": "m2.4.4-p3-php8.1", + "tag": "m2.4-php8.1", + "php_version": "8.1", + "magento_version": "2.4.4-p3", + "mcrypt_version": "1.0.6", + "sodium_from_source": true, + "extra_extensions": [] + }, + { + "id": "m2.4.6-p3-php8.2", + "tag": "m2.4.6-php8.2", + "php_version": "8.2", + "magento_version": "2.4.6-p3", + "mcrypt_version": "1.0.6", + "sodium_from_source": true, + "extra_extensions": [] + }, + { + "id": "m2.4.7-php8.2", + "tag": "m2.4.7", + "php_version": "8.2", + "magento_version": "2.4.7", + "mcrypt_version": "1.0.6", + "sodium_from_source": false, + "extra_extensions": [] + }, + { + "id": "m2.4.7-p5-php8.3", + "tag": "m2.4.7-p5", + "php_version": "8.3", + "magento_version": "2.4.7-p5", + "mcrypt_version": "1.0.7", + "sodium_from_source": false, + "extra_extensions": [] + }, + { + "id": "m2.4.8-php8.4", + "tag": "m2.4.8-php8.4", + "php_version": "8.4", + "magento_version": "2.4.8", + "mcrypt_version": null, + "sodium_from_source": false, + "extra_extensions": ["ftp"] + }, + { + "id": "m2.4.8-p4-php8.4", + "tag": "m2.4.8-p4-php8.4", + "php_version": "8.4", + "magento_version": "2.4.8-p4", + "mcrypt_version": null, + "sodium_from_source": false, + "extra_extensions": ["ftp"] + } + ] +}