blob: 20c4f16b1ae90647a2c3e7c9015238de4c7995d6 [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.
# shellcheck source=/dev/null
# source ~/.bashrc
# set -ex
usage() {
echo -e "Usage:
env GITHUB_TOKEN=****** bash $0 <PULL_NUMBER> <OPTIONS>
note: https://github.com/apache/doris/pull/13259, PULL_NUMBER is 13259
OPTIONS should be one of [be-ut|fe-ut|ckb|regression-p0|regression-p1|arm-regression-p0]
" && return 1
}
_get_pr_changed_files() {
usage_str="Usage:
_get_pr_changed_files <PULL_NUMBER> [OPTIONS]
note: https://github.com/apache/doris/pull/13259, PULL_NUMBER is 13259
OPTIONS can be one of [all|added|modified|removed], default is all
"
if [[ -z "$1" ]]; then echo -e "${usage_str}" && return 1; fi
if [[ -z "${GITHUB_TOKEN}" ]]; then echo "error: GITHUB_TOKEN required..." && return 1; fi
if ! curl --version >/dev/null; then echo 'error: curl required...' && return 1; fi
if ! command -v jq >/dev/null; then sudo yum install jq -y || sudo apt install -y jq; fi
PULL_NUMBER="$1"
which_file="$2"
pr_url="https://github.com/${OWNER:=apache}/${REPO:=doris}/pull/${PULL_NUMBER}"
try_times=10
# The number of results per page (max 100), Default 30.
per_page=100
file_name='pr_change_files'
while [[ ${try_times} -gt 0 ]]; do
if curl \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GITHUB_TOKEN:-}" \
https://api.github.com/repos/"${OWNER}"/"${REPO}"/pulls/"${PULL_NUMBER}"/files?per_page="${per_page}" \
2>/dev/null >"${file_name}"; then
break
else
try_times=$((try_times - 1))
fi
done
if [[ ${try_times} = 0 ]]; then echo -e "\033[31m List pull request(${pr_url}) files FAIL... \033[0m" && return 255; fi
all_files=$(jq -r '.[] | .filename' "${file_name}")
added_files=$(jq -r '.[] | select(.status == "added") | .filename' "${file_name}")
modified_files=$(jq -r '.[] | select(.status == "modified") | .filename' "${file_name}")
removed_files=$(jq -r '.[] | select(.status == "removed") | .filename' "${file_name}")
rm "${file_name}"
if [[ -z "${all_files}" ]]; then echo -e "\033[31m List pull request(${pr_url}) files FAIL... \033[0m" && return 255; fi
echo -e "
https://github.com/apache/doris/pull/${PULL_NUMBER}/files all change files:
---------------------------------------------------------------"
if [[ "${which_file:-all}" == "all" ]]; then
echo -e "${all_files}\n" && export all_files
elif [[ "${which_file}" == "added" ]]; then
echo -e "${added_files}\n" && export added_files
elif [[ "${which_file}" == "modified" ]]; then
echo -e "${modified_files}\n" && export modified_files
elif [[ "${which_file}" == "removed" ]]; then
echo -e "${removed_files}\n" && export removed_files
else
return 1
fi
}
need_run_fe_ut() {
if ! _get_pr_changed_files "$1"; then echo "get pr changed files failed, return need" && return 0; fi
for af in ${all_files}; do
if [[ "${af}" == 'fe'* ]] ||
[[ "${af}" == 'fe_plugins'* ]] ||
[[ "${af}" == 'bin/start_fe.sh' ]] ||
[[ "${af}" == 'bin/stop_fe.sh' ]] ||
[[ "${af}" == 'run-fe-ut.sh' ]]; then echo "fe-ut related file changed, return need" && return 0; fi
done
echo "return no need" && return 1
}
need_run_be_ut() {
if ! _get_pr_changed_files "$1"; then echo "get pr changed files failed, return need" && return 0; fi
for af in ${all_files}; do
if [[ "${af}" == 'be'* ]] ||
[[ "${af}" == 'contrib'* ]] ||
[[ "${af}" == 'thirdparty'* ]] ||
[[ "${af}" == 'bin/start_be.sh' ]] ||
[[ "${af}" == 'bin/stop_be.sh' ]] ||
[[ "${af}" == 'run-be-ut.sh' ]]; then
echo "be-ut related file changed, return need" && return 0
fi
done
echo "return no need" && return 1
}
need_run_regression_p0() {
if ! _get_pr_changed_files "$1"; then echo "get pr changed files failed, return need" && return 0; fi
for af in ${all_files}; do
if [[ "${af}" == 'be'* ]] ||
[[ "${af}" == 'bin'* ]] ||
[[ "${af}" == 'conf'* ]] ||
[[ "${af}" == 'contrib'* ]] ||
[[ "${af}" == 'fe'* ]] ||
[[ "${af}" == 'fe_plugins'* ]] ||
[[ "${af}" == 'gensrc'* ]] ||
[[ "${af}" == 'regression-test'* ]] ||
[[ "${af}" == 'thirdparty'* ]] ||
[[ "${af}" == 'ui'* ]] ||
[[ "${af}" == 'webroot'* ]] ||
[[ "${af}" == 'build.sh' ]] ||
[[ "${af}" == 'env.sh' ]] ||
[[ "${af}" == 'run-regression-test.sh' ]]; then
echo "regression related file changed, return need" && return 0
fi
done
echo "return no need" && return 1
}
need_run_regression_p1() {
need_run_regression_p0 "$1"
}
need_run_arm_regression_p0() {
if [[ $(($1 % 2)) -eq 0 ]]; then echo "the pull request id is even, return no need" && return 1; fi
need_run_regression_p0 "$1"
}
need_run_ckb() {
if [[ $(($1 % 2)) -eq 0 ]]; then echo "the pull request id is even, return no need" && return 1; fi
if ! _get_pr_changed_files "$1"; then echo "get pr changed files failed, return need" && return 0; fi
for af in ${all_files}; do
if [[ "${af}" == 'be'* ]] ||
[[ "${af}" == 'bin'* ]] ||
[[ "${af}" == 'conf'* ]] ||
[[ "${af}" == 'fe'* ]] ||
[[ "${af}" == 'gensrc'* ]] ||
[[ "${af}" == 'thirdparty'* ]] ||
[[ "${af}" == 'build.sh' ]] ||
[[ "${af}" == 'env.sh' ]]; then
echo "clickbench performance related file changed, return need" && return 0
fi
done
echo "return no need" && return 1
}
if [[ -z "$1" ]]; then
usage
elif [[ "$2" == "be-ut" ]]; then
need_run_be_ut "$1"
elif [[ "$2" == "fe-ut" ]]; then
need_run_fe_ut "$1"
elif [[ "$2" == "ckb" ]]; then
need_run_ckb "$1"
elif [[ "$2" == "regression-p0" ]]; then
need_run_regression_p0 "$1"
elif [[ "$2" == "regression-p1" ]]; then
need_run_regression_p1 "$1"
elif [[ "$2" == "arm-regression-p0" ]]; then
need_run_arm_regression_p0 "$1"
else
usage
fi