Skip to content

Commit c2d706d

Browse files
committed
GLSP-1636: Migrate to pnpm
- Migrate package manager from yarn + lerna to pnpm, using built-in workspace management and the workspace:* protocol for intra-repo deps - Replace lerna publish with the glsp releng publish command - Add pnpm-workspace.yaml: public-hoist dev tooling, gate third-party deps via minimumReleaseAge, allow Playwright build scripts, and override vulnerable transitive deps (serialize-javascript, js-yaml, diff) flagged by pnpm audit - Declare dependencies that pnpm's strict layout no longer hoists (reflect-metadata, playwright-core, ts-dedent) and scope the reflect-metadata typings to the package that uses them - Update CI workflows to set up and cache pnpm and build explicitly - Consolidate validation into a single /fix skill (drop /verify) and refresh CLAUDE.md, AGENTS.md, and docs accordingly Also: - Pull the latest @eclipse-glsp/* next dependencies - Reformat files picked up by the updated prettier config Part of: eclipse-glsp/glsp#1636
1 parent 9ec1b2b commit c2d706d

38 files changed

Lines changed: 4182 additions & 7065 deletions

.claude/skills/fix/SKILL.md

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,26 @@
11
---
22
name: fix
3-
description: Auto-fix all lint, formatting, and copyright header issues across the workspace. Use when validation (`/verify`) fails or when explicitly requested.
3+
description: Run the fix-and-verify suite for the workspace (compile, auto-fix lint/format/headers). IMPORTANT - Proactively invoke this skill after completing any code changes (new features, bug fixes, refactors) before reporting completion. Re-run it after manually addressing anything it could not auto-fix.
44
---
55

6-
Run the full auto-fix suite for this project from the repository root:
6+
Run the auto-fix and validation suite for the GLSP Playwright monorepo from the repository root.
7+
8+
1. Build first. This is a hard gate: if the build fails, stop immediately, report the build errors, and do not run any of the following steps. The build must pass before anything else runs.
9+
10+
```bash
11+
pnpm build
12+
```
13+
14+
2. Auto-fix lint, formatting, and copyright headers. Run all three even if an earlier one reports remaining problems (they are independent):
715

816
```bash
9-
yarn fix:all
17+
pnpm lint:fix
18+
pnpm format
19+
pnpm headers:fix
1020
```
1121

12-
After fixing, report what changed. If any issues remain that couldn't be auto-fixed, list them and suggest manual fixes.
22+
Then:
23+
24+
- If `pnpm build` failed, fix the compile errors and re-run this skill.
25+
- If `pnpm lint:fix` reported lint errors it could not fix, address them manually and re-run this skill.
26+
- Otherwise everything is clean (compile succeeds, formatting and headers are corrected in place, lint has no remaining errors) — report completion.

.claude/skills/generate-changelog/SKILL.md

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ description: Generate changelog entries from merged PRs since the last release.
88
Generate changelog entries by analyzing merged PRs since the last release.
99

1010
Execute these phases in order:
11+
1112
1. **Data Gathering** — find last release, fetch PRs, classify, generate entries
1213
2. **Changelog Update** — write entries into CHANGELOG.md
1314
3. **Review & Approval** — present the actual diff to the user for review
@@ -20,11 +21,13 @@ Execute these phases in order:
2021
### Step 1.1: Find the latest release tag
2122

2223
Run:
24+
2325
```bash
2426
git tag --sort=-creatordate | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -1
2527
```
2628

2729
Record as `LAST_TAG`. Get the tag's date:
30+
2831
```bash
2932
git log -1 --format=%aI $LAST_TAG
3033
```
@@ -46,12 +49,13 @@ Use the date portion only from `TAG_DATE` (e.g. `2026-02-09`).
4649
### Step 1.4: Filter PRs
4750

4851
**Skip rules** (in order):
52+
4953
1. PR has the `changelog` label → skip (already tracked in a previous changelog update)
5054
2. Author login is `dependabot` or `dependabot[bot]` → skip
5155
3. Title matches version bump patterns → skip:
52-
- Starts with `Switch to` and contains `-next`
53-
- Title is a bare version like `vX.Y.Z`
54-
- Title starts with `Release v`
56+
- Starts with `Switch to` and contains `-next`
57+
- Title is a bare version like `vX.Y.Z`
58+
- Title starts with `Release v`
5559
4. Title contains `update changelog` (case insensitive) → skip
5660
5. Title is purely CI/metadata (readme badges, workflow config) AND body does NOT contain `[x] This PR should be mentioned in the changelog` → skip
5761

@@ -62,9 +66,9 @@ Use the date portion only from `TAG_DATE` (e.g. `2026-02-09`).
6266
1. If body contains `[x] This PR introduces a breaking change`**breaking**
6367
2. If body contains `[ ] This PR introduces a breaking change`**normal**
6468
3. If no checkbox info, analyze title and body:
65-
- Breaking keywords: "refactor", "rename", "remove", "replace", "migrate", "breaking", "deprecate"
66-
- Clearly non-breaking (bug fix, docs, minor enhancement) → **normal**
67-
- Uncertain → flag for user review
69+
- Breaking keywords: "refactor", "rename", "remove", "replace", "migrate", "breaking", "deprecate"
70+
- Clearly non-breaking (bug fix, docs, minor enhancement) → **normal**
71+
- Uncertain → flag for user review
6872

6973
### Step 1.6: Assign category tags
7074

@@ -75,25 +79,29 @@ Pick the most fitting tag from the vocabulary (Step 1.2) based on PR title and b
7579
#### Entry Format
7680

7781
**Normal changes:**
82+
7883
```
7984
- [tag] Description [#N](https://github.com/eclipse-glsp/glsp-playwright/pull/N)
8085
```
8186

8287
**Breaking changes** with migration sub-items:
88+
8389
```
8490
- [tag] Description [#N](https://github.com/eclipse-glsp/glsp-playwright/pull/N)
8591
- Migration detail 1
8692
- Migration detail 2
8793
```
8894

8995
**Multiple PRs for the same change:**
96+
9097
```
9198
- [tag] Description [#N](url) [#M](url)
9299
```
93100

94101
#### Style Guide
95102

96103
**Formatting:**
104+
97105
- Entry prefix: `- ` (dash + exactly 3 spaces)
98106
- Sub-item indent: 4 spaces + `- ` (4 spaces from parent dash)
99107
- Sub-sub-item indent: 8 spaces + `- `
@@ -102,6 +110,7 @@ Pick the most fitting tag from the vocabulary (Step 1.2) based on PR title and b
102110
- PR links are mandatory, full URLs: `[#123](https://github.com/eclipse-glsp/glsp-playwright/pull/123)`
103111

104112
**Wording:**
113+
105114
- Always start with a **present tense imperative verb** (not past tense)
106115
- Common verbs: Fix, Improve, Add, Update, Extend, Ensure, Introduce, Remove, Refactor, Rename, Provide, Allow, Support
107116
- **Bug fixes**: "Fix a bug that caused/prevented...", "Fix X behavior"
@@ -111,19 +120,22 @@ Pick the most fitting tag from the vocabulary (Step 1.2) based on PR title and b
111120
- Be specific — never "Fix various issues"
112121

113122
**Capitalization:**
123+
114124
- Tags are always lowercase: `[diagram]`, not `[Diagram]`
115125
- Description starts lowercase after the tag (unless proper noun or code element)
116126
- Section headers: Title Case (`### Potentially Breaking Changes`)
117127

118128
**Description cleanup from PR title:**
129+
119130
- Remove issue tracker prefixes (e.g. `GLSP-1234:`, `GH-123:`, `ISSUE-456:`)
120131
- Remove conventional commit prefixes: `fix:`, `feat:`, `chore:`
121132
- Rephrase bug-report style to changelog style:
122-
- BAD: "Edit label UI does not resize on graph zoom"
123-
- GOOD: "Fix edit label UI not resizing on graph zoom"
133+
- BAD: "Edit label UI does not resize on graph zoom"
134+
- GOOD: "Fix edit label UI not resizing on graph zoom"
124135
- Keep concise — one line
125136

126137
**Breaking changes:**
138+
127139
- Describe what changed, why it's breaking, and how to migrate
128140
- Extract migration sub-items from the PR body's "What it does" section
129141

@@ -136,11 +148,13 @@ Pick the most fitting tag from the vocabulary (Step 1.2) based on PR title and b
136148
Read `CHANGELOG.md` in the repository root.
137149

138150
**Active section detection:**
151+
139152
- An active section has the `- active` suffix (e.g. `## v2.7.0 - active`)
140153
- If an active section exists → merge new entries into it
141154
- If the topmost section is a released version (no `- active` suffix) → create a new active section above it
142155

143156
**Creating a new section:**
157+
144158
- Bump the minor version of `LAST_TAG` (e.g. `v2.6.0``v2.7.0`)
145159
- Insert after the title line, before the first `## ` heading:
146160

@@ -149,17 +163,18 @@ Read `CHANGELOG.md` in the repository root.
149163

150164
### Changes
151165

152-
- [tag] Entry [#N](url)
166+
- [tag] Entry [#N](url)
153167

154168
### Potentially Breaking Changes
155169

156-
- [tag] Entry [#N](url)
157-
- Sub-item detail
170+
- [tag] Entry [#N](url)
171+
- Sub-item detail
158172
```
159173

160174
Only include "Potentially Breaking Changes" if there are breaking entries.
161175

162176
**Merging into existing active section:**
177+
163178
- Check PR numbers against existing entries to avoid duplicates
164179
- Append new entries to the appropriate subsection
165180
- Create missing subsections as needed
@@ -185,6 +200,7 @@ Present the diff to the user.
185200
List any entries flagged as uncertain (category or breaking status) and ask the user to resolve them.
186201

187202
Even if nothing is uncertain, ask:
203+
188204
> "Does everything look correct, or would you like to adjust any entries?"
189205
190206
### Step 3.3: Collect user feedback
@@ -200,11 +216,13 @@ Even if nothing is uncertain, ask:
200216
## Phase 4: PR Creation (Optional)
201217

202218
Only execute this phase if the user explicitly requests a PR (either in their initial prompt or after reviewing the changelog). If the user hasn't mentioned a PR, ask after approval:
219+
203220
> "Would you like me to create a PR for this changelog update, or are you done?"
204221
205222
### Step 4.1: Determine the branch name
206223

207224
Check if `changelog-update` exists on remote:
225+
208226
```bash
209227
git ls-remote --heads origin changelog-update
210228
```
@@ -229,6 +247,7 @@ Report the PR URL.
229247
### Step 4.4: Label referenced PRs
230248

231249
Add the `changelog` label to every PR mentioned in the new entries:
250+
232251
```bash
233252
gh pr edit PR_NUMBER --add-label "changelog"
234253
```

.claude/skills/test/SKILL.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ If `$ARGUMENTS` contains a specific test name pattern, run tests filtered by tha
1717
Always run the setup script unless the user explicitly says to skip it:
1818

1919
```bash
20-
yarn repo:setup
20+
pnpm repo:setup
2121
```
2222

2323
This will clone and build the required GLSP repositories and generate the `.env` file from `.env.example`.
@@ -27,19 +27,19 @@ This will clone and build the required GLSP repositories and generate the `.env`
2727
Ensure the project is compiled:
2828

2929
```bash
30-
yarn
30+
pnpm build
3131
```
3232

3333
### 3. Run Tests
3434

3535
Run the appropriate test command:
3636

37-
- **all** (default, no argument): `yarn test` (runs all integrations)
38-
- **standalone**: `yarn test:standalone`
39-
- **standalone-browser**: `yarn test:standalone-browser`
40-
- **theia**: `yarn test:theia`
41-
- **vscode**: `yarn test:vscode`
42-
- **pattern match**: If `$ARGUMENTS` contains a specific test name pattern, run: `cd examples/workflow-test && yarn playwright test -g "$ARGUMENTS"`
37+
- **all** (default, no argument): `pnpm test` (runs all integrations)
38+
- **standalone**: `pnpm test:standalone`
39+
- **standalone-browser**: `pnpm test:standalone-browser`
40+
- **theia**: `pnpm test:theia`
41+
- **vscode**: `pnpm test:vscode`
42+
- **pattern match**: If `$ARGUMENTS` contains a specific test name pattern, run: `cd examples/workflow-test && pnpm playwright test -g "$ARGUMENTS"`
4343

4444
### 4. Report Failures
4545

.claude/skills/verify/SKILL.md

Lines changed: 0 additions & 16 deletions
This file was deleted.

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,5 @@ to learn how to report vulnerabilities.
2525

2626
<!-- Please check, when if it applies to your change. -->
2727

28-
- [ ] This PR should be mentioned in the changelog
29-
- [ ] This PR introduces a breaking change (if yes, provide more details below for the changelog and the migration guide)
28+
- [ ] This PR should be mentioned in the changelog
29+
- [ ] This PR introduces a breaking change (if yes, provide more details below for the changelog and the migration guide)

.github/workflows/ci.yml

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -24,33 +24,27 @@ jobs:
2424
timeout-minutes: 60
2525
steps:
2626
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
27+
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
2728
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
2829
with:
2930
node-version: 22.x
30-
- name: Install dependencies
31-
run: yarn install
32-
- name: Check for uncommitted changes in yarn.lock
33-
run: |
34-
if git diff --name-only | grep -q "^yarn.lock"; then
35-
echo "::error::The yarn.lock file has uncommitted changes!"
36-
exit 1
37-
fi
31+
cache: pnpm
32+
- name: Build
33+
run: pnpm build
3834
lint:
3935
name: Lint
4036
timeout-minutes: 60
4137
runs-on: ubuntu-22.04
4238
steps:
4339
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
40+
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
4441
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
4542
with:
4643
node-version: 22.x
47-
- name: Install
48-
run: |
49-
yarn install --ignore-scripts
50-
yarn compile
44+
cache: pnpm
5145
- name: Create eslint json report
5246
run: |
53-
yarn lint:ci
47+
pnpm lint:ci
5448
continue-on-error: true
5549
- name: Create summary
5650
run: |
@@ -67,18 +61,20 @@ jobs:
6761
integration: [standalone, theia, vscode]
6862
steps:
6963
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
64+
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
7065
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
7166
with:
7267
node-version: '22'
73-
- name: Install dependencies
74-
run: yarn install
68+
cache: pnpm
69+
- name: Build
70+
run: pnpm build
7571
- name: Prepare repos
76-
run: yarn repo:setup --${{ matrix.integration }}
72+
run: pnpm repo:setup --${{ matrix.integration }}
7773
env:
7874
GH_TOKEN: ${{ github.token }}
7975
- name: Run Playwright tests
8076
id: run_playwright_tests
81-
run: xvfb-run -a yarn test
77+
run: xvfb-run -a pnpm test
8278
- name: Upload Playwright report
8379
if: ${{ always() }}
8480
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
@@ -96,23 +92,25 @@ jobs:
9692
integration: [standalone, theia, vscode]
9793
steps:
9894
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
95+
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
9996
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
10097
with:
10198
node-version: '22'
99+
cache: pnpm
102100
- name: Set up JDK
103101
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
104102
with:
105103
distribution: 'temurin'
106104
java-version: '21'
107-
- name: Install dependencies
108-
run: yarn install
105+
- name: Build
106+
run: pnpm build
109107
- name: Prepare repos
110-
run: yarn repo:setup --${{ matrix.integration }} --java
108+
run: pnpm repo:setup --${{ matrix.integration }} --java
111109
env:
112110
GH_TOKEN: ${{ github.token }}
113111
- name: Run Playwright tests
114112
id: run_playwright_tests
115-
run: xvfb-run -a yarn test
113+
run: xvfb-run -a pnpm test
116114
- name: Upload Playwright report
117115
if: ${{ always() }}
118116
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1

.github/workflows/e2e.yml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,24 @@ jobs:
2020
runs-on: ${{ matrix.os }}
2121
steps:
2222
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
23+
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
2324
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
2425
with:
2526
node-version: '22'
26-
- name: Install dependencies
27-
run: yarn install
27+
cache: pnpm
28+
- name: Build
29+
run: pnpm build
2830
- name: Prepare repos
29-
run: yarn repo:setup
31+
run: pnpm repo:setup
3032
env:
3133
GH_TOKEN: ${{ github.token }}
3234
- name: Run Playwright tests
3335
id: run_playwright_tests
3436
run: |
3537
if [ ${{ matrix.os }} == 'ubuntu-latest' ]; then
36-
xvfb-run -a yarn test
38+
xvfb-run -a pnpm test
3739
else
38-
yarn test
40+
pnpm test
3941
fi
4042
- name: Upload Playwright report
4143
if: ${{ always() }}

0 commit comments

Comments
 (0)