Allow providing local plugins to Docker image (#6243)

* Allow installing local and remote plugins simultaneously

* Add ETHERPAD_LOCAL_PLUGINS arg to Dockerfile
This commit is contained in:
Denys Halenok 2024-03-19 12:51:11 +01:00 committed by GitHub
parent bb8544d564
commit bd2198a70e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 16 deletions

View file

@ -41,6 +41,14 @@ ARG SETTINGS=./settings.json.docker
# ETHERPAD_PLUGINS="ep_codepad ep_author_neat" # ETHERPAD_PLUGINS="ep_codepad ep_author_neat"
ARG ETHERPAD_PLUGINS= ARG ETHERPAD_PLUGINS=
# local plugins to install while building the container. By default no plugins are
# installed.
# If given a value, it has to be a space-separated, quoted list of plugin names.
#
# EXAMPLE:
# ETHERPAD_LOCAL_PLUGINS="../ep_my_plugin ../ep_another_plugin"
ARG ETHERPAD_LOCAL_PLUGINS=
# Control whether abiword will be installed, enabling exports to DOC/PDF/ODT formats. # Control whether abiword will be installed, enabling exports to DOC/PDF/ODT formats.
# By default, it is not installed. # By default, it is not installed.
# If given any value, abiword will be installed. # If given any value, abiword will be installed.
@ -110,7 +118,10 @@ COPY --chown=etherpad:etherpad ./src/package.json .npmrc ./src/
COPY --chown=etherpad:etherpad --from=adminBuild /opt/etherpad-lite/admin/dist ./src/templates/admin COPY --chown=etherpad:etherpad --from=adminBuild /opt/etherpad-lite/admin/dist ./src/templates/admin
RUN bin/installDeps.sh && \ RUN bin/installDeps.sh && \
{ [ -z "${ETHERPAD_PLUGINS}" ] || pnpm run install-plugins ${ETHERPAD_PLUGINS}; } if [ ! -z "${ETHERPAD_PLUGINS}" ] || [ ! -z "${ETHERPAD_LOCAL_PLUGINS}" ]; then \
pnpm run install-plugins ${ETHERPAD_PLUGINS} ${ETHERPAD_LOCAL_PLUGINS:+--path ${ETHERPAD_LOCAL_PLUGINS}}; \
fi
FROM build as production FROM build as production
@ -121,7 +132,9 @@ COPY --chown=etherpad:etherpad ./src ./src
COPY --chown=etherpad:etherpad --from=adminBuild /opt/etherpad-lite/admin/dist ./src/templates/admin COPY --chown=etherpad:etherpad --from=adminBuild /opt/etherpad-lite/admin/dist ./src/templates/admin
RUN bin/installDeps.sh && rm -rf ~/.npm && \ RUN bin/installDeps.sh && rm -rf ~/.npm && \
{ [ -z "${ETHERPAD_PLUGINS}" ] || pnpm run install-plugins ${ETHERPAD_PLUGINS}; } if [ ! -z "${ETHERPAD_PLUGINS}" ] || [ ! -z "${ETHERPAD_LOCAL_PLUGINS}" ]; then \
pnpm run install-plugins ${ETHERPAD_PLUGINS} ${ETHERPAD_LOCAL_PLUGINS:+--path ${ETHERPAD_LOCAL_PLUGINS}}; \
fi
# Copy the configuration file. # Copy the configuration file.

View file

@ -10,18 +10,19 @@ if (process.argv.length === 2) {
process.exit(1); process.exit(1);
} }
let plugins = process.argv.slice(2) let args = process.argv.slice(2)
let installFromPath = false;
const thirdOptPlug = plugins[0] let registryPlugins: string[] = [];
let localPlugins: string[] = [];
console.log("Third option: ", thirdOptPlug) if (args.indexOf('--path') !== -1) {
if (thirdOptPlug && thirdOptPlug.includes('path')) { const indexToSplit = args.indexOf('--path');
installFromPath = true registryPlugins = args.slice(0, indexToSplit);
plugins.splice(plugins.indexOf('--path'), 1); localPlugins = args.slice(indexToSplit + 1);
} else {
registryPlugins = args;
} }
const persistInstalledPlugins = async () => { const persistInstalledPlugins = async () => {
const plugins:PackageData[] = [] const plugins:PackageData[] = []
const installedPlugins = {plugins: plugins}; const installedPlugins = {plugins: plugins};
@ -36,15 +37,15 @@ const persistInstalledPlugins = async () => {
}; };
async function run() { async function run() {
for (const plugin of plugins) { for (const plugin of registryPlugins) {
if(installFromPath) {
console.log(`Installing plugin from path: ${plugin}`);
await linkInstaller.installFromPath(plugin);
continue;
}
console.log(`Installing plugin from registry: ${plugin}`) console.log(`Installing plugin from registry: ${plugin}`)
await linkInstaller.installPlugin(plugin); await linkInstaller.installPlugin(plugin);
} }
for (const plugin of localPlugins) {
console.log(`Installing plugin from path: ${plugin}`);
await linkInstaller.installFromPath(plugin);
}
} }
(async () => { (async () => {