Provider packages are installed by default in production image (#12154)

This is a fix to a problem introduced in #10806. The change
turned provider packages into namespace packages - which made
them ignored by find_packages function from setup tools - thus
prodiuction image build automatically and used by Kubernetes
tests did not have the provider packages installed.

This PR fixes it and adds future protection during CI tests of
production image to make sure that provider packages are
actually installed.

Fixes #12150
This commit is contained in:
Jarek Potiuk 2020-11-09 13:26:24 +01:00 коммит произвёл GitHub
Родитель 92e405e729
Коммит eaac361f3b
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 64 добавлений и 2 удалений

Просмотреть файл

@ -48,4 +48,61 @@ function build_prod_images_on_ci() {
} }
function verify_prod_image_has_airflow_and_providers {
echo
echo "Airflow folders installed in the image:"
echo
AIRFLOW_INSTALLATION_LOCATION="/home/airflow/.local"
docker run --rm --entrypoint /bin/bash "${AIRFLOW_PROD_IMAGE}" -c \
'find '"${AIRFLOW_INSTALLATION_LOCATION}"'/lib/python*/site-packages/airflow/ -type d'
EXPECTED_MIN_AIRFLOW_DIRS_COUNT="60"
readonly EXPECTED_MIN_AIRFLOW_DIRS_COUNT
COUNT_AIRFLOW_DIRS=$(docker run --rm --entrypoint /bin/bash "${AIRFLOW_PROD_IMAGE}" -c \
'find '"${AIRFLOW_INSTALLATION_LOCATION}"'/lib/python*/site-packages/airflow/ -type d | grep -c -v "/airflow/providers"')
echo
echo "Number of airflow dirs: ${COUNT_AIRFLOW_DIRS}"
echo
if [[ "${COUNT_AIRFLOW_DIRS}" -lt "${EXPECTED_MIN_AIRFLOW_DIRS_COUNT}" ]]; then
>&2 echo
>&2 echo Number of airflow folders installed is less than ${EXPECTED_MIN_AIRFLOW_DIRS_COUNT}
>&2 echo This is unexpected. Please investigate, looking at the output above!
>&2 echo
exit 1
else
echo
echo "OK. Airflow seems to be installed!"
echo
fi
EXPECTED_MIN_PROVIDERS_DIRS_COUNT="240"
readonly EXPECTED_MIN_PROVIDERS_DIRS_COUNT
COUNT_AIRFLOW_PROVIDERS_DIRS=$(docker run --rm --entrypoint /bin/bash "${AIRFLOW_PROD_IMAGE}" -c \
'find '"${AIRFLOW_INSTALLATION_LOCATION}"'/lib/python*/site-packages/airflow/providers -type d | grep -c "" | xargs')
echo
echo "Number of providers dirs: ${COUNT_AIRFLOW_PROVIDERS_DIRS}"
echo
if [ "${COUNT_AIRFLOW_PROVIDERS_DIRS}" -lt "${EXPECTED_MIN_PROVIDERS_DIRS_COUNT}" ]; then
>&2 echo
>&2 echo Number of providers folders installed is less than ${EXPECTED_MIN_PROVIDERS_DIRS_COUNT}
>&2 echo This is unexpected. Please investigate, looking at the output above!
>&2 echo
exit 1
else
echo
echo "OK. Airflow Providers seems to be installed!"
echo
fi
}
build_prod_images_on_ci build_prod_images_on_ci
verify_prod_image_has_airflow_and_providers

Просмотреть файл

@ -27,7 +27,7 @@ from os.path import dirname
from textwrap import wrap from textwrap import wrap
from typing import Dict, Iterable, List from typing import Dict, Iterable, List
from setuptools import Command, find_packages, setup from setuptools import Command, find_namespace_packages, find_packages, setup
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -771,6 +771,11 @@ def do_setup():
else ['airflow.providers', 'airflow.providers.*'] else ['airflow.providers', 'airflow.providers.*']
) )
write_version() write_version()
packages_to_install = (
find_namespace_packages(include=['airflow*'], exclude=exclude_patterns)
if install_providers_from_sources
else find_packages(include=['airflow*'], exclude=exclude_patterns)
)
setup( setup(
name='apache-airflow', name='apache-airflow',
description='Programmatically author, schedule and monitor data pipelines', description='Programmatically author, schedule and monitor data pipelines',
@ -778,7 +783,7 @@ def do_setup():
long_description_content_type='text/markdown', long_description_content_type='text/markdown',
license='Apache License 2.0', license='Apache License 2.0',
version=version, version=version,
packages=find_packages(include=['airflow*'], exclude=exclude_patterns), packages=packages_to_install,
package_data={ package_data={
'airflow': ['py.typed'], 'airflow': ['py.typed'],
'': [ '': [