blob: df8715327830f43bf5a503b36cff90265d407fc2 [file] [log] [blame]
name: "Mypy"
description: "Optional Static Typing for Python."
author: "Jukka Lehtosalo and contributors"
inputs:
options:
description: >
Options passed to mypy. Use `mypy --help` to see available options.
required: false
paths:
description: >
Explicit paths to run mypy on. Defaults to the current directory.
required: false
default: "."
version:
description: >
Mypy version to use (PEP440) - e.g. "0.910"
required: false
default: ""
install_types:
description: >
Whether to automatically install missing library stub packages.
('yes'|'no', default: 'yes')
default: "yes"
install_project_dependencies:
description: >
Whether to attempt to install project dependencies into mypy
environment. ('yes'|'no', default: 'yes')
default: "yes"
branding:
color: "blue"
icon: "check-circle"
runs:
using: composite
steps:
- name: mypy setup
shell: bash
run: |
echo ::group::Installing mypy...
export PIP_DISABLE_PIP_VERSION_CHECK=1
if [ "$RUNNER_OS" == "Windows" ]; then
HOST_PYTHON=python
else
HOST_PYTHON=python3
fi
venv_script="import os.path; import venv; import sys;
path = os.path.join(r'${{ github.action_path }}', '.mypy-venv');
venv.main([path]);
bin_subdir = 'Scripts' if sys.platform == 'win32' else 'bin';
print(os.path.join(path, bin_subdir, 'python'));
"
VENV_PYTHON=$(echo $venv_script | "$HOST_PYTHON")
mypy_spec="mypy"
if [ -n "${{ inputs.version }}" ]; then
mypy_spec+="==${{ inputs.version }}"
fi
if ! "$VENV_PYTHON" -m pip install "$mypy_spec"; then
echo "::error::Could not install mypy."
exit 1
fi
echo ::endgroup::
if [ "${{ inputs.install_project_dependencies }}" == "yes" ]; then
VENV=$("$VENV_PYTHON" -c 'import sys;print(sys.prefix)')
echo ::group::Installing project dependencies...
"$VENV_PYTHON" -m pip download --dest="$VENV"/deps .
"$VENV_PYTHON" -m pip install -U --find-links="$VENV"/deps "$VENV"/deps/*
echo ::endgroup::
fi
echo ::group::Running mypy...
mypy_opts=""
if [ "${{ inputs.install_types }}" == "yes" ]; then
mypy_opts+="--install-types --non-interactive"
fi
echo "mypy $mypy_opts ${{ inputs.options }} ${{ inputs.paths }}"
"$VENV_PYTHON" -m mypy $mypy_opts ${{ inputs.options }} ${{ inputs.paths }}
echo ::endgroup::