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 70306cb commit 125c15e
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 32 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/docs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:

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

- run: poetry install --no-root --only main
- run: poetry install --sync --no-root --only main

- name: Build Website
run: |
Expand Down
82 changes: 51 additions & 31 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 @@ -50,7 +73,7 @@ jobs:

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

- run: poetry install --only main,test
- run: poetry install --sync --only main,test

- name: Regenerate PyPI fixtures
run: PYTHONPATH="$PWD" poetry run python tests/repositories/fixtures/pypi.org/generate.py
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
- run: poetry install --sync --with github-actions
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 125c15e

Please sign in to comment.