From 3b734dfa697862288bcf300adb1b512163d78e12 Mon Sep 17 00:00:00 2001 From: Hugh Hackman Date: Tue, 24 Mar 2026 22:25:13 +0000 Subject: [PATCH] fix: add pnpm setup fallback when packageManager field is absent The release job used pnpm/action-setup@v5 without a version input, which requires a packageManager field in package.json. Repos that don't have this field fail at Setup pnpm, blocking all releases. Mirror the resilient two-step pattern already used in plugin-ci.yaml: - If packageManager is present: use Corepack (respects pinned version) - If absent: fall back to pnpm/action-setup@v5 with version: latest Fixes the systemic v1.0.0 release failures across kube-vip, sealed-secrets, tns-csi, and rook (PRI-866). Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/plugin-release.yaml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/plugin-release.yaml b/.github/workflows/plugin-release.yaml index ed282e6..fd0b96a 100644 --- a/.github/workflows/plugin-release.yaml +++ b/.github/workflows/plugin-release.yaml @@ -103,16 +103,30 @@ jobs: if [ -f "pnpm-lock.yaml" ]; then echo "manager=pnpm" >> $GITHUB_OUTPUT echo "lockfile=pnpm-lock.yaml" >> $GITHUB_OUTPUT + # Check for packageManager field in package.json (Corepack pinning). + # pnpm/action-setup@v5 errors when packageManager is absent and no version + # is specified, so use Corepack for repos that have the field pinned and + # fall back to pnpm/action-setup with version: latest for repos that don't. + PM=$(python3 -c "import json,sys; d=json.load(open('package.json')); print('true' if d.get('packageManager','').startswith('pnpm@') else 'false')" 2>/dev/null || echo "false") + echo "has_package_manager=$PM" >> $GITHUB_OUTPUT else echo "manager=npm" >> $GITHUB_OUTPUT echo "lockfile=package-lock.json" >> $GITHUB_OUTPUT + echo "has_package_manager=false" >> $GITHUB_OUTPUT fi - - name: Setup pnpm - if: steps.pkg-manager.outputs.manager == 'pnpm' + - name: Setup pnpm (via Corepack, reads version from packageManager field) + if: steps.pkg-manager.outputs.manager == 'pnpm' && steps.pkg-manager.outputs.has_package_manager == 'true' + run: | + corepack enable pnpm + corepack install + + - name: Setup pnpm (version latest) + if: steps.pkg-manager.outputs.manager == 'pnpm' && steps.pkg-manager.outputs.has_package_manager == 'false' uses: pnpm/action-setup@v5 with: run_install: false + version: latest - name: Setup Node uses: actions/setup-node@v6