2020-07-03 17:18:01 +00:00
|
|
|
name: CI
|
|
|
|
|
|
|
|
# yamllint disable-line rule:truthy
|
|
|
|
on:
|
|
|
|
push:
|
|
|
|
branches:
|
|
|
|
- dev
|
|
|
|
- rc
|
|
|
|
- master
|
|
|
|
pull_request: ~
|
|
|
|
|
|
|
|
env:
|
2021-09-08 03:59:02 +00:00
|
|
|
CACHE_VERSION: 3
|
2021-01-01 12:47:01 +00:00
|
|
|
DEFAULT_PYTHON: 3.8
|
2021-03-01 09:28:41 +00:00
|
|
|
PRE_COMMIT_CACHE: ~/.cache/pre-commit
|
2021-04-22 06:29:36 +00:00
|
|
|
SQLALCHEMY_WARN_20: 1
|
2020-07-03 17:18:01 +00:00
|
|
|
|
2021-11-23 09:05:48 +00:00
|
|
|
concurrency:
|
|
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
|
|
cancel-in-progress: true
|
|
|
|
|
2020-07-03 17:18:01 +00:00
|
|
|
jobs:
|
|
|
|
# Separate job to pre-populate the base dependency cache
|
|
|
|
# This prevent upcoming jobs to do the same individually
|
|
|
|
prepare-base:
|
|
|
|
name: Prepare base dependencies
|
|
|
|
runs-on: ubuntu-latest
|
2021-03-01 09:28:41 +00:00
|
|
|
outputs:
|
|
|
|
python-key: ${{ steps.generate-python-key.outputs.key }}
|
|
|
|
pre-commit-key: ${{ steps.generate-pre-commit-key.outputs.key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
2021-11-03 07:27:59 +00:00
|
|
|
uses: actions/checkout@v2.4.0
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
|
|
|
id: python
|
2021-11-18 09:21:08 +00:00
|
|
|
uses: actions/setup-python@v2.3.0
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
python-version: ${{ env.DEFAULT_PYTHON }}
|
2021-03-01 09:28:41 +00:00
|
|
|
- name: Generate partial Python venv restore key
|
|
|
|
id: generate-python-key
|
|
|
|
run: >-
|
|
|
|
echo "::set-output name=key::base-venv-${{ env.CACHE_VERSION }}-${{
|
|
|
|
hashFiles('requirements.txt') }}-${{
|
|
|
|
hashFiles('requirements_test.txt') }}-${{
|
|
|
|
hashFiles('homeassistant/package_constraints.txt') }}"
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Restore base Python virtual environment
|
|
|
|
id: cache-venv
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
path: venv
|
|
|
|
key: >-
|
2021-03-01 09:28:41 +00:00
|
|
|
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
|
|
|
steps.generate-python-key.outputs.key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
restore-keys: |
|
2021-03-01 09:28:41 +00:00
|
|
|
${{ runner.os }}-${{ steps.python.outputs.python-version }}-base-venv-${{ env.CACHE_VERSION }}-${{ hashFiles('requirements.txt') }}-${{ hashFiles('requirements_test.txt') }}-
|
|
|
|
${{ runner.os }}-${{ steps.python.outputs.python-version }}-base-venv-${{ env.CACHE_VERSION }}-${{ hashFiles('requirements.txt') }}-
|
|
|
|
${{ runner.os }}-${{ steps.python.outputs.python-version }}-base-venv-${{ env.CACHE_VERSION }}-
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Create Python virtual environment
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
python -m venv venv
|
|
|
|
. venv/bin/activate
|
2021-05-17 06:12:23 +00:00
|
|
|
pip install -U "pip<20.3" setuptools
|
2020-07-11 13:20:14 +00:00
|
|
|
pip install -r requirements.txt -r requirements_test.txt
|
2021-03-01 09:28:41 +00:00
|
|
|
- name: Generate partial pre-commit restore key
|
|
|
|
id: generate-pre-commit-key
|
|
|
|
run: >-
|
|
|
|
echo "::set-output name=key::pre-commit-${{ env.CACHE_VERSION }}-${{
|
|
|
|
hashFiles('.pre-commit-config.yaml') }}"
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Restore pre-commit environment from cache
|
|
|
|
id: cache-precommit
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
2021-03-01 09:28:41 +00:00
|
|
|
path: ${{ env.PRE_COMMIT_CACHE }}
|
|
|
|
key: >-
|
|
|
|
${{ runner.os }}-${{ steps.generate-pre-commit-key.outputs.key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
restore-keys: |
|
2021-03-01 09:28:41 +00:00
|
|
|
${{ runner.os }}-pre-commit-${{ env.CACHE_VERSION }}-
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Install pre-commit dependencies
|
|
|
|
if: steps.cache-precommit.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
|
|
|
pre-commit install-hooks
|
|
|
|
|
|
|
|
lint-bandit:
|
|
|
|
name: Check bandit
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs: prepare-base
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
2021-11-03 07:27:59 +00:00
|
|
|
uses: actions/checkout@v2.4.0
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
2021-11-18 09:21:08 +00:00
|
|
|
uses: actions/setup-python@v2.3.0
|
2020-07-03 17:18:01 +00:00
|
|
|
id: python
|
|
|
|
with:
|
|
|
|
python-version: ${{ env.DEFAULT_PYTHON }}
|
|
|
|
- name: Restore base Python virtual environment
|
|
|
|
id: cache-venv
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
path: venv
|
2021-03-01 09:28:41 +00:00
|
|
|
key: ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
|
|
|
needs.prepare-base.outputs.python-key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Fail job if Python cache restore failed
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
echo "Failed to restore Python virtual environment from cache"
|
|
|
|
exit 1
|
|
|
|
- name: Restore pre-commit environment from cache
|
|
|
|
id: cache-precommit
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
2021-03-01 09:28:41 +00:00
|
|
|
path: ${{ env.PRE_COMMIT_CACHE }}
|
|
|
|
key: ${{ runner.os }}-${{ needs.prepare-base.outputs.pre-commit-key }}
|
|
|
|
- name: Fail job if pre-commit cache restore failed
|
|
|
|
if: steps.cache-precommit.outputs.cache-hit != 'true'
|
2020-07-03 17:18:01 +00:00
|
|
|
run: |
|
2021-03-01 09:28:41 +00:00
|
|
|
echo "Failed to restore pre-commit environment from cache"
|
2020-07-03 17:18:01 +00:00
|
|
|
exit 1
|
|
|
|
- name: Run bandit
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
2020-07-05 00:19:46 +00:00
|
|
|
pre-commit run --hook-stage manual bandit --all-files --show-diff-on-failure
|
2020-07-03 17:18:01 +00:00
|
|
|
|
|
|
|
lint-black:
|
|
|
|
name: Check black
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs: prepare-base
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
2021-11-03 07:27:59 +00:00
|
|
|
uses: actions/checkout@v2.4.0
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
2021-11-18 09:21:08 +00:00
|
|
|
uses: actions/setup-python@v2.3.0
|
2020-07-03 17:18:01 +00:00
|
|
|
id: python
|
|
|
|
with:
|
|
|
|
python-version: ${{ env.DEFAULT_PYTHON }}
|
|
|
|
- name: Restore base Python virtual environment
|
|
|
|
id: cache-venv
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
path: venv
|
2021-03-01 09:28:41 +00:00
|
|
|
key: ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
|
|
|
needs.prepare-base.outputs.python-key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Fail job if Python cache restore failed
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
echo "Failed to restore Python virtual environment from cache"
|
|
|
|
exit 1
|
|
|
|
- name: Restore pre-commit environment from cache
|
|
|
|
id: cache-precommit
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
2021-03-01 09:28:41 +00:00
|
|
|
path: ${{ env.PRE_COMMIT_CACHE }}
|
|
|
|
key: ${{ runner.os }}-${{ needs.prepare-base.outputs.pre-commit-key }}
|
|
|
|
- name: Fail job if pre-commit cache restore failed
|
|
|
|
if: steps.cache-precommit.outputs.cache-hit != 'true'
|
2020-07-03 17:18:01 +00:00
|
|
|
run: |
|
2021-03-01 09:28:41 +00:00
|
|
|
echo "Failed to restore pre-commit environment from cache"
|
2020-07-03 17:18:01 +00:00
|
|
|
exit 1
|
|
|
|
- name: Run black
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
2020-07-05 00:19:46 +00:00
|
|
|
pre-commit run --hook-stage manual black --all-files --show-diff-on-failure
|
2020-07-03 17:18:01 +00:00
|
|
|
|
|
|
|
lint-flake8:
|
|
|
|
name: Check flake8
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs: prepare-base
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
2021-11-03 07:27:59 +00:00
|
|
|
uses: actions/checkout@v2.4.0
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
2021-11-18 09:21:08 +00:00
|
|
|
uses: actions/setup-python@v2.3.0
|
2020-07-03 17:18:01 +00:00
|
|
|
id: python
|
|
|
|
with:
|
|
|
|
python-version: ${{ env.DEFAULT_PYTHON }}
|
|
|
|
- name: Restore base Python virtual environment
|
|
|
|
id: cache-venv
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
path: venv
|
2021-03-01 09:28:41 +00:00
|
|
|
key: ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
|
|
|
needs.prepare-base.outputs.python-key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Fail job if Python cache restore failed
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
echo "Failed to restore Python virtual environment from cache"
|
|
|
|
exit 1
|
|
|
|
- name: Restore pre-commit environment from cache
|
|
|
|
id: cache-precommit
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
2021-03-01 09:28:41 +00:00
|
|
|
path: ${{ env.PRE_COMMIT_CACHE }}
|
|
|
|
key: ${{ runner.os }}-${{ needs.prepare-base.outputs.pre-commit-key }}
|
|
|
|
- name: Fail job if pre-commit cache restore failed
|
|
|
|
if: steps.cache-precommit.outputs.cache-hit != 'true'
|
2020-07-03 17:18:01 +00:00
|
|
|
run: |
|
2021-03-01 09:28:41 +00:00
|
|
|
echo "Failed to restore pre-commit environment from cache"
|
2020-07-03 17:18:01 +00:00
|
|
|
exit 1
|
2020-07-05 00:19:00 +00:00
|
|
|
- name: Register flake8 problem matcher
|
|
|
|
run: |
|
|
|
|
echo "::add-matcher::.github/workflows/matchers/flake8.json"
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Run flake8
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
|
|
|
pre-commit run --hook-stage manual flake8 --all-files
|
|
|
|
|
|
|
|
lint-isort:
|
|
|
|
name: Check isort
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs: prepare-base
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
2021-11-03 07:27:59 +00:00
|
|
|
uses: actions/checkout@v2.4.0
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
2021-11-18 09:21:08 +00:00
|
|
|
uses: actions/setup-python@v2.3.0
|
2020-07-03 17:18:01 +00:00
|
|
|
id: python
|
|
|
|
with:
|
|
|
|
python-version: ${{ env.DEFAULT_PYTHON }}
|
|
|
|
- name: Restore base Python virtual environment
|
|
|
|
id: cache-venv
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
path: venv
|
2021-03-01 09:28:41 +00:00
|
|
|
key: ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
|
|
|
needs.prepare-base.outputs.python-key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Fail job if Python cache restore failed
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
echo "Failed to restore Python virtual environment from cache"
|
|
|
|
exit 1
|
|
|
|
- name: Restore pre-commit environment from cache
|
|
|
|
id: cache-precommit
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
2021-03-01 09:28:41 +00:00
|
|
|
path: ${{ env.PRE_COMMIT_CACHE }}
|
|
|
|
key: ${{ runner.os }}-${{ needs.prepare-base.outputs.pre-commit-key }}
|
|
|
|
- name: Fail job if pre-commit cache restore failed
|
|
|
|
if: steps.cache-precommit.outputs.cache-hit != 'true'
|
2020-07-03 17:18:01 +00:00
|
|
|
run: |
|
2021-03-01 09:28:41 +00:00
|
|
|
echo "Failed to restore pre-commit environment from cache"
|
2020-07-03 17:18:01 +00:00
|
|
|
exit 1
|
|
|
|
- name: Run isort
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
2020-07-05 00:19:46 +00:00
|
|
|
pre-commit run --hook-stage manual isort --all-files --show-diff-on-failure
|
2020-07-03 17:18:01 +00:00
|
|
|
|
2021-11-24 10:56:50 +00:00
|
|
|
lint-other:
|
|
|
|
name: Check other linters
|
2020-07-03 17:18:01 +00:00
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs: prepare-base
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
2021-11-03 07:27:59 +00:00
|
|
|
uses: actions/checkout@v2.4.0
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
2021-11-18 09:21:08 +00:00
|
|
|
uses: actions/setup-python@v2.3.0
|
2020-07-03 17:18:01 +00:00
|
|
|
id: python
|
|
|
|
with:
|
|
|
|
python-version: ${{ env.DEFAULT_PYTHON }}
|
|
|
|
- name: Restore base Python virtual environment
|
|
|
|
id: cache-venv
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
path: venv
|
2021-03-01 09:28:41 +00:00
|
|
|
key: ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
|
|
|
needs.prepare-base.outputs.python-key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Fail job if Python cache restore failed
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
echo "Failed to restore Python virtual environment from cache"
|
|
|
|
exit 1
|
|
|
|
- name: Restore pre-commit environment from cache
|
|
|
|
id: cache-precommit
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
2021-03-01 09:28:41 +00:00
|
|
|
path: ${{ env.PRE_COMMIT_CACHE }}
|
|
|
|
key: ${{ runner.os }}-${{ needs.prepare-base.outputs.pre-commit-key }}
|
|
|
|
- name: Fail job if pre-commit cache restore failed
|
|
|
|
if: steps.cache-precommit.outputs.cache-hit != 'true'
|
2020-07-03 17:18:01 +00:00
|
|
|
run: |
|
2021-03-01 09:28:41 +00:00
|
|
|
echo "Failed to restore pre-commit environment from cache"
|
2020-07-03 17:18:01 +00:00
|
|
|
exit 1
|
2021-11-24 10:56:50 +00:00
|
|
|
|
|
|
|
- name: Run pyupgrade
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
|
|
|
pre-commit run --hook-stage manual pyupgrade --all-files --show-diff-on-failure
|
|
|
|
|
|
|
|
- name: Register yamllint problem matcher
|
|
|
|
run: |
|
|
|
|
echo "::add-matcher::.github/workflows/matchers/yamllint.json"
|
|
|
|
- name: Run yamllint
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
|
|
|
pre-commit run --hook-stage manual yamllint --all-files --show-diff-on-failure
|
|
|
|
|
2020-07-04 23:59:41 +00:00
|
|
|
- name: Register check-json problem matcher
|
|
|
|
run: |
|
|
|
|
echo "::add-matcher::.github/workflows/matchers/check-json.json"
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Run check-json
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
|
|
|
pre-commit run --hook-stage manual check-json --all-files
|
|
|
|
|
2021-11-24 10:56:50 +00:00
|
|
|
- name: Register check executables problem matcher
|
2020-07-03 17:18:01 +00:00
|
|
|
run: |
|
2021-11-24 10:56:50 +00:00
|
|
|
echo "::add-matcher::.github/workflows/matchers/check-executables-have-shebangs.json"
|
|
|
|
- name: Run executables check
|
2020-07-03 17:18:01 +00:00
|
|
|
run: |
|
2021-11-24 10:56:50 +00:00
|
|
|
. venv/bin/activate
|
|
|
|
pre-commit run --hook-stage manual check-executables-have-shebangs --all-files
|
|
|
|
|
|
|
|
- name: Register codespell problem matcher
|
|
|
|
run: |
|
|
|
|
echo "::add-matcher::.github/workflows/matchers/codespell.json"
|
|
|
|
- name: Run codespell
|
2020-07-03 17:18:01 +00:00
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
2021-11-24 10:56:50 +00:00
|
|
|
pre-commit run --show-diff-on-failure --hook-stage manual codespell --all-files
|
2020-07-03 17:18:01 +00:00
|
|
|
|
2021-11-24 10:56:50 +00:00
|
|
|
- name: Register hadolint problem matcher
|
|
|
|
run: |
|
|
|
|
echo "::add-matcher::.github/workflows/matchers/hadolint.json"
|
2020-07-03 17:18:01 +00:00
|
|
|
|
2021-11-24 10:56:50 +00:00
|
|
|
- name: Check Dockerfile
|
|
|
|
uses: docker://hadolint/hadolint:v1.18.2
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
2021-11-24 10:56:50 +00:00
|
|
|
args: hadolint Dockerfile
|
|
|
|
- name: Check Dockerfile.dev
|
|
|
|
uses: docker://hadolint/hadolint:v1.18.2
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
2021-11-24 10:56:50 +00:00
|
|
|
args: hadolint Dockerfile.dev
|
2020-07-03 17:18:01 +00:00
|
|
|
|
|
|
|
hassfest:
|
|
|
|
name: Check hassfest
|
|
|
|
runs-on: ubuntu-latest
|
2020-09-11 19:38:32 +00:00
|
|
|
needs: prepare-tests
|
|
|
|
strategy:
|
|
|
|
matrix:
|
2021-01-01 12:47:01 +00:00
|
|
|
python-version: [3.8]
|
2020-09-11 19:38:32 +00:00
|
|
|
container: homeassistant/ci-azure:${{ matrix.python-version }}
|
2020-07-03 17:18:01 +00:00
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
2021-11-03 07:27:59 +00:00
|
|
|
uses: actions/checkout@v2.4.0
|
2021-01-01 12:47:01 +00:00
|
|
|
- name: Restore full Python ${{ matrix.python-version }} virtual environment
|
2020-07-03 17:18:01 +00:00
|
|
|
id: cache-venv
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
path: venv
|
2021-03-01 09:28:41 +00:00
|
|
|
key: ${{ runner.os }}-${{ matrix.python-version }}-${{
|
|
|
|
needs.prepare-tests.outputs.python-key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Fail job if Python cache restore failed
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
echo "Failed to restore Python virtual environment from cache"
|
|
|
|
exit 1
|
|
|
|
- name: Run hassfest
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
2020-09-11 19:38:32 +00:00
|
|
|
python -m script.hassfest --requirements --action validate
|
2020-07-03 17:18:01 +00:00
|
|
|
|
|
|
|
gen-requirements-all:
|
|
|
|
name: Check all requirements
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs: prepare-base
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
2021-11-03 07:27:59 +00:00
|
|
|
uses: actions/checkout@v2.4.0
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
|
2021-11-18 09:21:08 +00:00
|
|
|
uses: actions/setup-python@v2.3.0
|
2020-07-03 17:18:01 +00:00
|
|
|
id: python
|
|
|
|
with:
|
|
|
|
python-version: ${{ env.DEFAULT_PYTHON }}
|
|
|
|
- name: Restore base Python virtual environment
|
|
|
|
id: cache-venv
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
path: venv
|
2021-03-01 09:28:41 +00:00
|
|
|
key: ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
|
|
|
|
needs.prepare-base.outputs.python-key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Fail job if Python cache restore failed
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
echo "Failed to restore Python virtual environment from cache"
|
|
|
|
exit 1
|
|
|
|
- name: Run gen_requirements_all.py
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
|
|
|
python -m script.gen_requirements_all validate
|
|
|
|
|
|
|
|
prepare-tests:
|
|
|
|
name: Prepare tests for Python ${{ matrix.python-version }}
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
|
|
matrix:
|
2021-01-01 12:47:01 +00:00
|
|
|
python-version: [3.8, 3.9]
|
2021-03-01 09:28:41 +00:00
|
|
|
outputs:
|
|
|
|
python-key: ${{ steps.generate-python-key.outputs.key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
container: homeassistant/ci-azure:${{ matrix.python-version }}
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
2021-11-03 07:27:59 +00:00
|
|
|
uses: actions/checkout@v2.4.0
|
2021-03-01 09:28:41 +00:00
|
|
|
- name: Generate partial Python venv restore key
|
|
|
|
id: generate-python-key
|
|
|
|
run: >-
|
|
|
|
echo "::set-output name=key::venv-${{ env.CACHE_VERSION }}-${{
|
|
|
|
hashFiles('requirements_test.txt') }}-${{
|
|
|
|
hashFiles('requirements_all.txt') }}-${{
|
|
|
|
hashFiles('homeassistant/package_constraints.txt') }}"
|
2021-01-01 12:47:01 +00:00
|
|
|
- name: Restore full Python ${{ matrix.python-version }} virtual environment
|
2020-07-03 17:18:01 +00:00
|
|
|
id: cache-venv
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
path: venv
|
|
|
|
key: >-
|
2021-03-01 09:28:41 +00:00
|
|
|
${{ runner.os }}-${{ matrix.python-version }}-${{
|
|
|
|
steps.generate-python-key.outputs.key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
restore-keys: |
|
2021-03-01 09:28:41 +00:00
|
|
|
${{ runner.os }}-${{ matrix.python-version }}-venv-${{ env.CACHE_VERSION }}-${{ hashFiles('requirements_test.txt') }}-${{ hashFiles('requirements_all.txt') }}-
|
|
|
|
${{ runner.os }}-${{ matrix.python-version }}-venv-${{ env.CACHE_VERSION }}-${{ hashFiles('requirements_test.txt') }}-
|
|
|
|
${{ runner.os }}-${{ matrix.python-version }}-venv-${{ env.CACHE_VERSION }}-
|
2021-01-01 12:47:01 +00:00
|
|
|
- name: Create full Python ${{ matrix.python-version }} virtual environment
|
2020-07-03 17:18:01 +00:00
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
2021-01-01 11:51:27 +00:00
|
|
|
# Temporary addition of cmake, needed to build some Python 3.9 packages
|
|
|
|
apt-get update
|
|
|
|
apt-get -y install cmake
|
|
|
|
|
2020-07-03 17:18:01 +00:00
|
|
|
python -m venv venv
|
|
|
|
. venv/bin/activate
|
2021-09-30 14:29:51 +00:00
|
|
|
pip install -U "pip<20.3" setuptools wheel
|
2020-07-11 13:20:14 +00:00
|
|
|
pip install -r requirements_all.txt
|
|
|
|
pip install -r requirements_test.txt
|
2020-07-03 17:18:01 +00:00
|
|
|
pip install -e .
|
|
|
|
|
|
|
|
pylint:
|
|
|
|
name: Check pylint
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs: prepare-tests
|
|
|
|
strategy:
|
|
|
|
matrix:
|
2021-01-01 12:47:01 +00:00
|
|
|
python-version: [3.8]
|
2020-07-03 17:18:01 +00:00
|
|
|
container: homeassistant/ci-azure:${{ matrix.python-version }}
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
2021-11-03 07:27:59 +00:00
|
|
|
uses: actions/checkout@v2.4.0
|
2021-01-01 12:47:01 +00:00
|
|
|
- name: Restore full Python ${{ matrix.python-version }} virtual environment
|
2020-07-03 17:18:01 +00:00
|
|
|
id: cache-venv
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
path: venv
|
2021-03-01 09:28:41 +00:00
|
|
|
key: ${{ runner.os }}-${{ matrix.python-version }}-${{
|
|
|
|
needs.prepare-tests.outputs.python-key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Fail job if Python cache restore failed
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
echo "Failed to restore Python virtual environment from cache"
|
|
|
|
exit 1
|
2020-07-05 00:00:51 +00:00
|
|
|
- name: Register pylint problem matcher
|
|
|
|
run: |
|
|
|
|
echo "::add-matcher::.github/workflows/matchers/pylint.json"
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Run pylint
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
|
|
|
pylint homeassistant
|
|
|
|
|
|
|
|
mypy:
|
|
|
|
name: Check mypy
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs: prepare-tests
|
|
|
|
strategy:
|
|
|
|
matrix:
|
2021-01-01 12:47:01 +00:00
|
|
|
python-version: [3.8]
|
2020-07-03 17:18:01 +00:00
|
|
|
container: homeassistant/ci-azure:${{ matrix.python-version }}
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
2021-11-03 07:27:59 +00:00
|
|
|
uses: actions/checkout@v2.4.0
|
2021-01-01 12:47:01 +00:00
|
|
|
- name: Restore full Python ${{ matrix.python-version }} virtual environment
|
2020-07-03 17:18:01 +00:00
|
|
|
id: cache-venv
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
path: venv
|
2021-03-01 09:28:41 +00:00
|
|
|
key: ${{ runner.os }}-${{ matrix.python-version }}-${{
|
|
|
|
needs.prepare-tests.outputs.python-key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Fail job if Python cache restore failed
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
echo "Failed to restore Python virtual environment from cache"
|
|
|
|
exit 1
|
2020-07-05 00:04:39 +00:00
|
|
|
- name: Register mypy problem matcher
|
|
|
|
run: |
|
|
|
|
echo "::add-matcher::.github/workflows/matchers/mypy.json"
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Run mypy
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
|
|
|
mypy homeassistant
|
|
|
|
|
2021-11-23 22:57:45 +00:00
|
|
|
changes:
|
|
|
|
name: Determine what has changed
|
|
|
|
outputs:
|
2021-11-24 01:13:38 +00:00
|
|
|
# core: ${{ steps.core.outputs.any }}
|
|
|
|
# Temporary disable
|
|
|
|
core: 'true'
|
2021-11-23 22:57:45 +00:00
|
|
|
integrations: ${{ steps.integrations.outputs.changes }}
|
|
|
|
tests: ${{ steps.tests.outputs.integrations }}
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
|
|
|
uses: actions/checkout@v2.4.0
|
|
|
|
- name: Filter for core changes
|
|
|
|
uses: dorny/paths-filter@v2.10.2
|
|
|
|
id: core
|
|
|
|
with:
|
|
|
|
filters: .core_files.yaml
|
|
|
|
- name: Create a list of integrations to filter for changes
|
|
|
|
id: integration-filters
|
|
|
|
run: |
|
|
|
|
integrations=$(ls -Ad ./homeassistant/components/[!_]* | xargs -n 1 basename)
|
|
|
|
touch .integration_paths.yaml
|
|
|
|
for integration in $integrations; do
|
|
|
|
echo "${integration}: [homeassistant/components/${integration}/*, tests/components/${integration}/*]" \
|
|
|
|
>> .integration_paths.yaml;
|
|
|
|
done
|
|
|
|
echo "Result:"
|
|
|
|
cat .integration_paths.yaml
|
|
|
|
- name: Filter for integration changes
|
|
|
|
uses: dorny/paths-filter@v2.10.2
|
|
|
|
id: integrations
|
|
|
|
with:
|
|
|
|
filters: .integration_paths.yaml
|
|
|
|
- name: Determine integration tests to run
|
|
|
|
if: ${{ steps.integrations.outputs.changes }}
|
|
|
|
id: tests
|
|
|
|
run: |
|
|
|
|
possible_integrations=$(echo '${{ steps.integrations.outputs.changes }}' | jq -cSr '. | join(" ")')
|
|
|
|
integrations=$(for integration in $possible_integrations; do [[ -d "tests/components/${integration}" ]] && echo -n "${integration},"; done)
|
|
|
|
integrations="${integrations::-1}"
|
|
|
|
|
|
|
|
# If more than one, add brackets to it
|
|
|
|
if [[ "${integrations}" == *","* ]]; then
|
|
|
|
integrations="{${integrations}}"
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "::set-output name=integrations::${integrations}"
|
|
|
|
|
|
|
|
pytest-full:
|
|
|
|
if: ${{ needs.changes.outputs.core == 'true' }}
|
2020-07-03 17:18:01 +00:00
|
|
|
runs-on: ubuntu-latest
|
2021-11-23 10:21:55 +00:00
|
|
|
needs:
|
2021-11-23 22:57:45 +00:00
|
|
|
- changes
|
2021-11-23 10:21:55 +00:00
|
|
|
- gen-requirements-all
|
|
|
|
- hassfest
|
|
|
|
- lint-bandit
|
|
|
|
- lint-black
|
2021-11-24 10:56:50 +00:00
|
|
|
- lint-other
|
2021-11-23 10:21:55 +00:00
|
|
|
- lint-isort
|
|
|
|
- mypy
|
|
|
|
- prepare-tests
|
2020-07-03 17:18:01 +00:00
|
|
|
strategy:
|
2021-03-01 09:28:41 +00:00
|
|
|
fail-fast: false
|
2020-07-03 17:18:01 +00:00
|
|
|
matrix:
|
2021-11-23 15:34:38 +00:00
|
|
|
group: [1, 2, 3, 4, 5, 6]
|
2021-01-01 12:47:01 +00:00
|
|
|
python-version: [3.8, 3.9]
|
2020-07-03 17:18:01 +00:00
|
|
|
name: >-
|
|
|
|
Run tests Python ${{ matrix.python-version }} (group ${{ matrix.group }})
|
|
|
|
container: homeassistant/ci-azure:${{ matrix.python-version }}
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
2021-11-03 07:27:59 +00:00
|
|
|
uses: actions/checkout@v2.4.0
|
2021-01-01 12:47:01 +00:00
|
|
|
- name: Restore full Python ${{ matrix.python-version }} virtual environment
|
2020-07-03 17:18:01 +00:00
|
|
|
id: cache-venv
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
path: venv
|
2021-03-01 09:28:41 +00:00
|
|
|
key: ${{ runner.os }}-${{ matrix.python-version }}-${{
|
|
|
|
needs.prepare-tests.outputs.python-key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Fail job if Python cache restore failed
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
echo "Failed to restore Python virtual environment from cache"
|
|
|
|
exit 1
|
2020-07-05 12:10:42 +00:00
|
|
|
- name: Register Python problem matcher
|
|
|
|
run: |
|
|
|
|
echo "::add-matcher::.github/workflows/matchers/python.json"
|
|
|
|
- name: Install Pytest Annotation plugin
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
|
|
|
# Ideally this should be part of our dependencies
|
|
|
|
# However this plugin is fairly new and doesn't run correctly
|
|
|
|
# on a non-GitHub environment.
|
2021-10-24 19:22:17 +00:00
|
|
|
pip install pytest-github-actions-annotate-failures==0.1.3
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Run pytest
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
2021-11-18 05:23:25 +00:00
|
|
|
python3 -X dev -m pytest \
|
2020-07-03 17:18:01 +00:00
|
|
|
-qq \
|
|
|
|
--timeout=9 \
|
|
|
|
--durations=10 \
|
|
|
|
-n auto \
|
|
|
|
--dist=loadfile \
|
2021-11-23 15:34:38 +00:00
|
|
|
--test-group-count 6 \
|
2020-07-03 17:18:01 +00:00
|
|
|
--test-group=${{ matrix.group }} \
|
|
|
|
--cov homeassistant \
|
2021-03-01 09:28:41 +00:00
|
|
|
--cov-report= \
|
2020-07-03 17:18:01 +00:00
|
|
|
-o console_output_style=count \
|
|
|
|
-p no:sugar \
|
|
|
|
tests
|
|
|
|
- name: Upload coverage artifact
|
2021-06-17 06:31:20 +00:00
|
|
|
uses: actions/upload-artifact@v2.2.4
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
name: coverage-${{ matrix.python-version }}-group${{ matrix.group }}
|
|
|
|
path: .coverage
|
|
|
|
- name: Check dirty
|
|
|
|
run: |
|
|
|
|
./script/check_dirty
|
|
|
|
|
2021-11-23 22:57:45 +00:00
|
|
|
pytest-partial:
|
|
|
|
if: ${{ needs.changes.outputs.core == 'false' }}
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs:
|
|
|
|
- changes
|
|
|
|
- prepare-tests
|
|
|
|
strategy:
|
|
|
|
fail-fast: false
|
|
|
|
matrix:
|
|
|
|
python-version: [3.8, 3.9]
|
|
|
|
name: >-
|
|
|
|
Run partial tests Python ${{ matrix.python-version }}
|
|
|
|
container: homeassistant/ci-azure:${{ matrix.python-version }}
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
|
|
|
uses: actions/checkout@v2.4.0
|
|
|
|
- name: Restore full Python ${{ matrix.python-version }} virtual environment
|
|
|
|
id: cache-venv
|
|
|
|
uses: actions/cache@v2.1.7
|
|
|
|
with:
|
|
|
|
path: venv
|
|
|
|
key: ${{ runner.os }}-${{ matrix.python-version }}-${{
|
|
|
|
needs.prepare-tests.outputs.python-key }}
|
|
|
|
- name: Fail job if Python cache restore failed
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
echo "Failed to restore Python virtual environment from cache"
|
|
|
|
exit 1
|
|
|
|
- name: Register Python problem matcher
|
|
|
|
run: |
|
|
|
|
echo "::add-matcher::.github/workflows/matchers/python.json"
|
|
|
|
- name: Install Pytest Annotation plugin
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
|
|
|
# Ideally this should be part of our dependencies
|
|
|
|
# However this plugin is fairly new and doesn't run correctly
|
|
|
|
# on a non-GitHub environment.
|
|
|
|
pip install pytest-github-actions-annotate-failures==0.1.3
|
|
|
|
- name: Run pytest
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
|
|
|
python3 -X dev -m pytest \
|
|
|
|
-qq \
|
|
|
|
--timeout=9 \
|
|
|
|
--durations=10 \
|
|
|
|
-n auto \
|
|
|
|
--dist=loadfile \
|
|
|
|
--cov homeassistant \
|
|
|
|
--cov-report= \
|
|
|
|
-o console_output_style=count \
|
|
|
|
-p no:sugar \
|
|
|
|
tests/components/${{ needs.changes.outputs.tests }}
|
|
|
|
- name: Upload coverage artifact
|
|
|
|
uses: actions/upload-artifact@v2.2.4
|
|
|
|
with:
|
|
|
|
name: coverage-${{ matrix.python-version }}
|
|
|
|
path: .coverage
|
|
|
|
- name: Check dirty
|
|
|
|
run: |
|
|
|
|
./script/check_dirty
|
|
|
|
|
|
|
|
coverage-full:
|
2020-07-03 17:18:01 +00:00
|
|
|
name: Process test coverage
|
|
|
|
runs-on: ubuntu-latest
|
2021-11-23 22:57:45 +00:00
|
|
|
needs: ["prepare-tests", "pytest-full"]
|
2020-07-03 17:18:01 +00:00
|
|
|
strategy:
|
|
|
|
matrix:
|
2021-01-01 12:47:01 +00:00
|
|
|
python-version: [3.8]
|
2020-07-03 17:18:01 +00:00
|
|
|
container: homeassistant/ci-azure:${{ matrix.python-version }}
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
2021-11-03 07:27:59 +00:00
|
|
|
uses: actions/checkout@v2.4.0
|
2021-01-01 12:47:01 +00:00
|
|
|
- name: Restore full Python ${{ matrix.python-version }} virtual environment
|
2020-07-03 17:18:01 +00:00
|
|
|
id: cache-venv
|
2021-11-23 08:29:22 +00:00
|
|
|
uses: actions/cache@v2.1.7
|
2020-07-03 17:18:01 +00:00
|
|
|
with:
|
|
|
|
path: venv
|
2021-03-01 09:28:41 +00:00
|
|
|
key: ${{ runner.os }}-${{ matrix.python-version }}-${{
|
|
|
|
needs.prepare-tests.outputs.python-key }}
|
2020-07-03 17:18:01 +00:00
|
|
|
- name: Fail job if Python cache restore failed
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
echo "Failed to restore Python virtual environment from cache"
|
|
|
|
exit 1
|
|
|
|
- name: Download all coverage artifacts
|
|
|
|
uses: actions/download-artifact@v2
|
|
|
|
- name: Combine coverage results
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
|
|
|
coverage combine coverage*/.coverage*
|
|
|
|
coverage report --fail-under=94
|
|
|
|
coverage xml
|
|
|
|
- name: Upload coverage to Codecov
|
2021-09-14 06:50:29 +00:00
|
|
|
uses: codecov/codecov-action@v2.1.0
|
2021-11-23 22:57:45 +00:00
|
|
|
|
|
|
|
coverage-partial:
|
|
|
|
name: Process partial test coverage
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
needs: ["prepare-tests", "pytest-partial"]
|
|
|
|
strategy:
|
|
|
|
matrix:
|
|
|
|
python-version: [3.8]
|
|
|
|
container: homeassistant/ci-azure:${{ matrix.python-version }}
|
|
|
|
steps:
|
|
|
|
- name: Check out code from GitHub
|
|
|
|
uses: actions/checkout@v2.4.0
|
|
|
|
- name: Restore full Python ${{ matrix.python-version }} virtual environment
|
|
|
|
id: cache-venv
|
|
|
|
uses: actions/cache@v2.1.7
|
|
|
|
with:
|
|
|
|
path: venv
|
|
|
|
key: ${{ runner.os }}-${{ matrix.python-version }}-${{
|
|
|
|
needs.prepare-tests.outputs.python-key }}
|
|
|
|
- name: Fail job if Python cache restore failed
|
|
|
|
if: steps.cache-venv.outputs.cache-hit != 'true'
|
|
|
|
run: |
|
|
|
|
echo "Failed to restore Python virtual environment from cache"
|
|
|
|
exit 1
|
|
|
|
- name: Download all coverage artifacts
|
|
|
|
uses: actions/download-artifact@v2
|
|
|
|
- name: Combine coverage results
|
|
|
|
run: |
|
|
|
|
. venv/bin/activate
|
|
|
|
coverage combine coverage*/.coverage*
|
|
|
|
coverage xml
|
|
|
|
- name: Upload coverage to Codecov
|
|
|
|
uses: codecov/codecov-action@v2.1.0
|
2021-11-24 00:34:03 +00:00
|
|
|
with:
|
|
|
|
flags: partial
|