| 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:: |