From 3c7ed3fff5f2c68976ab00b42a4a592ac499b115 Mon Sep 17 00:00:00 2001 From: xZero707 Date: Fri, 19 Mar 2021 19:10:54 +0100 Subject: [PATCH] Add tool/util [patch-util] - useful only for devs/contributors --- build/patch-util/00-download-file.sh | 25 ++++++++++++ build/patch-util/01-create-patch.sh | 51 ++++++++++++++++++++++++ build/patch-util/Dockerfile | 13 ++++++ build/patch-util/README.md | 18 +++++++++ build/patch-util/rootfs/wp/entrypoint.sh | 23 +++++++++++ 5 files changed, 130 insertions(+) create mode 100755 build/patch-util/00-download-file.sh create mode 100755 build/patch-util/01-create-patch.sh create mode 100644 build/patch-util/Dockerfile create mode 100644 build/patch-util/README.md create mode 100755 build/patch-util/rootfs/wp/entrypoint.sh diff --git a/build/patch-util/00-download-file.sh b/build/patch-util/00-download-file.sh new file mode 100755 index 0000000..fdfb3ff --- /dev/null +++ b/build/patch-util/00-download-file.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env sh +set -e + +echo "> Building helper image..." +docker build -t local/wp-patch-util . +mkdir wp-src/ -p +echo "" +echo "> Running helper container..." + +USER_ID=$(id -u "${USER}") +GROUP_ID=$(id -g "${USER}") + +docker run --rm -t --name="wp-patch-util-$(date +%s)" -v "${PWD}/wp-src:/wp/src" -e "UID=${USER_ID}" -e "GID=${GROUP_ID}" local/wp-patch-util +sudo chown "${USER}:${USER}" wp-src -R +echo "" +echo "" +echo "> Two files are now downloaded to wp-src" +echo "> Please update wp-src/mod-update-core.php with code bellow and then execute ./01-create-patch.sh" +echo "" +echo "" +echo "wp_die(" +echo " __( 'Sorry, you are not allowed to update this site.' ) ." +echo " ' Click here to learn why.'" +echo ");" +echo "" \ No newline at end of file diff --git a/build/patch-util/01-create-patch.sh b/build/patch-util/01-create-patch.sh new file mode 100755 index 0000000..dc460c8 --- /dev/null +++ b/build/patch-util/01-create-patch.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env sh + +MOD_FILE="mod-update-core.php" +TARGET_FILE="update-core.php" +PATCH_FILE="update-core.php.patch" + +set -e +cd ./wp-src + +if [ ! -f "${MOD_FILE}" ]; then + echo "X ${MOD_FILE} not found" + exit 1 +fi + +if [ ! -f "${TARGET_FILE}" ]; then + echo "X ${TARGET_FILE} not found" + exit 1 +fi + +if cmp --silent "${MOD_FILE}" "${TARGET_FILE}"; then + echo "X ${MOD_FILE} and ${TARGET_FILE} are the same. Nothing to patch." + exit 1 +fi + +if [ -f "${PATCH_FILE}" ]; then + PATCH_FILE_BACKUP="$(date +%s)bak-${PATCH_FILE}" + echo "! Patch file ${PATCH_FILE} already exists and will be backed up" + mv "${PATCH_FILE}" "${PATCH_FILE_BACKUP}" + echo "! Backup: ${PATCH_FILE_BACKUP}" +fi + +# diff exits with code 1 if there was a difference between files, so we need to temporarily disable exit-on-error +set +e +echo "> Patching file..." +diff -u "${TARGET_FILE}" "${MOD_FILE}" > "${PATCH_FILE}" +set -e + +if [ ! -s "${PATCH_FILE}" ]; then + echo "X Patch failed." + exit 1 +fi + +echo "> Fixing patch header" +sed -i "s/${MOD_FILE}/${TARGET_FILE}/g" "${PATCH_FILE}" + +echo "> Patch file created ${PATCH_FILE}" +echo "> Please run: " +echo " cp './wp-src/${PATCH_FILE}' '../../rootfs/etc/wp-mods/wp-admin/'" +echo "" +echo "> Don't forget to commit the changes" +echo "> Finished" \ No newline at end of file diff --git a/build/patch-util/Dockerfile b/build/patch-util/Dockerfile new file mode 100644 index 0000000..27475aa --- /dev/null +++ b/build/patch-util/Dockerfile @@ -0,0 +1,13 @@ +FROM wordpress:cli-php7.4 AS wordpress-builder + +USER root + +COPY ["rootfs", "/"] +WORKDIR "/wp" + +ENV UID 1000 +ENV GID 1000 +ENV WP_LOCALE "en_US" +ENV WP_VERSION "5.7.0" + +ENTRYPOINT ["/wp/entrypoint.sh"] \ No newline at end of file diff --git a/build/patch-util/README.md b/build/patch-util/README.md new file mode 100644 index 0000000..85a595a --- /dev/null +++ b/build/patch-util/README.md @@ -0,0 +1,18 @@ +# Patch Helper Utility +This utility is intended for developers/contributors to more painlessly create a patch(es) for core WordPress file(s). + +The flow is like this: + +``` +$ ./00-download-file.sh +# Modify file prefixed with mod- +$ ./01-create-patch.sh +# Copy over finished patch to appropriate location in rootfs/etc/wp-mods +``` +Instructions are provided by the scripts. + + + +### Supported patches + - **wp-admin/update-core.php** + Click [here](https://github.com/N0rthernL1ghts/wordpress/wiki/WordPress-Core-Updates) for details. \ No newline at end of file diff --git a/build/patch-util/rootfs/wp/entrypoint.sh b/build/patch-util/rootfs/wp/entrypoint.sh new file mode 100755 index 0000000..0b28f49 --- /dev/null +++ b/build/patch-util/rootfs/wp/entrypoint.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env sh + +echo "> Downloading WordPress ${WP_VERSION} ..." + +# Removes trailing zero if found +WP_SHORT_VERSION=$(echo "${WP_VERSION}" | sed --expression='s/.0//g'); + +wp --allow-root --path="/tmp" core download --locale="${WP_LOCALE}" --version="${WP_SHORT_VERSION}" + +if [ ! -f "/tmp/wp-admin/update-core.php" ]; then + echo "X WordPress download failed" + exit 1 +fi + +mkdir src -p +rm src/* -f + +cp /tmp/wp-admin/update-core.php src/ +cp src/update-core.php src/mod-update-core.php + +echo "> Files ready." + +exit 0 \ No newline at end of file