diff --git a/.github/workflows/backend-tests.yml b/.github/workflows/backend-tests.yml index 55ea64b90c0..e3cbf936523 100644 --- a/.github/workflows/backend-tests.yml +++ b/.github/workflows/backend-tests.yml @@ -28,27 +28,28 @@ jobs: fail-fast: false matrix: # PRs: test on latest Node only. Push to develop: full matrix. - node: ${{ github.event_name == 'pull_request' && fromJSON('[">=24.0.0 <25.0.0"]') || fromJSON('[">=20.0.0 <21.0.0", ">=22.0.0 <23.0.0", ">=24.0.0 <25.0.0"]') }} + node: ${{ github.event_name == 'pull_request' && fromJSON('[24]') || fromJSON('[20, 22, 24]') }} steps: - name: Checkout repository uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store with: - 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') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false + - name: Use Node.js + uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node }} + cache: pnpm - name: Install libreoffice uses: awalsh128/cache-apt-pkgs-action@v1.6.0 @@ -57,19 +58,19 @@ jobs: version: 1.0 - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm i --frozen-lockfile --runtimeVersion="${{ matrix.node }}" + run: pnpm i --frozen-lockfile - name: Install admin ui working-directory: admin - run: gnpm install --runtimeVersion="${{ matrix.node }}" + run: pnpm install - name: Build admin ui working-directory: admin - run: gnpm build --runtimeVersion="${{ matrix.node }}" + run: pnpm build - name: Run the backend tests - run: gnpm test --runtimeVersion="${{ matrix.node }}" + run: pnpm test - name: Run the new vitest tests working-directory: src - run: gnpm run test:vitest --runtimeVersion="${{ matrix.node }}" + run: pnpm run test:vitest withpluginsLinux: env: @@ -84,27 +85,28 @@ jobs: strategy: fail-fast: false matrix: - node: ${{ github.event_name == 'pull_request' && fromJSON('[">=24.0.0 <25.0.0"]') || fromJSON('[">=20.0.0 <21.0.0", ">=22.0.0 <23.0.0", ">=24.0.0 <25.0.0"]') }} + node: ${{ github.event_name == 'pull_request' && fromJSON('[24]') || fromJSON('[20, 22, 24]') }} steps: - name: Checkout repository uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup pnpm cache - if: always() + name: Cache pnpm store with: - 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') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm + with: + version: 10.33.2 + run_install: false + - name: Use Node.js + uses: actions/setup-node@v6 with: - version: 0.0.12 + node-version: ${{ matrix.node }} + cache: pnpm - name: Install libreoffice uses: awalsh128/cache-apt-pkgs-action@v1.6.0 @@ -113,14 +115,14 @@ jobs: version: 1.0 - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm install --frozen-lockfile --runtimeVersion="${{ matrix.node }}" + run: pnpm install --frozen-lockfile - name: Build admin ui working-directory: admin - run: gnpm build --runtimeVersion="${{ matrix.node }}" + run: pnpm build - name: Install Etherpad plugins run: > - gnpm install --workspace-root + pnpm add -w ep_align ep_author_hover ep_cursortrace @@ -134,10 +136,10 @@ jobs: ep_table_of_contents - name: Run the backend tests - run: gnpm test --runtimeVersion="${{ matrix.node }}" + run: pnpm test - name: Run the new vitest tests working-directory: src - run: gnpm run test:vitest --runtimeVersion="${{ matrix.node }}" + run: pnpm run test:vitest # Windows tests only run on push to develop/master, not on PRs withoutpluginsWindows: @@ -148,7 +150,7 @@ jobs: strategy: fail-fast: false matrix: - node: [">=20.0.0 <21.0.0", ">=22.0.0 <23.0.0", ">=24.0.0 <25.0.0"] + node: [20, 22, 24] name: Windows without plugins runs-on: windows-latest steps: @@ -156,26 +158,28 @@ jobs: name: Checkout repository uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup pnpm cache - if: always() + name: Cache pnpm store with: - path: | - ${{ env.PNPM_HOME }} - C:\gnpm\ - C:\Users\runneradmin\AppData\Roaming\gnpm\ - key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false + - name: Use Node.js + uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node }} + cache: pnpm - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm install --frozen-lockfile --runtimeVersion="${{ matrix.node }}" + run: pnpm install --frozen-lockfile - name: Build admin ui working-directory: admin - run: gnpm build --runtimeVersion="${{ matrix.node }}" + run: pnpm build - name: Fix up the settings.json run: | @@ -184,10 +188,10 @@ jobs: - name: Run the backend tests working-directory: src - run: gnpm test --runtimeVersion="${{ matrix.node }}" + run: pnpm test - name: Run the new vitest tests working-directory: src - run: gnpm run test:vitest --runtimeVersion="${{ matrix.node }}" + run: pnpm run test:vitest withpluginsWindows: env: @@ -197,7 +201,7 @@ jobs: strategy: fail-fast: false matrix: - node: [">=20.0.0 <21.0.0", ">=22.0.0 <23.0.0", ">=24.0.0 <25.0.0"] + node: [20, 22, 24] name: Windows with Plugins runs-on: windows-latest @@ -206,29 +210,31 @@ jobs: name: Checkout repository uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup pnpm cache - if: always() + name: Cache pnpm store with: - path: | - ${{ env.PNPM_HOME }} - C:\gnpm\ - C:\Users\runneradmin\AppData\Roaming\gnpm\ - key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm + with: + version: 10.33.2 + run_install: false + - name: Use Node.js + uses: actions/setup-node@v6 with: - version: 0.0.12 + node-version: ${{ matrix.node }} + cache: pnpm - name: Install dependencies - run: gnpm install --runtimeVersion="${{ matrix.node }}" + run: pnpm install - name: Build admin ui working-directory: admin - run: gnpm build --runtimeVersion="${{ matrix.node }}" + run: pnpm build - name: Install Etherpad plugins run: > - gnpm install --workspace-root + pnpm add -w ep_align ep_author_hover ep_cursortrace @@ -251,7 +257,7 @@ jobs: # rules. - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm install --frozen-lockfile --runtimeVersion="${{ matrix.node }}" + run: pnpm install --frozen-lockfile - name: Fix up the settings.json run: | @@ -260,7 +266,7 @@ jobs: - name: Run the backend tests working-directory: src - run: gnpm test --runtimeVersion="${{ matrix.node }}" + run: pnpm test - name: Run the new vitest tests working-directory: src - run: gnpm run test:vitest --runtimeVersion="${{ matrix.node }}" + run: pnpm run test:vitest diff --git a/.github/workflows/build-and-deploy-docs.yml b/.github/workflows/build-and-deploy-docs.yml index 6482328bd0a..84cb1bb0065 100644 --- a/.github/workflows/build-and-deploy-docs.yml +++ b/.github/workflows/build-and-deploy-docs.yml @@ -34,28 +34,31 @@ jobs: - name: Checkout uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store 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') }} + path: ~/.pnpm-store + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: actions/cache@v5 + name: Cache vitepress build + with: + path: doc/.vitepress/cache + key: ${{ runner.os }}-vitepress-${{ hashFiles('doc/**/*.md', 'doc/.vitepress/config.*') }} + restore-keys: | + ${{ runner.os }}-vitepress- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false - name: Setup Pages uses: actions/configure-pages@v6 - name: Install dependencies - run: gnpm install + run: pnpm install --frozen-lockfile - name: Build app working-directory: doc - run: gnpm run docs:build + run: pnpm run docs:build env: COMMIT_REF: ${{ github.sha }} - name: Upload artifact diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 4c97bcf52c9..35811cad578 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -43,21 +43,17 @@ jobs: cache-from: type=gha cache-to: type=gha,mode=max - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store with: - 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') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false - name: Test working-directory: etherpad @@ -74,7 +70,7 @@ jobs: *) printf %s\\n "unexpected status: ${status}" >&2; exit 1;; esac done - (cd src && gnpm run test-container) + (cd src && pnpm run test-container) git clean -dxf . build-test-db-drivers: diff --git a/.github/workflows/frontend-admin-tests.yml b/.github/workflows/frontend-admin-tests.yml index f31f442f889..dff5fc24dff 100644 --- a/.github/workflows/frontend-admin-tests.yml +++ b/.github/workflows/frontend-admin-tests.yml @@ -29,24 +29,25 @@ jobs: name: Checkout repository uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store with: - 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') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm + with: + version: 10.33.2 + run_install: false + - name: Use Node.js + uses: actions/setup-node@v6 with: - version: 0.0.12 + node-version: ${{ matrix.node }} + cache: pnpm - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm i --runtimeVersion="${{ matrix.node }}" + run: pnpm i - name: Cache Playwright browsers uses: actions/cache@v5 id: playwright-cache @@ -71,11 +72,11 @@ jobs: - name: Build admin frontend working-directory: admin run: | - gnpm run build --runtimeVersion="${{ matrix.node }}" + pnpm run build - name: Run the frontend admin tests shell: bash run: | - gnpm run prod --runtimeVersion="${{ matrix.node }}" > /tmp/etherpad-server.log 2>&1 & + pnpm run prod > /tmp/etherpad-server.log 2>&1 & connected=false can_connect() { curl -sSfo /dev/null http://localhost:9001/ || return 1 @@ -87,7 +88,7 @@ jobs: sleep 1 done cd src - gnpm run test-admin --runtimeVersion="${{ matrix.node }}" + pnpm run test-admin - name: Upload server log on failure uses: actions/upload-artifact@v7 if: failure() diff --git a/.github/workflows/frontend-tests.yml b/.github/workflows/frontend-tests.yml index da5ce0a3be8..c972000b0d5 100644 --- a/.github/workflows/frontend-tests.yml +++ b/.github/workflows/frontend-tests.yml @@ -22,32 +22,34 @@ jobs: name: Checkout repository uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store + with: + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + - uses: actions/cache@v5 + name: Cache Playwright browsers with: - 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') }} + path: ~/.cache/ms-playwright + key: ${{ runner.os }}-playwright-${{ hashFiles('src/package.json', 'pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-playwright- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm install --frozen-lockfile + run: pnpm install --frozen-lockfile - name: Create settings.json run: cp ./src/tests/settings.json settings.json - name: Run the frontend tests shell: bash run: | - gnpm run prod > /tmp/etherpad-server.log 2>&1 & + pnpm run prod > /tmp/etherpad-server.log 2>&1 & connected=false can_connect() { curl -sSfo /dev/null http://localhost:9001/ || return 1 @@ -59,8 +61,8 @@ jobs: sleep 1 done cd src - gnpm exec playwright install chromium --with-deps - gnpm run test-ui --project=chromium + pnpm exec playwright install chromium --with-deps + pnpm run test-ui --project=chromium - name: Upload server log on failure uses: actions/upload-artifact@v7 if: failure() @@ -83,30 +85,32 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store + with: + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + - uses: actions/cache@v5 + name: Cache Playwright browsers with: - 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') }} + path: ~/.cache/ms-playwright + key: ${{ runner.os }}-playwright-${{ hashFiles('src/package.json', 'pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-playwright- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm install --frozen-lockfile + run: pnpm install --frozen-lockfile - name: Create settings.json run: cp ./src/tests/settings.json settings.json - name: Run the frontend tests shell: bash run: | - gnpm run prod > /tmp/etherpad-server.log 2>&1 & + pnpm run prod > /tmp/etherpad-server.log 2>&1 & connected=false can_connect() { curl -sSfo /dev/null http://localhost:9001/ || return 1 @@ -118,8 +122,8 @@ jobs: sleep 1 done cd src - gnpm exec playwright install firefox --with-deps - gnpm run test-ui --project=firefox + pnpm exec playwright install firefox --with-deps + pnpm run test-ui --project=firefox - name: Upload server log on failure uses: actions/upload-artifact@v7 if: failure() diff --git a/.github/workflows/handleRelease.yml b/.github/workflows/handleRelease.yml index a69d20b6f64..3149d217286 100644 --- a/.github/workflows/handleRelease.yml +++ b/.github/workflows/handleRelease.yml @@ -29,30 +29,28 @@ jobs: name: Checkout repository uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store 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') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm install --frozen-lockfile + run: pnpm install --frozen-lockfile - name: Build etherpad - run: gnpm run build:etherpad - # On release, create release + run: pnpm run build:etherpad + # On release, create release. `--silent` suppresses pnpm's lifecycle + # banner ("> generateChangelog\n> node ...") that would otherwise be + # captured into CHANGELOG.txt and end up at the top of the GitHub + # release notes. - name: Generate Changelog working-directory: bin - run: gnpm run generateChangelog ${{ github.ref }} > ${{ github.workspace }}-CHANGELOG.txt + run: pnpm --silent run generateChangelog ${{ github.ref }} > ${{ github.workspace }}-CHANGELOG.txt - name: Release uses: softprops/action-gh-release@v3 if: ${{startsWith(github.ref, 'refs/tags/v') }} diff --git a/.github/workflows/load-test.yml b/.github/workflows/load-test.yml index 46a960aab59..06660afdbff 100644 --- a/.github/workflows/load-test.yml +++ b/.github/workflows/load-test.yml @@ -26,35 +26,26 @@ jobs: name: Checkout repository uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store 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') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm install --frozen-lockfile + run: pnpm install --frozen-lockfile - name: Install etherpad-load-test run: sudo npm install -g etherpad-load-test-socket-io - name: Run load test - run: | - gnpm --gnpmEnv - eval "$(gnpm --gnpmEnv)" - echo $PATH - src/tests/frontend/travis/runnerLoadTest.sh 25 50 + run: src/tests/frontend/travis/runnerLoadTest.sh 25 50 withplugins: # run on pushes to any branch @@ -69,31 +60,24 @@ jobs: name: Checkout repository uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store 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') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false - name: Install etherpad-load-test 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: > - gnpm install --workspace-root + pnpm add -w ep_align ep_author_hover ep_cursortrace @@ -117,12 +101,10 @@ jobs: # rules. - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm install --frozen-lockfile + run: pnpm install --frozen-lockfile - name: Run load test - run: | - eval "$(gnpm --gnpmEnv)" - src/tests/frontend/travis/runnerLoadTest.sh 25 50 + run: src/tests/frontend/travis/runnerLoadTest.sh 25 50 long: # run on pushes to any branch @@ -137,32 +119,23 @@ jobs: name: Checkout repository uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store 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') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm install --frozen-lockfile + run: pnpm install --frozen-lockfile - name: Install etherpad-load-test run: sudo npm install -g etherpad-load-test-socket-io - name: Run load test - run: | - gnpm --gnpmEnv - eval "$(gnpm --gnpmEnv)" - echo $PATH - src/tests/frontend/travis/runnerLoadTest.sh 5000 5 + run: 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 a2105615ef0..aacfe279f2e 100644 --- a/.github/workflows/perform-type-check.yml +++ b/.github/workflows/perform-type-check.yml @@ -26,25 +26,19 @@ jobs: - name: Checkout repository uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store 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') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 - - - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm install --frozen-lockfile + version: 10.33.2 + run_install: false + - name: Install all dependencies and symlink for ep_etherpad-lite + run: pnpm install --frozen-lockfile - name: Perform type check working-directory: ./src - run: gnpm run ts-check + run: pnpm run ts-check diff --git a/.github/workflows/rate-limit.yml b/.github/workflows/rate-limit.yml index 0a0699c6fa6..861d576c203 100644 --- a/.github/workflows/rate-limit.yml +++ b/.github/workflows/rate-limit.yml @@ -29,22 +29,17 @@ jobs: name: Checkout repository uses: actions/checkout@v6 - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store 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') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false - name: docker network @@ -63,7 +58,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: gnpm install --frozen-lockfile + run: pnpm install --frozen-lockfile - name: run rate limit test run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d77f94641cb..e9eb3d373e4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -48,24 +48,19 @@ jobs: path: ether.github.com token: '${{ secrets.ETHER_RELEASE_TOKEN }}' - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store 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') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false - name: Install dependencies ether.github.com - run: gnpm install --frozen-lockfile + run: pnpm install --frozen-lockfile working-directory: ether.github.com - name: Set git user run: | @@ -82,8 +77,8 @@ jobs: working-directory: etherpad run: | cd bin - gnpm install - gnpm run release ${{ inputs.release_type }} + pnpm install + pnpm 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 index e9575a49481..731ae29309b 100644 --- a/.github/workflows/releaseEtherpad.yml +++ b/.github/workflows/releaseEtherpad.yml @@ -23,33 +23,25 @@ jobs: registry-url: https://registry.npmjs.org/ - name: Upgrade npm to >=11.5.1 (required for trusted publishing) run: npm install -g npm@latest - - name: Get pnpm store directory - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - uses: actions/cache@v5 - name: Setup pnpm cache - if: always() + name: Cache pnpm store 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') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false - name: Install dependencies - run: gnpm install --frozen-lockfile + run: pnpm install --frozen-lockfile - name: Rename etherpad working-directory: ./src run: sed -i 's/ep_etherpad-lite/ep_etherpad/g' package.json - # Use `npm publish` directly (not `gnpm`/`pnpm` wrappers) because OIDC - # trusted publishing requires npm CLI >= 11.5.1 and the wrappers shell + # Use `npm publish` directly (not the `pnpm` wrapper) because OIDC + # trusted publishing requires npm CLI >= 11.5.1 and the wrapper shells # out to npm; calling npm directly avoids any shim ambiguity. The # ep_etherpad package must have a trusted publisher configured on # npmjs.com pointing at this workflow file. See: diff --git a/.github/workflows/update-plugins.yml b/.github/workflows/update-plugins.yml index 4b6a282a889..447ecdcf13a 100644 --- a/.github/workflows/update-plugins.yml +++ b/.github/workflows/update-plugins.yml @@ -21,7 +21,7 @@ jobs: - uses: pnpm/action-setup@v6 name: Install pnpm with: - version: 10 + version: 10.33.2 run_install: false - name: Use Node.js diff --git a/.github/workflows/upgrade-from-latest-release.yml b/.github/workflows/upgrade-from-latest-release.yml index c60af163a0a..e5260d449e6 100644 --- a/.github/workflows/upgrade-from-latest-release.yml +++ b/.github/workflows/upgrade-from-latest-release.yml @@ -36,22 +36,22 @@ jobs: with: ref: develop #FIXME change to master when doing release - uses: actions/cache@v5 - name: Setup gnpm cache - if: always() + name: Cache pnpm store 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') }} + path: ${{ env.PNPM_HOME }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-gnpm-store- - - name: Setup gnpm - uses: SamTV12345/gnpm-setup@main + ${{ runner.os }}-pnpm-store- + - uses: pnpm/action-setup@v6 + name: Install pnpm with: - version: 0.0.12 + version: 10.33.2 + run_install: false + - name: Use Node.js + uses: actions/setup-node@v6 + with: + node-version: ${{ matrix.node }} + cache: pnpm - name: Install libreoffice uses: awalsh128/cache-apt-pkgs-action@v1.6.0 with: @@ -59,14 +59,14 @@ jobs: version: 1.0 - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm install --frozen-lockfile --runtimeVersion="${{ matrix.node }}" + run: pnpm install --frozen-lockfile - name: Build admin ui working-directory: admin - run: gnpm build --runtimeVersion="${{ matrix.node }}" + run: pnpm build - name: Install Etherpad plugins run: > - gnpm run install-plugins + pnpm run install-plugins ep_align ep_author_hover ep_cursortrace @@ -78,13 +78,13 @@ jobs: ep_set_title_on_pad ep_spellcheck ep_subscript_and_superscript - ep_table_of_contents --runtimeVersion="${{ matrix.node }}" + ep_table_of_contents - name: Run the backend tests - run: gnpm run test --runtimeVersion="${{ matrix.node }}" + run: pnpm run test - name: Install all dependencies and symlink for ep_etherpad-lite - run: gnpm install --frozen-lockfile --runtimeVersion="${{ matrix.node }}" + 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 @@ -101,4 +101,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: gnpm run test --runtimeVersion="${{ matrix.node }}" + run: pnpm run test diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c23547eb78..64bfa75af26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +# 2.7.2 + +### Notable enhancements and fixes + +- Accessibility pass: corrected dialog semantics, improved focus management, added missing icon labels, and set the `html lang` attribute correctly. +- Chat: clicking the chat icon works again, disabled toggles render properly, and the username layout no longer overflows. +- `/export/etherpad` now honors the `:rev` URL segment, so revision-specific exports return the requested revision instead of the latest. +- Undo / redo now scrolls the viewport to follow the caret, so reverted edits stay in view. +- Page Down / Page Up now scrolls by viewport height instead of a fixed line count, matching standard editor behavior on tall and short windows alike. +- Editbar: caret is restored to the pad after changing a toolbar select, so typing continues in the document instead of falling through to the toolbar. +- Admin: i18n is restored on `/admin` so the admin UI is translated again. + # 2.7.1 ### Notable enhancements and fixes