From 8cd85c772e6eb8db553fc034a1e9f5a4cd0ff652 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/tests.yaml | 76 +++++++++++++++++++++++------------- 1 file changed, 49 insertions(+), 27 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index ef6c29fbae0..661cf421a42 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,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 @@ -61,45 +86,42 @@ 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 }} @@ -107,25 +129,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