2020-07-03 17:18:01 +00:00
name : CI
# yamllint disable-line rule:truthy
on :
push :
branches :
- dev
- rc
- master
pull_request : ~
2022-02-18 10:54:44 +00:00
workflow_dispatch :
inputs :
full :
2022-03-30 08:39:30 +00:00
description : "Full run (regardless of changes)"
2022-02-18 10:54:44 +00:00
default : false
type : boolean
lint-only :
2022-03-30 08:39:30 +00:00
description : "Skip pytest"
2022-02-18 10:54:44 +00:00
default : false
type : boolean
2023-01-20 10:43:52 +00:00
pylint-only :
description : "Only run pylint"
default : false
type : boolean
mypy-only :
description : "Only run mypy"
default : false
type : boolean
2020-07-03 17:18:01 +00:00
env :
2023-02-07 00:58:00 +00:00
CACHE_VERSION : 5
2023-02-03 20:02:35 +00:00
PIP_CACHE_VERSION : 4
2023-02-09 12:33:10 +00:00
MYPY_CACHE_VERSION : 4
2023-01-25 19:50:44 +00:00
HA_SHORT_VERSION : 2023.3
2023-01-22 19:40:33 +00:00
DEFAULT_PYTHON : "3.10"
2023-02-16 17:38:32 +00:00
ALL_PYTHON_VERSIONS : "['3.10', '3.11']"
2023-02-13 22:28:39 +00:00
# 10.3 is the oldest supported version
# - 10.3.32 is the version currently shipped with Synology (as of 17 Feb 2022)
2023-02-13 13:42:04 +00:00
# 10.6 is the current long-term-support
# - 10.6.10 is the version currently shipped with the Add-on (as of 31 Jan 2023)
# 10.10 is the latest short-term-support
# - 10.10.3 is the latest (as of 6 Feb 2023)
2023-02-13 22:28:39 +00:00
MARIADB_VERSIONS : "['mariadb:10.3.32','mariadb:10.6.10','mariadb:10.10.3']"
2023-02-15 14:56:15 +00:00
# 12 is the oldest supported version
# - 12.14 is the latest (as of 9 Feb 2023)
# 15 is the latest version
# - 15.2 is the latest (as of 9 Feb 2023)
POSTGRESQL_VERSIONS : "['postgres:12.14','postgres:15.2']"
2021-03-01 09:28:41 +00:00
PRE_COMMIT_CACHE : ~/.cache/pre-commit
2021-12-30 10:49:05 +00:00
PIP_CACHE : /tmp/pip-cache
2021-04-22 06:29:36 +00:00
SQLALCHEMY_WARN_20 : 1
2021-12-21 09:35:48 +00:00
PYTHONASYNCIODEBUG : 1
2022-06-13 18:44:46 +00:00
HASS_CI : 1
2020-07-03 17:18:01 +00:00
2021-12-03 17:56:07 +00:00
concurrency :
group : ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress : true
2021-11-23 09:05:48 +00:00
2020-07-03 17:18:01 +00:00
jobs :
2022-07-07 16:53:24 +00:00
info :
name : Collect information & changes data
2021-11-24 17:14:41 +00:00
outputs :
# In case of issues with the partial run, use the following line instead:
# test_full_suite: 'true'
core : ${{ steps.core.outputs.changes }}
integrations_glob : ${{ steps.info.outputs.integrations_glob }}
2022-07-07 16:53:24 +00:00
integrations : ${{ steps.integrations.outputs.changes }}
pre-commit_cache_key : ${{ steps.generate_pre-commit_cache_key.outputs.key }}
python_cache_key : ${{ steps.generate_python_cache_key.outputs.key }}
2022-01-17 13:06:30 +00:00
requirements : ${{ steps.core.outputs.requirements }}
2023-02-08 21:21:47 +00:00
mariadb_groups : ${{ steps.info.outputs.mariadb_groups }}
postgresql_groups : ${{ steps.info.outputs.postgresql_groups }}
2022-09-20 18:24:39 +00:00
python_versions : ${{ steps.info.outputs.python_versions }}
2022-07-07 16:53:24 +00:00
test_full_suite : ${{ steps.info.outputs.test_full_suite }}
test_group_count : ${{ steps.info.outputs.test_group_count }}
test_groups : ${{ steps.info.outputs.test_groups }}
tests_glob : ${{ steps.info.outputs.tests_glob }}
tests : ${{ steps.info.outputs.tests }}
runs-on : ubuntu-20.04
2021-11-24 17:14:41 +00:00
steps :
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2022-07-07 16:53:24 +00:00
- name : Generate partial Python venv restore key
id : generate_python_cache_key
run : >-
2022-10-13 21:47:59 +00:00
echo "key=venv-${{ env.CACHE_VERSION }}-${{
2022-07-07 16:53:24 +00:00
hashFiles('requirements_test.txt') }}-${{
hashFiles('requirements_all.txt') }}-${{
2022-10-13 21:47:59 +00:00
hashFiles('homeassistant/package_constraints.txt') }}" >> $GITHUB_OUTPUT
2022-07-07 16:53:24 +00:00
- name : Generate partial pre-commit restore key
id : generate_pre-commit_cache_key
run : >-
2022-10-13 21:47:59 +00:00
echo "key=pre-commit-${{ env.CACHE_VERSION }}-${{
hashFiles('.pre-commit-config.yaml') }}" >> $GITHUB_OUTPUT
2021-11-24 17:14:41 +00:00
- name : Filter for core changes
2022-10-13 07:57:07 +00:00
uses : dorny/paths-filter@v2.11.1
2021-11-24 17:14:41 +00:00
id : core
with :
filters : .core_files.yaml
- name : Create a list of integrations to filter for changes
run : |
integrations=$(ls -Ad ./homeassistant/components/[!_]* | xargs -n 1 basename)
touch .integration_paths.yaml
for integration in $integrations; do
2022-03-20 09:32:10 +00:00
echo "${integration}: [homeassistant/components/${integration}/**, tests/components/${integration}/**]" \
2021-11-24 17:14:41 +00:00
>> .integration_paths.yaml;
done
echo "Result:"
cat .integration_paths.yaml
- name : Filter for integration changes
2022-10-13 07:57:07 +00:00
uses : dorny/paths-filter@v2.11.1
2021-11-24 17:14:41 +00:00
id : integrations
with :
filters : .integration_paths.yaml
- name : Collect additional information
id : info
run : |
# Defaults
integrations_glob=""
2023-02-08 21:21:47 +00:00
mariadb_groups=${MARIADB_VERSIONS}
postgresql_groups=${POSTGRESQL_VERSIONS}
2021-11-24 17:14:41 +00:00
test_full_suite="true"
2022-07-07 18:55:47 +00:00
test_groups="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
test_group_count=10
2021-11-24 17:14:41 +00:00
tests="[]"
tests_glob=""
if [[ "${{ steps.integrations.outputs.changes }}" != "[]" ]];
then
# Create a file glob for the integrations
integrations_glob=$(echo '${{ steps.integrations.outputs.changes }}' | jq -cSr '. | join(",")')
[ [ "${integrations_glob}" == *","* ]] && integrations_glob="{${integrations_glob}}"
# Create list of testable integrations
possible_integrations=$(echo '${{ steps.integrations.outputs.changes }}' | jq -cSr '.[]')
tests=$(
for integration in ${possible_integrations};
do
if [[ -d "tests/components/${integration}" ]]; then
echo -n "\"${integration}\",";
fi;
done
)
[ [ ! -z "${tests}" ]] && tests="${tests::-1}"
tests="[${tests}]"
test_groups="${tests}"
# Test group count should be 1, we don't split partial tests
test_group_count=1
# Create a file glob for the integrations tests
tests_glob=$(echo "${tests}" | jq -cSr '. | join(",")')
[ [ "${tests_glob}" == *","* ]] && tests_glob="{${tests_glob}}"
2023-02-08 21:21:47 +00:00
mariadb_groups="[]"
postgresql_groups="[]"
2021-11-24 17:14:41 +00:00
test_full_suite="false"
fi
2021-11-24 17:43:58 +00:00
# We need to run the full suite on certain branches.
# Or, in case core files are touched, for the full suite as well.
2021-11-24 17:14:41 +00:00
if [[ "${{ github.ref }}" == "refs/heads/dev" ]] \
|| [[ "${{ github.ref }}" == "refs/heads/master" ]] \
2021-11-24 17:43:58 +00:00
|| [[ "${{ github.ref }}" == "refs/heads/rc" ]] \
2022-02-18 10:54:44 +00:00
|| [[ "${{ steps.core.outputs.any }}" == "true" ]] \
2022-03-21 15:13:19 +00:00
|| [[ "${{ github.event.inputs.full }}" == "true" ]] \
|| [[ "${{ contains(github.event.pull_request.labels.*.name, 'ci-full-run') }}" == "true" ]];
2021-11-24 17:14:41 +00:00
then
2023-02-08 21:21:47 +00:00
mariadb_groups=${MARIADB_VERSIONS}
postgresql_groups=${POSTGRESQL_VERSIONS}
2022-07-07 18:55:47 +00:00
test_groups="[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
test_group_count=10
2021-11-24 17:14:41 +00:00
test_full_suite="true"
fi
# Output & sent to GitHub Actions
2023-02-08 21:21:47 +00:00
echo "mariadb_groups: ${mariadb_groups}"
echo "mariadb_groups=${mariadb_groups}" >> $GITHUB_OUTPUT
echo "postgresql_groups: ${postgresql_groups}"
echo "postgresql_groups=${postgresql_groups}" >> $GITHUB_OUTPUT
2022-09-20 18:24:39 +00:00
echo "python_versions: ${ALL_PYTHON_VERSIONS}"
2022-10-13 21:47:59 +00:00
echo "python_versions=${ALL_PYTHON_VERSIONS}" >> $GITHUB_OUTPUT
2021-11-24 17:14:41 +00:00
echo "test_full_suite: ${test_full_suite}"
2022-10-13 21:47:59 +00:00
echo "test_full_suite=${test_full_suite}" >> $GITHUB_OUTPUT
2021-11-24 17:14:41 +00:00
echo "integrations_glob: ${integrations_glob}"
2022-10-13 21:47:59 +00:00
echo "integrations_glob=${integrations_glob}" >> $GITHUB_OUTPUT
2021-11-24 17:14:41 +00:00
echo "test_group_count: ${test_group_count}"
2022-10-13 21:47:59 +00:00
echo "test_group_count=${test_group_count}" >> $GITHUB_OUTPUT
2021-11-24 17:14:41 +00:00
echo "test_groups: ${test_groups}"
2022-10-13 21:47:59 +00:00
echo "test_groups=${test_groups}" >> $GITHUB_OUTPUT
2021-11-24 17:14:41 +00:00
echo "tests: ${tests}"
2022-10-13 21:47:59 +00:00
echo "tests=${tests}" >> $GITHUB_OUTPUT
2021-11-24 17:14:41 +00:00
echo "tests_glob: ${tests_glob}"
2022-10-13 21:47:59 +00:00
echo "tests_glob=${tests_glob}" >> $GITHUB_OUTPUT
2021-11-24 17:14:41 +00:00
2022-07-07 16:53:24 +00:00
pre-commit :
name : Prepare pre-commit base
runs-on : ubuntu-20.04
2023-01-20 10:43:52 +00:00
if : |
github.event.inputs.pylint-only != 'true'
&& github.event.inputs.mypy-only != 'true'
2022-07-07 16:53:24 +00:00
needs :
- info
2020-07-03 17:18:01 +00:00
steps :
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2020-07-03 17:18:01 +00:00
- name : Set up Python ${{ env.DEFAULT_PYTHON }}
id : python
2023-01-13 19:07:52 +00:00
uses : actions/setup-python@v4.5.0
2020-07-03 17:18:01 +00:00
with :
python-version : ${{ env.DEFAULT_PYTHON }}
2022-10-11 11:54:55 +00:00
check-latest : true
2020-07-03 17:18:01 +00:00
- name : Restore base Python virtual environment
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache@v3.2.5
2020-07-03 17:18:01 +00:00
with :
path : venv
2022-10-11 11:54:55 +00:00
key : >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{
needs.info.outputs.pre-commit_cache_key }}
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
2022-01-12 12:52:39 +00:00
python --version
2022-07-07 16:53:24 +00:00
pip install "$(cat requirements_test.txt | grep pre-commit)"
2020-07-03 17:18:01 +00:00
- name : Restore pre-commit environment from cache
id : cache-precommit
2023-02-10 07:43:24 +00:00
uses : actions/cache@v3.2.5
2020-07-03 17:18:01 +00:00
with :
2021-03-01 09:28:41 +00:00
path : ${{ env.PRE_COMMIT_CACHE }}
2022-10-11 11:54:55 +00:00
key : >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.pre-commit_cache_key }}
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-black :
name : Check black
2022-07-07 16:53:24 +00:00
runs-on : ubuntu-20.04
2021-11-24 17:14:41 +00:00
needs :
2022-07-07 16:53:24 +00:00
- info
- pre-commit
2020-07-03 17:18:01 +00:00
steps :
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2020-07-03 17:18:01 +00:00
- name : Set up Python ${{ env.DEFAULT_PYTHON }}
2023-01-13 19:07:52 +00:00
uses : actions/setup-python@v4.5.0
2020-07-03 17:18:01 +00:00
id : python
with :
python-version : ${{ env.DEFAULT_PYTHON }}
2022-10-11 11:54:55 +00:00
check-latest : true
2020-07-03 17:18:01 +00:00
- name : Restore base Python virtual environment
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2020-07-03 17:18:01 +00:00
with :
path : venv
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-10-11 11:54:55 +00:00
key : >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{
needs.info.outputs.pre-commit_cache_key }}
2020-07-03 17:18:01 +00:00
- name : Restore pre-commit environment from cache
id : cache-precommit
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2020-07-03 17:18:01 +00:00
with :
2021-03-01 09:28:41 +00:00
path : ${{ env.PRE_COMMIT_CACHE }}
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-10-11 11:54:55 +00:00
key : >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.pre-commit_cache_key }}
2021-11-24 17:14:41 +00:00
- name : Run black (fully)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'true'
2020-07-03 17:18:01 +00:00
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
2021-11-24 17:14:41 +00:00
- name : Run black (partially)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'false'
2021-11-25 13:13:03 +00:00
shell : bash
2021-11-24 17:14:41 +00:00
run : |
. venv/bin/activate
2021-12-23 15:41:47 +00:00
shopt -s globstar
2022-12-02 08:16:20 +00:00
pre-commit run --hook-stage manual black --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*} --show-diff-on-failure
2020-07-03 17:18:01 +00:00
lint-flake8 :
name : Check flake8
2022-07-07 16:53:24 +00:00
runs-on : ubuntu-20.04
2021-11-24 17:14:41 +00:00
needs :
2022-07-07 16:53:24 +00:00
- info
- pre-commit
2020-07-03 17:18:01 +00:00
steps :
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2020-07-03 17:18:01 +00:00
- name : Set up Python ${{ env.DEFAULT_PYTHON }}
2023-01-13 19:07:52 +00:00
uses : actions/setup-python@v4.5.0
2020-07-03 17:18:01 +00:00
id : python
with :
python-version : ${{ env.DEFAULT_PYTHON }}
2022-10-11 11:54:55 +00:00
check-latest : true
2020-07-03 17:18:01 +00:00
- name : Restore base Python virtual environment
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2020-07-03 17:18:01 +00:00
with :
path : venv
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-10-11 11:54:55 +00:00
key : >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{
needs.info.outputs.pre-commit_cache_key }}
2020-07-03 17:18:01 +00:00
- name : Restore pre-commit environment from cache
id : cache-precommit
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2020-07-03 17:18:01 +00:00
with :
2021-03-01 09:28:41 +00:00
path : ${{ env.PRE_COMMIT_CACHE }}
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-10-11 11:54:55 +00:00
key : >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.pre-commit_cache_key }}
2020-07-05 00:19:00 +00:00
- name : Register flake8 problem matcher
run : |
echo "::add-matcher::.github/workflows/matchers/flake8.json"
2021-11-24 17:14:41 +00:00
- name : Run flake8 (fully)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'true'
2020-07-03 17:18:01 +00:00
run : |
. venv/bin/activate
pre-commit run --hook-stage manual flake8 --all-files
2021-11-24 17:14:41 +00:00
- name : Run flake8 (partially)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'false'
2021-11-25 13:13:03 +00:00
shell : bash
2021-11-24 17:14:41 +00:00
run : |
. venv/bin/activate
2021-12-23 15:41:47 +00:00
shopt -s globstar
2022-12-02 08:16:20 +00:00
pre-commit run --hook-stage manual flake8 --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*}
2023-01-30 15:42:01 +00:00
2023-01-24 11:15:16 +00:00
lint-ruff :
name : Check ruff
2023-02-17 22:07:02 +00:00
runs-on : ubuntu-20.04
2023-01-24 11:15:16 +00:00
needs :
- info
- pre-commit
steps :
- name : Check out code from GitHub
uses : actions/checkout@v3.3.0
- name : Set up Python ${{ env.DEFAULT_PYTHON }}
uses : actions/setup-python@v4.5.0
id : python
with :
python-version : ${{ env.DEFAULT_PYTHON }}
check-latest : true
- name : Restore base Python virtual environment
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2023-01-24 11:15:16 +00:00
with :
path : venv
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2023-01-24 11:15:16 +00:00
key : >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{
needs.info.outputs.pre-commit_cache_key }}
- name : Restore pre-commit environment from cache
id : cache-precommit
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2023-01-24 11:15:16 +00:00
with :
path : ${{ env.PRE_COMMIT_CACHE }}
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2023-01-24 11:15:16 +00:00
key : >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.pre-commit_cache_key }}
- name : Register ruff problem matcher
run : |
echo "::add-matcher::.github/workflows/matchers/ruff.json"
- name : Run ruff (fully)
if : needs.info.outputs.test_full_suite == 'true'
run : |
. venv/bin/activate
2023-02-07 14:53:26 +00:00
pre-commit run --hook-stage manual ruff --all-files --show-diff-on-failure
2023-01-24 11:15:16 +00:00
- name : Run ruff (partially)
if : needs.info.outputs.test_full_suite == 'false'
shell : bash
run : |
. venv/bin/activate
shopt -s globstar
2023-02-07 14:53:26 +00:00
pre-commit run --hook-stage manual ruff --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*} --show-diff-on-failure
2023-01-30 15:42:01 +00:00
2020-07-03 17:18:01 +00:00
lint-isort :
name : Check isort
2022-07-07 16:53:24 +00:00
runs-on : ubuntu-20.04
needs :
- info
- pre-commit
2020-07-03 17:18:01 +00:00
steps :
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2020-07-03 17:18:01 +00:00
- name : Set up Python ${{ env.DEFAULT_PYTHON }}
2023-01-13 19:07:52 +00:00
uses : actions/setup-python@v4.5.0
2020-07-03 17:18:01 +00:00
id : python
with :
python-version : ${{ env.DEFAULT_PYTHON }}
2022-10-11 11:54:55 +00:00
check-latest : true
2020-07-03 17:18:01 +00:00
- name : Restore base Python virtual environment
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2020-07-03 17:18:01 +00:00
with :
path : venv
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-10-11 11:54:55 +00:00
key : >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{
needs.info.outputs.pre-commit_cache_key }}
2020-07-03 17:18:01 +00:00
- name : Restore pre-commit environment from cache
id : cache-precommit
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2020-07-03 17:18:01 +00:00
with :
2021-03-01 09:28:41 +00:00
path : ${{ env.PRE_COMMIT_CACHE }}
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-10-11 11:54:55 +00:00
key : >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.pre-commit_cache_key }}
2020-07-03 17:18:01 +00:00
- 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
2022-07-07 16:53:24 +00:00
runs-on : ubuntu-20.04
2021-11-25 19:53:49 +00:00
needs :
2022-07-07 16:53:24 +00:00
- info
- pre-commit
2020-07-03 17:18:01 +00:00
steps :
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2020-07-03 17:18:01 +00:00
- name : Set up Python ${{ env.DEFAULT_PYTHON }}
2023-01-13 19:07:52 +00:00
uses : actions/setup-python@v4.5.0
2020-07-03 17:18:01 +00:00
id : python
with :
python-version : ${{ env.DEFAULT_PYTHON }}
2022-10-11 11:54:55 +00:00
check-latest : true
2020-07-03 17:18:01 +00:00
- name : Restore base Python virtual environment
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2020-07-03 17:18:01 +00:00
with :
path : venv
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-10-11 11:54:55 +00:00
key : >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-venv-${{
needs.info.outputs.pre-commit_cache_key }}
2020-07-03 17:18:01 +00:00
- name : Restore pre-commit environment from cache
id : cache-precommit
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2020-07-03 17:18:01 +00:00
with :
2021-03-01 09:28:41 +00:00
path : ${{ env.PRE_COMMIT_CACHE }}
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-10-11 11:54:55 +00:00
key : >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.pre-commit_cache_key }}
2021-11-24 10:56:50 +00:00
2021-11-25 20:51:08 +00:00
- name : Run pyupgrade (fully)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'true'
2021-11-24 10:56:50 +00:00
run : |
. venv/bin/activate
pre-commit run --hook-stage manual pyupgrade --all-files --show-diff-on-failure
2021-11-25 20:51:08 +00:00
- name : Run pyupgrade (partially)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'false'
2021-11-25 20:51:08 +00:00
shell : bash
run : |
. venv/bin/activate
2021-12-23 15:41:47 +00:00
shopt -s globstar
2022-12-02 08:16:20 +00:00
pre-commit run --hook-stage manual pyupgrade --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*} --show-diff-on-failure
2021-11-24 10:56:50 +00:00
- 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
2022-04-07 09:48:43 +00:00
- name : Run prettier (fully)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'true'
2022-03-30 11:10:48 +00:00
run : |
. venv/bin/activate
pre-commit run --hook-stage manual prettier --all-files
2022-04-07 09:48:43 +00:00
- name : Run prettier (partially)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'false'
2022-04-07 09:48:43 +00:00
shell : bash
run : |
. venv/bin/activate
2022-12-02 08:16:20 +00:00
pre-commit run --hook-stage manual prettier --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*}
2022-04-07 09:48:43 +00:00
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"
- 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
2021-11-25 19:53:49 +00:00
- name : Run bandit (fully)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'true'
2021-11-25 19:53:49 +00:00
run : |
. venv/bin/activate
pre-commit run --hook-stage manual bandit --all-files --show-diff-on-failure
- name : Run bandit (partially)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'false'
2021-11-25 19:53:49 +00:00
shell : bash
run : |
. venv/bin/activate
2021-12-23 15:41:47 +00:00
shopt -s globstar
2022-12-02 08:16:20 +00:00
pre-commit run --hook-stage manual bandit --files {homeassistant,tests}/components/${{ needs.info.outputs.integrations_glob }}/{*,**/*} --show-diff-on-failure
2021-11-25 19:53:49 +00:00
2022-07-07 16:53:24 +00:00
base :
name : Prepare dependencies
runs-on : ubuntu-20.04
needs : info
timeout-minutes : 60
2020-09-11 19:38:32 +00:00
strategy :
matrix :
2022-09-20 18:24:39 +00:00
python-version : ${{ fromJSON(needs.info.outputs.python_versions) }}
2020-07-03 17:18:01 +00:00
steps :
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2022-07-07 16:53:24 +00:00
- name : Set up Python ${{ matrix.python-version }}
id : python
2023-01-13 19:07:52 +00:00
uses : actions/setup-python@v4.5.0
2022-07-07 16:53:24 +00:00
with :
python-version : ${{ matrix.python-version }}
2022-10-11 11:54:55 +00:00
check-latest : true
2022-07-07 16:53:24 +00:00
- name : Generate partial pip restore key
id : generate-pip-key
run : >-
2022-10-13 21:47:59 +00:00
echo "key=pip-${{ env.PIP_CACHE_VERSION }}-${{
env.HA_SHORT_VERSION }}-$(date -u '+%Y-%m-%dT%H:%M:%s')" >> $GITHUB_OUTPUT
2022-07-07 16:53:24 +00:00
- name : Restore base Python virtual environment
2020-07-03 17:18:01 +00:00
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache@v3.2.5
2020-07-03 17:18:01 +00:00
with :
path : venv
2022-07-07 16:53:24 +00:00
key : >-
2022-09-20 18:24:39 +00:00
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
2022-07-07 16:53:24 +00:00
needs.info.outputs.python_cache_key }}
- name : Restore pip wheel cache
if : steps.cache-venv.outputs.cache-hit != 'true'
2023-02-10 07:43:24 +00:00
uses : actions/cache@v3.2.5
2022-07-07 16:53:24 +00:00
with :
path : ${{ env.PIP_CACHE }}
key : >-
2022-09-20 18:24:39 +00:00
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
2022-07-07 16:53:24 +00:00
steps.generate-pip-key.outputs.key }}
restore-keys : |
2022-09-20 18:24:39 +00:00
${{ runner.os }}-${{ steps.python.outputs.python-version }}-pip-${{ env.PIP_CACHE_VERSION }}-${{ env.HA_SHORT_VERSION }}-
2022-07-07 16:53:24 +00:00
- name : Install additional OS dependencies
2020-07-03 17:18:01 +00:00
if : steps.cache-venv.outputs.cache-hit != 'true'
run : |
2022-07-07 16:53:24 +00:00
sudo apt-get update
sudo apt-get -y install \
bluez \
ffmpeg \
libavcodec-dev \
libavdevice-dev \
libavfilter-dev \
libavformat-dev \
libavutil-dev \
libswresample-dev \
libswscale-dev \
libudev-dev
- name : Create Python virtual environment
if : steps.cache-venv.outputs.cache-hit != 'true'
2020-07-03 17:18:01 +00:00
run : |
2022-07-07 16:53:24 +00:00
python -m venv venv
2020-07-03 17:18:01 +00:00
. venv/bin/activate
2022-07-07 16:53:24 +00:00
python --version
2023-02-03 20:02:35 +00:00
pip install --cache-dir=$PIP_CACHE -U "pip>=21.0,<23.1" setuptools wheel
2022-07-07 16:53:24 +00:00
pip install --cache-dir=$PIP_CACHE -r requirements_all.txt --use-deprecated=legacy-resolver
pip install --cache-dir=$PIP_CACHE -r requirements_test.txt --use-deprecated=legacy-resolver
pip install -e .
2020-07-03 17:18:01 +00:00
2022-07-07 16:53:24 +00:00
hassfest :
name : Check hassfest
runs-on : ubuntu-20.04
2023-01-20 10:43:52 +00:00
if : |
github.event.inputs.pylint-only != 'true'
&& github.event.inputs.mypy-only != 'true'
2022-07-07 16:53:24 +00:00
needs :
- info
- base
2020-07-03 17:18:01 +00:00
steps :
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2020-07-03 17:18:01 +00:00
- name : Set up Python ${{ env.DEFAULT_PYTHON }}
id : python
2023-01-13 19:07:52 +00:00
uses : actions/setup-python@v4.5.0
2020-07-03 17:18:01 +00:00
with :
python-version : ${{ env.DEFAULT_PYTHON }}
2022-10-11 11:54:55 +00:00
check-latest : true
2022-07-07 16:53:24 +00:00
- name : Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
2020-07-03 17:18:01 +00:00
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2020-07-03 17:18:01 +00:00
with :
path : venv
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-07-07 16:53:24 +00:00
key : >-
2022-09-20 18:24:39 +00:00
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
2022-07-07 16:53:24 +00:00
needs.info.outputs.python_cache_key }}
- name : Run hassfest
2020-07-03 17:18:01 +00:00
run : |
. venv/bin/activate
2022-07-07 16:53:24 +00:00
python -m script.hassfest --requirements --action validate
2020-07-03 17:18:01 +00:00
2022-07-07 16:53:24 +00:00
gen-requirements-all :
name : Check all requirements
runs-on : ubuntu-20.04
2023-01-20 10:43:52 +00:00
if : |
github.event.inputs.pylint-only != 'true'
&& github.event.inputs.mypy-only != 'true'
2022-07-07 16:53:24 +00:00
needs :
- info
- base
2020-07-03 17:18:01 +00:00
steps :
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2022-07-07 16:53:24 +00:00
- name : Set up Python ${{ env.DEFAULT_PYTHON }}
id : python
2023-01-13 19:07:52 +00:00
uses : actions/setup-python@v4.5.0
2022-07-07 16:53:24 +00:00
with :
python-version : ${{ env.DEFAULT_PYTHON }}
2022-10-11 11:54:55 +00:00
check-latest : true
2022-07-07 16:53:24 +00:00
- name : Restore base Python virtual environment
2020-07-03 17:18:01 +00:00
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2020-07-03 17:18:01 +00:00
with :
path : venv
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2020-07-03 17:18:01 +00:00
key : >-
2022-09-20 18:24:39 +00:00
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
2022-07-07 16:53:24 +00:00
needs.info.outputs.python_cache_key }}
- name : Run gen_requirements_all.py
run : |
2020-07-03 17:18:01 +00:00
. venv/bin/activate
2022-07-07 16:53:24 +00:00
python -m script.gen_requirements_all validate
2020-07-03 17:18:01 +00:00
pylint :
name : Check pylint
2022-07-07 16:53:24 +00:00
runs-on : ubuntu-20.04
2022-01-05 17:53:47 +00:00
timeout-minutes : 20
2023-01-20 10:43:52 +00:00
if : |
github.event.inputs.mypy-only != 'true'
|| github.event.inputs.pylint-only == 'true'
2021-11-24 17:14:41 +00:00
needs :
2022-07-07 16:53:24 +00:00
- info
- base
2020-07-03 17:18:01 +00:00
steps :
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2022-07-07 16:53:24 +00:00
- name : Set up Python ${{ env.DEFAULT_PYTHON }}
id : python
2023-01-13 19:07:52 +00:00
uses : actions/setup-python@v4.5.0
2022-07-07 16:53:24 +00:00
with :
python-version : ${{ env.DEFAULT_PYTHON }}
2022-10-11 11:54:55 +00:00
check-latest : true
2022-07-07 16:53:24 +00:00
- name : Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
2020-07-03 17:18:01 +00:00
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2020-07-03 17:18:01 +00:00
with :
path : venv
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-07-07 16:53:24 +00:00
key : >-
2022-09-20 18:24:39 +00:00
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
2022-07-07 16:53:24 +00:00
needs.info.outputs.python_cache_key }}
2020-07-05 00:00:51 +00:00
- name : Register pylint problem matcher
run : |
echo "::add-matcher::.github/workflows/matchers/pylint.json"
2021-11-24 17:14:41 +00:00
- name : Run pylint (fully)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'true'
2020-07-03 17:18:01 +00:00
run : |
. venv/bin/activate
2022-01-12 12:52:39 +00:00
python --version
2022-06-30 18:49:41 +00:00
pylint --ignore-missing-annotations=y homeassistant
2021-11-24 17:14:41 +00:00
- name : Run pylint (partially)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'false'
2021-11-25 13:13:03 +00:00
shell : bash
2021-11-24 17:14:41 +00:00
run : |
. venv/bin/activate
2022-01-12 12:52:39 +00:00
python --version
2022-07-07 16:53:24 +00:00
pylint --ignore-missing-annotations=y homeassistant/components/${{ needs.info.outputs.integrations_glob }}
2020-07-03 17:18:01 +00:00
mypy :
name : Check mypy
2022-07-07 16:53:24 +00:00
runs-on : ubuntu-20.04
2023-01-20 10:43:52 +00:00
if : |
github.event.inputs.pylint-only != 'true'
|| github.event.inputs.mypy-only == 'true'
2021-11-24 17:14:41 +00:00
needs :
2022-07-07 16:53:24 +00:00
- info
- base
2020-07-03 17:18:01 +00:00
steps :
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2022-07-07 16:53:24 +00:00
- name : Set up Python ${{ env.DEFAULT_PYTHON }}
id : python
2023-01-13 19:07:52 +00:00
uses : actions/setup-python@v4.5.0
2022-07-07 16:53:24 +00:00
with :
python-version : ${{ env.DEFAULT_PYTHON }}
2022-10-11 11:54:55 +00:00
check-latest : true
2023-01-26 14:59:37 +00:00
- name : Generate partial mypy restore key
id : generate-mypy-key
run : |
mypy_version=$(cat requirements_test.txt | grep mypy | cut -d '=' -f 3)
echo "version=$mypy_version" >> $GITHUB_OUTPUT
echo "key=mypy-${{ env.MYPY_CACHE_VERSION }}-$mypy_version-${{
env.HA_SHORT_VERSION }}-$(date -u '+%Y-%m-%dT%H:%M:%s')" >> $GITHUB_OUTPUT
2022-07-07 16:53:24 +00:00
- name : Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
2020-07-03 17:18:01 +00:00
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2020-07-03 17:18:01 +00:00
with :
path : venv
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-07-07 16:53:24 +00:00
key : >-
2022-09-20 18:24:39 +00:00
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
2022-07-07 16:53:24 +00:00
needs.info.outputs.python_cache_key }}
2023-01-26 14:59:37 +00:00
- name : Restore mypy cache
2023-02-10 07:43:24 +00:00
uses : actions/cache@v3.2.5
2023-01-26 14:59:37 +00:00
with :
path : .mypy_cache
key : >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
steps.generate-mypy-key.outputs.key }}
restore-keys : |
${{ runner.os }}-${{ steps.python.outputs.python-version }}-mypy-${{
env.MYPY_CACHE_VERSION }}-${{ steps.generate-mypy-key.outputs.version }}-${{
env.HA_SHORT_VERSION }}-
2020-07-05 00:04:39 +00:00
- name : Register mypy problem matcher
run : |
echo "::add-matcher::.github/workflows/matchers/mypy.json"
2021-11-24 17:14:41 +00:00
- name : Run mypy (fully)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'true'
2020-07-03 17:18:01 +00:00
run : |
. venv/bin/activate
2022-01-12 12:52:39 +00:00
python --version
2022-06-01 22:06:19 +00:00
mypy homeassistant pylint
2021-11-24 17:14:41 +00:00
- name : Run mypy (partially)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'false'
2021-11-25 13:13:03 +00:00
shell : bash
2021-11-23 22:57:45 +00:00
run : |
2021-11-24 17:14:41 +00:00
. venv/bin/activate
2022-01-12 12:52:39 +00:00
python --version
2022-07-07 16:53:24 +00:00
mypy homeassistant/components/${{ needs.info.outputs.integrations_glob }}
2021-11-23 22:57:45 +00:00
2022-01-17 13:06:30 +00:00
pip-check :
2022-07-07 16:53:24 +00:00
runs-on : ubuntu-20.04
2023-01-20 10:43:52 +00:00
if : |
github.event.inputs.pylint-only != 'true'
&& github.event.inputs.mypy-only != 'true'
2022-01-17 13:06:30 +00:00
needs :
2022-07-07 16:53:24 +00:00
- info
- base
2022-01-17 13:06:30 +00:00
strategy :
fail-fast : false
matrix :
2022-09-20 18:24:39 +00:00
python-version : ${{ fromJson(needs.info.outputs.python_versions) }}
2022-01-17 13:06:30 +00:00
name : Run pip check ${{ matrix.python-version }}
steps :
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2022-07-07 16:53:24 +00:00
- name : Set up Python ${{ matrix.python-version }}
id : python
2023-01-13 19:07:52 +00:00
uses : actions/setup-python@v4.5.0
2022-07-07 16:53:24 +00:00
with :
python-version : ${{ matrix.python-version }}
2022-10-11 11:54:55 +00:00
check-latest : true
2022-01-17 13:06:30 +00:00
- name : Restore full Python ${{ matrix.python-version }} virtual environment
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2022-01-17 13:06:30 +00:00
with :
path : venv
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-07-07 16:53:24 +00:00
key : >-
2022-09-20 18:24:39 +00:00
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
2022-07-07 16:53:24 +00:00
needs.info.outputs.python_cache_key }}
2022-01-17 13:06:30 +00:00
- name : Run pip check
run : |
. venv/bin/activate
./script/pip_check $PIP_CACHE
2021-11-24 17:14:41 +00:00
pytest :
2022-07-07 16:53:24 +00:00
runs-on : ubuntu-20.04
2022-02-19 14:18:40 +00:00
if : |
(github.event_name != 'push' || github.event.repository.full_name == 'home-assistant/core')
&& github.event.inputs.lint-only != 'true'
2023-01-20 10:43:52 +00:00
&& github.event.inputs.pylint-only != 'true'
&& github.event.inputs.mypy-only != 'true'
2022-07-07 16:53:24 +00:00
&& (needs.info.outputs.test_full_suite == 'true' || needs.info.outputs.tests_glob)
2021-11-23 10:21:55 +00:00
needs :
2022-07-07 16:53:24 +00:00
- info
- base
2021-11-23 10:21:55 +00:00
- gen-requirements-all
- hassfest
- lint-isort
2023-01-31 08:31:49 +00:00
- lint-other
- lint-ruff
2021-11-23 10:21:55 +00:00
- mypy
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 :
2022-07-07 16:53:24 +00:00
group : ${{ fromJson(needs.info.outputs.test_groups) }}
2022-09-20 18:24:39 +00:00
python-version : ${{ fromJson(needs.info.outputs.python_versions) }}
2020-07-03 17:18:01 +00:00
name : >-
2021-11-24 17:14:41 +00:00
Run tests Python ${{ matrix.python-version }} (${{ matrix.group }})
2020-07-03 17:18:01 +00:00
steps :
2022-07-07 16:53:24 +00:00
- name : Install additional OS dependencies
run : |
sudo apt-get update
sudo apt-get -y install \
bluez \
ffmpeg
2020-07-03 17:18:01 +00:00
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2022-07-07 16:53:24 +00:00
- name : Set up Python ${{ matrix.python-version }}
id : python
2023-01-13 19:07:52 +00:00
uses : actions/setup-python@v4.5.0
2022-07-07 16:53:24 +00:00
with :
python-version : ${{ matrix.python-version }}
2022-10-11 11:54:55 +00:00
check-latest : true
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
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2020-07-03 17:18:01 +00:00
with :
path : venv
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-09-20 18:24:39 +00:00
key : ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
2022-07-07 16:53:24 +00:00
needs.info.outputs.python_cache_key }}
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
2021-11-25 20:45:14 +00:00
- name : Register pytest slow test problem matcher
run : |
echo "::add-matcher::.github/workflows/matchers/pytest-slow.json"
2023-02-06 14:06:43 +00:00
- name : Compile English translations
run : |
. venv/bin/activate
python3 -m script.translations develop --all
2021-11-24 17:14:41 +00:00
- name : Run pytest (fully)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'true'
2022-05-17 17:36:02 +00:00
timeout-minutes : 60
2020-07-03 17:18:01 +00:00
run : |
. venv/bin/activate
2022-01-12 12:52:39 +00:00
python --version
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 \
2022-07-07 16:53:24 +00:00
--test-group-count ${{ needs.info.outputs.test_group_count }} \
2020-07-03 17:18:01 +00:00
--test-group=${{ matrix.group }} \
2022-06-24 22:48:27 +00:00
--cov="homeassistant" \
2021-11-25 14:05:20 +00:00
--cov-report=xml \
2020-07-03 17:18:01 +00:00
-o console_output_style=count \
-p no:sugar \
tests
2021-11-24 17:14:41 +00:00
- name : Run pytest (partially)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'false'
timeout-minutes : 10
2022-01-07 14:30:45 +00:00
shell : bash
2021-11-23 22:57:45 +00:00
run : |
. venv/bin/activate
2022-01-12 12:52:39 +00:00
python --version
2022-01-07 14:30:45 +00:00
if [[ ! -f "tests/components/${{ matrix.group }}/__init__.py" ]]; then
echo "::error:: missing file tests/components/${{ matrix.group }}/__init__.py"
exit 1
fi
2021-11-23 22:57:45 +00:00
python3 -X dev -m pytest \
-qq \
--timeout=9 \
2022-06-28 02:51:02 +00:00
-n auto \
2022-06-24 22:48:27 +00:00
--cov="homeassistant.components.${{ matrix.group }}" \
2021-11-25 14:05:20 +00:00
--cov-report=xml \
--cov-report=term-missing \
2021-11-23 22:57:45 +00:00
-o console_output_style=count \
2021-11-25 20:45:14 +00:00
--durations=0 \
--durations-min=1 \
2021-12-02 13:38:00 +00:00
-p no:sugar \
tests/components/${{ matrix.group }}
2021-12-02 18:00:17 +00:00
- name : Upload coverage artifact
2023-01-09 09:30:14 +00:00
uses : actions/upload-artifact@v3.1.2
2021-12-02 18:00:17 +00:00
with :
name : coverage-${{ matrix.python-version }}-${{ matrix.group }}
path : coverage.xml
- name : Check dirty
run : |
./script/check_dirty
2022-10-19 11:04:28 +00:00
pytest-mariadb :
runs-on : ubuntu-20.04
services :
mariadb :
2023-02-08 21:21:47 +00:00
image : ${{ matrix.mariadb-group }}
2022-10-19 11:04:28 +00:00
ports :
- 3306 : 3306
env :
MYSQL_ROOT_PASSWORD : password
options : --health-cmd="mysqladmin ping -uroot -ppassword" --health-interval=5s --health-timeout=2s --health-retries=3
if : |
(github.event_name != 'push' || github.event.repository.full_name == 'home-assistant/core')
&& github.event.inputs.lint-only != 'true'
2023-01-20 10:43:52 +00:00
&& github.event.inputs.pylint-only != 'true'
&& github.event.inputs.mypy-only != 'true'
2023-02-17 21:49:22 +00:00
&& needs.info.outputs.mariadb_groups != '[]'
2022-10-19 11:04:28 +00:00
needs :
- info
- base
- gen-requirements-all
- hassfest
- lint-isort
2023-01-31 08:31:49 +00:00
- lint-other
- lint-ruff
2022-10-19 11:04:28 +00:00
- mypy
strategy :
fail-fast : false
matrix :
python-version : ${{ fromJson(needs.info.outputs.python_versions) }}
2023-02-08 21:21:47 +00:00
mariadb-group : ${{ fromJson(needs.info.outputs.mariadb_groups) }}
2022-10-19 11:04:28 +00:00
name : >-
2023-02-15 14:56:15 +00:00
Run ${{ matrix.mariadb-group }} tests Python ${{ matrix.python-version }}
2022-10-19 11:04:28 +00:00
steps :
- name : Install additional OS dependencies
run : |
sudo apt-get update
sudo apt-get -y install \
bluez \
ffmpeg \
libmariadb-dev-compat
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2022-10-19 11:04:28 +00:00
- name : Set up Python ${{ matrix.python-version }}
id : python
2023-01-13 19:07:52 +00:00
uses : actions/setup-python@v4.5.0
2022-10-19 11:04:28 +00:00
with :
python-version : ${{ matrix.python-version }}
check-latest : true
- name : Restore full Python ${{ matrix.python-version }} virtual environment
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache/restore@v3.2.5
2022-10-19 11:04:28 +00:00
with :
path : venv
2023-01-30 15:42:01 +00:00
fail-on-cache-miss : true
2022-10-19 11:04:28 +00:00
key : ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.python_cache_key }}
- 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 : Register pytest slow test problem matcher
run : |
echo "::add-matcher::.github/workflows/matchers/pytest-slow.json"
- name : Install SQL Python libraries
run : |
. venv/bin/activate
pip install mysqlclient sqlalchemy_utils
- name : Run pytest (partially)
2023-02-15 16:30:01 +00:00
timeout-minutes : 20
2022-10-19 11:04:28 +00:00
shell : bash
run : |
. venv/bin/activate
python --version
python3 -X dev -m pytest \
-qq \
2022-11-29 11:37:57 +00:00
--timeout=20 \
2022-10-19 11:04:28 +00:00
-n 1 \
--cov="homeassistant.components.recorder" \
--cov-report=xml \
--cov-report=term-missing \
-o console_output_style=count \
2022-11-29 12:30:26 +00:00
--durations=10 \
2022-10-19 11:04:28 +00:00
-p no:sugar \
--dburl=mysql://root:password@127.0.0.1/homeassistant-test \
2023-02-13 21:58:13 +00:00
tests/components/history \
tests/components/logbook \
tests/components/recorder \
tests/components/sensor
2022-10-19 11:04:28 +00:00
- name : Upload coverage artifact
2023-01-09 09:30:14 +00:00
uses : actions/upload-artifact@v3.1.2
2022-10-19 11:04:28 +00:00
with :
name : coverage-${{ matrix.python-version }}-mariadb
path : coverage.xml
- name : Check dirty
run : |
./script/check_dirty
2023-02-07 15:46:14 +00:00
pytest-postgres :
runs-on : ubuntu-20.04
services :
postgres :
2023-02-08 21:21:47 +00:00
image : ${{ matrix.postgresql-group }}
2023-02-07 15:46:14 +00:00
ports :
- 5432 : 5432
env :
POSTGRES_PASSWORD : password
options : --health-cmd="pg_isready -hlocalhost -Upostgres" --health-interval=5s --health-timeout=2s --health-retries=3
if : |
(github.event_name != 'push' || github.event.repository.full_name == 'home-assistant/core')
&& github.event.inputs.lint-only != 'true'
2023-02-07 17:27:33 +00:00
&& github.event.inputs.pylint-only != 'true'
&& github.event.inputs.mypy-only != 'true'
2023-02-17 21:49:22 +00:00
&& needs.info.outputs.postgresql_groups != '[]'
2023-02-07 15:46:14 +00:00
needs :
- info
- base
- gen-requirements-all
- hassfest
- lint-other
- lint-isort
- mypy
strategy :
fail-fast : false
matrix :
python-version : ${{ fromJson(needs.info.outputs.python_versions) }}
2023-02-08 21:21:47 +00:00
postgresql-group : ${{ fromJson(needs.info.outputs.postgresql_groups) }}
2023-02-07 15:46:14 +00:00
name : >-
2023-02-15 14:56:15 +00:00
Run ${{ matrix.postgresql-group }} tests Python ${{ matrix.python-version }}
2023-02-07 15:46:14 +00:00
steps :
- name : Install additional OS dependencies
run : |
sudo apt-get update
sudo apt-get -y install \
bluez \
ffmpeg \
postgresql-server-dev-12
- name : Check out code from GitHub
uses : actions/checkout@v3.1.0
- name : Set up Python ${{ matrix.python-version }}
id : python
uses : actions/setup-python@v4.3.0
with :
python-version : ${{ matrix.python-version }}
check-latest : true
- name : Restore full Python ${{ matrix.python-version }} virtual environment
id : cache-venv
2023-02-10 07:43:24 +00:00
uses : actions/cache@v3.2.5
2023-02-07 15:46:14 +00:00
with :
path : venv
key : ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.python_cache_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 : Register pytest slow test problem matcher
run : |
echo "::add-matcher::.github/workflows/matchers/pytest-slow.json"
- name : Install SQL Python libraries
run : |
. venv/bin/activate
pip install psycopg2 sqlalchemy_utils
- name : Run pytest (partially)
2023-02-15 16:30:01 +00:00
timeout-minutes : 20
2023-02-07 15:46:14 +00:00
shell : bash
run : |
. venv/bin/activate
python --version
python3 -X dev -m pytest \
-qq \
--timeout=9 \
-n 1 \
--cov="homeassistant.components.recorder" \
--cov-report=xml \
--cov-report=term-missing \
-o console_output_style=count \
--durations=0 \
--durations-min=10 \
-p no:sugar \
--dburl=postgresql://postgres:password@127.0.0.1/homeassistant-test \
2023-02-13 21:58:13 +00:00
tests/components/history \
tests/components/logbook \
tests/components/recorder \
tests/components/sensor
2023-02-07 15:46:14 +00:00
- name : Upload coverage artifact
uses : actions/upload-artifact@v3.1.0
with :
name : coverage-${{ matrix.python-version }}-postgresql
path : coverage.xml
- name : Check dirty
run : |
./script/check_dirty
2021-12-02 18:00:17 +00:00
coverage :
name : Upload test coverage to Codecov
2022-07-07 16:53:24 +00:00
runs-on : ubuntu-20.04
2021-12-02 18:00:17 +00:00
needs :
2022-07-07 16:53:24 +00:00
- info
2021-12-02 18:00:17 +00:00
- pytest
steps :
- name : Check out code from GitHub
2023-01-06 07:35:47 +00:00
uses : actions/checkout@v3.3.0
2021-12-02 18:00:17 +00:00
- name : Download all coverage artifacts
2022-04-11 11:15:03 +00:00
uses : actions/download-artifact@v3
2021-11-24 17:14:41 +00:00
- name : Upload coverage to Codecov (full coverage)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'true'
2022-09-20 07:49:15 +00:00
uses : codecov/codecov-action@v3.1.1
2021-11-25 14:05:20 +00:00
with :
2021-11-25 16:35:15 +00:00
flags : full-suite
2021-11-24 17:14:41 +00:00
- name : Upload coverage to Codecov (partial coverage)
2022-07-07 16:53:24 +00:00
if : needs.info.outputs.test_full_suite == 'false'
2022-09-20 07:49:15 +00:00
uses : codecov/codecov-action@v3.1.1