Add codspeed benchmarks for Bluetooth messages #3411
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
permissions: | |
contents: read | |
concurrency: | |
# yamllint disable-line rule:line-length | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
ci: | |
name: ${{ matrix.name }} py ${{ matrix.python-version }} on ${{ matrix.os }} (${{ matrix.extension }}) | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: | |
- "3.9" | |
- "3.10" | |
- "3.11" | |
- "3.12" | |
- "3.13" | |
os: | |
- ubuntu-latest | |
- windows-latest | |
- macos-latest | |
extension: | |
- "skip_cython" | |
- "use_cython" | |
exclude: | |
- python-version: "3.9" | |
os: windows-latest | |
- python-version: "3.10" | |
os: windows-latest | |
- python-version: "3.11" | |
os: windows-latest | |
- python-version: "3.13" | |
os: windows-latest | |
- python-version: "3.9" | |
os: macos-latest | |
- python-version: "3.10" | |
os: macos-latest | |
- python-version: "3.11" | |
os: macos-latest | |
- python-version: "3.13" | |
os: macos-lates | |
- extension: "use_cython" | |
os: windows-latest | |
- extension: "use_cython" | |
os: macos-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
id: python | |
with: | |
python-version: ${{ matrix.python-version }} | |
allow-prereleases: true | |
- name: Get pip cache dir | |
id: pip-cache | |
shell: bash | |
run: | | |
echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT | |
- name: Restore PIP cache | |
uses: actions/cache@v4 | |
with: | |
path: ${{ steps.pip-cache.outputs.dir }} | |
key: pip-${{ steps.python.outputs.python-version }}-${{ matrix.extension }}-${{ hashFiles('requirements.txt', 'requirements_test.txt') }} | |
restore-keys: | | |
pip-${{ steps.python.outputs.python-version }}-${{ matrix.extension }}- | |
- name: Set up Python environment (no cython) | |
if: ${{ matrix.extension == 'skip_cython' }} | |
env: | |
SKIP_CYTHON: 1 | |
shell: bash | |
run: | | |
pip3 install -r requirements.txt -r requirements_test.txt | |
pip3 install -e . | |
- name: Set up Python environment (cython) | |
if: ${{ matrix.extension == 'use_cython' }} | |
env: | |
REQUIRE_CYTHON: 1 | |
shell: bash | |
run: | | |
pip3 install -r requirements.txt -r requirements_test.txt | |
pip3 install -e . | |
- name: Register problem matchers | |
shell: bash | |
run: | | |
echo "::add-matcher::.github/workflows/matchers/flake8.json" | |
echo "::add-matcher::.github/workflows/matchers/pylint.json" | |
echo "::add-matcher::.github/workflows/matchers/mypy.json" | |
echo "::add-matcher::.github/workflows/matchers/pytest.json" | |
- run: flake8 aioesphomeapi | |
name: Lint with flake8 | |
if: ${{ matrix.python-version == '3.12' && matrix.extension == 'skip_cython' && matrix.os == 'ubuntu-latest' }} | |
- run: pylint aioesphomeapi | |
name: Lint with pylint | |
if: ${{ matrix.python-version == '3.12' && matrix.extension == 'skip_cython' && matrix.os == 'ubuntu-latest' }} | |
- run: ruff check aioesphomeapi tests | |
name: Check formatting with ruff | |
if: ${{ matrix.python-version == '3.12' && matrix.extension == 'skip_cython' && matrix.os == 'ubuntu-latest' }} | |
- run: mypy aioesphomeapi | |
name: Check typing with mypy | |
if: ${{ matrix.python-version == '3.12' && matrix.extension == 'skip_cython' && matrix.os == 'ubuntu-latest' }} | |
- run: pytest -vv --cov=aioesphomeapi --cov-report=xml --tb=native tests | |
name: Run tests with pytest | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v4 | |
env: | |
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
- run: | | |
docker run \ | |
-v "$PWD":/aioesphomeapi \ | |
-u "$(id -u):$(id -g)" \ | |
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 | |
name: Check protobuf files match | |
if: ${{ matrix.python-version == '3.12' && matrix.extension == 'skip_cython' && matrix.os == 'ubuntu-latest' }} | |
benchmarks: | |
name: Run benchmarks | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
- name: Set up Python environment (cython) | |
if: ${{ matrix.extension == 'use_cython' }} | |
env: | |
REQUIRE_CYTHON: 1 | |
shell: bash | |
run: | | |
pip3 install -r requirements.txt -r requirements_test.txt | |
pip3 install -e . | |
- name: Run benchmarks | |
uses: CodSpeedHQ/action@v3 | |
with: | |
token: ${{ secrets.CODSPEED_TOKEN }} | |
run: pytest tests/ --codspeed |