Skip to content

Commit 3ecf54e

Browse files
author
Etherpad Release Bot
committed
Merge branch 'develop'
2 parents 4198e6e + 964acf0 commit 3ecf54e

11 files changed

Lines changed: 152 additions & 94 deletions

File tree

‎.github/workflows/backend-tests.yml‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ jobs:
120120
name: Install Etherpad plugins
121121
run: >
122122
pnpm add -w
123+
ep_ai_core
124+
ep_ai_mcp
123125
ep_align
124126
ep_author_hover
125127
ep_cursortrace
@@ -259,6 +261,8 @@ jobs:
259261
name: Install Etherpad plugins
260262
run: >
261263
pnpm add -w
264+
ep_ai_core
265+
ep_ai_mcp
262266
ep_align
263267
ep_author_hover
264268
ep_cursortrace

‎.github/workflows/deb-package.yml‎

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -108,30 +108,8 @@ jobs:
108108
sudo dpkg -i "/tmp/${NFPM_DEB}"
109109
110110
- name: Stage tree for packaging
111-
run: |
112-
set -eux
113-
STAGE=staging/opt/etherpad
114-
mkdir -p "${STAGE}"
115-
116-
# Production footprint = src/ + bin/ + node_modules/ + metadata.
117-
cp -a src bin package.json pnpm-workspace.yaml README.md LICENSE \
118-
node_modules "${STAGE}/"
119-
120-
# Make pnpm-workspace.yaml production-only (same trick Dockerfile uses).
121-
printf 'packages:\n - src\n - bin\n' > "${STAGE}/pnpm-workspace.yaml"
122-
123-
mkdir -p packaging/etc
124-
cp settings.json.template packaging/etc/settings.json.dist
125-
126-
# Purge test fixtures and dev caches from node_modules to shrink size.
127-
find "${STAGE}/node_modules" -type d \
128-
\( -name test -o -name tests -o -name '__tests__' \
129-
-o -name example -o -name examples -o -name docs \) \
130-
-prune -exec rm -rf {} + 2>/dev/null || true
131-
find "${STAGE}/node_modules" -type f \
132-
\( -name '*.md' -o -name '*.ts.map' -o -name '*.map' \
133-
-o -name 'CHANGELOG*' -o -name 'HISTORY*' \) \
134-
-delete 2>/dev/null || true
111+
# Production deps only; see packaging/stage.sh.
112+
run: packaging/stage.sh
135113

136114
- name: Build .deb
137115
env:
@@ -141,6 +119,22 @@ jobs:
141119
mkdir -p dist
142120
nfpm package --packager deb -f packaging/nfpm.yaml --target dist/
143121
122+
- name: Check package size
123+
# apt-publish commits the .deb into ether/ether.github.com, and GitHub
124+
# rejects files over 100 MiB. Fail here, with some headroom, so a
125+
# size regression shows up on the PR instead of at release time.
126+
run: |
127+
set -euo pipefail
128+
LIMIT=$((95 * 1024 * 1024))
129+
for f in dist/*.deb; do
130+
size=$(stat -c %s "$f")
131+
echo "$f: $((size / 1024 / 1024)) MiB ($size bytes)"
132+
if [ "$size" -gt "$LIMIT" ]; then
133+
echo "::error file=$f::$f is over 95 MiB; GitHub rejects files over 100 MiB in the apt repo"
134+
exit 1
135+
fi
136+
done
137+
144138
- name: Smoke-test the package (amd64 only)
145139
if: matrix.arch == 'amd64'
146140
run: |

‎CHANGELOG.md‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
# 3.3.15
2+
3+
3.3.15 is a packaging release. It shrinks the Debian package so it can be published to the apt repository again.
4+
5+
### Notable fixes
6+
7+
- **Debian package — the .deb is back under GitHub's 100 MB file limit (#8442).** The 3.3.14 apt publish failed because `etherpad_3.3.14-1_amd64.deb` was 101 MiB. The package build copied the whole workspace `node_modules`, devDependencies included. It now does a fresh production-only install, which brings the amd64 .deb down to about 46 MiB. The built admin UI still ships, and the build now fails if a .deb goes over 95 MiB.
8+
9+
### Other changes
10+
11+
- CI now runs ep_ai_core and ep_ai_mcp in the with-plugins backend jobs (#8431).
12+
- Dependency updates, including nano 11.0.8, surrealdb 2.2.1, express-rate-limit 8.7.3, rate-limiter-flexible 11.2.4, semver 7.8.6 and @tanstack/react-query 5.105.3.
13+
114
# 3.3.14
215

316
3.3.14 is a bug-fix release. It fixes a SIGTERM that could be lost during startup, two updater bugs, a join race that disconnected editors under load, and the overlapping controls in history mode.

‎admin/package.json‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "admin",
33
"private": true,
4-
"version": "3.3.14",
4+
"version": "3.3.15",
55
"type": "module",
66
"scripts": {
77
"dev": "pnpm gen:api && vite",
@@ -15,8 +15,8 @@
1515
},
1616
"dependencies": {
1717
"@radix-ui/react-switch": "^1.4.1",
18-
"@tanstack/react-query": "^5.105.2",
19-
"@tanstack/react-query-devtools": "^5.105.2",
18+
"@tanstack/react-query": "^5.105.3",
19+
"@tanstack/react-query-devtools": "^5.105.3",
2020
"jsonc-parser": "^3.3.1",
2121
"openapi-fetch": "^0.17.0",
2222
"openapi-react-query": "^0.5.4"

‎bin/package.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "bin",
3-
"version": "3.3.14",
3+
"version": "3.3.15",
44
"description": "",
55
"main": "checkAllPads.js",
66
"directories": {
@@ -9,7 +9,7 @@
99
"dependencies": {
1010
"ep_etherpad-lite": "workspace:../src",
1111
"log4js": "^6.9.1",
12-
"semver": "^7.8.5",
12+
"semver": "^7.8.6",
1313
"tsx": "^4.23.15",
1414
"ueberdb2": "6.1.18"
1515
},

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,6 @@
5252
"url": "https://github.com/ether/etherpad.git"
5353
},
5454
"engineStrict": true,
55-
"version": "3.3.14",
55+
"version": "3.3.15",
5656
"license": "Apache-2.0"
5757
}

‎packaging/README.md‎

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,8 @@ Prereqs: Node 24 (current LTS; matches `engines.node` floor), pnpm 12+, nfpm.
2525
pnpm install --frozen-lockfile
2626
pnpm run build:etherpad
2727

28-
# Stage the tree the way CI does:
29-
STAGE=staging/opt/etherpad
30-
mkdir -p "$STAGE"
31-
cp -a src bin package.json pnpm-workspace.yaml README.md LICENSE \
32-
node_modules "$STAGE/"
33-
printf 'packages:\n - src\n - bin\n' > "$STAGE/pnpm-workspace.yaml"
34-
cp settings.json.template packaging/etc/settings.json.dist
28+
# Stage the tree the way CI does (production deps only):
29+
packaging/stage.sh
3530

3631
VERSION=$(node -p "require('./package.json').version") \
3732
ARCH=amd64 \

‎packaging/stage.sh‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#!/usr/bin/env bash
2+
# Stage the production tree for nfpm under staging/opt/etherpad.
3+
# Run from the repo root after `pnpm install` and `pnpm run build:etherpad`.
4+
# Used by .github/workflows/deb-package.yml and packaging/test-local.sh.
5+
set -euxo pipefail
6+
7+
cd "$(dirname "$0")/.."
8+
9+
STAGE=staging/opt/etherpad
10+
rm -rf staging
11+
mkdir -p "${STAGE}"
12+
13+
# Production footprint = src/ + bin/ + metadata, plus a fresh
14+
# production-only node_modules installed below. src/ already holds the
15+
# admin + oidc builds from `build:etherpad`. Copying the workspace
16+
# node_modules used to ship every devDependency (typescript, playwright,
17+
# vitest, eslint, vite, ...) and the admin/ui/doc dependency trees, which
18+
# pushed the .deb past GitHub's 100 MiB per-file limit for the apt repo.
19+
cp -a src bin package.json pnpm-lock.yaml README.md LICENSE "${STAGE}/"
20+
rm -rf "${STAGE}/src/node_modules" "${STAGE}/bin/node_modules" \
21+
"${STAGE}/src/tests" "${STAGE}/src/playwright.config.ts" \
22+
"${STAGE}/src/vitest.config.ts"
23+
24+
# Install production deps for the runtime workspace (root, src, bin) from
25+
# the lockfile. pnpm installs the dependencies of every importer listed in
26+
# the lockfile, even if its directory is missing, so drop the build-only
27+
# importers from the staged lockfile and workspace file. Everything else
28+
# (overrides, build policy) stays as-is so --frozen-lockfile still matches.
29+
BUILD_ONLY='admin|doc|ui|admin/tools/openapi-codegen'
30+
awk -v re="^ (${BUILD_ONLY}):\$" '
31+
/^importers:/ { imp = 1; print; next }
32+
imp && /^[^ ]/ { imp = 0; skip = 0 }
33+
imp && /^ [^ ]/ { skip = ($0 ~ re) }
34+
!skip { print }
35+
' pnpm-lock.yaml > "${STAGE}/pnpm-lock.yaml"
36+
grep -Ev "^ - (${BUILD_ONLY})\$" pnpm-workspace.yaml > "${STAGE}/pnpm-workspace.yaml"
37+
( cd "${STAGE}" && CI=1 pnpm install --prod --frozen-lockfile )
38+
39+
# Ship the same minimal workspace file as before (same trick the
40+
# Dockerfile uses) and no lockfile.
41+
printf 'packages:\n - src\n - bin\n' > "${STAGE}/pnpm-workspace.yaml"
42+
rm -f "${STAGE}/pnpm-lock.yaml"
43+
44+
mkdir -p packaging/etc
45+
cp settings.json.template packaging/etc/settings.json.dist
46+
47+
# Purge test fixtures and docs from node_modules to shrink size.
48+
find "${STAGE}/node_modules" -type d \
49+
\( -name test -o -name tests -o -name '__tests__' \
50+
-o -name example -o -name examples -o -name docs \) \
51+
-prune -exec rm -rf {} + 2>/dev/null || true
52+
find "${STAGE}/node_modules" -type f \
53+
\( -name '*.md' -o -name '*.ts.map' -o -name '*.map' \
54+
-o -name 'CHANGELOG*' -o -name 'HISTORY*' \) \
55+
-delete 2>/dev/null || true

‎packaging/test-local.sh‎

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,8 @@ CI=1 pnpm install --frozen-lockfile
3636

3737
echo "==> Building staging tree"
3838
rm -rf staging dist packaging/etc
39-
mkdir -p staging/opt/etherpad packaging/etc dist
40-
cp -a src bin package.json pnpm-workspace.yaml README.md LICENSE node_modules \
41-
staging/opt/etherpad/
42-
printf 'packages:\n - src\n - bin\n' > staging/opt/etherpad/pnpm-workspace.yaml
43-
cp settings.json.template packaging/etc/settings.json.dist
39+
mkdir -p dist
40+
packaging/stage.sh
4441

4542
echo "==> Building .deb via nfpm ${NFPM_VERSION} (in container)"
4643
VERSION="$(node -p 'require("./package.json").version')"

0 commit comments

Comments
 (0)