Skip to content

Commit

Permalink
ci: improve matrix and change filters
Browse files Browse the repository at this point in the history
This is in preparation for wider parallelization of jobs, and for better
quality matrix jobs.
  • Loading branch information
neersighted committed Mar 25, 2024
1 parent 4108d5f commit fc57be8
Showing 1 changed file with 49 additions and 29 deletions.
78 changes: 49 additions & 29 deletions .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,11 @@ jobs:
permissions:
pull-requests: read
outputs:
project: ${{ steps.changes.outputs.project }}
fixtures-pypi: ${{ steps.changes.outputs.fixtures-pypi }}
pytest: ${{ steps.changes.outputs.pytest }}
tests-mypy: ${{ steps.changes.outputs.tests-mypy }}
tests-pytest: ${{ steps.changes.outputs.tests-pytest }}
tests-pytest-export: ${{ steps.changes.outputs.tests-pytest-export }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
Expand All @@ -30,18 +33,38 @@ jobs:
filters: |
workflow: &workflow
- '.github/workflows/tests.yaml'
fixtures-pypi:
- *workflow
- 'tests/repositories/fixtures/pypi.org/**'
pytest:
project: &project
- *workflow
- 'poetry.lock'
- 'pyproject.toml'
fixtures-pypi:
- *workflow
- 'tests/repositories/fixtures/pypi.org/**'
tests-mypy:
- *project
- 'src/**.py'
tests-pytest:
- *project
- 'src/**.py'
- 'tests/**'
tests-pytest-export:
- *project
- 'src/**.py'
lockfile:
name: Check poetry.lock
runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.project == 'true'
steps:
- uses: actions/checkout@v4

- uses: ./.github/actions/bootstrap-poetry

- run: poetry check --lock

fixtures-pypi:
name: PyPI Fixtures
name: Check fixtures (PyPI)
runs-on: ubuntu-latest
needs: changes
if: needs.changes.outputs.fixtures-pypi == 'true'
Expand All @@ -59,69 +82,66 @@ jobs:
run: git diff --exit-code --stat HEAD tests/repositories/fixtures/pypi.org

pytest:
name: ${{ matrix.os }} / ${{ matrix.python-version }}
runs-on: ${{ matrix.image }}
needs: changes
name: ${{ matrix.os.name }} / ${{ matrix.python-version }}
runs-on: ${{ matrix.os.image }}
needs:
- changes
- lockfile
strategy:
matrix:
os: [Ubuntu, macOS, Windows]
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
include:
- os: Ubuntu
os:
- name: Ubuntu
image: ubuntu-22.04
- os: Windows
image: windows-2022
- os: macOS
- name: macOS
image: macos-12
- name: Windows
image: windows-2022
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
fail-fast: false
steps:
- uses: actions/checkout@v4
if: needs.changes.outputs.pytest == 'true'
if: needs.changes.outputs.tests-pytest == 'true'

- uses: ./.github/actions/bootstrap-poetry
if: needs.changes.outputs.pytest == 'true'
if: needs.changes.outputs.tests-pytest == 'true'
with:
python-version: ${{ matrix.python-version }}

- run: poetry install --with github-actions
if: needs.changes.outputs.pytest == 'true'

- name: Check lock file
if: needs.changes.outputs.pytest == 'true'
run: poetry check --lock
if: needs.changes.outputs.tests-pytest == 'true'

- name: Run mypy
if: needs.changes.outputs.pytest == 'true'
if: needs.changes.outputs.tests-pytest == 'true'
run: poetry run mypy

- name: Run pytest
if: needs.changes.outputs.pytest == 'true'
if: needs.changes.outputs.tests-pytest == 'true'
env:
POETRY_TEST_INTEGRATION_GIT_USERNAME: ${{ github.actor }}
POETRY_TEST_INTEGRATION_GIT_PASSWORD: ${{ github.token }}
run: poetry run pytest --integration -v

- name: Get Plugin Version (poetry-plugin-export)
id: poetry-plugin-export-version
if: needs.changes.outputs.pytest == 'true'
if: needs.changes.outputs.tests-pytest == 'true'
run: |
echo version=$(poetry show poetry-plugin-export | grep version | cut -d : -f 2 | xargs) >> $GITHUB_OUTPUT
- name: Checkout Plugin Source (poetry-plugin-export)
uses: actions/checkout@v4
if: needs.changes.outputs.pytest == 'true'
if: needs.changes.outputs.tests-pytest == 'true'
with:
path: poetry-plugin-export
repository: python-poetry/poetry-plugin-export
ref: refs/tags/${{ steps.poetry-plugin-export-version.outputs.version }}

- name: Run pytest (poetry-plugin-export)
if: needs.changes.outputs.pytest == 'true'
if: needs.changes.outputs.tests-pytest == 'true'
working-directory: ./poetry-plugin-export
run: poetry run -C .. pytest -v

- name: Check for clean working tree
if: needs.changes.outputs.pytest == 'true'
if: needs.changes.outputs.tests-pytest == 'true'
run: |
git diff --exit-code --stat HEAD
git -C poetry-plugin-export diff --exit-code --stat HEAD

0 comments on commit fc57be8

Please sign in to comment.