# https://dev.azure.com/home-assistant trigger: batch: true branches: include: - rc - dev - master pr: - rc - dev - master resources: containers: - container: 36 image: homeassistant/ci-azure:3.6 - container: 37 image: homeassistant/ci-azure:3.7 repositories: - repository: azure type: github name: 'home-assistant/ci-azure' endpoint: 'home-assistant' variables: - name: PythonMain value: '36' - group: codecov stages: - stage: 'Overview' jobs: - job: 'Lint' pool: vmImage: 'ubuntu-latest' container: $[ variables['PythonMain'] ] steps: - template: templates/azp-step-cache.yaml@azure parameters: keyfile: 'requirements_test.txt | homeassistant/package_constraints.txt' build: | python -m venv venv . venv/bin/activate pip install -r requirements_test.txt -c homeassistant/package_constraints.txt pre-commit install-hooks --config .pre-commit-config-all.yaml - script: | . venv/bin/activate pre-commit run flake8 --all-files displayName: 'Run flake8' - script: | . venv/bin/activate pre-commit run bandit --all-files displayName: 'Run bandit' - job: 'Validate' pool: vmImage: 'ubuntu-latest' container: $[ variables['PythonMain'] ] steps: - template: templates/azp-step-cache.yaml@azure parameters: keyfile: 'homeassistant/package_constraints.txt' build: | python -m venv venv . venv/bin/activate pip install -e . - script: | . venv/bin/activate python -m script.hassfest validate displayName: 'Validate manifests' - script: | . venv/bin/activate ./script/gen_requirements_all.py validate displayName: 'requirements_all validate' - job: 'CheckFormat' pool: vmImage: 'ubuntu-latest' container: $[ variables['PythonMain'] ] steps: - template: templates/azp-step-cache.yaml@azure parameters: keyfile: 'requirements_test.txt | homeassistant/package_constraints.txt' build: | python -m venv venv . venv/bin/activate pip install -r requirements_test.txt -c homeassistant/package_constraints.txt pre-commit install-hooks --config .pre-commit-config-all.yaml - script: | . venv/bin/activate pre-commit run black --all-files displayName: 'Check Black formatting' - stage: 'Tests' dependsOn: - 'Overview' jobs: - job: 'PyTest' pool: vmImage: 'ubuntu-latest' strategy: maxParallel: 3 matrix: Python36: python.container: '36' Python37: python.container: '37' container: $[ variables['python.container'] ] steps: - template: templates/azp-step-cache.yaml@azure parameters: keyfile: 'requirements_test_all.txt | homeassistant/package_constraints.txt' build: | set -e python -m venv venv . venv/bin/activate pip install -U pip setuptools pytest-azurepipelines pytest-xdist -c homeassistant/package_constraints.txt pip install -r requirements_test_all.txt -c homeassistant/package_constraints.txt # This is a TEMP. Eventually we should make sure our 4 dependencies drop typing. # Find offending deps with `pipdeptree -r -p typing` pip uninstall -y typing - script: | . venv/bin/activate pip install -e . displayName: 'Install Home Assistant' - script: | set -e . venv/bin/activate pytest --timeout=9 --durations=10 -n auto --dist=loadfile -qq -o console_output_style=count -p no:sugar tests script/check_dirty displayName: 'Run pytest for python $(python.container)' condition: and(succeeded(), ne(variables['python.container'], variables['PythonMain'])) - script: | set -e . venv/bin/activate pytest --timeout=9 --durations=10 -n auto --dist=loadfile --cov homeassistant --cov-report html -qq -o console_output_style=count -p no:sugar tests codecov --token $(codecovToken) script/check_dirty displayName: 'Run pytest for python $(python.container) / coverage' condition: and(succeeded(), eq(variables['python.container'], variables['PythonMain'])) - stage: 'FullCheck' dependsOn: - 'Overview' jobs: - job: 'Pylint' pool: vmImage: 'ubuntu-latest' container: $[ variables['PythonMain'] ] steps: - template: templates/azp-step-cache.yaml@azure parameters: keyfile: 'requirements_all.txt | requirements_test.txt | homeassistant/package_constraints.txt' build: | set -e python -m venv venv . venv/bin/activate pip install -U pip setuptools wheel pip install -r requirements_all.txt -c homeassistant/package_constraints.txt pip install -r requirements_test.txt -c homeassistant/package_constraints.txt - script: | . venv/bin/activate pip install -e . displayName: 'Install Home Assistant' - script: | . venv/bin/activate pylint homeassistant displayName: 'Run pylint' - job: 'Mypy' pool: vmImage: 'ubuntu-latest' container: $[ variables['PythonMain'] ] steps: - template: templates/azp-step-cache.yaml@azure parameters: keyfile: 'requirements_test.txt | setup.py | homeassistant/package_constraints.txt' build: | python -m venv venv . venv/bin/activate pip install -e . -r requirements_test.txt -c homeassistant/package_constraints.txt pre-commit install-hooks --config .pre-commit-config-all.yaml - script: | . venv/bin/activate pre-commit run --config .pre-commit-config-all.yaml mypy --all-files displayName: 'Run mypy'