diff --git a/azure-pipelines-ci.yml b/azure-pipelines-ci.yml index b94b936976a..a27d7659f1f 100644 --- a/azure-pipelines-ci.yml +++ b/azure-pipelines-ci.yml @@ -4,8 +4,13 @@ trigger: batch: true branches: include: + - rc - dev -pr: none + - master +pr: + - rc + - dev + - master resources: containers: @@ -20,6 +25,7 @@ variables: value: '2df3ae11-3bf6-49bc-a809-ba0d340d6a6d' - name: PythonMain value: '35' + - group: codecov stages: @@ -80,7 +86,7 @@ stages: steps: - script: | python --version > .cache - displayName: 'Set python $(python.version) for requirement cache' + displayName: 'Set python $(python.container) for requirement cache' - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 displayName: 'Restore artifacts based on Requirements' inputs: @@ -97,38 +103,55 @@ stages: pip install pytest-azurepipelines -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_test_all.txt, .cache' - targetfolder: './venv' + # 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.version)' + displayName: 'Install Home Assistant for python $(python.container)' - script: | . venv/bin/activate - pytest --timeout=9 --durations=10 --junitxml=junit/test-results.xml -qq -o console_output_style=count -p no:sugar tests - displayName: 'Run pytest for python $(python.version)' + 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-*.xml' - testRunTitle: 'Publish test results for Python $(python.version)' + 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: 'Pytlint' + - job: 'Pylint' pool: vmImage: 'ubuntu-latest' container: $[ variables['PythonMain'] ] steps: - script: | python --version > .cache - displayName: 'Set python $(python.version) for requirement cache' + displayName: 'Set python $(PythonMain) for requirement cache' - task: 1ESLighthouseEng.PipelineArtifactCaching.RestoreCacheV1.RestoreCache@1 displayName: 'Restore artifacts based on Requirements' inputs: @@ -154,7 +177,7 @@ stages: - script: | . venv/bin/activate pip install -e . - displayName: 'Install Home Assistant for python $(python.version)' + displayName: 'Install Home Assistant for python $(PythonMain)' - script: | . venv/bin/activate pylint homeassistant