stably 4.9.0 → 4.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/index.mjs +1 -1
  2. package/dist/stably-plugin-cli/.claude-plugin/plugin.json +5 -0
  3. package/dist/stably-plugin-cli/skills/bash-commands/SKILL.md +65 -0
  4. package/dist/stably-plugin-cli/skills/browser-interaction-guide/SKILL.md +144 -0
  5. package/dist/stably-plugin-cli/skills/bulk-test-handling/SKILL.md +104 -0
  6. package/dist/stably-plugin-cli/skills/debugging-test-failures/SKILL.md +146 -0
  7. package/dist/{stably-plugin → stably-plugin-cli}/skills/playwright-best-practices/SKILL.md +11 -5
  8. package/dist/stably-plugin-cli/skills/playwright-config-auth/SKILL.md +217 -0
  9. package/dist/stably-plugin-cli/skills/stably-sdk-reference/SKILL.md +307 -0
  10. package/dist/stably-plugin-cli/skills/test-creation-workflow/SKILL.md +311 -0
  11. package/package.json +2 -2
  12. package/dist/stably-plugin/.claude-plugin/plugin.json +0 -5
  13. package/dist/stably-plugin/skills/playwright-best-practices/references/accessibility.md +0 -359
  14. package/dist/stably-plugin/skills/playwright-best-practices/references/annotations.md +0 -526
  15. package/dist/stably-plugin/skills/playwright-best-practices/references/assertions-waiting.md +0 -361
  16. package/dist/stably-plugin/skills/playwright-best-practices/references/browser-apis.md +0 -391
  17. package/dist/stably-plugin/skills/playwright-best-practices/references/browser-extensions.md +0 -506
  18. package/dist/stably-plugin/skills/playwright-best-practices/references/canvas-webgl.md +0 -493
  19. package/dist/stably-plugin/skills/playwright-best-practices/references/ci-cd.md +0 -407
  20. package/dist/stably-plugin/skills/playwright-best-practices/references/clock-mocking.md +0 -364
  21. package/dist/stably-plugin/skills/playwright-best-practices/references/component-testing.md +0 -500
  22. package/dist/stably-plugin/skills/playwright-best-practices/references/console-errors.md +0 -420
  23. package/dist/stably-plugin/skills/playwright-best-practices/references/debugging.md +0 -491
  24. package/dist/stably-plugin/skills/playwright-best-practices/references/electron.md +0 -509
  25. package/dist/stably-plugin/skills/playwright-best-practices/references/error-testing.md +0 -360
  26. package/dist/stably-plugin/skills/playwright-best-practices/references/file-operations.md +0 -375
  27. package/dist/stably-plugin/skills/playwright-best-practices/references/fixtures-hooks.md +0 -417
  28. package/dist/stably-plugin/skills/playwright-best-practices/references/flaky-tests.md +0 -494
  29. package/dist/stably-plugin/skills/playwright-best-practices/references/global-setup.md +0 -434
  30. package/dist/stably-plugin/skills/playwright-best-practices/references/i18n.md +0 -508
  31. package/dist/stably-plugin/skills/playwright-best-practices/references/iframes.md +0 -403
  32. package/dist/stably-plugin/skills/playwright-best-practices/references/locators.md +0 -242
  33. package/dist/stably-plugin/skills/playwright-best-practices/references/mobile-testing.md +0 -409
  34. package/dist/stably-plugin/skills/playwright-best-practices/references/multi-context.md +0 -288
  35. package/dist/stably-plugin/skills/playwright-best-practices/references/multi-user.md +0 -393
  36. package/dist/stably-plugin/skills/playwright-best-practices/references/network-advanced.md +0 -452
  37. package/dist/stably-plugin/skills/playwright-best-practices/references/page-object-model.md +0 -315
  38. package/dist/stably-plugin/skills/playwright-best-practices/references/performance-testing.md +0 -476
  39. package/dist/stably-plugin/skills/playwright-best-practices/references/performance.md +0 -453
  40. package/dist/stably-plugin/skills/playwright-best-practices/references/projects-dependencies.md +0 -456
  41. package/dist/stably-plugin/skills/playwright-best-practices/references/security-testing.md +0 -430
  42. package/dist/stably-plugin/skills/playwright-best-practices/references/service-workers.md +0 -504
  43. package/dist/stably-plugin/skills/playwright-best-practices/references/test-coverage.md +0 -495
  44. package/dist/stably-plugin/skills/playwright-best-practices/references/test-data.md +0 -492
  45. package/dist/stably-plugin/skills/playwright-best-practices/references/test-organization.md +0 -361
  46. package/dist/stably-plugin/skills/playwright-best-practices/references/third-party.md +0 -464
  47. package/dist/stably-plugin/skills/playwright-best-practices/references/websockets.md +0 -403
@@ -1,407 +0,0 @@
1
- # CI/CD Integration
2
-
3
- ## Table of Contents
4
-
5
- 1. [GitHub Actions](#github-actions)
6
- 2. [Docker](#docker)
7
- 3. [Reporting](#reporting)
8
- 4. [Sharding](#sharding)
9
- 5. [Environment Management](#environment-management)
10
- 6. [Caching](#caching)
11
-
12
- ## GitHub Actions
13
-
14
- ### Basic Workflow
15
-
16
- ```yaml
17
- # .github/workflows/playwright.yml
18
- name: Playwright Tests
19
-
20
- on:
21
- push:
22
- branches: [main]
23
- pull_request:
24
- branches: [main]
25
-
26
- jobs:
27
- test:
28
- timeout-minutes: 60
29
- runs-on: ubuntu-latest
30
- steps:
31
- - uses: actions/checkout@v4
32
-
33
- - uses: actions/setup-node@v4
34
- with:
35
- node-version: 20
36
- cache: "npm"
37
-
38
- - name: Install dependencies
39
- run: npm ci
40
-
41
- - name: Install Playwright browsers
42
- run: npx playwright install --with-deps
43
-
44
- - name: Run Playwright tests
45
- run: npx playwright test
46
-
47
- - uses: actions/upload-artifact@v4
48
- if: ${{ !cancelled() }}
49
- with:
50
- name: playwright-report
51
- path: playwright-report/
52
- retention-days: 30
53
- ```
54
-
55
- ### With Sharding
56
-
57
- ```yaml
58
- name: Playwright Tests
59
-
60
- on:
61
- push:
62
- branches: [main]
63
-
64
- jobs:
65
- test:
66
- timeout-minutes: 60
67
- runs-on: ubuntu-latest
68
- strategy:
69
- fail-fast: false
70
- matrix:
71
- shardIndex: [1, 2, 3, 4]
72
- shardTotal: [4]
73
- steps:
74
- - uses: actions/checkout@v4
75
-
76
- - uses: actions/setup-node@v4
77
- with:
78
- node-version: 20
79
- cache: "npm"
80
-
81
- - name: Install dependencies
82
- run: npm ci
83
-
84
- - name: Install Playwright browsers
85
- run: npx playwright install --with-deps
86
-
87
- - name: Run Playwright tests
88
- run: npx playwright test --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
89
-
90
- - name: Upload blob report
91
- if: ${{ !cancelled() }}
92
- uses: actions/upload-artifact@v4
93
- with:
94
- name: blob-report-${{ matrix.shardIndex }}
95
- path: blob-report
96
- retention-days: 1
97
-
98
- merge-reports:
99
- if: ${{ !cancelled() }}
100
- needs: [test]
101
- runs-on: ubuntu-latest
102
- steps:
103
- - uses: actions/checkout@v4
104
-
105
- - uses: actions/setup-node@v4
106
- with:
107
- node-version: 20
108
- cache: "npm"
109
-
110
- - name: Install dependencies
111
- run: npm ci
112
-
113
- - name: Download blob reports
114
- uses: actions/download-artifact@v4
115
- with:
116
- path: all-blob-reports
117
- pattern: blob-report-*
118
- merge-multiple: true
119
-
120
- - name: Merge reports
121
- run: npx playwright merge-reports --reporter html ./all-blob-reports
122
-
123
- - name: Upload HTML report
124
- uses: actions/upload-artifact@v4
125
- with:
126
- name: html-report
127
- path: playwright-report
128
- retention-days: 14
129
- ```
130
-
131
- ### With Container
132
-
133
- ```yaml
134
- jobs:
135
- test:
136
- timeout-minutes: 60
137
- runs-on: ubuntu-latest
138
- container:
139
- # Use latest or more appropriate playwright version (match package.json)
140
- image: mcr.microsoft.com/playwright:v1.40.0-jammy
141
- steps:
142
- - uses: actions/checkout@v4
143
-
144
- - uses: actions/setup-node@v4
145
- with:
146
- node-version: 20
147
- cache: "npm"
148
-
149
- - name: Install dependencies
150
- run: npm ci
151
-
152
- - name: Run tests
153
- run: npx playwright test
154
- env:
155
- HOME: /root
156
- ```
157
-
158
- ## Docker
159
-
160
- ### Dockerfile
161
-
162
- ```dockerfile
163
- FROM mcr.microsoft.com/playwright:v1.40.0-jammy
164
-
165
- WORKDIR /app
166
-
167
- COPY package*.json ./
168
- RUN npm ci
169
-
170
- COPY . .
171
-
172
- CMD ["npx", "playwright", "test"]
173
- ```
174
-
175
- ### Docker Compose
176
-
177
- ```yaml
178
- # docker-compose.yml
179
- version: "3.8"
180
-
181
- services:
182
- playwright:
183
- build: .
184
- volumes:
185
- - ./playwright-report:/app/playwright-report
186
- - ./test-results:/app/test-results
187
- environment:
188
- - CI=true
189
- - BASE_URL=http://app:3000
190
- depends_on:
191
- - app
192
-
193
- app:
194
- build: ./app
195
- ports:
196
- - "3000:3000"
197
- ```
198
-
199
- ### Run with Docker
200
-
201
- ```bash
202
- # Build and run
203
- docker build -t playwright-tests .
204
- docker run --rm -v $(pwd)/playwright-report:/app/playwright-report playwright-tests
205
-
206
- # With docker-compose
207
- docker-compose run --rm playwright
208
- ```
209
-
210
- ## Reporting
211
-
212
- ### Configuration
213
-
214
- ```typescript
215
- // playwright.config.ts
216
- export default defineConfig({
217
- reporter: [
218
- // Always generate
219
- ["html", { outputFolder: "playwright-report" }],
220
-
221
- // Console output
222
- ["list"],
223
-
224
- // CI-friendly
225
- ["github"], // GitHub Actions annotations
226
-
227
- // JUnit for CI integration
228
- ["junit", { outputFile: "results.xml" }],
229
-
230
- // JSON for custom processing
231
- ["json", { outputFile: "results.json" }],
232
-
233
- // Blob for merging shards
234
- ["blob", { outputDir: "blob-report" }],
235
- ],
236
- });
237
- ```
238
-
239
- ### CI-Specific Reporter
240
-
241
- ```typescript
242
- export default defineConfig({
243
- reporter: process.env.CI
244
- ? [["github"], ["blob"], ["html"]]
245
- : [["list"], ["html"]],
246
- });
247
- ```
248
-
249
- ## Sharding
250
-
251
- ### Command Line
252
-
253
- ```bash
254
- # Split into 4 shards, run shard 1
255
- npx playwright test --shard=1/4
256
-
257
- # Run shard 2
258
- npx playwright test --shard=2/4
259
- ```
260
-
261
- ### Configuration
262
-
263
- ```typescript
264
- // playwright.config.ts
265
- export default defineConfig({
266
- // Evenly distribute tests across shards
267
- fullyParallel: true,
268
-
269
- // For blob reporter to merge later
270
- reporter: process.env.CI ? [["blob"]] : [["html"]],
271
- });
272
- ```
273
-
274
- ### Merge Sharded Reports
275
-
276
- ```bash
277
- # After all shards complete, merge blob reports
278
- npx playwright merge-reports --reporter html ./all-blob-reports
279
- ```
280
-
281
- ## Environment Management
282
-
283
- ### Environment Variables
284
-
285
- ```typescript
286
- // playwright.config.ts
287
- import { defineConfig } from "@playwright/test";
288
- import dotenv from "dotenv";
289
-
290
- // Load env file based on environment
291
- dotenv.config({ path: `.env.${process.env.NODE_ENV || "development"}` });
292
-
293
- export default defineConfig({
294
- use: {
295
- baseURL: process.env.BASE_URL || "http://localhost:3000",
296
- },
297
- });
298
- ```
299
-
300
- ### Multiple Environments
301
-
302
- ```yaml
303
- # .github/workflows/playwright.yml
304
- jobs:
305
- test:
306
- strategy:
307
- matrix:
308
- environment: [staging, production]
309
- steps:
310
- - name: Run tests
311
- run: npx playwright test
312
- env:
313
- BASE_URL: ${{ matrix.environment == 'staging' && 'https://staging.example.com' || 'https://example.com' }}
314
- TEST_USER: ${{ secrets[format('TEST_USER_{0}', matrix.environment)] }}
315
- ```
316
-
317
- ### Secrets Management
318
-
319
- ```yaml
320
- # GitHub Actions secrets
321
- - name: Run tests
322
- run: npx playwright test
323
- env:
324
- TEST_EMAIL: ${{ secrets.TEST_EMAIL }}
325
- TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
326
- ```
327
-
328
- ```typescript
329
- // tests use environment variables
330
- test("login", async ({ page }) => {
331
- await page.getByLabel("Email").fill(process.env.TEST_EMAIL!);
332
- await page.getByLabel("Password").fill(process.env.TEST_PASSWORD!);
333
- });
334
- ```
335
-
336
- ## Caching
337
-
338
- ### Cache Playwright Browsers
339
-
340
- ```yaml
341
- - name: Cache Playwright browsers
342
- uses: actions/cache@v4
343
- id: playwright-cache
344
- with:
345
- path: ~/.cache/ms-playwright
346
- key: playwright-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
347
-
348
- - name: Install Playwright browsers
349
- if: steps.playwright-cache.outputs.cache-hit != 'true'
350
- run: npx playwright install --with-deps
351
-
352
- - name: Install system deps only
353
- if: steps.playwright-cache.outputs.cache-hit == 'true'
354
- run: npx playwright install-deps
355
- ```
356
-
357
- ### Cache Node Modules
358
-
359
- ```yaml
360
- - uses: actions/setup-node@v4
361
- with:
362
- node-version: 20
363
- cache: "npm"
364
-
365
- - name: Install dependencies
366
- run: npm ci
367
- ```
368
-
369
- ## Best Practices
370
-
371
- | Practice | Benefit |
372
- | ----------------------------- | ------------------------- |
373
- | Use `npm ci` | Deterministic installs |
374
- | Run headless in CI | Faster, no display needed |
375
- | Set retries in CI only | Handle flakiness |
376
- | Upload artifacts on failure | Debug failures |
377
- | Use sharding for large suites | Faster execution |
378
- | Cache browsers | Faster setup |
379
- | Use blob reporter for shards | Merge reports correctly |
380
-
381
- ## CI Configuration Reference
382
-
383
- ```typescript
384
- // playwright.config.ts - CI optimized
385
- export default defineConfig({
386
- testDir: "./tests",
387
- fullyParallel: true,
388
- forbidOnly: !!process.env.CI,
389
- retries: process.env.CI ? 2 : 0,
390
- workers: process.env.CI ? 1 : undefined,
391
- reporter: process.env.CI
392
- ? [["github"], ["blob"], ["html"]]
393
- : [["list"], ["html"]],
394
- use: {
395
- baseURL: process.env.BASE_URL || "http://localhost:3000",
396
- trace: "on-first-retry",
397
- screenshot: "only-on-failure",
398
- video: "on-first-retry",
399
- },
400
- });
401
- ```
402
-
403
- ## Related References
404
-
405
- - **Performance optimization**: See [performance.md](performance.md) for sharding and parallelization
406
- - **Debugging CI failures**: See [debugging.md](debugging.md) for troubleshooting
407
- - **Test reporting**: See [debugging.md](debugging.md) for trace viewer usage