Background
On main, tests/browser was migrated to package.json5 with a devEngines.packageManager field, which makes pnpm 11 record the resolved pnpm version under packageManagerDependencies in pnpm-lock.yaml. scripts/get-pnpm-version.sh reads that field via yq.
On rhoai-2.25 (this branch), tests/browser was never migrated: it still ships a plain tests/browser/package.json with the old-style "packageManager": "[email protected]" field, and its lockfile has no packageManagerDependencies.
.github/actions/playwright-test/action.yml's "Determine pnpm version" step already existed on this branch (from an earlier backport) with a legacy grep-based fallback for exactly this old-style field. That fallback stopped being reachable once scripts/get-pnpm-version.sh was ported to this branch for jupyter/utils/addons CI (f54647ca3), because the step picked the script whenever it was present + yq was available, with no fallback on failure. This broke tests/browser's Playwright CI job with:
::error::Failed to extract valid pnpm version from tests/browser/pnpm-lock.yaml (got 'null')
Seen in PR #2641, run 30656665554.
Immediate fix (already merged)
.github/actions/playwright-test/action.yml now falls back to the legacy grep-based lookup whenever get-pnpm-version.sh can't resolve a version, instead of an either/or on script presence. This restores CI without touching tests/browser's tooling.
Follow-up (this issue)
Migrate tests/browser on rhoai-2.25 to match main:
- Convert
tests/browser/package.json → package.json5
- Add
devEngines.packageManager (name: pnpm, a version range, onFail: download), drop the legacy packageManager field
- Regenerate
pnpm-lock.yaml with pnpm 11 so packageManagerDependencies is populated
- Once done, the legacy fallback added in
.github/actions/playwright-test/action.yml can be removed (or left as a harmless safety net for other future consumers)
Out of scope for the CVE-overrides PR that surfaced this, since it also implies dependency bumps (playwright, testcontainers, typescript, eslint) and lockfile regeneration that need their own review on a release branch.
Background
On
main,tests/browserwas migrated topackage.json5with adevEngines.packageManagerfield, which makes pnpm 11 record the resolved pnpm version underpackageManagerDependenciesinpnpm-lock.yaml.scripts/get-pnpm-version.shreads that field viayq.On
rhoai-2.25(this branch),tests/browserwas never migrated: it still ships a plaintests/browser/package.jsonwith the old-style"packageManager": "[email protected]"field, and its lockfile has nopackageManagerDependencies..github/actions/playwright-test/action.yml's "Determine pnpm version" step already existed on this branch (from an earlier backport) with a legacygrep-based fallback for exactly this old-style field. That fallback stopped being reachable oncescripts/get-pnpm-version.shwas ported to this branch forjupyter/utils/addonsCI (f54647ca3), because the step picked the script whenever it was present +yqwas available, with no fallback on failure. This broketests/browser's Playwright CI job with:Seen in PR #2641, run 30656665554.
Immediate fix (already merged)
.github/actions/playwright-test/action.ymlnow falls back to the legacygrep-based lookup wheneverget-pnpm-version.shcan't resolve a version, instead of an either/or on script presence. This restores CI without touchingtests/browser's tooling.Follow-up (this issue)
Migrate
tests/browseronrhoai-2.25to matchmain:tests/browser/package.json→package.json5devEngines.packageManager(name: pnpm, a version range,onFail: download), drop the legacypackageManagerfieldpnpm-lock.yamlwith pnpm 11 sopackageManagerDependenciesis populated.github/actions/playwright-test/action.ymlcan be removed (or left as a harmless safety net for other future consumers)Out of scope for the CVE-overrides PR that surfaced this, since it also implies dependency bumps (playwright, testcontainers, typescript, eslint) and lockfile regeneration that need their own review on a release branch.