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