# Runs python tests on a matrix of python versions and platforms. # # Checks for changes to python files before running the tests. # If always_run is true, always runs the tests. name: 'python tests' on: push: branches: - 'main' pull_request: types: - 'ready_for_review' - 'opened' - 'synchronize' merge_group: workflow_dispatch: inputs: always_run: description: 'Always run the tests' required: true type: boolean default: true workflow_call: inputs: always_run: description: 'Always run the tests' required: true type: boolean default: true concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: matrix: strategy: matrix: python-version: - '3.10' - '3.11' platform: - linux-cuda-11_7 - linux-rocm-5_2 - linux-cpu - macos-default - windows-cpu include: - platform: linux-cuda-11_7 os: ubuntu-22.04 github-env: $GITHUB_ENV - platform: linux-rocm-5_2 os: ubuntu-22.04 extra-index-url: 'https://download.pytorch.org/whl/rocm5.2' github-env: $GITHUB_ENV - platform: linux-cpu os: ubuntu-22.04 extra-index-url: 'https://download.pytorch.org/whl/cpu' github-env: $GITHUB_ENV - platform: macos-default os: macOS-12 github-env: $GITHUB_ENV - platform: windows-cpu os: windows-2022 github-env: $env:GITHUB_ENV name: 'py${{ matrix.python-version }}: ${{ matrix.platform }}' runs-on: ${{ matrix.os }} timeout-minutes: 15 # expected run time: 2-6 min, depending on platform env: PIP_USE_PEP517: '1' steps: - name: checkout uses: actions/checkout@v4 - name: check for changed python files if: ${{ inputs.always_run != true }} id: changed-files uses: tj-actions/changed-files@v42 with: files_yaml: | python: - 'pyproject.toml' - 'invokeai/**' - '!invokeai/frontend/web/**' - 'tests/**' - name: setup python if: ${{ steps.changed-files.outputs.python_any_changed == 'true' || inputs.always_run == true }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: pip cache-dependency-path: pyproject.toml - name: install dependencies if: ${{ steps.changed-files.outputs.python_any_changed == 'true' || inputs.always_run == true }} env: PIP_EXTRA_INDEX_URL: ${{ matrix.extra-index-url }} run: > pip3 install --editable=".[test]" - name: run pytest if: ${{ steps.changed-files.outputs.python_any_changed == 'true' || inputs.always_run == true }} run: pytest