|
| 1 | +# Playwright: udržet obě závislosti na stejné verzi |
| 2 | + |
| 3 | +**Cíl:** obnova locku (Renovate `lockFileMaintenance`) už nikdy nesmí rozejít |
| 4 | +verze `playwright` a `@playwright/test`. Rozjezd shodí celý smoke tier. |
| 5 | + |
| 6 | +## Mechanismus poruchy |
| 7 | + |
| 8 | +`package.json` deklaruje Playwright dvakrát a s jinou strategií: |
| 9 | + |
| 10 | +- `dependencies.playwright: "^1.59.1"`: runtime závislost publikovaného balíčku, |
| 11 | + používá ji `src/scripts/export-pdf.ts`. Rozsah je pro knihovnu správný, protože |
| 12 | + konzumenti si mají verzi dedupovat sami. |
| 13 | +- `devDependencies["@playwright/test"]`: Renovate ji přes `config:best-practices` |
| 14 | + (a v něm `:pinDevDependencies`) drží připíchnutou na přesné verzi. |
| 15 | + |
| 16 | +`@playwright/test@X` závisí na `playwright@X` přesně. Obnova locku sahá jen na |
| 17 | +lock, ne na `package.json`: `playwright` proto vyplave na nejnovější 1.x, zatímco |
| 18 | +připíchnutý `@playwright/test` zůstane, kde byl. pnpm pak drží dvě kopie |
| 19 | +Playwrightu a runner odmítne posbírat testy s hlášením |
| 20 | +`two different versions of @playwright/test`. |
| 21 | + |
| 22 | +Takhle padl PR #40 (lock file maintenance): lock vyplaval `playwright` na 1.62.1 |
| 23 | +proti připíchnutému `@playwright/test` 1.60.0. Merge PR #39 to vyřešil jen shodou |
| 24 | +okolností, protože zvedl pin na 1.62.1. Příští obnova locku by chybu vyrobila |
| 25 | +znovu. |
| 26 | + |
| 27 | +## Zvažované varianty |
| 28 | + |
| 29 | +| varianta | zabrání rozjezdu při obnově locku? | poznámka | |
| 30 | +| ----------------------------------------------------------------- | ---------------------------------- | --------------------------------------------------------------------------------------------- | |
| 31 | +| seskupit obě závislosti do jednoho PR | ne | obnova locku rozsahy obnovuje bez ohledu na seskupení; pomůže jen u běžných update PR | |
| 32 | +| `@playwright/test` na rozsah `^`, výjimka z pinování devDeps | **ano** | obě závislosti pak plavou na stejnou nejnovější 1.x, protože Playwright je vydává v lockstepu | |
| 33 | +| `pnpm.overrides` vynucující `playwright` podle `@playwright/test` | ano | funguje, ale přidává další mechanismus a musí se držet v synchronu; těžší než potřeba | |
| 34 | +| připíchnout runtime `playwright` přesně | ano | pro publikovanou knihovnu nevhodné: svazuje verzi konzumentům | |
| 35 | +| nechat být a opravovat ručně | ne | opakuje se každou obnovu locku, tedy potenciálně každý týden | |
| 36 | + |
| 37 | +## Zvolené řešení |
| 38 | + |
| 39 | +1. `package.json`: `@playwright/test` z `1.62.1` na `^1.62.1`. |
| 40 | +2. `renovate.json`: packageRule s `rangeStrategy: "replace"` pro |
| 41 | + `@playwright/test`, aby ho `:pinDevDependencies` nepřipíchlo zpátky. Popis |
| 42 | + pravidla nese důvod, protože jinak to vypadá jako odchylka od konvence repa. |
| 43 | +3. `renovate.json`: druhé pravidlo seskupuje `playwright` a `@playwright/test` |
| 44 | + pro **major** update do jednoho PR. Non-major už drží pohromadě |
| 45 | + `group:allNonMajor`; u majoru by ale sloučení jednoho bez druhého rozjezd |
| 46 | + vyrobilo znovu. |
| 47 | +4. `docs/TESTING.md`: odstavec u smoke tieru, aby někdo pin nevrátil zpátky. |
| 48 | + |
| 49 | +Lock se přegeneruje `pnpm install` (mění se jen specifikátor u importera). |
| 50 | + |
| 51 | +## Ověření |
| 52 | + |
| 53 | +- `pnpm ls playwright @playwright/test` ukáže jedinou verzi obou. |
| 54 | +- Simulace obnovy locku (smazat `pnpm-lock.yaml`, `pnpm install`) skončí opět |
| 55 | + s jedinou verzí, což je vlastní test opravy. |
| 56 | +- `pnpm test:smoke` projde. |
| 57 | + |
| 58 | +## Mimo rozsah |
| 59 | + |
| 60 | +Zbytek `renovate.json` se nemění. Redundantní `security:minimumReleaseAgeNpm` |
| 61 | +a vlastní blok `lockFileMaintenance` (obojí už přichází z |
| 62 | +`config:best-practices`) zůstávají, jak jsou; je to samostatné téma. |
0 commit comments