# https://dev.azure.com/home-assistant trigger: batch: true branches: include: - rc - dev - master pr: - rc - dev - master resources: containers: - container: 35 image: homeassistant/ci-azure:3.5 - container: 36 image: homeassistant/ci-azure:3.6 - container: 37 image: homeassistant/ci-azure:3.7 variables: - name: ArtifactFeed value: '2df3ae11-3bf6-49bc-a809-ba0d340d6a6d' - name: PythonMain value: '35' - group: codecov stages: - stage: 'Overview' jobs: - job: 'Lint' pool: vmImage: 'ubuntu-latest' container: $[ variables['PythonMain'] ] steps: - script: | python -m venv venv . venv/bin/activate pip install flake8 displayName: 'Setup Env' - script: | . venv/bin/activate flake8 homeassistant tests script displayName: 'Run flake8' - job: 'Validate' pool: vmImage: 'ubuntu-latest' container: $[ variables['PythonMain'] ] steps: - script: | python -m venv venv . venv/bin/activate pip install -e . displayName: 'Setup Env' - 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' - stage: 'Tests' dependsOn: - 'Overview' jobs: - job: 'PyTest' pool: vmImage: 'ubuntu-latest' strategy: maxParallel: 3 matrix: Python35: python.container: '35' Python36: python.container: '36' Python37: python.container: '37' container: $[ variables['python.container'] ] steps: - script: | python --version > .cache displayName: 'Set python $(python.container) for requirement cache' - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 displayName: 'Restore artifacts based on Requirements' inputs: keyfile: 'requirements_test_all.txt, .cache' targetfolder: './venv' vstsFeed: '$(ArtifactFeed)' - script: | set -e python -m venv venv . venv/bin/activate pip install -U pip setuptools pip install -r requirements_test_all.txt -c homeassistant/package_constraints.txt pip install pytest-azurepipelines -c homeassistant/package_constraints.txt displayName: 'Create Virtual Environment & Install Requirements' condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) # Explicit Cache Save (instead of using RestoreAndSaveCache) # Dont wait with cache save for all the other task in this job to complete (±30 minutes), other parallel jobs might utilize this - task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 displayName: 'Save artifacts based on Requirements' inputs: keyfile: 'requirements_test_all.txt, .cache' targetfolder: './venv' vstsFeed: '$(ArtifactFeed)' - script: | . venv/bin/activate pip install -e . displayName: 'Install Home Assistant for python $(python.container)' - script: | . venv/bin/activate pytest --timeout=9 --durations=10 --junitxml=test-results.xml -qq -o console_output_style=count -p no:sugar tests displayName: 'Run pytest for python $(python.container)' condition: and(succeeded(), ne(variables['python.container'], variables['PythonMain'])) - script: | . venv/bin/activate pytest --timeout=9 --durations=10 --junitxml=test-results.xml --cov --cov-report=xml -qq -o console_output_style=count -p no:sugar tests codecov displayName: 'Run pytest for python $(python.container) / coverage' env: CODECOV_TOKEN: '$(codecovToken)' condition: and(succeeded(), eq(variables['python.container'], variables['PythonMain'])) - task: PublishTestResults@2 condition: succeededOrFailed() inputs: testResultsFiles: 'test-results.xml' testRunTitle: 'Publish test results for Python $(python.container)' - task: PublishCodeCoverageResults@1 inputs: codeCoverageTool: cobertura summaryFileLocation: coverage.xml displayName: 'publish coverage artifact' condition: and(succeeded(), eq(variables['python.container'], variables['PythonMain'])) - stage: 'FullCheck' dependsOn: - 'Overview' jobs: - job: 'Pylint' pool: vmImage: 'ubuntu-latest' container: $[ variables['PythonMain'] ] steps: - script: | python --version > .cache displayName: 'Set python $(PythonMain) for requirement cache' - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 displayName: 'Restore artifacts based on Requirements' inputs: keyfile: 'requirements_all.txt, requirements_test.txt, .cache' targetfolder: './venv' vstsFeed: '$(ArtifactFeed)' - script: | set -e python -m venv venv . venv/bin/activate pip install -U pip setuptools pip install -r requirements_all.txt -c homeassistant/package_constraints.txt pip install -r requirements_test.txt -c homeassistant/package_constraints.txt displayName: 'Create Virtual Environment & Install Requirements' condition: and(succeeded(), ne(variables['CacheRestored'], 'true')) - task: 1ESLighthouseEng.PipelineArtifactCaching.SaveCacheV1.SaveCache@1 displayName: 'Save artifacts based on Requirements' inputs: keyfile: 'requirements_all.txt, requirements_test.txt, .cache' targetfolder: './venv' vstsFeed: '$(ArtifactFeed)' - script: | . venv/bin/activate pip install -e . displayName: 'Install Home Assistant for python $(PythonMain)' - script: | . venv/bin/activate pylint homeassistant displayName: 'Run pylint' - job: 'Mypy' pool: vmImage: 'ubuntu-latest' container: $[ variables['PythonMain'] ] steps: - script: | python -m venv venv . venv/bin/activate pip install -r requirements_test.txt displayName: 'Setup Env' - script: | . venv/bin/activate TYPING_FILES=$(cat mypyrc) mypy $TYPING_FILES displayName: 'Run mypy'