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 24, 2024
1 parent 2fc5e78 commit ac05948
Showing 1 changed file with 49 additions and 27 deletions.
76 changes: 49 additions & 27 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,15 +33,37 @@ jobs:
filters: |
workflow: &workflow
- '.github/workflows/tests.yaml'
project: &project
- 'poetry.lock'
- 'pyproject.toml'
fixtures-pypi:
- *workflow
- 'tests/repositories/fixtures/pypi.org/**'
pytest:
tests-mypy:
- *workflow
- 'poetry.lock'
- 'pyproject.toml'
- *project
- 'src/**.py'
tests-pytest:
- *workflow
- *project
- 'src/**.py'
- 'tests/**'
tests-pytest-export:
- *workflow
- *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
Expand All @@ -61,71 +86,68 @@ 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 }}

- uses: ./.github/actions/poetry-install
if: needs.changes.outputs.pytest == 'true'
if: needs.changes.outputs.tests-pytest == 'true'
with:
groups-with: github-actions

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

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

Please sign in to comment.