From d84beefd4e6ddabec0548af2a48c25e8d884b0f9 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Mon, 17 Jan 2022 14:06:30 +0100 Subject: [PATCH] CI: Add job for `pip check` (#64058) --- .core_files.yaml | 6 ++++++ .github/workflows/ci.yaml | 33 +++++++++++++++++++++++++++++++++ script/pip_check | 27 +++++++++++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100755 script/pip_check diff --git a/.core_files.yaml b/.core_files.yaml index c6cd987616a..52e2a458bae 100644 --- a/.core_files.yaml +++ b/.core_files.yaml @@ -119,6 +119,12 @@ other: &other - .github/workflows/* - homeassistant/scripts/** +requirements: + - .github/workflows/* + - homeassistant/package_constraints.txt + - requirements*.txt + - setup.py + any: - *base_platforms - *components diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a9b3ec79edd..5e87fb71e2b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -36,6 +36,7 @@ jobs: tests_glob: ${{ steps.info.outputs.tests_glob }} test_groups: ${{ steps.info.outputs.test_groups }} test_group_count: ${{ steps.info.outputs.test_group_count }} + requirements: ${{ steps.core.outputs.requirements }} runs-on: ubuntu-latest steps: - name: Check out code from GitHub @@ -671,6 +672,38 @@ jobs: python --version mypy homeassistant/components/${{ needs.changes.outputs.integrations_glob }} + pip-check: + runs-on: ubuntu-latest + if: needs.changes.outputs.requirements == 'true' + needs: + - changes + - prepare-tests + strategy: + fail-fast: false + matrix: + python-version: [3.9] + name: Run pip check ${{ matrix.python-version }} + container: homeassistant/ci-azure:${{ matrix.python-version }} + steps: + - name: Check out code from GitHub + uses: actions/checkout@v2.4.0 + - name: Restore full Python ${{ matrix.python-version }} virtual environment + id: cache-venv + uses: actions/cache@v2.1.7 + with: + path: venv + key: ${{ runner.os }}-${{ matrix.python-version }}-${{ + needs.prepare-tests.outputs.python-key }} + - name: Fail job if Python cache restore failed + if: steps.cache-venv.outputs.cache-hit != 'true' + run: | + echo "Failed to restore Python virtual environment from cache" + exit 1 + - name: Run pip check + run: | + . venv/bin/activate + ./script/pip_check $PIP_CACHE + pytest: runs-on: ubuntu-latest if: needs.changes.outputs.test_full_suite == 'true' || needs.changes.outputs.tests_glob diff --git a/script/pip_check b/script/pip_check new file mode 100755 index 00000000000..5864d6f00c0 --- /dev/null +++ b/script/pip_check @@ -0,0 +1,27 @@ +#!/bin/bash +PIP_CACHE=$1 + +# Number of existing dependency conflicts +# Update if a PR resolve one! +DEPENDENCY_CONFLICTS=14 + +PIP_CHECK=$(pip check --cache-dir=$PIP_CACHE) +LINE_COUNT=$(echo "$PIP_CHECK" | wc -l) +echo "$PIP_CHECK" + +if [[ $((LINE_COUNT)) -gt $DEPENDENCY_CONFLICTS ]] +then + echo "------" + echo "Requirements change added another dependency conflict." + echo "Make sure to check the 'pip check' output above!" + exit 1 +elif [[ $((LINE_COUNT)) -lt $DEPENDENCY_CONFLICTS ]] +then + echo "------" + echo "It seems like this PR resolves $(( + DEPENDENCY_CONFLICTS - LINE_COUNT)) dependency conflicts." + echo "Please update the 'DEPENDENCY_CONFLICTS' constant " + echo "in 'script/pip_check' to help prevent regressions." + echo "Update it to: $((LINE_COUNT))" + exit 1 +fi