| #!/usr/bin/env bash | |
| # Licensed to the Apache Software Foundation (ASF) under one | |
| # or more contributor license agreements. See the NOTICE file | |
| # distributed with this work for additional information | |
| # regarding copyright ownership. The ASF licenses this file | |
| # to you under the Apache License, Version 2.0 (the | |
| # "License"); you may not use this file except in compliance | |
| # with the License. You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, | |
| # software distributed under the License is distributed on an | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| # KIND, either express or implied. See the License for the | |
| # specific language governing permissions and limitations | |
| # under the License. | |
| ####################################################################################################### | |
| # | |
| # Adds trap to the traps already set. | |
| # | |
| # Arguments: | |
| # trap to set | |
| # .... list of signals to handle | |
| ####################################################################################################### | |
| function add_trap() { | |
| trap="${1}" | |
| shift | |
| for signal in "${@}"; do | |
| # adding trap to exiting trap | |
| local handlers | |
| handlers="$(trap -p "${signal}" | cut -f2 -d \')" | |
| # shellcheck disable=SC2064 | |
| trap "${trap};${handlers}" "${signal}" | |
| done | |
| } | |
| function assert_in_container() { | |
| export VERBOSE=${VERBOSE:="false"} | |
| if [[ ! -f /.dockerenv ]]; then | |
| echo | |
| echo "${COLOR_RED}ERROR: You are not inside the Airflow docker container! ${COLOR_RESET}" | |
| echo | |
| echo "You should only run this script in the Airflow docker container as it may override your files." | |
| echo "Learn more about how we develop and test airflow in:" | |
| echo "https://github.com/apache/airflow/blob/main/contributing-docs/README.rst" | |
| echo | |
| exit 1 | |
| fi | |
| } | |
| function in_container_script_start() { | |
| if [[ ${VERBOSE_COMMANDS:="false"} == "true" || ${VERBOSE_COMMANDS} == "True" ]]; then | |
| set -x | |
| fi | |
| } | |
| function in_container_go_to_airflow_sources() { | |
| pushd "${AIRFLOW_SOURCES}" >/dev/null 2>&1 || exit 1 | |
| } | |
| function in_container_get_packaging_tool() { | |
| ## IMPORTANT: IF YOU MODIFY THIS FUNCTION YOU SHOULD ALSO MODIFY CORRESPONDING FUNCTION IN | |
| ## `scripts/docker/common.sh` | |
| if [[ ${AIRFLOW_USE_UV} == "true" ]]; then | |
| echo | |
| echo "${COLOR_BLUE}Using 'uv' to install Airflow${COLOR_RESET}" | |
| echo | |
| export PACKAGING_TOOL="uv" | |
| export PACKAGING_TOOL_CMD="uv pip" | |
| export EXTRA_INSTALL_FLAGS="" | |
| export EXTRA_UNINSTALL_FLAGS="" | |
| export UPGRADE_TO_HIGHEST_RESOLUTION="--upgrade --resolution highest" | |
| export UPGRADE_IF_NEEDED="--upgrade" | |
| UV_CONCURRENT_DOWNLOADS=$(nproc --all) | |
| export UV_CONCURRENT_DOWNLOADS | |
| else | |
| echo | |
| echo "${COLOR_BLUE}Using 'pip' to install Airflow${COLOR_RESET}" | |
| echo | |
| export PACKAGING_TOOL="pip" | |
| export PACKAGING_TOOL_CMD="pip" | |
| export EXTRA_INSTALL_FLAGS="--root-user-action ignore" | |
| export EXTRA_UNINSTALL_FLAGS="--yes" | |
| export UPGRADE_TO_HIGHEST_RESOLUTION="--upgrade --upgrade-strategy eager" | |
| export UPGRADE_IF_NEEDED="--upgrade --upgrade-strategy only-if-needed" | |
| fi | |
| } | |
| function in_container_basic_check() { | |
| assert_in_container | |
| in_container_get_packaging_tool | |
| in_container_go_to_airflow_sources | |
| } | |
| function dump_airflow_logs() { | |
| local dump_file | |
| dump_file=/files/airflow_logs_$(date "+%Y-%m-%d")_${CI_BUILD_ID}_${CI_JOB_ID}.log.tar.gz | |
| echo "###########################################################################################" | |
| echo " Dumping logs from all the airflow tasks" | |
| echo "###########################################################################################" | |
| pushd "${AIRFLOW_HOME}" >/dev/null 2>&1 || exit 1 | |
| tar -czf "${dump_file}" logs | |
| echo " Logs dumped to ${dump_file}" | |
| popd >/dev/null 2>&1 || exit 1 | |
| echo "###########################################################################################" | |
| } | |
| function in_container_set_colors() { | |
| COLOR_BLUE=$'\e[34m' | |
| COLOR_GREEN=$'\e[32m' | |
| COLOR_RED=$'\e[31m' | |
| COLOR_RESET=$'\e[0m' | |
| COLOR_YELLOW=$'\e[33m' | |
| export COLOR_BLUE | |
| export COLOR_GREEN | |
| export COLOR_RED | |
| export COLOR_RESET | |
| export COLOR_YELLOW | |
| } | |
| export CI=${CI:="false"} | |
| export GITHUB_ACTIONS=${GITHUB_ACTIONS:="false"} | |
| export AIRFLOW_USE_UV=${AIRFLOW_USE_UV:="false"} |