pnpm-ci-true-docker — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited pnpm-ci-true-docker (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Prevent Docker build failures caused by pnpm 10+ aborting with ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY when running pnpm install in a non-TTY environment. The fix is to set ENV CI=true in the Dockerfile before any pnpm command.
pnpm install, pnpm deploy, or any pnpm command with pnpm version 10 or later.ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY.package.json > packageManager field, pnpm-lock.yaml header, or the Dockerfile base image to confirm pnpm >= 10 is in use.RUN instruction that invokes pnpm. This tells pnpm to operate in non-interactive mode and skip any TTY confirmation prompts.docker build and confirm the pnpm install step completes without the TTY error.# Before any pnpm command
ENV CI=true
RUN pnpm install --frozen-lockfileFROM node:20-slim
RUN corepack enable && corepack prepare pnpm@latest --activate
WORKDIR /app
# Critical: pnpm 10+ requires this in non-TTY environments
ENV CI=true
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
CMD ["node", "dist/index.js"]ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY — pnpm 10+ tries to prompt for confirmation when removing or recreating node_modules, but no TTY is available in Docker, causing an immediate abort.CI=true globally on developer machines; it changes the behavior of many tools (e.g., npm install skips dev dependencies, test runners disable watch mode).CI=true approach is the intended solution.ENV CI=true over RUN CI=true pnpm install so the variable applies to all subsequent pnpm commands in the same stage.ENV CI=true in every stage that runs pnpm commands.ENV CI=true before the first pnpm command.docker build completes the pnpm install step without TTY-related errors.ENV CI=true in each relevant stage.Before (fails):
FROM node:20-slim
RUN corepack enable
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY . .
CMD ["node", "index.js"]Error output:
ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY
The removal of the node_modules directory was aborted because the terminal is not interactive.After (works):
FROM node:20-slim
RUN corepack enable
WORKDIR /app
ENV CI=true
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY . .
CMD ["node", "index.js"]A multi-stage Dockerfile where pnpm runs in both the build stage and the deploy stage. Each stage needs its own ENV CI=true because environment variables do not carry across stages.
Before (fails in second stage):
# Stage 1: build
FROM node:20-slim AS builder
RUN corepack enable
WORKDIR /app
ENV CI=true
COPY . .
RUN pnpm install --frozen-lockfile
RUN pnpm build
# Stage 2: production
FROM node:20-slim AS production
RUN corepack enable
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
# Missing ENV CI=true here — will fail
RUN pnpm install --frozen-lockfile --prod
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]After (works):
# Stage 1: build
FROM node:20-slim AS builder
RUN corepack enable
WORKDIR /app
ENV CI=true
COPY . .
RUN pnpm install --frozen-lockfile
RUN pnpm build
# Stage 2: production
FROM node:20-slim AS production
RUN corepack enable
WORKDIR /app
ENV CI=true
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile --prod
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]The same error can occur in CI pipelines that do not allocate a TTY. Setting the environment variable at the job level covers all steps.
jobs:
build:
runs-on: ubuntu-latest
env:
CI: true # Already set by default on GitHub Actions, but explicit is safer
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- run: pnpm install --frozen-lockfile
- run: pnpm build~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.