Skip to content

Commit 3695927

Browse files
authored
Merge branch 'ether:main' into master
2 parents 339048e + 0b224c9 commit 3695927

File tree

9 files changed

+2194
-1201
lines changed

9 files changed

+2194
-1201
lines changed

.eslintrc.cjs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
'use strict';
2+
3+
// This is a workaround for https://github.com/eslint/eslint/issues/3458
4+
require('eslint-config-etherpad/patch/modern-module-resolution');
5+
6+
module.exports = {
7+
root: true,
8+
extends: 'etherpad/plugin',
9+
};

.github/dependabot.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "github-actions"
4+
directory: "/"
5+
schedule:
6+
interval: "daily"
7+
- package-ecosystem: "npm"
8+
directory: "/"
9+
schedule:
10+
interval: "daily"
11+
versioning-strategy: "increase"
Lines changed: 81 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,92 @@
1-
# You need to change lines 38 and 46 in case the plugin's name on npmjs.com is different
2-
# from the repository name
3-
4-
name: "Backend tests"
1+
name: Backend Tests
52

63
# any branch is useful for testing before a PR is submitted
7-
on: [push, pull_request]
4+
on:
5+
workflow_call:
86

97
jobs:
108
withplugins:
119
# run on pushes to any branch
1210
# run on PRs from external forks
1311
if: |
14-
(github.event_name != 'pull_request')
15-
|| (github.event.pull_request.head.repo.id != github.event.pull_request.base.repo.id)
12+
(github.event_name != 'pull_request')
13+
|| (github.event.pull_request.head.repo.id != github.event.pull_request.base.repo.id)
1614
name: with Plugins
1715
runs-on: ubuntu-latest
18-
1916
steps:
20-
- name: Install libreoffice
21-
run: |
22-
sudo add-apt-repository -y ppa:libreoffice/ppa
23-
sudo apt update
24-
sudo apt install -y --no-install-recommends libreoffice libreoffice-pdfimport
25-
26-
# clone etherpad-lite
27-
- name: Install etherpad core
28-
uses: actions/checkout@v2
29-
with:
30-
repository: ether/etherpad-lite
31-
32-
- name: Install all dependencies and symlink for ep_etherpad-lite
33-
run: src/bin/installDeps.sh
34-
35-
# clone this repository into node_modules/ep_plugin-name
36-
- name: Checkout plugin repository
37-
uses: actions/checkout@v2
38-
with:
39-
path: ./node_modules/${{github.event.repository.name}}
40-
41-
- name: Install plugin dependencies
42-
run: |
43-
cd node_modules/${{github.event.repository.name}}
44-
npm ci
45-
46-
- name: Run the backend tests
47-
run: cd src && npm test
48-
49-
##ETHERPAD_NPM_V=2
50-
## NPM configuration automatically created using src/bin/plugins/updateAllPluginsScript.sh
17+
-
18+
name: Install libreoffice
19+
uses: awalsh128/cache-apt-pkgs-action@v1.4.2
20+
with:
21+
packages: libreoffice libreoffice-pdfimport
22+
version: 1.0
23+
-
24+
name: Install etherpad core
25+
uses: actions/checkout@v3
26+
with:
27+
repository: ether/etherpad-lite
28+
path: etherpad-lite
29+
- uses: pnpm/action-setup@v3
30+
name: Install pnpm
31+
with:
32+
version: 8
33+
run_install: false
34+
- name: Get pnpm store directory
35+
shell: bash
36+
run: |
37+
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
38+
- uses: actions/cache@v4
39+
name: Setup pnpm cache
40+
with:
41+
path: ${{ env.STORE_PATH }}
42+
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
43+
restore-keys: |
44+
${{ runner.os }}-pnpm-store-
45+
-
46+
name: Checkout plugin repository
47+
uses: actions/checkout@v3
48+
with:
49+
path: plugin
50+
-
51+
name: Determine plugin name
52+
id: plugin_name
53+
working-directory: ./plugin
54+
run: |
55+
npx -c 'printf %s\\n "::set-output name=plugin_name::${npm_package_name}"'
56+
-
57+
name: Link plugin directory
58+
working-directory: ./plugin
59+
run: |
60+
pnpm link --global
61+
- name: Remove tests
62+
working-directory: ./etherpad-lite
63+
run: rm -rf ./src/tests/backend/specs
64+
-
65+
name: Install Etherpad core dependencies
66+
working-directory: ./etherpad-lite
67+
run: bin/installDeps.sh
68+
- name: Link plugin to etherpad-lite
69+
working-directory: ./etherpad-lite
70+
run: |
71+
pnpm link --global $PLUGIN_NAME
72+
pnpm run install-plugins --path ../../plugin
73+
env:
74+
PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }}
75+
- name: Link ep_etherpad-lite
76+
working-directory: ./etherpad-lite/src
77+
run: |
78+
pnpm link --global
79+
- name: Link etherpad to plugin
80+
working-directory: ./plugin
81+
run: |
82+
pnpm link --global ep_etherpad-lite
83+
-
84+
name: Run the backend tests
85+
working-directory: ./etherpad-lite
86+
run: |
87+
res=$(find .. -path "./node_modules/ep_*/static/tests/backend/specs/**" | wc -l)
88+
if [ $res -eq 0 ]; then
89+
echo "No backend tests found"
90+
else
91+
pnpm run test
92+
fi
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# Publicly credit Sauce Labs because they generously support open source
2+
# projects.
3+
name: Frontend Tests
4+
5+
on:
6+
workflow_call:
7+
8+
jobs:
9+
test-frontend:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
-
14+
name: Check out Etherpad core
15+
uses: actions/checkout@v3
16+
with:
17+
repository: ether/etherpad-lite
18+
- uses: pnpm/action-setup@v3
19+
name: Install pnpm
20+
with:
21+
version: 8
22+
run_install: false
23+
- name: Get pnpm store directory
24+
shell: bash
25+
run: |
26+
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
27+
- uses: actions/cache@v4
28+
name: Setup pnpm cache
29+
with:
30+
path: ${{ env.STORE_PATH }}
31+
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
32+
restore-keys: |
33+
${{ runner.os }}-pnpm-store-
34+
-
35+
name: Check out the plugin
36+
uses: actions/checkout@v3
37+
with:
38+
path: ./node_modules/__tmp
39+
-
40+
name: export GIT_HASH to env
41+
id: environment
42+
run: |
43+
cd ./node_modules/__tmp
44+
echo "::set-output name=sha_short::$(git rev-parse --short ${{ github.sha }})"
45+
-
46+
name: Determine plugin name
47+
id: plugin_name
48+
run: |
49+
cd ./node_modules/__tmp
50+
npx -c 'printf %s\\n "::set-output name=plugin_name::${npm_package_name}"'
51+
-
52+
name: Rename plugin directory
53+
env:
54+
PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }}
55+
run: |
56+
mv ./node_modules/__tmp ./node_modules/"${PLUGIN_NAME}"
57+
-
58+
name: Install plugin dependencies
59+
env:
60+
PLUGIN_NAME: ${{ steps.plugin_name.outputs.plugin_name }}
61+
run: |
62+
cd ./node_modules/"${PLUGIN_NAME}"
63+
pnpm i
64+
# Etherpad core dependencies must be installed after installing the
65+
# plugin's dependencies, otherwise npm will try to hoist common
66+
# dependencies by removing them from src/node_modules and installing them
67+
# in the top-level node_modules. As of v6.14.10, npm's hoist logic appears
68+
# to be buggy, because it sometimes removes dependencies from
69+
# src/node_modules but fails to add them to the top-level node_modules.
70+
# Even if npm correctly hoists the dependencies, the hoisting seems to
71+
# confuse tools such as `npm outdated`, `npm update`, and some ESLint
72+
# rules.
73+
-
74+
name: Install Etherpad core dependencies
75+
run: bin/installDeps.sh
76+
- name: Create settings.json
77+
run: cp ./src/tests/settings.json settings.json
78+
- name: Run the frontend tests
79+
shell: bash
80+
run: |
81+
pnpm run dev &
82+
connected=false
83+
can_connect() {
84+
curl -sSfo /dev/null http://localhost:9001/ || return 1
85+
connected=true
86+
}
87+
now() { date +%s; }
88+
start=$(now)
89+
while [ $(($(now) - $start)) -le 15 ] && ! can_connect; do
90+
sleep 1
91+
done
92+
cd src
93+
pnpm exec playwright install chromium --with-deps
94+
pnpm run test-ui --project=chromium

.github/workflows/npmpublish.yml

Lines changed: 48 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -4,67 +4,55 @@
44
name: Node.js Package
55

66
on:
7-
pull_request:
8-
push:
9-
branches:
10-
- main
11-
- master
7+
workflow_call:
128

139
jobs:
14-
test:
10+
publish-npm:
1511
runs-on: ubuntu-latest
1612
steps:
17-
# Clone ether/etherpad-lite to ../etherpad-lite so that ep_etherpad-lite
18-
# can be "installed" in this plugin's node_modules. The checkout v2 action
19-
# doesn't support cloning outside of $GITHUB_WORKSPACE (see
20-
# https://github.com/actions/checkout/issues/197), so the repo is first
21-
# cloned to etherpad-lite then moved to ../etherpad-lite. To avoid
22-
# conflicts with this plugin's clone, etherpad-lite must be cloned and
23-
# moved out before this plugin's repo is cloned to $GITHUB_WORKSPACE.
24-
- uses: actions/checkout@v2
13+
- uses: actions/setup-node@v4
14+
with:
15+
node-version: 20
16+
registry-url: https://registry.npmjs.org/
17+
- name: Check out Etherpad core
18+
uses: actions/checkout@v3
2519
with:
2620
repository: ether/etherpad-lite
27-
path: etherpad-lite
28-
- run: mv etherpad-lite ..
29-
# etherpad-lite has been moved outside of $GITHUB_WORKSPACE, so it is now
30-
# safe to clone this plugin's repo to $GITHUB_WORKSPACE.
31-
- uses: actions/checkout@v2
32-
- uses: actions/setup-node@v1
21+
- uses: pnpm/action-setup@v3
22+
name: Install pnpm
3323
with:
34-
node-version: 12
35-
# All of ep_etherpad-lite's devDependencies are installed because the
36-
# plugin might do `require('ep_etherpad-lite/node_modules/${devDep}')`.
37-
# Eventually it would be nice to create an ESLint plugin that prohibits
38-
# Etherpad plugins from piggybacking off of ep_etherpad-lite's
39-
# devDependencies. If we had that, we could change this line to only
40-
# install production dependencies.
41-
- run: cd ../etherpad-lite/src && npm ci
42-
- run: npm ci
43-
# This runs some sanity checks and creates a symlink at
44-
# node_modules/ep_etherpad-lite that points to ../../etherpad-lite/src.
45-
# This step must be done after `npm ci` installs the plugin's dependencies
46-
# because npm "helpfully" cleans up such symlinks. :( Installing
47-
# ep_etherpad-lite in the plugin's node_modules prevents lint errors and
48-
# unit test failures if the plugin does `require('ep_etherpad-lite/foo')`.
49-
- run: npm install --no-save ep_etherpad-lite@file:../etherpad-lite/src
50-
- run: npm test
51-
- run: npm run lint
52-
53-
publish-npm:
54-
if: github.event_name == 'push'
55-
needs: test
56-
runs-on: ubuntu-latest
57-
steps:
58-
- uses: actions/checkout@v2
59-
- uses: actions/setup-node@v1
24+
version: 8
25+
run_install: false
26+
- name: Get pnpm store directory
27+
shell: bash
28+
run: |
29+
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
30+
- uses: actions/cache@v4
31+
name: Setup pnpm cache
6032
with:
61-
node-version: 12
62-
registry-url: https://registry.npmjs.org/
63-
- run: git config user.name 'github-actions[bot]'
64-
- run: git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
65-
- run: npm ci
66-
- run: npm version patch
67-
- run: git push --follow-tags
33+
path: ${{ env.STORE_PATH }}
34+
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
35+
restore-keys: |
36+
${{ runner.os }}-pnpm-store-
37+
-
38+
uses: actions/checkout@v3
39+
with:
40+
fetch-depth: 0
41+
-
42+
name: Bump version (patch)
43+
run: |
44+
LATEST_TAG=$(git describe --tags --abbrev=0) || exit 1
45+
NEW_COMMITS=$(git rev-list --count "${LATEST_TAG}"..) || exit 1
46+
[ "${NEW_COMMITS}" -gt 0 ] || exit 0
47+
git config user.name 'github-actions[bot]'
48+
git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
49+
pnpm i
50+
pnpm version patch
51+
git push --follow-tags
52+
# This is required if the package has a prepare script that uses something
53+
# in dependencies or devDependencies.
54+
-
55+
run: pnpm i
6856
# `npm publish` must come after `git push` otherwise there is a race
6957
# condition: If two PRs are merged back-to-back then master/main will be
7058
# updated with the commits from the second PR before the first PR's
@@ -75,9 +63,12 @@ jobs:
7563
# already-used version number. By running `npm publish` after `git push`,
7664
# back-to-back merges will cause the first merge's workflow to fail but
7765
# the second's will succeed.
78-
- run: npm publish
66+
-
67+
run: pnpm publish
7968
env:
8069
NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
81-
82-
##ETHERPAD_NPM_V=2
83-
## NPM configuration automatically created using bin/plugins/updateAllPluginsScript.sh
70+
#-
71+
# name: Add package to etherpad organization
72+
# run: pnpm access grant read-write etherpad:developers
73+
# env:
74+
# NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name: Node.js Package
2+
on: [push]
3+
4+
5+
jobs:
6+
backend:
7+
uses: ./.github/workflows/backend-tests.yml
8+
secrets: inherit
9+
frontend:
10+
uses: ./.github/workflows/frontend-tests.yml
11+
secrets: inherit
12+
release:
13+
if: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main' }}
14+
needs:
15+
- backend
16+
- frontend
17+
uses: ./.github/workflows/npmpublish.yml
18+
secrets: inherit

0 commit comments

Comments
 (0)