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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions .claude/skills/fix/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,26 @@
---
name: fix
description: Auto-fix all lint, formatting, and copyright header issues across the workspace. Use when validation (`/verify`) fails or when explicitly requested.
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.
---

Run the full auto-fix suite for this project from the repository root:
Run the auto-fix and validation suite for the GLSP Playwright monorepo from the repository root.

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.

```bash
pnpm build
```

2. Auto-fix lint, formatting, and copyright headers. Run all three even if an earlier one reports remaining problems (they are independent):

```bash
yarn fix:all
pnpm lint:fix
pnpm format
pnpm headers:fix
```

After fixing, report what changed. If any issues remain that couldn't be auto-fixed, list them and suggest manual fixes.
Then:

- If `pnpm build` failed, fix the compile errors and re-run this skill.
- If `pnpm lint:fix` reported lint errors it could not fix, address them manually and re-run this skill.
- Otherwise everything is clean (compile succeeds, formatting and headers are corrected in place, lint has no remaining errors) — report completion.
41 changes: 30 additions & 11 deletions .claude/skills/generate-changelog/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ description: Generate changelog entries from merged PRs since the last release.
Generate changelog entries by analyzing merged PRs since the last release.

Execute these phases in order:

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

Run:

```bash
git tag --sort=-creatordate | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -1
```

Record as `LAST_TAG`. Get the tag's date:

```bash
git log -1 --format=%aI $LAST_TAG
```
Expand All @@ -46,12 +49,13 @@ Use the date portion only from `TAG_DATE` (e.g. `2026-02-09`).
### Step 1.4: Filter PRs

**Skip rules** (in order):

1. PR has the `changelog` label → skip (already tracked in a previous changelog update)
2. Author login is `dependabot` or `dependabot[bot]` → skip
3. Title matches version bump patterns → skip:
- Starts with `Switch to` and contains `-next`
- Title is a bare version like `vX.Y.Z`
- Title starts with `Release v`
- Starts with `Switch to` and contains `-next`
- Title is a bare version like `vX.Y.Z`
- Title starts with `Release v`
4. Title contains `update changelog` (case insensitive) → skip
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

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

### Step 1.6: Assign category tags

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

**Normal changes:**

```
- [tag] Description [#N](https://github.com/eclipse-glsp/glsp-playwright/pull/N)
```

**Breaking changes** with migration sub-items:

```
- [tag] Description [#N](https://github.com/eclipse-glsp/glsp-playwright/pull/N)
- Migration detail 1
- Migration detail 2
```

**Multiple PRs for the same change:**

```
- [tag] Description [#N](url) [#M](url)
```

#### Style Guide

**Formatting:**

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

**Wording:**

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

**Capitalization:**

- Tags are always lowercase: `[diagram]`, not `[Diagram]`
- Description starts lowercase after the tag (unless proper noun or code element)
- Section headers: Title Case (`### Potentially Breaking Changes`)

**Description cleanup from PR title:**

- Remove issue tracker prefixes (e.g. `GLSP-1234:`, `GH-123:`, `ISSUE-456:`)
- Remove conventional commit prefixes: `fix:`, `feat:`, `chore:`
- Rephrase bug-report style to changelog style:
- BAD: "Edit label UI does not resize on graph zoom"
- GOOD: "Fix edit label UI not resizing on graph zoom"
- BAD: "Edit label UI does not resize on graph zoom"
- GOOD: "Fix edit label UI not resizing on graph zoom"
- Keep concise — one line

**Breaking changes:**

- Describe what changed, why it's breaking, and how to migrate
- Extract migration sub-items from the PR body's "What it does" section

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

**Active section detection:**

- An active section has the `- active` suffix (e.g. `## v2.7.0 - active`)
- If an active section exists → merge new entries into it
- If the topmost section is a released version (no `- active` suffix) → create a new active section above it

**Creating a new section:**

- Bump the minor version of `LAST_TAG` (e.g. `v2.6.0` → `v2.7.0`)
- Insert after the title line, before the first `## ` heading:

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

### Changes

- [tag] Entry [#N](url)
- [tag] Entry [#N](url)

### Potentially Breaking Changes

- [tag] Entry [#N](url)
- Sub-item detail
- [tag] Entry [#N](url)
- Sub-item detail
```

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

**Merging into existing active section:**

- Check PR numbers against existing entries to avoid duplicates
- Append new entries to the appropriate subsection
- Create missing subsections as needed
Expand All @@ -185,6 +200,7 @@ Present the diff to the user.
List any entries flagged as uncertain (category or breaking status) and ask the user to resolve them.

Even if nothing is uncertain, ask:

> "Does everything look correct, or would you like to adjust any entries?"

### Step 3.3: Collect user feedback
Expand All @@ -200,11 +216,13 @@ Even if nothing is uncertain, ask:
## Phase 4: PR Creation (Optional)

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:

> "Would you like me to create a PR for this changelog update, or are you done?"

### Step 4.1: Determine the branch name

Check if `changelog-update` exists on remote:

```bash
git ls-remote --heads origin changelog-update
```
Expand All @@ -229,6 +247,7 @@ Report the PR URL.
### Step 4.4: Label referenced PRs

Add the `changelog` label to every PR mentioned in the new entries:

```bash
gh pr edit PR_NUMBER --add-label "changelog"
```
Expand Down
16 changes: 8 additions & 8 deletions .claude/skills/test/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ If `$ARGUMENTS` contains a specific test name pattern, run tests filtered by tha
Always run the setup script unless the user explicitly says to skip it:

```bash
yarn repo:setup
pnpm repo:setup
```

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

```bash
yarn
pnpm build
```

### 3. Run Tests

Run the appropriate test command:

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

### 4. Report Failures

Expand Down
16 changes: 0 additions & 16 deletions .claude/skills/verify/SKILL.md

This file was deleted.

4 changes: 2 additions & 2 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@ to learn how to report vulnerabilities.

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

- [ ] This PR should be mentioned in the changelog
- [ ] This PR introduces a breaking change (if yes, provide more details below for the changelog and the migration guide)
- [ ] This PR should be mentioned in the changelog
- [ ] This PR introduces a breaking change (if yes, provide more details below for the changelog and the migration guide)
40 changes: 19 additions & 21 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,33 +24,27 @@ jobs:
timeout-minutes: 60
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 22.x
- name: Install dependencies
run: yarn install
- name: Check for uncommitted changes in yarn.lock
run: |
if git diff --name-only | grep -q "^yarn.lock"; then
echo "::error::The yarn.lock file has uncommitted changes!"
exit 1
fi
cache: pnpm
- name: Build
run: pnpm build
lint:
name: Lint
timeout-minutes: 60
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 22.x
- name: Install
run: |
yarn install --ignore-scripts
yarn compile
cache: pnpm
- name: Create eslint json report
run: |
yarn lint:ci
pnpm lint:ci
continue-on-error: true
- name: Create summary
run: |
Expand All @@ -67,18 +61,20 @@ jobs:
integration: [standalone, theia, vscode]
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '22'
- name: Install dependencies
run: yarn install
cache: pnpm
- name: Build
run: pnpm build
- name: Prepare repos
run: yarn repo:setup --${{ matrix.integration }}
run: pnpm repo:setup --${{ matrix.integration }}
env:
GH_TOKEN: ${{ github.token }}
- name: Run Playwright tests
id: run_playwright_tests
run: xvfb-run -a yarn test
run: xvfb-run -a pnpm test
- name: Upload Playwright report
if: ${{ always() }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
Expand All @@ -96,23 +92,25 @@ jobs:
integration: [standalone, theia, vscode]
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '22'
cache: pnpm
- name: Set up JDK
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: 'temurin'
java-version: '21'
- name: Install dependencies
run: yarn install
- name: Build
run: pnpm build
- name: Prepare repos
run: yarn repo:setup --${{ matrix.integration }} --java
run: pnpm repo:setup --${{ matrix.integration }} --java
env:
GH_TOKEN: ${{ github.token }}
- name: Run Playwright tests
id: run_playwright_tests
run: xvfb-run -a yarn test
run: xvfb-run -a pnpm test
- name: Upload Playwright report
if: ${{ always() }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
Expand Down
12 changes: 7 additions & 5 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,24 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: '22'
- name: Install dependencies
run: yarn install
cache: pnpm
- name: Build
run: pnpm build
- name: Prepare repos
run: yarn repo:setup
run: pnpm repo:setup
env:
GH_TOKEN: ${{ github.token }}
- name: Run Playwright tests
id: run_playwright_tests
run: |
if [ ${{ matrix.os }} == 'ubuntu-latest' ]; then
xvfb-run -a yarn test
xvfb-run -a pnpm test
else
yarn test
pnpm test
fi
- name: Upload Playwright report
if: ${{ always() }}
Expand Down
Loading