Skip to content

Commit

Permalink
feat(CI): Adds GitHub Actions Multi-Platform Dev Container Builds
Browse files Browse the repository at this point in the history
- Adds support for multiple-platform Dev Container builds using multiple runners.
- Adds support for building multiple images with a list of supported PHP & NodeJS versions.
- Replicates the `wordpressdevelop/php` Docker image build in order to support arm64.
  • Loading branch information
timnolte committed Dec 8, 2023
1 parent 59dab83 commit 5ad1988
Show file tree
Hide file tree
Showing 16 changed files with 2,465 additions and 129 deletions.
77 changes: 77 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
ARG PHP_VERSION=8.3

FROM php:${PHP_VERSION}-fpm-bullseye

LABEL org.opencontainers.image.url=https://github.com/ndigitals/wp-dev-container/pkgs/container/wp-dev-container
LABEL org.opencontainers.image.documentation=https://github.com/ndigitals/wp-dev-container/wiki
LABEL org.opencontainers.image.source=https://github.com/ndigitals/wp-dev-container
LABEL org.opencontainers.image.vendor="Nolte Digital Solutions"
LABEL org.opencontainers.image.licenses=MIT

WORKDIR /var/www

##########################################################################
#
# This setup is generally a direct copy from https://github.com/WordPress/wpdev-docker-images
#

ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /tmp

# install the PHP extensions we need
RUN set -ex; \
\
apt-get update; \
\
apt-get install -y --no-install-recommends libjpeg-dev libpng-dev libwebp-dev libzip-dev libmemcached-dev unzip libmagickwand-dev ghostscript libonig-dev locales sudo rsync libxslt-dev git; \
apt-get upgrade openssl -y; \
update-ca-certificates --fresh; \
sed -i 's/^# *\(\(ru_RU\|fr_FR\|de_DE\|es_ES\|ja_JP\).UTF-8\)/\1/' /etc/locale.gen; \
locale-gen; \
\
docker-php-ext-configure gd --enable-gd --with-jpeg=/usr --with-webp=/usr; \
\
docker-php-ext-install gd opcache mysqli zip exif intl mbstring xml xsl; \
\
curl --location --output /usr/local/bin/pickle https://github.com/FriendsOfPHP/pickle/releases/download/v0.7.11/pickle.phar; \
chmod +x /usr/local/bin/pickle; \
\
pickle install memcached-3.2.0; \
pickle install xdebug-3.3.0; \
pickle install imagick; \
docker-php-ext-enable imagick; \
\
curl --silent --fail --location --retry 3 --output /tmp/installer.php --url https://getcomposer.org/installer; \
curl --silent --fail --location --retry 3 --output /tmp/installer.sig --url https://composer.github.io/installer.sig; \
php -r " \
\$signature = file_get_contents( '/tmp/installer.sig' ); \
\$hash = hash( 'sha384', file_get_contents('/tmp/installer.php') ); \
if ( \$signature !== \$hash ) { \
unlink( '/tmp/installer.php' ); \
unlink( '/tmp/installer.sig' ); \
echo 'Integrity check failed, installer is either corrupt or worse.' . PHP_EOL; \
exit( 1 ); \
}"; \
php /tmp/installer.php --no-ansi --install-dir=/usr/bin --2 --filename=composer; \
composer --ansi --version --no-interaction; \
rm -f /tmp/installer.php /tmp/installer.sig;

COPY entrypoint.sh /entrypoint.sh
COPY common.sh /common.sh
COPY php-fpm.conf /usr/local/etc/php-fpm.d/zz-wordpress.conf

ARG imagemagic_config=/etc/ImageMagick-6/policy.xml
RUN if [ -f $imagemagic_config ] ; then \
sed -i 's/<policy domain="coder" rights="none" pattern="PDF" \/>/<policy domain="coder" rights="read|write" pattern="PDF" \/>/g' $imagemagic_config; \
else \
echo did not see file $imagemagic_config; \
fi

RUN chmod +x /entrypoint.sh && \
chmod +x /common.sh && \
groupadd -g 1000 -r wp_php && \
useradd -u 1000 -s /bin/bash -g wp_php wp_php

ENTRYPOINT [ "/entrypoint.sh" ]

CMD [ "php-fpm" ]
30 changes: 30 additions & 0 deletions .devcontainer/common.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/bin/bash
set -e

# If LOCAL_PHP_XDEBUG=true xdebug extension will be enabled
if [ "$LOCAL_PHP_XDEBUG" = true ]; then
docker-php-ext-enable xdebug
rm -f /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini
else
docker-php-ext-enable opcache
rm -f /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
fi

# If LOCAL_PHP_MEMCACHED=true memcached extension will be enabled
if [ "$LOCAL_PHP_MEMCACHED" = true ]; then
docker-php-ext-enable memcached
else
rm -f /usr/local/etc/php/conf.d/docker-php-ext-memcached.ini
fi

### Change UID/GID
WP_PHP_UID="${PHP_FPM_UID-1000}"
WP_PHP_GID="${PHP_FPM_GID-1000}"

if [ "$WP_PHP_UID" != "`id -u wp_php`" ]; then
usermod -o -u "${WP_PHP_UID}" "wp_php"
fi

if [ "$WP_PHP_GID" != "`id -g wp_php`" ]; then
groupmod -o -g "${WP_PHP_GID}" "wp_php"
fi
34 changes: 34 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// For format details, https://containers.dev/implementors/json_reference/.
{
"build": {
"dockerfile": "./Dockerfile",
"context": ".",
"args": {
"PHP_VERSION": "${localEnv:PHP_VERSION}"
}
},

// Features to add to the dev container. More info: https://containers.dev/features.
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"username": "wp_php"
},
"ghcr.io/devcontainers/features/node:1": {
"version": "${localEnv:NODE_VERSION}"
},
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers/features/github-cli:1": {},
"./local-features/wp-cli": "latest",
"./local-features/php-cli-xdebug": "latest"
},

"overrideFeatureInstallOrder": [
"ghcr.io/devcontainers/features/common-utils",
"ghcr.io/devcontainers/features/node",
"ghcr.io/devcontainers/features/docker-in-docker",
"ghcr.io/devcontainers/features/git",
"ghcr.io/devcontainers/features/github-cli",
"./local-features/wp-cli",
"./local-features/php-cli-xdebug"
]
}
7 changes: 7 additions & 0 deletions .devcontainer/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash
set -e

source /common.sh

# Execute CMD
exec "$@"
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"Id": "php-cli-xdebug",
"name": "Configure PHP CLI w/ Xdebug",
"install": {
"app": "",
"file": "install.sh"
}
}
Loading

0 comments on commit 5ad1988

Please sign in to comment.