diff --git a/.github/workflows/backend-tests.yml b/.github/workflows/backend-tests.yml
index bc910a8c5..3bf7569ac 100644
--- a/.github/workflows/backend-tests.yml
+++ b/.github/workflows/backend-tests.yml
@@ -12,8 +12,11 @@ on:
permissions:
contents: read
+
jobs:
withoutpluginsLinux:
+ env:
+ PNPM_HOME: ~/.pnpm-store
# run on pushes to any branch
# run on PRs from external forks
if: |
@@ -24,33 +27,27 @@ jobs:
strategy:
fail-fast: false
matrix:
- node: [20, 22, 24]
+ node: [">=20.0.0 <21.0.0", ">=22.0.0 <23.0.0", ">=24.0.0 <25.0.0"]
steps:
-
name: Checkout repository
uses: actions/checkout@v5
- -
- uses: actions/setup-node@v4
- with:
- node-version: ${{ matrix.node }}
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
- name: Setup pnpm cache
+ name: Setup gnpm cache
+ if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: |
+ ${{ env.PNPM_HOME }}
+ ~/.local/share/gnpm
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
-
name: Install libreoffice
uses: awalsh128/cache-apt-pkgs-action@v1.5.3
@@ -59,21 +56,23 @@ jobs:
version: 1.0
-
name: Install all dependencies and symlink for ep_etherpad-lite
- run: bin/installDeps.sh
+ run: gnpm i --frozen-lockfile --runtimeVersion="${{ matrix.node }}"
- name: Install admin ui
working-directory: admin
- run: pnpm install
+ run: gnpm install --runtimeVersion="${{ matrix.node }}"
- name: Build admin ui
working-directory: admin
- run: pnpm build
+ run: gnpm build --runtimeVersion="${{ matrix.node }}"
-
name: Run the backend tests
- run: pnpm test
+ run: gnpm test --runtimeVersion="${{ matrix.node }}"
- name: Run the new vitest tests
working-directory: src
- run: pnpm run test:vitest
+ run: gnpm run test:vitest --runtimeVersion="${{ matrix.node }}"
withpluginsLinux:
+ env:
+ PNPM_HOME: ~/.pnpm-store
# run on pushes to any branch
# run on PRs from external forks
if: |
@@ -84,33 +83,27 @@ jobs:
strategy:
fail-fast: false
matrix:
- node: [20, 22, 24]
+ node: [">=20.0.0 <21.0.0", ">=22.0.0 <23.0.0", ">=24.0.0 <25.0.0"]
steps:
-
name: Checkout repository
uses: actions/checkout@v5
- -
- uses: actions/setup-node@v4
- with:
- node-version: ${{ matrix.node }}
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
name: Setup pnpm cache
+ if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: |
+ ${{ env.PNPM_HOME }}
+ ~/.local/share/gnpm
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
-
name: Install libreoffice
uses: awalsh128/cache-apt-pkgs-action@v1.5.3
@@ -119,17 +112,14 @@ jobs:
version: 1.0
-
name: Install all dependencies and symlink for ep_etherpad-lite
- run: bin/installDeps.sh
- - name: Install admin ui
- working-directory: admin
- run: pnpm install
+ run: gnpm install --frozen-lockfile --runtimeVersion="${{ matrix.node }}"
- name: Build admin ui
working-directory: admin
- run: pnpm build
+ run: gnpm build --runtimeVersion="${{ matrix.node }}"
-
name: Install Etherpad plugins
run: >
- pnpm install --workspace-root
+ gnpm install --workspace-root
ep_align
ep_author_hover
ep_cursortrace
@@ -141,57 +131,53 @@ jobs:
ep_set_title_on_pad
ep_spellcheck
ep_subscript_and_superscript
- ep_table_of_contents
+ ep_table_of_contents --runtimeVersion="${{ matrix.node }}"
-
name: Run the backend tests
- run: pnpm test
+ run: gnpm test --runtimeVersion="${{ matrix.node }}"
- name: Run the new vitest tests
working-directory: src
- run: pnpm run test:vitest
+ run: gnpm run test:vitest --runtimeVersion="${{ matrix.node }}"
withoutpluginsWindows:
+ env:
+ PNPM_HOME: ~\\.pnpm-store
# run on pushes to any branch
# run on PRs from external forks
if: |
(github.event_name != 'pull_request')
|| (github.event.pull_request.head.repo.id != github.event.pull_request.base.repo.id)
+ strategy:
+ fail-fast: false
+ matrix:
+ node: [">=20.0.0 <21.0.0", ">=22.0.0 <23.0.0", ">=24.0.0 <25.0.0"]
name: Windows without plugins
runs-on: windows-latest
steps:
-
name: Checkout repository
uses: actions/checkout@v5
- -
- uses: actions/setup-node@v4
- with:
- node-version: 20
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
name: Setup pnpm cache
+ if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: |
+ ${{ env.PNPM_HOME }}
+ C:\gnpm\
+ C:\Users\runneradmin\AppData\Roaming\gnpm\
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
-
name: Install all dependencies and symlink for ep_etherpad-lite
- run: bin/installOnWindows.bat
- - name: Install admin ui
- working-directory: admin
- run: pnpm install
+ run: gnpm install --frozen-lockfile --runtimeVersion="${{ matrix.node }}"
- name: Build admin ui
working-directory: admin
- run: pnpm build
+ run: gnpm build --runtimeVersion="${{ matrix.node }}"
-
name: Fix up the settings.json
run: |
@@ -200,17 +186,23 @@ jobs:
-
name: Run the backend tests
working-directory: src
- run: pnpm test
+ run: gnpm test --runtimeVersion="${{ matrix.node }}"
- name: Run the new vitest tests
working-directory: src
- run: pnpm run test:vitest
+ run: gnpm run test:vitest --runtimeVersion="${{ matrix.node }}"
withpluginsWindows:
+ env:
+ PNPM_HOME: ~\\.pnpm-store
# run on pushes to any branch
# run on PRs from external forks
if: |
(github.event_name != 'pull_request')
|| (github.event.pull_request.head.repo.id != github.event.pull_request.base.repo.id)
+ strategy:
+ fail-fast: false
+ matrix:
+ node: [">=20.0.0 <21.0.0", ">=22.0.0 <23.0.0", ">=24.0.0 <25.0.0"]
name: Windows with Plugins
runs-on: windows-latest
@@ -218,40 +210,32 @@ jobs:
-
name: Checkout repository
uses: actions/checkout@v5
- -
- uses: actions/setup-node@v4
- with:
- node-version: 22
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
name: Setup pnpm cache
+ if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: |
+ ${{ env.PNPM_HOME }}
+ C:\gnpm\
+ C:\Users\runneradmin\AppData\Roaming\gnpm\
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
- - name: Install admin ui
- working-directory: admin
- run: pnpm install
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
+ - name: Install dependencies
+ run: gnpm install --runtimeVersion="${{ matrix.node }}"
- name: Build admin ui
working-directory: admin
- run: pnpm build
+ run: gnpm build --runtimeVersion="${{ matrix.node }}"
-
name: Install Etherpad plugins
# The --legacy-peer-deps flag is required to work around a bug in npm
# v7: https://github.com/npm/cli/issues/2199
run: >
- pnpm install --workspace-root
+ gnpm install --workspace-root
ep_align
ep_author_hover
ep_cursortrace
@@ -263,7 +247,7 @@ jobs:
ep_set_title_on_pad
ep_spellcheck
ep_subscript_and_superscript
- ep_table_of_contents
+ ep_table_of_contents --runtimeVersion="${{ matrix.node }}"
# Etherpad core dependencies must be installed after installing the
# plugin's dependencies, otherwise npm will try to hoist common
# dependencies by removing them from src/node_modules and installing them
@@ -275,7 +259,7 @@ jobs:
# rules.
-
name: Install all dependencies and symlink for ep_etherpad-lite
- run: bin/installOnWindows.bat
+ run: gnpm install --frozen-lockfile --runtimeVersion="${{ matrix.node }}"
-
name: Fix up the settings.json
run: |
@@ -284,7 +268,7 @@ jobs:
-
name: Run the backend tests
working-directory: src
- run: pnpm test
+ run: gnpm test --runtimeVersion="${{ matrix.node }}"
- name: Run the new vitest tests
working-directory: src
- run: pnpm run test:vitest
+ run: gnpm run test:vitest --runtimeVersion="${{ matrix.node }}"
diff --git a/.github/workflows/build-and-deploy-docs.yml b/.github/workflows/build-and-deploy-docs.yml
index f3850a6c1..8ff8435ae 100644
--- a/.github/workflows/build-and-deploy-docs.yml
+++ b/.github/workflows/build-and-deploy-docs.yml
@@ -33,31 +33,29 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v5
+ - uses: actions/cache@v4
+ name: Setup gnpm cache
+ if: always()
+ with:
+ path: |
+ ${{ env.STORE_PATH }}
+ ~/.local/share/gnpm
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ restore-keys: |
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
- name: Setup Pages
uses: actions/configure-pages@v5
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- - uses: actions/cache@v4
- name: Setup pnpm cache
- with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
- restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
- name: Install dependencies
- run: pnpm install
+ run: gnpm install
- name: Build app
working-directory: doc
- run: pnpm run docs:build
+ run: gnpm run docs:build
env:
COMMIT_REF: ${{ github.sha }}
- name: Upload artifact
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 46476c3ca..16ae79d13 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -37,10 +37,10 @@ jobs:
if: ${{ github.event_name == 'pull_request' }}
-
name: Initialize CodeQL
- uses: github/codeql-action/init@v3
+ uses: github/codeql-action/init@v4
-
name: Autobuild
- uses: github/codeql-action/autobuild@v3
+ uses: github/codeql-action/autobuild@v4
-
name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v3
+ uses: github/codeql-action/analyze@v4
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 81ba26344..743a9aa42 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -1,4 +1,4 @@
-name: Docker
+name: "Docker"
on:
pull_request:
paths-ignore:
@@ -18,6 +18,8 @@ permissions:
jobs:
docker:
runs-on: ubuntu-latest
+ env:
+ PNPM_HOME: ~/.pnpm-store
steps:
-
name: Check out
@@ -42,27 +44,22 @@ jobs:
tags: ${{ env.TEST_TAG }}
cache-from: type=gha
cache-to: type=gha,mode=max
- -
- name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: 'lts/*'
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
- name: Setup pnpm cache
+ name: Setup gnpm cache
+ if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: |
+ ${{ env.PNPM_HOME }}
+ ~/.local/share/gnpm
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
- ${{ runner.os }}-pnpm-store-
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
-
name: Test
working-directory: etherpad
@@ -79,7 +76,7 @@ jobs:
*) printf %s\\n "unexpected status: ${status}" >&2; exit 1;;
esac
done
- (cd src && pnpm run test-container)
+ (cd src && gnpm run test-container)
git clean -dxf .
-
name: Docker meta
@@ -113,7 +110,7 @@ jobs:
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
- name: Update repo description
- uses: peter-evans/dockerhub-description@v4
+ uses: peter-evans/dockerhub-description@v5
if: github.ref == 'refs/heads/master'
with:
readme-filepath: ./etherpad/README.md
diff --git a/.github/workflows/frontend-admin-tests.yml b/.github/workflows/frontend-admin-tests.yml
index d7fd22048..e65c8600c 100644
--- a/.github/workflows/frontend-admin-tests.yml
+++ b/.github/workflows/frontend-admin-tests.yml
@@ -1,5 +1,5 @@
# Leave the powered by Sauce Labs bit in as this means we get additional concurrency
-name: "Frontend admin tests powered by Sauce Labs"
+name: "Frontend admin tests"
on:
push:
@@ -11,6 +11,8 @@ permissions:
jobs:
withplugins:
+ env:
+ PNPM_HOME: ~/.pnpm-store
name: with plugins
runs-on: ubuntu-latest
@@ -29,26 +31,22 @@ jobs:
-
name: Checkout repository
uses: actions/checkout@v5
- -
- uses: actions/setup-node@v4
- with:
- node-version: ${{ matrix.node }}
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
- name: Setup pnpm cache
+ name: Setup gnpm cache
+ if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: |
+ ${{ env.PNPM_HOME }}
+ ~/.local/share/gnpm
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
- ${{ runner.os }}-pnpm-store-
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
- name: Cache playwright binaries
uses: actions/cache@v4
id: playwright-cache
@@ -56,8 +54,6 @@ jobs:
path: |
~/.cache/ms-playwright
key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }}
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
#-
# name: Install etherpad plugins
# # We intentionally install an old ep_align version to test upgrades to
@@ -75,7 +71,7 @@ jobs:
# rules.
-
name: Install all dependencies and symlink for ep_etherpad-lite
- run: pnpm i
+ run: gnpm i --runtimeVersion="${{ matrix.node }}"
#-
# name: Install etherpad plugins
# run: rm -Rf node_modules/ep_align/static/tests/*
@@ -99,7 +95,7 @@ jobs:
- name: Build admin frontend
working-directory: admin
run: |
- pnpm run build
+ gnpm run build --runtimeVersion="${{ matrix.node }}"
# name: Run the frontend admin tests
# shell: bash
# env:
@@ -130,7 +126,7 @@ jobs:
- name: Run the frontend admin tests
shell: bash
run: |
- pnpm run prod &
+ gnpm run prod --runtimeVersion="${{ matrix.node }}" &
connected=false
can_connect() {
curl -sSfo /dev/null http://localhost:9001/ || return 1
@@ -142,9 +138,9 @@ jobs:
sleep 1
done
cd src
- pnpm exec playwright install
- pnpm exec playwright install-deps
- pnpm run test-admin
+ gnpm exec playwright install --runtimeVersion="${{ matrix.node }}"
+ gnpm exec playwright install-deps --runtimeVersion="${{ matrix.node }}"
+ gnpm run test-admin --runtimeVersion="${{ matrix.node }}"
- uses: actions/upload-artifact@v4
if: always()
with:
diff --git a/.github/workflows/frontend-tests.yml b/.github/workflows/frontend-tests.yml
index 2a00bedc3..eec808de8 100644
--- a/.github/workflows/frontend-tests.yml
+++ b/.github/workflows/frontend-tests.yml
@@ -11,6 +11,8 @@ permissions:
jobs:
playwright-chrome:
+ env:
+ PNPM_HOME: ~/.pnpm-store
name: Playwright Chrome
runs-on: ubuntu-latest
steps:
@@ -23,32 +25,26 @@ jobs:
-
name: Checkout repository
uses: actions/checkout@v5
- -
- uses: actions/setup-node@v4
- with:
- node-version: 22
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
- name: Setup pnpm cache
+ name: Setup gnpm cache
if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: |
+ ${{ env.PNPM_HOME }}
+ ~/.cache/ms-playwright
+ ~/.local/share/gnpm
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
-
name: Install all dependencies and symlink for ep_etherpad-lite
- run: bin/installDeps.sh
+ run: gnpm install --frozen-lockfile
-
name: export GIT_HASH to env
id: environment
@@ -56,17 +52,10 @@ jobs:
-
name: Create settings.json
run: cp ./src/tests/settings.json settings.json
- - name: Cache playwright binaries
- uses: actions/cache@v4
- id: playwright-cache
- with:
- path: |
- ~/.cache/ms-playwright
- key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }}
- name: Run the frontend tests
shell: bash
run: |
- pnpm run prod &
+ gnpm run prod &
connected=false
can_connect() {
curl -sSfo /dev/null http://localhost:9001/ || return 1
@@ -78,8 +67,8 @@ jobs:
sleep 1
done
cd src
- pnpm exec playwright install chromium --with-deps
- pnpm run test-ui --project=chromium
+ gnpm exec playwright install chromium --with-deps
+ gnpm run test-ui --project=chromium
- uses: actions/upload-artifact@v4
if: always()
with:
@@ -87,6 +76,8 @@ jobs:
path: src/playwright-report/
retention-days: 30
playwright-firefox:
+ env:
+ PNPM_HOME: ~/.pnpm-store
name: Playwright Firefox
runs-on: ubuntu-latest
steps:
@@ -97,46 +88,34 @@ jobs:
printf %s\\n '::set-output name=tunnel_id::${{ github.run_id }}-${{ github.run_number }}-${{ github.job }}'
- name: Checkout repository
uses: actions/checkout@v5
- - uses: actions/setup-node@v4
- with:
- node-version: 22
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
- name: Setup pnpm cache
+ name: Setup gnpm cache
if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: |
+ ${{ env.PNPM_HOME }}
+ ~/.local/share/gnpm
+ ~/.cache/ms-playwright
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
- name: Install all dependencies and symlink for ep_etherpad-lite
- run: bin/installDeps.sh
+ run: gnpm install --frozen-lockfile
- name: export GIT_HASH to env
id: environment
run: echo "::set-output name=sha_short::$(git rev-parse --short ${{ github.sha }})"
- name: Create settings.json
run: cp ./src/tests/settings.json settings.json
- - name: Cache playwright binaries
- uses: actions/cache@v4
- id: playwright-cache
- with:
- path: |
- ~/.cache/ms-playwright
- key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }}
- name: Run the frontend tests
shell: bash
run: |
- pnpm run prod &
+ gnpm run prod &
connected=false
can_connect() {
curl -sSfo /dev/null http://localhost:9001/ || return 1
@@ -148,8 +127,8 @@ jobs:
sleep 1
done
cd src
- pnpm exec playwright install firefox --with-deps
- pnpm run test-ui --project=firefox
+ gnpm exec playwright install firefox --with-deps
+ gnpm run test-ui --project=firefox
- uses: actions/upload-artifact@v4
if: always()
with:
@@ -159,7 +138,8 @@ jobs:
playwright-webkit:
name: Playwright Webkit
runs-on: ubuntu-latest
-
+ env:
+ PNPM_HOME: ~/.pnpm-store
steps:
-
name: Generate Sauce Labs strings
@@ -170,39 +150,25 @@ jobs:
-
name: Checkout repository
uses: actions/checkout@v5
- -
- uses: actions/setup-node@v4
- with:
- node-version: 22
- - name: Cache playwright binaries
- uses: actions/cache@v4
- id: playwright-cache
- with:
- path: |
- ~/.cache/ms-playwright
- key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }}
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
- name: Setup pnpm cache
+ name: Setup gnpm cache
if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
- restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
+ path: |
+ ${{ env.PNPM_HOME }}
+ ~/.local/share/gnpm
+ ~/.cache/ms-playwright
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ restore-keys: ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
-
name: Install all dependencies and symlink for ep_etherpad-lite
- run: bin/installDeps.sh
+ run: gnpm install --frozen-lockfile
-
name: export GIT_HASH to env
id: environment
@@ -213,7 +179,7 @@ jobs:
- name: Run the frontend tests
shell: bash
run: |
- pnpm run prod &
+ gnpm run prod &
connected=false
can_connect() {
curl -sSfo /dev/null http://localhost:9001/ || return 1
@@ -225,8 +191,8 @@ jobs:
sleep 1
done
cd src
- pnpm exec playwright install webkit --with-deps
- pnpm run test-ui --project=webkit || true
+ gnpm exec playwright install webkit --with-deps
+ gnpm run test-ui --project=webkit || true
- uses: actions/upload-artifact@v4
if: always()
with:
diff --git a/.github/workflows/handleRelease.yml b/.github/workflows/handleRelease.yml
new file mode 100644
index 000000000..5cfc7c50a
--- /dev/null
+++ b/.github/workflows/handleRelease.yml
@@ -0,0 +1,60 @@
+name: "Handle release"
+
+# any branch is useful for testing before a PR is submitted
+on:
+ workflow_run:
+ workflows:
+ - "Docker"
+
+permissions:
+ contents: read
+
+env:
+ PNPM_HOME: ~/.pnpm-store
+
+jobs:
+ create-release:
+ permissions: write-all
+ # run on pushes to any branch
+ # run on PRs from external forks
+ if: |
+ (github.event_name != 'pull_request')
+ || (github.event.pull_request.head.repo.id != github.event.pull_request.base.repo.id)
+ name: Handle the release
+ runs-on: ubuntu-latest
+ steps:
+ -
+ name: Checkout repository
+ uses: actions/checkout@v5
+ - uses: actions/cache@v4
+ name: Setup gnpm cache
+ if: always()
+ with:
+ path: |
+ ${{ env.STORE_PATH }}
+ ~/.local/share/gnpm
+ ~/.cache/ms-playwright
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ restore-keys: |
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
+ - name: Install all dependencies and symlink for ep_etherpad-lite
+ run: gnpm install --frozen-lockfile
+ - name: Build etherpad
+ run: gnpm run build:etherpad
+ # On release, create release
+ - name: Generate Changelog
+ if: ${{startsWith(github.ref, 'refs/tags/v') }}
+ working-directory: bin
+ run: gnpm run generateChangelog ${{ github.ref }} > ${{ github.workspace }}-CHANGELOG.txt
+ - name: Release
+ uses: softprops/action-gh-release@v2
+ if: ${{startsWith(github.ref, 'refs/tags/v') }}
+ with:
+ body_path: ${{ github.workspace }}-CHANGELOG.txt
+ make_latest: true
diff --git a/.github/workflows/load-test.yml b/.github/workflows/load-test.yml
index 1661d1c39..67101f3e1 100644
--- a/.github/workflows/load-test.yml
+++ b/.github/workflows/load-test.yml
@@ -12,6 +12,10 @@ on:
permissions:
contents: read
+env:
+ PNPM_HOME: ~/.pnpm-store
+ LOG_LEVEL: DEBUG
+
jobs:
withoutplugins:
# run on pushes to any branch
@@ -25,37 +29,36 @@ jobs:
-
name: Checkout repository
uses: actions/checkout@v5
- -
- uses: actions/setup-node@v4
- with:
- node-version: 20
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
- name: Setup pnpm cache
+ name: Setup gnpm cache
+ if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: |
+ ${{ env.STORE_PATH }}
+ ~/.local/share/gnpm
+ ~/.cache/ms-playwright
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
-
name: Install all dependencies and symlink for ep_etherpad-lite
- run: bin/installDeps.sh
+ run: gnpm install --frozen-lockfile
-
name: Install etherpad-load-test
run: sudo npm install -g etherpad-load-test-socket-io
-
name: Run load test
- run: src/tests/frontend/travis/runnerLoadTest.sh 25 50
+ run: |
+ gnpm --gnpmEnv
+ eval "$(gnpm --gnpmEnv)"
+ echo $PATH
+ src/tests/frontend/travis/runnerLoadTest.sh 25 50
withplugins:
# run on pushes to any branch
@@ -69,37 +72,32 @@ jobs:
-
name: Checkout repository
uses: actions/checkout@v5
- -
- uses: actions/setup-node@v4
- with:
- node-version: 20
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
- name: Setup pnpm cache
+ name: Setup gnpm cache
+ if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: |
+ ${{ env.STORE_PATH }}
+ ~/.local/share/gnpm
+ ~/.cache/ms-playwright
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
-
name: Install etherpad-load-test
- run: pnpm install -g etherpad-load-test-socket-io
+ run: sudo npm install -g etherpad-load-test-socket-io
-
name: Install etherpad plugins
# The --legacy-peer-deps flag is required to work around a bug in npm v7:
# https://github.com/npm/cli/issues/2199
run: >
- pnpm install --workspace-root
+ gnpm install --workspace-root
ep_align
ep_author_hover
ep_cursortrace
@@ -123,10 +121,12 @@ jobs:
# rules.
-
name: Install all dependencies and symlink for ep_etherpad-lite
- run: bin/installDeps.sh
+ run: gnpm install --frozen-lockfile
-
name: Run load test
- run: src/tests/frontend/travis/runnerLoadTest.sh 25 50
+ run: |
+ eval "$(gnpm --gnpmEnv)"
+ src/tests/frontend/travis/runnerLoadTest.sh 25 50
long:
# run on pushes to any branch
@@ -140,34 +140,33 @@ jobs:
-
name: Checkout repository
uses: actions/checkout@v5
- -
- uses: actions/setup-node@v4
- with:
- node-version: 20
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
- name: Setup pnpm cache
+ name: Setup gnpm cache
+ if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: |
+ ${{ env.STORE_PATH }}
+ ~/.local/share/gnpm
+ ~/.cache/ms-playwright
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
-
name: Install all dependencies and symlink for ep_etherpad-lite
- run: bin/installDeps.sh
+ run: gnpm install --frozen-lockfile
-
name: Install etherpad-load-test
run: sudo npm install -g etherpad-load-test-socket-io
-
name: Run load test
- run: src/tests/frontend/travis/runnerLoadTest.sh 5000 5
+ run: |
+ gnpm --gnpmEnv
+ eval "$(gnpm --gnpmEnv)"
+ echo $PATH
+ src/tests/frontend/travis/runnerLoadTest.sh 5000 5
diff --git a/.github/workflows/perform-type-check.yml b/.github/workflows/perform-type-check.yml
index 6543041f6..368e0eda6 100644
--- a/.github/workflows/perform-type-check.yml
+++ b/.github/workflows/perform-type-check.yml
@@ -12,6 +12,8 @@ on:
permissions:
contents: read
+env:
+ PNPM_HOME: ~/.pnpm-store
jobs:
performTypeCheck:
@@ -23,30 +25,26 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v5
- - uses: actions/setup-node@v4
- with:
- node-version: 20
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
- name: Setup pnpm cache
+ name: Setup gnpm cache
+ if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: |
+ ${{ env.STORE_PATH }}
+ ~/.local/share/gnpm
+ ~/.cache/ms-playwright
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
-
name: Install all dependencies and symlink for ep_etherpad-lite
- run: ./bin/installDeps.sh
+ run: gnpm install --frozen-lockfile
- name: Perform type check
working-directory: ./src
- run: npm run ts-check
+ run: gnpm run ts-check
diff --git a/.github/workflows/rate-limit.yml b/.github/workflows/rate-limit.yml
index 521e007ac..31f232ec7 100644
--- a/.github/workflows/rate-limit.yml
+++ b/.github/workflows/rate-limit.yml
@@ -12,6 +12,9 @@ on:
permissions:
contents: read
+env:
+ PNPM_HOME: ~/.pnpm-store
+
jobs:
ratelimit:
# run on pushes to any branch
@@ -25,26 +28,23 @@ jobs:
-
name: Checkout repository
uses: actions/checkout@v5
- -
- uses: actions/setup-node@v4
- with:
- node-version: 20
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- uses: actions/cache@v4
- name: Setup pnpm cache
+ name: Setup gnpm cache
+ if: always()
with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: |
+ ${{ env.STORE_PATH }}
+ ~/.local/share/gnpm
+ ~/.cache/ms-playwright
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
- ${{ runner.os }}-pnpm-store-
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
-
name: docker network
@@ -63,7 +63,7 @@ jobs:
docker run --rm --network ep_net --ip 172.23.42.3 --name anotherip -dt anotherip
-
name: install dependencies and create symlink for ep_etherpad-lite
- run: bin/installDeps.sh
+ run: gnpm install --frozen-lockfile
-
name: run rate limit test
run: |
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 52f58012f..8b011aafc 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,3 +1,5 @@
+permissions:
+ contents: read
name: Release etherpad
on:
workflow_dispatch:
@@ -12,6 +14,9 @@ on:
- minor
- major
+env:
+ PNPM_HOME: ~/.pnpm-store
+
jobs:
releases:
runs-on: ubuntu-latest
@@ -42,24 +47,25 @@ jobs:
repository: ether/ether.github.com
path: ether.github.com
token: '${{ secrets.ETHER_RELEASE_TOKEN }}'
- - name: Setup Node.js
- uses: actions/setup-node@v4
+ - uses: actions/cache@v4
+ name: Setup gnpm cache
+ if: always()
with:
- node-version: '20'
- - uses: pnpm/action-setup@v4
- name: Install pnpm
+ path: |
+ ${{ env.STORE_PATH }}
+ ~/.local/share/gnpm
+ ~/.cache/ms-playwright
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ restore-keys: |
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- - name: Install dependencies etherpad
- run: pnpm install --frozen-lockfile
- working-directory: etherpad
+ version: 0.0.12
- name: Install dependencies ether.github.com
- run: pnpm install --frozen-lockfile
+ run: gnpm install --frozen-lockfile
working-directory: ether.github.com
- name: Set git user
run: |
@@ -76,7 +82,8 @@ jobs:
working-directory: etherpad
run: |
cd bin
- pnpm run release ${{ inputs.release_type }}
+ gnpm install
+ gnpm run release ${{ inputs.release_type }}
- name: Push after release
working-directory: etherpad
run: |
diff --git a/.github/workflows/releaseEtherpad.yml b/.github/workflows/releaseEtherpad.yml
new file mode 100644
index 000000000..88857a287
--- /dev/null
+++ b/.github/workflows/releaseEtherpad.yml
@@ -0,0 +1,45 @@
+name: releaseEtherpad.yaml
+permissions:
+ contents: read
+on:
+ workflow_dispatch:
+
+env:
+ PNPM_HOME: ~/.pnpm-store
+
+jobs:
+ release:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v5
+ - name: Get pnpm store directory
+ shell: bash
+ run: |
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
+ - uses: actions/cache@v4
+ name: Setup pnpm cache
+ if: always()
+ with:
+ path: |
+ ${{ env.STORE_PATH }}
+ ~/.local/share/gnpm
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ restore-keys: |
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
+ with:
+ version: 0.0.12
+ - name: Install dependencies
+ run: gnpm install --frozen-lockfile
+ - name: Rename etherpad
+ working-directory: ./src
+ run: sed -i 's/ep_etherpad-lite/ep_etherpad/g' package.json
+ - name: Release to npm
+ run: gnpm publish --no-git-checks
+ working-directory: ./src
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_PRIVATE_TOKEN }}
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
index 60249bb15..5446694be 100644
--- a/.github/workflows/stale.yml
+++ b/.github/workflows/stale.yml
@@ -9,7 +9,7 @@ jobs:
stale:
runs-on: ubuntu-latest
steps:
- - uses: actions/stale@v9
+ - uses: actions/stale@v10
with:
close-issue-label: wontfix
close-pr-label: wontfix
diff --git a/.github/workflows/upgrade-from-latest-release.yml b/.github/workflows/upgrade-from-latest-release.yml
index 37214427f..046bd8665 100644
--- a/.github/workflows/upgrade-from-latest-release.yml
+++ b/.github/workflows/upgrade-from-latest-release.yml
@@ -12,6 +12,9 @@ on:
permissions:
contents: read
+env:
+ PNPM_HOME: ~/.pnpm-store
+
jobs:
withpluginsLinux:
# run on pushes to any branch
@@ -31,35 +34,28 @@ jobs:
uses: actions/checkout@v5
with:
ref: develop #FIXME change to master when doing release
- -
- uses: actions/setup-node@v4
+ - uses: actions/cache@v4
+ name: Setup gnpm cache
+ if: always()
with:
- node-version: ${{ matrix.node }}
- - uses: pnpm/action-setup@v4
- name: Install pnpm
+ path: |
+ ${{ env.STORE_PATH }}
+ ~/.local/share/gnpm
+ ~/.cache/ms-playwright
+ /usr/local/bin/gnpm
+ /usr/local/bin/gnpm-0.0.12
+ key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ restore-keys: |
+ ${{ runner.os }}-gnpm-store-
+ - name: Setup gnpm
+ uses: SamTV12345/gnpm-setup@main
with:
- version: 10
- run_install: false
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
+ version: 0.0.12
- name: Install libreoffice
uses: awalsh128/cache-apt-pkgs-action@v1.5.3
with:
packages: libreoffice libreoffice-pdfimport
version: 1.0
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- - uses: actions/cache@v4
- name: Setup pnpm cache
- with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
- restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
-
name: Install libreoffice
uses: awalsh128/cache-apt-pkgs-action@v1.5.3
@@ -68,17 +64,14 @@ jobs:
version: 1.0
-
name: Install all dependencies and symlink for ep_etherpad-lite
- run: bin/installDeps.sh
- - name: Install admin ui
- working-directory: admin
- run: pnpm install
+ run: gnpm install --frozen-lockfile --runtimeVersion="${{ matrix.node }}"
- name: Build admin ui
working-directory: admin
- run: pnpm build
+ run: gnpm build --runtimeVersion="${{ matrix.node }}"
-
name: Install Etherpad plugins
run: >
- pnpm run install-plugins
+ gnpm run install-plugins
ep_align
ep_author_hover
ep_cursortrace
@@ -90,13 +83,13 @@ jobs:
ep_set_title_on_pad
ep_spellcheck
ep_subscript_and_superscript
- ep_table_of_contents
+ ep_table_of_contents --runtimeVersion="${{ matrix.node }}"
-
name: Run the backend tests
- run: pnpm run test
+ run: gnpm run test --runtimeVersion="${{ matrix.node }}"
-
name: Install all dependencies and symlink for ep_etherpad-lite
- run: ./bin/installDeps.sh
+ run: gnpm install --frozen-lockfile --runtimeVersion="${{ matrix.node }}"
# Because actions/checkout@v5 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
@@ -113,4 +106,4 @@ jobs:
# commit that merges the PR's source branch to its destination branch.
run: git checkout "${GITHUB_SHA}"
- name: Run the backend tests
- run: pnpm run test
+ run: gnpm run test --runtimeVersion="${{ matrix.node }}"
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
deleted file mode 100644
index 6a1494be1..000000000
--- a/.github/workflows/windows.yml
+++ /dev/null
@@ -1,86 +0,0 @@
-name: "Windows Build"
-
-# any branch is useful for testing before a PR is submitted
-on:
- push:
- paths-ignore:
- - "doc/**"
- pull_request:
- paths-ignore:
- - "doc/**"
-
-permissions:
- contents: read
-
-jobs:
- build-zip:
- permissions: write-all
- # run on pushes to any branch
- # run on PRs from external forks
- if: |
- (github.event_name != 'pull_request')
- || (github.event.pull_request.head.repo.id != github.event.pull_request.base.repo.id)
- name: Build .zip
- runs-on: windows-latest
- steps:
- -
- uses: msys2/setup-msys2@v2
- with:
- path-type: inherit
- install: >-
- zip
- -
- name: Checkout repository
- uses: actions/checkout@v5
- -
- uses: actions/setup-node@v4
- with:
- node-version: 22
- - uses: pnpm/action-setup@v4
- name: Install pnpm
- with:
- version: 10
- run_install: false
- - name: Get pnpm store directory
- shell: bash
- run: |
- echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
- - uses: actions/cache@v4
- name: Setup pnpm cache
- with:
- path: ${{ env.STORE_PATH }}
- key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
- restore-keys: |
- ${{ runner.os }}-pnpm-store-
- - name: Only install direct dependencies
- run: pnpm config set auto-install-peers false
- -
- name: Install all dependencies and symlink for ep_etherpad-lite
- shell: msys2 {0}
- run: bin/installDeps.sh
- -
- name: Run the backend tests
- shell: msys2 {0}
- working-directory: src
- run: pnpm test
- -
- name: Run Etherpad
- working-directory: src
- run: |
- pnpm i
- pnpm exec playwright install --with-deps
- pnpm run prod &
- curl --connect-timeout 10 --max-time 20 --retry 5 --retry-delay 10 --retry-max-time 60 --retry-connrefused http://127.0.0.1:9001/p/test
- pnpm exec playwright install chromium --with-deps
- pnpm run test-ui --project=chromium
- # On release, create release
- - name: Generate Changelog
- if: ${{startsWith(github.ref, 'refs/tags/v') }}
- working-directory: bin
- run: pnpm run generateChangelog ${{ github.ref }} > ${{ github.workspace }}-CHANGELOG.txt
- - name: Release
- uses: softprops/action-gh-release@v2
- if: ${{startsWith(github.ref, 'refs/tags/v') }}
- with:
- body_path: ${{ github.workspace }}-CHANGELOG.txt
- make_latest: true
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5b4a62b3a..1fa10da7a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+# 2.5.1
+
+### Notable enhancements and fixes
+
+- Added endpoint for prometheus scraping. You can now scrape the metrics endpoint with prometheus. It is available at /stats/prometheus if you have enableMetrics set to true in your settings.json
+
+- fixed exposeVersion causing the pad panel to not load correctly
+- fixed admin manage pad url to also take the base path into account
+
# 2.5.0
### Notable enhancements and fixes
diff --git a/admin/package.json b/admin/package.json
index b659eb0fd..da579b704 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -1,7 +1,7 @@
{
"name": "admin",
"private": true,
- "version": "2.5.0",
+ "version": "2.5.1",
"type": "module",
"scripts": {
"dev": "vite",
@@ -16,27 +16,31 @@
"devDependencies": {
"@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-toast": "^1.2.15",
- "@types/react": "^19.1.10",
- "@types/react-dom": "^19.1.7",
- "@typescript-eslint/eslint-plugin": "^8.40.0",
- "@typescript-eslint/parser": "^8.40.0",
- "@vitejs/plugin-react-swc": "^4.0.1",
- "eslint": "^9.33.0",
- "eslint-plugin-react-hooks": "^5.2.0",
- "eslint-plugin-react-refresh": "^0.4.20",
- "i18next": "^25.4.0",
+ "@types/react": "^19.2.2",
+ "@types/react-dom": "^19.2.1",
+ "@typescript-eslint/eslint-plugin": "^8.46.0",
+ "@typescript-eslint/parser": "^8.46.0",
+ "@vitejs/plugin-react": "^5.0.4",
+ "babel-plugin-react-compiler": "19.1.0-rc.3",
+ "eslint": "^9.37.0",
+ "eslint-plugin-react-hooks": "^6.1.1",
+ "eslint-plugin-react-refresh": "^0.4.23",
+ "i18next": "^25.5.3",
"i18next-browser-languagedetector": "^8.2.0",
- "lucide-react": "^0.541.0",
- "react": "^19.1.1",
- "react-dom": "^19.1.1",
- "react-hook-form": "^7.62.0",
- "react-i18next": "^15.7.1",
- "react-router-dom": "^7.8.1",
+ "lucide-react": "^0.545.0",
+ "react": "^19.2.0",
+ "react-dom": "^19.2.0",
+ "react-hook-form": "^7.64.0",
+ "react-i18next": "^16.0.0",
+ "react-router-dom": "^7.9.0",
"socket.io-client": "^4.8.1",
- "typescript": "^5.9.2",
- "vite": "^7.1.3",
- "vite-plugin-static-copy": "^3.1.2",
- "vite-plugin-svgr": "^4.3.0",
+ "typescript": "^5.9.3",
+ "vite": "npm:rolldown-vite@latest",
+ "vite-plugin-babel": "^1.3.2",
+ "vite-plugin-static-copy": "^3.1.3",
"zustand": "^5.0.8"
+ },
+ "overrides": {
+ "vite": "npm:rolldown-vite@latest"
}
}
diff --git a/admin/public/brand.svg b/admin/public/brand.svg
new file mode 100644
index 000000000..3f42434c9
--- /dev/null
+++ b/admin/public/brand.svg
@@ -0,0 +1,50 @@
+
+
diff --git a/admin/src/components/IconButton.tsx b/admin/src/components/IconButton.tsx
index 876a55779..a93c9877c 100644
--- a/admin/src/components/IconButton.tsx
+++ b/admin/src/components/IconButton.tsx
@@ -1,6 +1,7 @@
import {FC, JSX, ReactElement} from "react";
export type IconButtonProps = {
+ style?: React.CSSProperties,
icon: JSX.Element,
title: string|ReactElement,
onClick: ()=>void,
@@ -8,8 +9,8 @@ export type IconButtonProps = {
disabled?: boolean
}
-export const IconButton:FC = ({icon,className,onClick,title, disabled})=>{
- return