From 6b035af6bc1312916aa88f372f45afa371f500d2 Mon Sep 17 00:00:00 2001 From: Bjorn Neergaard Date: Sun, 24 Mar 2024 17:46:40 -0600 Subject: [PATCH] ci: improve matrix and change filters This is in preparation for wider parallelization of jobs, and for better quality matrix jobs. --- .github/workflows/docs.yaml | 2 +- .github/workflows/tests.yaml | 82 ++++++++++++++++++++++-------------- 2 files changed, 52 insertions(+), 32 deletions(-) diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 619dd1e99e3..1a4c1897e09 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -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: | diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 6eed82e4a94..4a4c2a5f39a 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -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 @@ -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' @@ -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 @@ -59,43 +82,40 @@ 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 }} @@ -103,25 +123,25 @@ jobs: - 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