name: tox on: create: # is used for publishing to PyPI and TestPyPI tags: # any tag regardless of its name, no branches - "**" push: # only publishes pushes to the main branch to TestPyPI branches: # any integration branch but not tag - "main" pull_request: schedule: - cron: 1 0 * * * # Run daily at 0:01 UTC workflow_call: jobs: pre: name: pre runs-on: ubuntu-22.04 outputs: matrix: ${{ steps.generate_matrix.outputs.matrix }} steps: - name: Determine matrix id: generate_matrix uses: coactions/dynamic-matrix@v1 with: min_python: "3.9" max_python: "3.12" default_python: "3.10" other_names: | lint docs pkg py39-ansible212 py39-ansible213 py39-ansible214 py39-ansible215 py310-ansible215 py311-ansible215 py312-ansible216 py312-devel smoke platforms: linux,macos macos: minmax build: name: ${{ matrix.name }} environment: test runs-on: ${{ matrix.os || 'ubuntu-22.04' }} needs: pre strategy: fail-fast: false matrix: ${{ fromJson(needs.pre.outputs.matrix) }} env: FORCE_COLOR: 1 steps: - name: Check out src from Git uses: actions/checkout@v4 with: fetch-depth: 0 # needed by setuptools-scm - name: Set up Python ${{ matrix.python_version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python_version }} - name: Pre-commit cache uses: actions/cache@v4 with: path: ~/.cache/pre-commit key: ${{ matrix.name }}-pre-commit-${{ hashFiles('setup.cfg', 'tox.ini', 'pyproject.toml', '.pre-commit-config.yaml') }} - name: Pip cache uses: actions/cache@v4 with: path: ~/.cache/pip key: ${{ matrix.name }}-pip-${{ hashFiles('setup.cfg', 'tox.ini', 'pyproject.toml', '.pre-commit-config.yaml') }} - name: Install tox run: python3 -m pip install --upgrade 'tox>=4.0.3' - name: Initialize tox envs run: python -m tox --notest --skip-missing-interpreters false -vv -e ${{ matrix.passed_name }} - name: Test with tox run: python -m tox -e ${{ matrix.passed_name }} - name: Archive logs uses: actions/upload-artifact@v3 with: name: logs.zip path: .tox/**/log/ - name: Upload coverage data if: ${{ startsWith(matrix.passed_name, 'py') }} uses: codecov/codecov-action@v4 with: name: ${{ matrix.passed_name }} token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: true # see https://github.com/codecov/codecov-action/issues/598 verbose: true # optional (default = false) check: # This job does nothing and is only used for the branch protection if: always() needs: - build runs-on: ubuntu-22.04 steps: - name: Check codecov.io status if: github.event_name == 'pull_request' uses: coactions/codecov-status@main - name: Decide whether the needed jobs succeeded or failed uses: re-actors/alls-green@release/v1 with: jobs: ${{ toJSON(needs) }}