-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #554 from infosiftr/jq-template
Add initial jq-based templating engine
- Loading branch information
Showing
42 changed files
with
3,692 additions
and
1,108 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
/*/**/Dockerfile linguist-generated | ||
/*/**/docker-entrypoint.sh linguist-generated | ||
/Dockerfile.template linguist-language=Dockerfile |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
name: Verify Templating | ||
|
||
on: | ||
pull_request: | ||
push: | ||
|
||
defaults: | ||
run: | ||
shell: 'bash -Eeuo pipefail -x {0}' | ||
|
||
jobs: | ||
apply-templates: | ||
name: Check For Uncomitted Changes | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- name: Apply Templates | ||
run: ./apply-templates.sh | ||
- name: Check Git Status | ||
run: | | ||
status="$(git status --short)" | ||
[ -z "$status" ] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
.jq-template.awk |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,240 @@ | ||
FROM php:{{ env.phpVersion }}-{{ env.variant }} | ||
|
||
{{ if env.version != "cli" then ( -}} | ||
# persistent dependencies | ||
{{ if env.variant | index("alpine") then ( -}} | ||
RUN apk add --no-cache \ | ||
# in theory, docker-entrypoint.sh is POSIX-compliant, but priority is a working, consistent image | ||
bash \ | ||
# BusyBox sed is not sufficient for some of our sed expressions | ||
sed \ | ||
# Ghostscript is required for rendering PDF previews | ||
ghostscript \ | ||
# Alpine package for "imagemagick" contains ~120 .so files, see: https://github.com/docker-library/wordpress/pull/497 | ||
imagemagick | ||
{{ ) else ( -}} | ||
RUN set -eux; \ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends \ | ||
# Ghostscript is required for rendering PDF previews | ||
ghostscript \ | ||
; \ | ||
rm -rf /var/lib/apt/lists/* | ||
{{ ) end -}} | ||
{{ ) else ( -}} | ||
# install wp-cli dependencies | ||
RUN apk add --no-cache \ | ||
# bash is needed for 'wp shell': https://github.com/wp-cli/shell-command/blob/b8dafcc2a2eba5732fdee70be077675a302848e9/src/WP_CLI/REPL.php#L104 | ||
bash \ | ||
less \ | ||
mysql-client | ||
|
||
RUN set -ex; \ | ||
mkdir -p /var/www/html; \ | ||
chown -R www-data:www-data /var/www/html | ||
WORKDIR /var/www/html | ||
{{ ) end -}} | ||
|
||
# install the PHP extensions we need (https://make.wordpress.org/hosting/handbook/handbook/server-environment/#php-extensions) | ||
RUN set -ex; \ | ||
\ | ||
{{ if env.variant | index("alpine") then ( -}} | ||
apk add --no-cache --virtual .build-deps \ | ||
$PHPIZE_DEPS \ | ||
freetype-dev \ | ||
imagemagick-dev \ | ||
libjpeg-turbo-dev \ | ||
libpng-dev \ | ||
libzip-dev \ | ||
; \ | ||
{{ ) else ( -}} | ||
savedAptMark="$(apt-mark showmanual)"; \ | ||
\ | ||
apt-get update; \ | ||
apt-get install -y --no-install-recommends \ | ||
libfreetype6-dev \ | ||
libjpeg-dev \ | ||
libmagickwand-dev \ | ||
libpng-dev \ | ||
libzip-dev \ | ||
; \ | ||
{{ ) end -}} | ||
\ | ||
docker-php-ext-configure gd \ | ||
{{ if env.phpVersion == "7.3" then ( -}} | ||
--with-freetype-dir=/usr \ | ||
--with-jpeg-dir=/usr \ | ||
--with-png-dir=/usr \ | ||
{{ ) else ( -}} | ||
--with-freetype \ | ||
--with-jpeg \ | ||
{{ ) end -}} | ||
; \ | ||
docker-php-ext-install -j "$(nproc)" \ | ||
bcmath \ | ||
exif \ | ||
gd \ | ||
mysqli \ | ||
zip \ | ||
; \ | ||
pecl install imagick-3.4.4; \ | ||
docker-php-ext-enable imagick; \ | ||
\ | ||
{{ if env.variant | index("alpine") then ( -}} | ||
runDeps="$( \ | ||
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \ | ||
| tr ',' '\n' \ | ||
| sort -u \ | ||
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ | ||
)"; \ | ||
apk add --no-network --virtual .wordpress-phpexts-rundeps $runDeps; \ | ||
apk del --no-network .build-deps | ||
{{ ) else ( -}} | ||
# reset apt-mark's "manual" list so that "purge --auto-remove" will remove all build dependencies | ||
apt-mark auto '.*' > /dev/null; \ | ||
apt-mark manual $savedAptMark; \ | ||
ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \ | ||
| awk '/=>/ { print $3 }' \ | ||
| sort -u \ | ||
| xargs -r dpkg-query -S \ | ||
| cut -d: -f1 \ | ||
| sort -u \ | ||
| xargs -rt apt-mark manual; \ | ||
\ | ||
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \ | ||
rm -rf /var/lib/apt/lists/* | ||
{{ ) end -}} | ||
|
||
# set recommended PHP.ini settings | ||
{{ if env.version != "cli" then ( -}} | ||
# see https://secure.php.net/manual/en/opcache.installation.php | ||
RUN set -eux; \ | ||
docker-php-ext-enable opcache; \ | ||
{ \ | ||
echo 'opcache.memory_consumption=128'; \ | ||
echo 'opcache.interned_strings_buffer=8'; \ | ||
echo 'opcache.max_accelerated_files=4000'; \ | ||
echo 'opcache.revalidate_freq=2'; \ | ||
echo 'opcache.fast_shutdown=1'; \ | ||
} > /usr/local/etc/php/conf.d/opcache-recommended.ini | ||
{{ ) else ( -}} | ||
# excluding opcache due https://github.com/docker-library/wordpress/issues/407 | ||
{{ ) end -}} | ||
# https://wordpress.org/support/article/editing-wp-config-php/#configure-error-logging | ||
RUN { \ | ||
# https://www.php.net/manual/en/errorfunc.constants.php | ||
# https://github.com/docker-library/wordpress/issues/420#issuecomment-517839670 | ||
echo 'error_reporting = E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_RECOVERABLE_ERROR'; \ | ||
echo 'display_errors = Off'; \ | ||
echo 'display_startup_errors = Off'; \ | ||
echo 'log_errors = On'; \ | ||
echo 'error_log = /dev/stderr'; \ | ||
echo 'log_errors_max_len = 1024'; \ | ||
echo 'ignore_repeated_errors = On'; \ | ||
echo 'ignore_repeated_source = Off'; \ | ||
echo 'html_errors = Off'; \ | ||
} > /usr/local/etc/php/conf.d/error-logging.ini | ||
{{ if env.variant == "apache" then ( -}} | ||
|
||
RUN set -eux; \ | ||
a2enmod rewrite expires; \ | ||
\ | ||
# https://httpd.apache.org/docs/2.4/mod/mod_remoteip.html | ||
a2enmod remoteip; \ | ||
{ \ | ||
echo 'RemoteIPHeader X-Forwarded-For'; \ | ||
# these IP ranges are reserved for "private" use and should thus *usually* be safe inside Docker | ||
echo 'RemoteIPTrustedProxy 10.0.0.0/8'; \ | ||
echo 'RemoteIPTrustedProxy 172.16.0.0/12'; \ | ||
echo 'RemoteIPTrustedProxy 192.168.0.0/16'; \ | ||
echo 'RemoteIPTrustedProxy 169.254.0.0/16'; \ | ||
echo 'RemoteIPTrustedProxy 127.0.0.0/8'; \ | ||
} > /etc/apache2/conf-available/remoteip.conf; \ | ||
a2enconf remoteip; \ | ||
# https://github.com/docker-library/wordpress/issues/383#issuecomment-507886512 | ||
# (replace all instances of "%h" with "%a" in LogFormat) | ||
find /etc/apache2 -type f -name '*.conf' -exec sed -ri 's/([[:space:]]*LogFormat[[:space:]]+"[^"]*)%h([^"]*")/\1%a\2/g' '{}' + | ||
{{ ) else "" end -}} | ||
|
||
{{ if env.version != "cli" then ( -}} | ||
RUN set -eux; \ | ||
version={{ .upstream | @sh }}; \ | ||
sha1={{ .sha1 | @sh }}; \ | ||
\ | ||
curl -o wordpress.tar.gz -fL "https://wordpress.org/wordpress-$version.tar.gz"; \ | ||
echo "$sha1 *wordpress.tar.gz" | sha1sum -c -; \ | ||
\ | ||
# upstream tarballs include ./wordpress/ so this gives us /usr/src/wordpress | ||
tar -xzf wordpress.tar.gz -C /usr/src/; \ | ||
rm wordpress.tar.gz; \ | ||
\ | ||
# https://wordpress.org/support/article/htaccess/ | ||
[ ! -e /usr/src/wordpress/.htaccess ]; \ | ||
{ \ | ||
echo '# BEGIN WordPress'; \ | ||
echo ''; \ | ||
echo 'RewriteEngine On'; \ | ||
echo 'RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]'; \ | ||
echo 'RewriteBase /'; \ | ||
echo 'RewriteRule ^index\.php$ - [L]'; \ | ||
echo 'RewriteCond %{REQUEST_FILENAME} !-f'; \ | ||
echo 'RewriteCond %{REQUEST_FILENAME} !-d'; \ | ||
echo 'RewriteRule . /index.php [L]'; \ | ||
echo ''; \ | ||
echo '# END WordPress'; \ | ||
} > /usr/src/wordpress/.htaccess; \ | ||
\ | ||
chown -R www-data:www-data /usr/src/wordpress; \ | ||
# pre-create wp-content (and single-level children) for folks who want to bind-mount themes, etc so permissions are pre-created properly instead of root:root | ||
# wp-content/cache: https://github.com/docker-library/wordpress/issues/534#issuecomment-705733507 | ||
mkdir wp-content; \ | ||
for dir in /usr/src/wordpress/wp-content/*/ cache; do \ | ||
dir="$(basename "${dir%/}")"; \ | ||
mkdir "wp-content/$dir"; \ | ||
done; \ | ||
chown -R www-data:www-data wp-content; \ | ||
chmod -R 777 wp-content | ||
{{ ) else ( -}} | ||
# https://make.wordpress.org/cli/2018/05/31/gpg-signature-change/ | ||
# pub rsa2048 2018-05-31 [SC] | ||
# 63AF 7AA1 5067 C056 16FD DD88 A3A2 E8F2 26F0 BC06 | ||
# uid [ unknown] WP-CLI Releases <[email protected]> | ||
# sub rsa2048 2018-05-31 [E] | ||
ENV WORDPRESS_CLI_GPG_KEY 63AF7AA15067C05616FDDD88A3A2E8F226F0BC06 | ||
|
||
ENV WORDPRESS_CLI_VERSION {{ .version }} | ||
ENV WORDPRESS_CLI_SHA512 {{ .sha512 }} | ||
|
||
RUN set -ex; \ | ||
\ | ||
apk add --no-cache --virtual .fetch-deps \ | ||
gnupg \ | ||
; \ | ||
\ | ||
curl -o /usr/local/bin/wp.gpg -fL "https://github.com/wp-cli/wp-cli/releases/download/v${WORDPRESS_CLI_VERSION}/wp-cli-${WORDPRESS_CLI_VERSION}.phar.gpg"; \ | ||
\ | ||
GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; \ | ||
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$WORDPRESS_CLI_GPG_KEY"; \ | ||
gpg --batch --decrypt --output /usr/local/bin/wp /usr/local/bin/wp.gpg; \ | ||
gpgconf --kill all; \ | ||
rm -rf "$GNUPGHOME" /usr/local/bin/wp.gpg; unset GNUPGHOME; \ | ||
\ | ||
echo "$WORDPRESS_CLI_SHA512 */usr/local/bin/wp" | sha512sum -c -; \ | ||
chmod +x /usr/local/bin/wp; \ | ||
\ | ||
apk del --no-network .fetch-deps; \ | ||
\ | ||
wp --allow-root --version | ||
{{ ) end -}} | ||
|
||
VOLUME /var/www/html | ||
|
||
COPY docker-entrypoint.sh /usr/local/bin/ | ||
|
||
ENTRYPOINT ["docker-entrypoint.sh"] | ||
{{ if env.version != "cli" then ( -}} | ||
CMD {{ [ if env.variant == "apache" then "apache2-foreground" else "php-fpm" end ] | @json }} | ||
{{ ) else ( -}} | ||
USER www-data | ||
CMD ["wp", "shell"] | ||
{{ ) end -}} |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.