# This file is managed by 'repo_helper'. Don't edit it directly.
---
name: macOS

on:
  push:
    branches-ignore:
      - 'repo-helper-update'
      - 'pre-commit-ci-update-config'
      - 'imgbot'

  pull_request:

permissions:
  actions: write
  issues: write
  contents: read

jobs:
  tests:
    name: "macos-13 / Python ${{ matrix.config.python-version }}"
    runs-on: "macos-13"
    continue-on-error: ${{ matrix.config.experimental }}
    env:
      USING_COVERAGE: '3.6,3.7,3.8,3.9,3.10,3.11,3.12,3.13,pypy-3.7,pypy-3.8,pypy-3.9'

    strategy:
      fail-fast: False
      matrix:
        config:
          - {python-version: "3.6", testenvs: "py36,build", experimental: False}
          - {python-version: "3.7", testenvs: "py37,build", experimental: False}
          - {python-version: "3.8", testenvs: "py38,build", experimental: False}
          - {python-version: "3.9", testenvs: "py39,build", experimental: False}
          - {python-version: "3.10", testenvs: "py310,build", experimental: False}
          - {python-version: "3.11", testenvs: "py311,build", experimental: False}
          - {python-version: "3.12", testenvs: "py312,build", experimental: False}
          - {python-version: "3.13", testenvs: "py313-dev,build", experimental: True}
          - {python-version: "pypy-3.7", testenvs: "pypy37,build", experimental: False}
          - {python-version: "pypy-3.8", testenvs: "pypy38,build", experimental: False}
          - {python-version: "pypy-3.9", testenvs: "pypy39,build", experimental: True}

    steps:
      - name: Checkout 🛎️
        uses: "actions/checkout@v4"

      - name: Check for changed files
        if: startsWith(github.ref, 'refs/tags/') != true
        uses: dorny/paths-filter@v2
        id: changes
        with:
          list-files: "json"
          filters: |
            code:
              - '!(doc-source/**|CONTRIBUTING.rst|.imgbotconfig|.pre-commit-config.yaml|.pylintrc|.readthedocs.yml)'

      - name: Setup Python 🐍
        id: setup-python
        if: ${{ steps.changes.outputs.code == 'true' || steps.changes.outcome == 'skipped' }}
        uses: "actions/setup-python@v5"
        with:
          python-version: "${{ matrix.config.python-version }}"

      - name: Install dependencies 🔧
        if: steps.setup-python.outcome == 'success'
        run: |
          python -VV
          python -m site
          python -m pip install --upgrade pip setuptools wheel
          python -m pip install --upgrade tox~=3.0 virtualenv!=20.16.0

      - name: "Run Tests for Python ${{ matrix.config.python-version }}"
        if: steps.setup-python.outcome == 'success'
        run: python -m tox -e "${{ matrix.config.testenvs }}" -s false

      - name: "Upload Coverage 🚀"
        uses: actions/upload-artifact@v4
        if: ${{ always() && steps.setup-python.outcome == 'success' }}
        with:
          name: "coverage-${{ matrix.config.python-version }}"
          path: .coverage
