Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/backend-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
fail-fast: false
matrix:
# PRs: test on latest Node only. Push to develop: full matrix.
node: ${{ github.event_name == 'pull_request' && fromJSON('[24]') || fromJSON('[22, 24, 25]') }}
node: ${{ github.event_name == 'pull_request' && fromJSON('[25]') || fromJSON('[22, 24, 25]') }}
steps:
-
name: Checkout repository
Expand Down Expand Up @@ -84,7 +84,7 @@ jobs:
strategy:
fail-fast: false
matrix:
node: ${{ github.event_name == 'pull_request' && fromJSON('[24]') || fromJSON('[22, 24, 25]') }}
node: ${{ github.event_name == 'pull_request' && fromJSON('[25]') || fromJSON('[22, 24, 25]') }}
steps:
-
name: Checkout repository
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-and-deploy-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25
cache: pnpm
- name: Setup Pages
if: github.event_name == 'push'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25
cache: pnpm
cache-dependency-path: etherpad/pnpm-lock.yaml
-
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/frontend-admin-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
fail-fast: false
matrix:
# PRs: single Node version. Push: full matrix.
node: ${{ github.event_name == 'pull_request' && fromJSON('[24]') || fromJSON('[22, 24, 25]') }}
node: ${{ github.event_name == 'pull_request' && fromJSON('[25]') || fromJSON('[22, 24, 25]') }}

steps:
-
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/frontend-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25
cache: pnpm
-
name: Install all dependencies and symlink for ep_etherpad-lite
Expand Down Expand Up @@ -114,7 +114,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25
cache: pnpm
- name: Install all dependencies and symlink for ep_etherpad-lite
run: pnpm install --frozen-lockfile
Expand Down Expand Up @@ -190,7 +190,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25
cache: pnpm
- name: Install all dependencies and symlink for ep_etherpad-lite
run: pnpm install --frozen-lockfile
Expand Down Expand Up @@ -291,7 +291,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25
cache: pnpm
- name: Install all dependencies and symlink for ep_etherpad-lite
run: pnpm install --frozen-lockfile
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/handleRelease.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25
cache: pnpm
- name: Install all dependencies and symlink for ep_etherpad-lite
run: pnpm install --frozen-lockfile
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/installer-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,16 @@ jobs:

- uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25

- name: Pre-install pnpm (avoid sudo prompt in the installer)
run: npm install -g pnpm

- name: Run bin/installer.sh against this commit
env:
ETHERPAD_DIR: ${{ runner.temp }}/etherpad-installer-test
ETHERPAD_REPO: ${{ github.server_url }}/${{ github.repository }}.git
ETHERPAD_BRANCH: ${{ github.head_ref || github.ref_name }}
ETHERPAD_REPO: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.clone_url || format('{0}/{1}.git', github.server_url, github.repository) }}
ETHERPAD_BRANCH: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.ref || github.ref_name }}
NO_COLOR: "1"
run: sh ./bin/installer.sh

Expand Down Expand Up @@ -104,7 +104,7 @@ jobs:

- uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25

- name: Pre-install pnpm
run: npm install -g pnpm
Expand All @@ -113,8 +113,8 @@ jobs:
shell: pwsh
env:
ETHERPAD_DIR: ${{ runner.temp }}\etherpad-installer-test
ETHERPAD_REPO: ${{ github.server_url }}/${{ github.repository }}.git
ETHERPAD_BRANCH: ${{ github.head_ref || github.ref_name }}
ETHERPAD_REPO: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.clone_url || format('{0}/{1}.git', github.server_url, github.repository) }}
ETHERPAD_BRANCH: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.ref || github.ref_name }}
NO_COLOR: "1"
run: ./bin/installer.ps1

Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/load-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25
cache: pnpm
-
name: Install all dependencies and symlink for ep_etherpad-lite
Expand Down Expand Up @@ -77,7 +77,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25
cache: pnpm
-
name: Install etherpad-load-test
Expand Down Expand Up @@ -140,7 +140,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25
cache: pnpm
-
name: Install all dependencies and symlink for ep_etherpad-lite
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/perform-type-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25
cache: pnpm
- name: Install all dependencies and symlink for ep_etherpad-lite
run: pnpm install --frozen-lockfile
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/rate-limit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25
cache: pnpm

-
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25
cache: pnpm
cache-dependency-path: etherpad/pnpm-lock.yaml
- name: Install dependencies ether.github.com
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/releaseEtherpad.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
# OIDC trusted publishing needs npm >= 11.5.1, which requires
# Node >= 22.9.0. setup-node's `22` resolves to the latest
# 22.x, which satisfies that.
node-version: 22
node-version: 25
registry-url: https://registry.npmjs.org/
- name: Upgrade npm to >=11.5.1 (required for trusted publishing)
run: npm install -g npm@latest
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/update-plugins.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v6
with:
node-version: 22
node-version: 25

- name: Install bin dependencies
working-directory: ./bin
Expand Down
18 changes: 9 additions & 9 deletions .github/workflows/upgrade-from-latest-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,16 @@ jobs:
fail-fast: false
matrix:
# PRs: single Node version. Push: full matrix.
node: ${{ github.event_name == 'pull_request' && fromJSON('[24]') || fromJSON('[22, 24, 25]') }}
node: ${{ github.event_name == 'pull_request' && fromJSON('[25]') || fromJSON('[22, 24, 25]') }}
steps:
-
name: Check out latest release
uses: actions/checkout@v6
with:
ref: develop #FIXME change to master when doing release
fetch-depth: 0
-
name: Check out latest release tag
run: git checkout "$(git tag --list 'v*' --sort=-version:refname | head -n1)"
- uses: actions/cache@v5
name: Cache pnpm store
with:
Expand Down Expand Up @@ -84,13 +87,10 @@ jobs:
-
name: Install all dependencies and symlink for ep_etherpad-lite
run: pnpm install --frozen-lockfile
# Because actions/checkout@v6 is called with "ref: master" and without
# "fetch-depth: 0", the local clone does not have the ${GITHUB_SHA}
# commit. Fetch ${GITHUB_REF} to get the ${GITHUB_SHA} commit. Note that a
# plain "git fetch" only fetches "normal" references (refs/heads/* and
# refs/tags/*), and for pull requests none of the normal references
# include ${GITHUB_SHA}, so we have to explicitly tell Git to fetch
# ${GITHUB_REF}.
# The job starts from the latest release tag, so fetch the pull-request
# ref explicitly before checking out ${GITHUB_SHA}. A plain "git fetch"
# only brings "normal" references (refs/heads/* and refs/tags/*), and for
# pull requests none of those include the synthetic merge commit.
-
name: Fetch the new Git commits
run: git fetch --depth=1 origin "${GITHUB_REF}"
Expand Down
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@

- The HTTP client in the backend has been migrated from `axios` to the built-in `fetch` API, dropping a dependency now that Node 22 ships a stable fetch.
- `admin/` and `ui/` workspaces moved from `rolldown-vite` to upstream **Vite 8**.
- Build and CI moved to **pnpm 11** (`packageManager: "pnpm@11.0.6"`); the `Dockerfile`, snap, and all GitHub workflows are aligned. pnpm overrides have been migrated from `package.json` to `pnpm-workspace.yaml` to match pnpm 11's expectations.
- Build and CI moved to **pnpm 11** (`packageManager: "pnpm@11.1.2"`); the `Dockerfile`, snap, and all GitHub workflows are aligned. pnpm overrides have been migrated from `package.json` to `pnpm-workspace.yaml` to match pnpm 11's expectations.
- All client modules have been converted to ESM.
- The CI matrix tests Node 22, 24, and 25; on PRs the matrix is reduced to a single Node version to keep feedback fast.
- Frontend Playwright tests now run against the `/ether` plugin set, with feature-tag based skips so plugin-incompatible specs are excluded automatically.
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ COPY --chown=etherpad:etherpad ${SETTINGS} "${EP_DIR}"/settings.json

USER etherpad

HEALTHCHECK --interval=5s --timeout=3s \
HEALTHCHECK --interval=5s --timeout=3s --start-period=30s \
CMD wget -qO- http://127.0.0.1:9001/health | grep -E "pass|ok|up" > /dev/null || exit 1

EXPOSE 9001
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,8 @@ git switch -c v2.2.5
```sh
./bin/run.sh
```
This uses the pinned pnpm from `package.json`, via `pnpm` when available or
`corepack pnpm` otherwise.
6. Stop with [CTRL-C]
7. Restart your Etherpad service

Expand Down
20 changes: 14 additions & 6 deletions admin/src/pages/AuthorPage.tsx
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
import {Trans, useTranslation} from "react-i18next";
import {useEffect, useMemo, useState} from "react";
import * as Dialog from "@radix-ui/react-dialog";
import {ChevronLeft, ChevronRight, Trash2} from "lucide-react";
import {ChevronLeft, ChevronRight, Search, Trash2} from "lucide-react";
import {useStore} from "../store/store.ts";
import {SearchField} from "../components/SearchField.tsx";
import {ColorSwatch} from "../components/ColorSwatch.tsx";
import {IconButton} from "../components/IconButton.tsx";
import {determineSorting} from "../utils/sorting.ts";
import {useDebounce} from "../utils/useDebounce.ts";
import {
AnonymizePreview, AnonymizeResult, AuthorRow, AuthorSearchQuery,
AuthorSearchResult, AuthorSortBy,
} from "../utils/AuthorSearch.ts";

const determineSorting = (sortBy: string, ascending: boolean, currentSymbol: string) => {
if (sortBy === currentSymbol) {
return ascending ? 'sort up' : 'sort down';
}
return 'sort none';
};

type DialogState =
| {phase: 'closed'}
| {phase: 'loading-preview', authorID: string, name: string | null}
Expand Down Expand Up @@ -203,9 +208,12 @@ export const AuthorPage = () => {
</h1>
</span>

<SearchField value={searchTerm}
onChange={(v) => setSearchTerm(v.target.value)}
placeholder={t('ep_admin_authors:search-placeholder')}/>
<span className="search-field">
<input value={searchTerm}
onChange={(e) => setSearchTerm(e.target.value)}
placeholder={t('ep_admin_authors:search-placeholder')}/>
<Search/>
</span>

<label style={{display: 'inline-flex', alignItems: 'center', gap: 6,
margin: '8px 0'}}>
Expand Down
23 changes: 23 additions & 0 deletions bin/functions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,29 @@ error() { log "ERROR: $@" >&2; }
fatal() { error "$@"; exit 1; }
is_cmd() { command -v "$@" >/dev/null 2>&1; }

ensure_pnpm() {
if is_cmd pnpm; then return 0; fi
is_cmd corepack || fatal "Please install pnpm or corepack."
corepack pnpm --version >/dev/null 2>&1 || \
fatal "corepack is available but could not provision pnpm."
}

run_pnpm() {
if is_cmd pnpm; then
pnpm "$@"
else
corepack pnpm "$@"
fi
}

exec_pnpm() {
if is_cmd pnpm; then
exec pnpm "$@"
else
exec corepack pnpm "$@"
fi
}


get_program_version() {
PROGRAM="$1"
Expand Down
6 changes: 3 additions & 3 deletions bin/installDeps.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ cd "${MY_DIR}/.." || exit 1
# Source constants and useful functions
. bin/functions.sh

is_cmd pnpm || npm install pnpm -g
ensure_pnpm


# Is node installed?
Expand Down Expand Up @@ -36,10 +36,10 @@ fi
log "Installing dependencies..."
if [ -z "${ETHERPAD_PRODUCTION}" ]; then
log "Installing dev dependencies with pnpm"
pnpm --recursive i || exit 1
run_pnpm --recursive i || exit 1
else
log "Installing production dependencies with pnpm"
pnpm --recursive i --production || exit 1
run_pnpm --recursive i --production || exit 1
fi

# Remove all minified data to force node creating it new
Expand Down
6 changes: 3 additions & 3 deletions bin/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ if [ -z "$NODE_ENV" ] || [ "$NODE_ENV" = "development" ]; then
ADMIN_UI_PATH="$(dirname "$0")/../admin"
UI_PATH="$(dirname "$0")/../ui"
log "Creating the admin UI..."
(cd "$ADMIN_UI_PATH" && pnpm run build)
(cd "$UI_PATH" && pnpm run build)
(cd "$ADMIN_UI_PATH" && run_pnpm run build)
(cd "$UI_PATH" && run_pnpm run build)
else
log "Cannot create the admin UI in production mode"
fi
Expand All @@ -45,4 +45,4 @@ fi
log "Starting Etherpad..."

# cd src
exec pnpm run prod "$@"
exec_pnpm run prod "$@"
Loading
Loading