agentsclimarketplace

Pnpm ci true docker

Skill LaWebcapsule/d9-skills/skills/pnpm-ci-true-docker

Prevent pnpm 10+ Docker build failures by setting ENV CI=true to avoid TTY confirmation prompts.From its SKILL.md

Install
npx -y skills add LaWebcapsule/d9-skills --skill pnpm-ci-true-docker

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its file declares

Copied from the file, not written here

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

5.2 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it

pnpm-ci-true-docker

Purpose

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.

Triggers

  • Writing or reviewing a Dockerfile that uses pnpm install, pnpm deploy, or any pnpm command with pnpm version 10 or later.
  • Diagnosing a Docker build failure whose logs contain ERR_PNPM_ABORTED_REMOVE_MODULES_DIR_NO_TTY.
  • Setting up a CI pipeline (GitHub Actions, GitLab CI, etc.) that runs pnpm 10+ without a TTY.

Behavior

  1. Identify the pnpm version. Check package.json > packageManager field, pnpm-lock.yaml header, or the Dockerfile base image to confirm pnpm >= 10 is in use.
  2. Add ENV CI=true in the Dockerfile. Place it before the first RUN instruction that invokes pnpm. This tells pnpm to operate in non-interactive mode and skip any TTY confirmation prompts.
  3. Verify the build passes. Run docker build and confirm the pnpm install step completes without the TTY error.

Minimal Fix

# Before any pnpm command
ENV CI=true

RUN pnpm install --frozen-lockfile

Full Dockerfile Example

FROM 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"]

Errors Prevented

  • 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.
  • Silent CI pipeline failures where the build exits with a non-zero code and the error message is buried in logs.

Restrictions

Hard Boundaries

  • Do NOT set 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).
  • Do NOT downgrade pnpm to avoid the issue. The CI=true approach is the intended solution.

Soft Boundaries

  • Prefer ENV CI=true over RUN CI=true pnpm install so the variable applies to all subsequent pnpm commands in the same stage.
  • If the Dockerfile uses multi-stage builds, add ENV CI=true in every stage that runs pnpm commands.

Self-Check

  • The Dockerfile contains ENV CI=true before the first pnpm command.
  • The pnpm version is confirmed to be 10 or later.
  • docker build completes the pnpm install step without TTY-related errors.
  • Multi-stage builds have ENV CI=true in each relevant stage.

Examples

Example 1: Standard Single-Stage Dockerfile

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"]

Example 2: Multi-Stage Build (Edge Case)

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"]

Example 3: GitHub Actions CI (Edge Case)

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

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most containers cloud skills give in ~1.3k tokens

Counted across 607 of the 657 authors here whose files we hold, read 2026-08-07

  • Run containers as a non-root userin 66 of 607, across 46 files
  • Use multi-stage buildsin 53 of 607, across 44 files
  • Use Promise.all for independent operationsin 47 of 607, across 13 files
  • Import directly instead of barrel filesin 46 of 607, across 12 files
  • Use ternary instead of AND for conditionalsin 45 of 607, across 12 files
  • Use Set or Map for O(1) lookupsin 42 of 607, across 10 files
  • Create a .dockerignore filein 41 of 607, across 31 files
  • Read individual rule files for detailsin 39 of 607, across 9 files
  • Copy dependency files before source codein 36 of 607, across 23 files
  • Authenticate server actions like API routesin 35 of 607, across 7 files
  • Use next/dynamic for heavy componentsin 34 of 607, across 9 files
  • Use React.cache for per-request deduplicationin 34 of 607, across 10 files

Said here and by no other author read

  • confirm pnpm version is 10 or later
  • add ENV CI=true before first pnpm command
  • prefer ENV CI=true over inline run commands
  • verify docker build passes

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 326,834. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.