name: better-setup-node description: Install a pinned musl Node from the official unofficial-builds (glibc builds cannot exec on musl runners) and optionally activate a pinned pnpm via corepack. inputs: node-version: description: Exact Node version to install (e.g. 22.14.0). required: true pnpm-version: description: Optional exact pnpm version to activate via corepack. required: false default: "" runs: using: composite steps: - shell: bash run: | set -euo pipefail nv="${{ inputs.node-version }}" pv="${{ inputs.pnpm-version }}" need_install=0 node --version 2>/dev/null | grep -q "^v${nv%%.*}\." || need_install=1 [ "$need_install" = 0 ] && [ -n "$pv" ] && command -v corepack >/dev/null || need_install=1 if [ "$need_install" = 1 ]; then case "$(uname -m)" in x86_64|amd64) musl=x64-musl ;; aarch64|arm64) musl=arm64-musl ;; *) echo "better-setup-node: unsupported arch $(uname -m)" >&2; exit 1 ;; esac curl -fsSL "https://unofficial-builds.nodejs.org/download/release/v${nv}/node-v${nv}-linux-${musl}.tar.gz" \ | tar -xz -C /usr/local --strip-components=1 fi node --version if [ -n "$pv" ]; then corepack enable corepack prepare "pnpm@${pv}" --activate pnpm --version fi