-
- Notifications
You must be signed in to change notification settings - Fork 3.1k
Open
Labels
Description
Feature
Add a --soft-fail option to Mypy that allows capturing its output without causing a hard failure in CI/CD pipelines.
Pitch
Currently, Mypy exits with a 1 status code when type errors are found, which is expected behavior. However, in many CI/CD pipelines (especially those integrating with SonarQube or similar tools), it's useful to capture all Mypy output while still allowing the pipeline to continue in a controlled way.
A --soft-fail option would:
- Allow Mypy to run normally and produce full output, including errors and warnings.
- Exit with status code 0 so that CI/CD jobs don’t automatically fail.
- Still allow external tools like SonarQube to analyze and report issues without interfering with the pipeline’s flow.
I currently have a one liner workaround in tox:
https://gist.github.com/balihb/0b64435c0e8f553791071cea4a897c91
[tox] min_version = 4.20 envlist = # renovate: datasource=docker depName=python 3.13 [testenv] skip_install = true pass_env = FORCE_COLOR MYPY_* NO_COLOR PIP_* PYTHONUNBUFFERED PY_COLORS TERM deps = -r requirements.txt -r requirements-mypy.txt commands = commands = python -c "import os, re, shlex, subprocess, sys; \ from pathlib import Path; \ result = subprocess.run(['mypy'] + shlex.split('{posargs:src}'), check=False, text=True, capture_output=True); \ result.stdout.strip() and sys.stdout.write(result.stdout); \ result.stderr.strip() and sys.stderr.write(result.stderr); \ output = Path(os.getenv('MYPY_TOX_OUTPUT', default='.report/mypy/output.txt')); \ output.parent.mkdir(parents=True, exist_ok=True); \ output.write_text(re.compile(r'\x1b\\[[0-9;]*?m').sub('', result.stdout)); \ sys.exit(1 if result.returncode == 2 else 0)"but this is far from ideal.