etherpad-lite: init at 2.3.0

same as #353814, but newer version
This commit is contained in:
Isa
2025-05-09 14:35:16 +02:00
parent b08e86e19f
commit 9ef6ff7289
3 changed files with 166 additions and 0 deletions
@@ -0,0 +1,19 @@
diff --git a/src/static/js/pluginfw/installer.ts b/src/static/js/pluginfw/installer.ts
index c605378e1..27e3e487b 100644
--- a/src/static/js/pluginfw/installer.ts
+++ b/src/static/js/pluginfw/installer.ts
@@ -83,7 +83,13 @@ export const checkForMigration = async () => {
try {
await fs.access(installedPluginsPath, fs.constants.F_OK);
} catch (err) {
- await migratePluginsFromNodeModules();
+ logger.info(`${installedPluginsPath} not found, creating using current node modules`);
+ try {
+ await migratePluginsFromNodeModules();
+ } catch (err2) {
+ logger.warn(`unable to create ${installedPluginsPath}, skipping plugin migrations`);
+ return;
+ }
}
/*
@@ -0,0 +1,51 @@
From e881a383b38d4d80ee28c17a14b5de58889245de Mon Sep 17 00:00:00 2001
From: Alexandre Iooss <erdnaxe@crans.org>
Date: Tue, 5 Nov 2024 16:30:33 +0100
Subject: [PATCH] Use temporary directory for esbuild
---
src/node/hooks/express/specialpages.ts | 11 +++++------
diff --git a/src/node/hooks/express/specialpages.ts b/src/node/hooks/express/specialpages.ts
index 2e26eaa0cee..31d5138e67c 100644
--- a/src/node/hooks/express/specialpages.ts
+++ b/src/node/hooks/express/specialpages.ts
@@ -3,6 +3,7 @@
import path from 'node:path';
const eejs = require('../../eejs')
import fs from 'node:fs';
+import os from 'node:os';
const fsp = fs.promises;
const toolbar = require('../../utils/toolbar');
const hooks = require('../../../static/js/pluginfw/hooks');
@@ -89,7 +90,7 @@ const convertTypescript = (content: string) => {
const outputRaw = buildSync({
stdin: {
contents: content,
- resolveDir: path.join(settings.root, 'var','js'),
+ resolveDir: settings.root,
loader: 'js'
},
alias:{
@@ -222,7 +223,7 @@ const convertTypescriptWatched = (content: string, cb: (output:string, hash: str
build({
stdin: {
contents: content,
- resolveDir: path.join(settings.root, 'var','js'),
+ resolveDir: settings.root,
loader: 'js'
},
alias:{
@@ -276,10 +277,8 @@ exports.expressCreateServer = async (hookName: string, args: ArgsExpressType, cb
settings,
})
-
-
- const outdir = path.join(settings.root, 'var','js')
- // Create the outdir if it doesn't exist
+ // Create a temporary directory to store runtime-built JS files
+ const outdir = path.join(os.tmpdir(), 'js');
if (!fs.existsSync(outdir)) {
fs.mkdirSync(outdir);
}
+96
View File
@@ -0,0 +1,96 @@
{
lib,
stdenv,
fetchFromGitHub,
nix-update-script,
pnpm_9,
makeWrapper,
nodejs,
}:
let
pnpm = pnpm_9;
in
stdenv.mkDerivation (finalAttrs: {
pname = "etherpad-lite";
version = "2.3.0";
src = fetchFromGitHub {
owner = "ether";
repo = "etherpad-lite";
tag = "v${finalAttrs.version}";
hash = "sha256-OomZ1oziEGgLJfYyfkHZOPRHfrrWc4XLAsZA4cn0btA=";
};
patches = [
./outdir.patch
# etherpad expects to read and write $out/lib/var/installed_plugins.json
# FIXME: this patch disables plugin support
./dont-fail-on-plugins-json.patch
];
pnpmDeps = pnpm.fetchDeps {
inherit (finalAttrs) pname version src;
hash = "sha256-nhiPopGLCeCHiqEQ3solwuLwkDnHTH3otbxIJmbuQAA=";
};
nativeBuildInputs = [
pnpm.configHook
makeWrapper
];
buildInputs = [
nodejs
];
buildPhase = ''
runHook preBuild
NODE_ENV="production" pnpm run build:etherpad
runHook postBuild
'';
preInstall = ''
# remove unnecessary files
rm node_modules/.modules.yaml
pnpm prune --prod --ignore-scripts
find -type f \( -name "*.d.ts" -o -name "*.map" \) -exec rm -rf {} +
# remove non-deterministic files
rm node_modules/.modules.yaml
'';
# Upstream scripts uses `pnpm run prod` which is equivalent to
# `cross-env NODE_ENV=production node --require tsx/cjs node/server.ts`
installPhase = ''
runHook preInstall
mkdir -p $out/{lib/etherpad-lite,bin}
cp -r node_modules ui src doc admin $out/lib/etherpad-lite
makeWrapper ${lib.getExe nodejs} $out/bin/etherpad-lite \
--inherit-argv0 \
--add-flags "--require tsx/cjs $out/lib/etherpad-lite/node_modules/ep_etherpad-lite/node/server.ts" \
--suffix PATH : "${lib.makeBinPath [ pnpm ]}" \
--set NODE_PATH "$out/lib/node_modules:$out/lib/etherpad-lite/node_modules/ep_etherpad-lite/node_modules" \
--set-default NODE_ENV production
find $out/lib -xtype l -delete
runHook postInstall
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "Modern really-real-time collaborative document editor";
longDescription = ''
Etherpad is a real-time collaborative editor scalable to thousands of simultaneous real time users.
It provides full data export capabilities, and runs on your server, under your control.
'';
homepage = "https://etherpad.org/";
changelog = "https://github.com/ether/etherpad-lite/blob/${finalAttrs.src.rev}/CHANGELOG.md";
maintainers = with lib.maintainers; [
erdnaxe
f2k1de
];
license = lib.licenses.asl20;
mainProgram = "etherpad-lite";
platforms = lib.platforms.unix;
};
})