blob: bbf0881b34001c7786136b5b2b81a91814b898ba [file] [log] [blame]
#!/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"}