name: CI on: push: branches: [main] pull_request: permissions: contents: read jobs: ci: name: ${{ matrix.name }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - id: flake8 name: Lint with flake8 - id: pylint name: Lint with pylint - id: black name: Check formatting with black - id: isort name: Check import order with isort - id: mypy name: Check typing with mypy - id: pytest name: Run tests with pytest - id: protoc name: Check protobuf files match steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 id: python with: python-version: '3.9' - name: Get pip cache dir id: pip-cache run: | echo "::set-output name=dir::$(pip cache dir)" - name: Restore PIP cache uses: actions/cache@v3.0.8 with: path: ${{ steps.pip-cache.outputs.dir }} key: pip-${{ steps.python.outputs.python-version }}-${{ hashFiles('requirements.txt', 'requirements_test.txt') }} restore-keys: | pip-${{ steps.python.outputs.python-version }}- - name: Set up Python environment run: | pip3 install -r requirements.txt -r requirements_test.txt pip3 install -e . - name: Register problem matchers run: | echo "::add-matcher::.github/workflows/matchers/flake8.json" echo "::add-matcher::.github/workflows/matchers/pylint.json" echo "::add-matcher::.github/workflows/matchers/isort.json" echo "::add-matcher::.github/workflows/matchers/mypy.json" echo "::add-matcher::.github/workflows/matchers/pytest.json" - run: flake8 aioesphomeapi if: ${{ matrix.id == 'flake8' }} - run: pylint aioesphomeapi if: ${{ matrix.id == 'pylint' }} - run: black --check --diff --color aioesphomeapi tests if: ${{ matrix.id == 'black' }} - run: isort --check --diff aioesphomeapi tests if: ${{ matrix.id == 'isort' }} - run: mypy aioesphomeapi if: ${{ matrix.id == 'mypy' }} - run: pytest -vv --tb=native tests if: ${{ matrix.id == 'pytest' }} - run: | docker run \ -v "$PWD":/aioesphomeapi \ ghcr.io/esphome/aioesphomeapi-proto-builder:latest if ! git diff --quiet; then echo "You have altered the generated proto files but they do not match what is expected." echo "Please run the following to update the generated files:" echo 'docker run -v "$PWD":/aioesphomeapi ghcr.io/esphome/aioesphomeapi-proto-builder:latest' exit 1 fi if: ${{ matrix.id == 'protoc' }}