headroomlabs-ai/headroom · warning · SystemExit

nothing to run: --skip-npm and --skip-python were both set

Error message

nothing to run: --skip-npm and --skip-python were both set

What it means

release_smoke_all.py's main() rejects the combination of `--skip-npm` and `--skip-python`. Both flags together would make the script do nothing except verify versions, so it exits with a usage error rather than silently succeeding.

Source

Thrown at scripts/release_smoke_all.py:78

    parser.add_argument("--python", default=sys.executable)
    parser.add_argument("--node", default=shutil.which("node") or "node")
    parser.add_argument(
        "--python-release",
        action="store_true",
        help="Run the Python smoke with maturin --release instead of the faster ci profile.",
    )
    parser.add_argument("--skip-npm", action="store_true")
    parser.add_argument("--skip-python", action="store_true")
    return parser.parse_args()


def main() -> None:
    args = parse_args()
    out_dir = args.out.resolve()
    version = load_project_version()

    if args.skip_npm and args.skip_python:
        raise SystemExit("nothing to run: --skip-npm and --skip-python were both set")

    ensure_empty_dir(out_dir)

    run([args.python, "scripts/verify-versions.py"])

    completed: list[tuple[str, Path]] = []
    if not args.skip_npm:
        npm_out = out_dir / "npm"
        run([args.node, "scripts/build_npm_release_assets.mjs", version, npm_out])
        completed.append(("npm", npm_out))

    if not args.skip_python:
        python_out = out_dir / "python"
        python_args: list[str | os.PathLike[str]] = [
            args.python,
            "scripts/build_python_release_smoke.py",
            "--out",
            python_out,

View on GitHub (pinned to 322425c43b)

Solutions

  1. Remove one of the two skip flags so at least one smoke runs.
  2. If you genuinely want a no-op verification, run `scripts/verify-versions.py` directly instead.
  3. Fix the wrapper/matrix logic that sets both flags.

Example fix

# before
python scripts/release_smoke_all.py --skip-npm --skip-python

# after: only the npm smoke is unwanted
python scripts/release_smoke_all.py --skip-npm
Defensive patterns

Strategy: validation

Validate before calling

def validate_flags(skip_npm: bool, skip_python: bool) -> None:
    if skip_npm and skip_python:
        raise SystemExit("refusing to run with no work: unset --skip-npm or --skip-python")

Prevention

When it happens

Trigger: Composing flags in a wrapper script or CI step that concatenates skip flags (e.g., a matrix where both skips end up enabled); copy-pasting a command line that accumulated flags.

Common situations: CI matrix jobs passing `--skip-$MATRIX_OTHER` for both axes; a wrapper that forwards user-supplied flags verbatim.

Related errors


AI-assisted analysis of headroomlabs-ai/headroom@322425c43b (2026-08-15). Data as JSON: /api/errors/c10da3a6e0643b57. Report an issue: GitHub.