4d42db2e52
pnpm/action-setup@v4 errors when both the `version` input and a `packageManager` field in package.json are specified. Detect the packageManager field during the package-manager detection step and conditionally omit `version: latest` when it is present. Fixes CI failures on repos using Corepack-style pnpm version pinning (e.g. headlamp-polaris-plugin PR #103). Co-Authored-By: Paperclip <noreply@paperclip.ing>
105 lines
3.1 KiB
YAML
105 lines
3.1 KiB
YAML
name: Plugin CI
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
node-version:
|
|
description: 'Node.js version to use'
|
|
required: false
|
|
type: string
|
|
default: '22'
|
|
|
|
jobs:
|
|
ci:
|
|
runs-on: runners-privilegedescalation
|
|
timeout-minutes: 10
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Detect package manager
|
|
id: pkg-manager
|
|
run: |
|
|
if [ -f "pnpm-lock.yaml" ]; then
|
|
echo "manager=pnpm" >> $GITHUB_OUTPUT
|
|
# Check for packageManager field in package.json (Corepack pinning).
|
|
# pnpm/action-setup@v4 errors if both `version` input and `packageManager`
|
|
# are set, so we detect here and use two conditional steps below.
|
|
PM=$(node -e "try{const p=require('./package.json');const v=p.packageManager||'';console.log(v.startsWith('pnpm@')?'true':'false')}catch(e){console.log('false')}" 2>/dev/null || echo "false")
|
|
echo "has_package_manager=$PM" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "manager=npm" >> $GITHUB_OUTPUT
|
|
echo "has_package_manager=false" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Setup pnpm (version from packageManager field)
|
|
if: steps.pkg-manager.outputs.manager == 'pnpm' && steps.pkg-manager.outputs.has_package_manager == 'true'
|
|
uses: pnpm/action-setup@v4
|
|
with:
|
|
run_install: false
|
|
|
|
- name: Setup pnpm (version latest)
|
|
if: steps.pkg-manager.outputs.manager == 'pnpm' && steps.pkg-manager.outputs.has_package_manager == 'false'
|
|
uses: pnpm/action-setup@v4
|
|
with:
|
|
run_install: false
|
|
version: latest
|
|
|
|
- name: Setup Node
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: ${{ inputs.node-version }}
|
|
cache: ${{ steps.pkg-manager.outputs.manager }}
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
if [ "${{ steps.pkg-manager.outputs.manager }}" = "pnpm" ]; then
|
|
pnpm install --frozen-lockfile
|
|
else
|
|
npm ci
|
|
fi
|
|
|
|
- name: Build plugin
|
|
run: npx @kinvolk/headlamp-plugin build
|
|
|
|
- name: Lint
|
|
run: |
|
|
if [ "${{ steps.pkg-manager.outputs.manager }}" = "pnpm" ]; then
|
|
pnpm run lint
|
|
else
|
|
npm run lint
|
|
fi
|
|
|
|
- name: Type-check
|
|
run: |
|
|
if [ "${{ steps.pkg-manager.outputs.manager }}" = "pnpm" ]; then
|
|
pnpm run tsc
|
|
else
|
|
npm run tsc
|
|
fi
|
|
|
|
- name: Format check
|
|
run: |
|
|
if [ "${{ steps.pkg-manager.outputs.manager }}" = "pnpm" ]; then
|
|
pnpm run format:check
|
|
else
|
|
npm run format:check
|
|
fi
|
|
|
|
- name: Run tests
|
|
run: |
|
|
if [ "${{ steps.pkg-manager.outputs.manager }}" = "pnpm" ]; then
|
|
pnpm test
|
|
else
|
|
npm test
|
|
fi
|
|
|
|
- name: Security audit
|
|
run: |
|
|
if [ "${{ steps.pkg-manager.outputs.manager }}" = "pnpm" ]; then
|
|
pnpm audit --prod
|
|
else
|
|
npm audit --omit=dev
|
|
fi
|