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 # zizmor: ignore[template-injection] 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::