From b3a0c3d426f7abc9eb4e9a85303e46dc6766ed66 Mon Sep 17 00:00:00 2001 From: Cristian Consonni Date: Sun, 23 Mar 2025 17:56:52 +0100 Subject: [PATCH] Fix installation of local plugins --- Dockerfile | 24 ++++++++++++------ bin/installLocalPlugins.sh | 51 ++++++++++++++++++++++++++++++++++++++ local_plugins/.gitignore | 3 +++ 3 files changed, 71 insertions(+), 7 deletions(-) create mode 100755 bin/installLocalPlugins.sh create mode 100644 local_plugins/.gitignore diff --git a/Dockerfile b/Dockerfile index a5a549b5a..eccecab90 100644 --- a/Dockerfile +++ b/Dockerfile @@ -134,22 +134,28 @@ FROM build_${BUILD_ENV} AS development ARG ETHERPAD_PLUGINS= ARG ETHERPAD_LOCAL_PLUGINS= +ARG ETHERPAD_LOCAL_PLUGINS_ENV= ARG ETHERPAD_GITHUB_PLUGINS= COPY --chown=etherpad:etherpad ./src/ ./src/ COPY --chown=etherpad:etherpad --from=adminbuild /opt/etherpad-lite/src/ templates/admin./src/templates/admin COPY --chown=etherpad:etherpad --from=adminbuild /opt/etherpad-lite/src/static/oidc ./src/static/oidc +COPY --chown=etherpad:etherpad ./local_plugin[s] ./local_plugins/ + +RUN bash -c ./bin/installLocalPlugins.sh + RUN bin/installDeps.sh && \ - if [ ! -z "${ETHERPAD_PLUGINS}" ] || [ ! -z "${ETHERPAD_LOCAL_PLUGINS}" ] || [ ! -z "${ETHERPAD_GITHUB_PLUGINS}" ]; then \ - pnpm run plugins i ${ETHERPAD_PLUGINS} ${ETHERPAD_LOCAL_PLUGINS:+--path ${ETHERPAD_LOCAL_PLUGINS}} ${ETHERPAD_GITHUB_PLUGINS:+--github ${ETHERPAD_GITHUB_PLUGINS}}; \ - fi + if [ ! -z "${ETHERPAD_PLUGINS}" ] || [ ! -z "${ETHERPAD_GITHUB_PLUGINS}" ]; then \ + pnpm run plugins i ${ETHERPAD_PLUGINS} ${ETHERPAD_GITHUB_PLUGINS:+--github ${ETHERPAD_GITHUB_PLUGINS}}; \ + fi FROM build_${BUILD_ENV} AS production ARG ETHERPAD_PLUGINS= ARG ETHERPAD_LOCAL_PLUGINS= +ARG ETHERPAD_LOCAL_PLUGINS_ENV= ARG ETHERPAD_GITHUB_PLUGINS= ENV NODE_ENV=production @@ -159,10 +165,14 @@ COPY --chown=etherpad:etherpad ./src ./src COPY --chown=etherpad:etherpad --from=adminbuild /opt/etherpad-lite/src/templates/admin ./src/templates/admin COPY --chown=etherpad:etherpad --from=adminbuild /opt/etherpad-lite/src/static/oidc ./src/static/oidc -RUN bin/installDeps.sh && rm -rf ~/.npm && rm -rf ~/.local && rm -rf ~/.cache && \ - if [ ! -z "${ETHERPAD_PLUGINS}" ] || [ ! -z "${ETHERPAD_LOCAL_PLUGINS}" ] || [ ! -z "${ETHERPAD_GITHUB_PLUGINS}" ]; then \ - pnpm run plugins i ${ETHERPAD_PLUGINS} ${ETHERPAD_LOCAL_PLUGINS:+--path ${ETHERPAD_LOCAL_PLUGINS}} ${ETHERPAD_GITHUB_PLUGINS:+--github ${ETHERPAD_GITHUB_PLUGINS}}; \ - fi +COPY --chown=etherpad:etherpad ./local_plugin[s] ./local_plugins/ + +RUN bash -c ./bin/installLocalPlugins.sh + +RUN bin/installDeps.sh && \ + if [ ! -z "${ETHERPAD_PLUGINS}" ] || [ ! -z "${ETHERPAD_GITHUB_PLUGINS}" ]; then \ + pnpm run plugins i ${ETHERPAD_PLUGINS} ${ETHERPAD_GITHUB_PLUGINS:+--github ${ETHERPAD_GITHUB_PLUGINS}}; \ + fi # Copy the configuration file. COPY --chown=etherpad:etherpad ${SETTINGS} "${EP_DIR}"/settings.json diff --git a/bin/installLocalPlugins.sh b/bin/installLocalPlugins.sh new file mode 100755 index 000000000..15442e646 --- /dev/null +++ b/bin/installLocalPlugins.sh @@ -0,0 +1,51 @@ +#!/bin/bash +set -euo pipefail +IFS=$'\n\t' + +trim() { + local var="$*" + # remove leading whitespace characters + var="${var#"${var%%[![:space:]]*}"}" + # remove trailing whitespace characters + var="${var%"${var##*[![:space:]]}"}" + printf '%s' "$var" +} + +# Move to the Etherpad base directory. +MY_DIR=$(cd "${0%/*}" && pwd -P) || exit 1 +cd "${MY_DIR}/.." || exit 1 + +# Source constants and useful functions +. bin/functions.sh + +PNPM_OPTIONS= +if [ ! -z "${NODE_ENV-}" ]; then + if [ "$NODE_ENV" == 'production' ]; then + PNPM_OPTIONS='--prod' + fi +fi + +if [ ! -z "${ETHERPAD_LOCAL_PLUGINS_ENV-}" ]; then + if [ "$ETHERPAD_LOCAL_PLUGINS_ENV" == 'production' ]; then + PNPM_OPTIONS='--prod' + elif [ "$ETHERPAD_LOCAL_PLUGINS_ENV" == 'development' ]; then + PNPM_OPTIONS='-D' + fi +fi + +if [ ! -z "${ETHERPAD_LOCAL_PLUGINS}" ]; then + readarray -d ' ' plugins <<< "${ETHERPAD_LOCAL_PLUGINS}" + for plugin in "${plugins[@]}"; do + plugin=$(trim "$plugin") + if [ -d "local_plugins/${plugin}" ]; then + echo "Installing plugin: '${plugin}'" + pnpm install -w ${PNPM_OPTIONS:-} "local_plugins/${plugin}/" + else + ( echo "Error. Directory 'local_plugins/${plugin}' for local plugin " \ + "'${plugin}' missing" >&2 ) + exit 1 + fi + done +else + echo 'No local plugings to install.' +fi diff --git a/local_plugins/.gitignore b/local_plugins/.gitignore new file mode 100644 index 000000000..87f7edd0e --- /dev/null +++ b/local_plugins/.gitignore @@ -0,0 +1,3 @@ +# ignore everything +* +!.gitignore