blob: cf4320f23b163e0e1da0aabcc742b43224259940 [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.
# Build Step: Command Line
: <<EOF
#!/bin/bash
export DEBUG=true
if [[ -f "${teamcity_build_checkoutDir:-}"/regression-test/pipeline/performance/compile.sh ]]; then
cd "${teamcity_build_checkoutDir}"/regression-test/pipeline/performance/
bash -x compile.sh
else
echo "Build Step file missing: regression-test/pipeline/performance/compile.sh" && exit 1
fi
EOF
#####################################################################################
## compile.sh content ##
if ${DEBUG:-false}; then
pull_request_num="28431"
commit_id="b052225cd0a180b4576319b5bd6331218dd0d3fe"
target_branch="master"
fi
if [[ -z "${teamcity_build_checkoutDir}" ]]; then echo "ERROR: env teamcity_build_checkoutDir not set" && exit 2; fi
if [[ -z "${pull_request_num}" ]]; then echo "ERROR: env pull_request_num not set" && exit 2; fi
if [[ -z "${commit_id}" ]]; then echo "ERROR: env commit_id not set" && exit 2; fi
if [[ -z "${target_branch}" ]]; then echo "ERROR: env target_branch not set" && exit 2; fi
# shellcheck source=/dev/null
source "$(bash "${teamcity_build_checkoutDir}"/regression-test/pipeline/common/get-or-set-tmp-env.sh 'get')"
if ${skip_pipeline:=false}; then echo "INFO: skip build pipline" && exit 0; else echo "INFO: no skip"; fi
merge_pr_to_target_branch_latest() {
local pull_request_num="$1"
local target_branch="$2"
echo "INFO: merge pull request into ${target_branch}"
if [[ -z "${teamcity_build_checkoutDir}" ]]; then
echo "ERROR: env teamcity_build_checkoutDir not set" && return 1
fi
cd "${teamcity_build_checkoutDir}" || return 1
git reset --hard
git fetch origin "${target_branch}"
git checkout "${target_branch}"
git reset --hard origin/"${target_branch}"
git pull origin "${target_branch}"
git submodule update --init be/src/clucene
git submodule update --init be/src/apache-orc
local target_branch_commit_id
target_branch_commit_id=$(git rev-parse HEAD)
git config user.email "ci@selectdb.com"
git config user.name "ci"
echo "git fetch origin refs/pull/${pull_request_num}/head"
git fetch origin "refs/pull/${pull_request_num}/head"
git merge --no-edit --allow-unrelated-histories FETCH_HEAD
echo "INFO: merge refs/pull/${pull_request_num}/head into master: ${target_branch_commit_id}"
CONFLICTS=$(git ls-files -u | wc -l)
if [[ "${CONFLICTS}" -gt 0 ]]; then
echo "ERROR: merge refs/pull/${pull_request_num}/head into master failed. Aborting"
git merge --abort
return 1
fi
}
if [[ "${target_branch}" == "master" ]]; then
REMOTE_CCACHE='/mnt/remote_ccache_master'
docker_image="apache/doris:build-env-ldb-toolchain-0.19-latest"
elif [[ "${target_branch}" == "branch-2.0" ]]; then
docker_image="apache/doris:build-env-for-2.0"
REMOTE_CCACHE='/mnt/remote_ccache_branch_2'
elif [[ "${target_branch}" == "branch-1.2-lts" ]]; then
REMOTE_CCACHE='/mnt/remote_ccache_master'
docker_image="apache/doris:build-env-for-1.2"
else
REMOTE_CCACHE='/mnt/remote_ccache_master'
docker_image="apache/doris:build-env-ldb-toolchain-latest"
fi
if ${merge_target_branch_latest:-true}; then
if ! merge_pr_to_target_branch_latest "${pull_request_num}" "${target_branch}"; then
exit 1
fi
else
echo "INFO: skip merge_pr_to_target_branch_latest"
fi
mount_swapfile=""
if [[ -f /root/swapfile ]]; then mount_swapfile="-v /root/swapfile:/swapfile --memory-swap -1"; fi
git_storage_path=$(grep storage "${teamcity_build_checkoutDir}"/.git/config | rev | cut -d ' ' -f 1 | rev | awk -F '/lfs' '{print $1}')
sudo docker container prune -f
sudo docker image prune -f
sudo docker pull "${docker_image}"
docker_name=doris-compile-"${commit_id}"
if sudo docker ps -a --no-trunc | grep "${docker_name}"; then
sudo docker stop "${docker_name}"
sudo docker rm "${docker_name}"
fi
rm -f custom_env.sh
cp "${teamcity_build_checkoutDir}"/regression-test/pipeline/performance/conf/custom_env.sh .
rm -rf "${teamcity_build_checkoutDir}"/output
set -x
# shellcheck disable=SC2086
sudo docker run -i --rm \
--name "${docker_name}" \
-e TZ=Asia/Shanghai \
${mount_swapfile} \
-v /etc/localtime:/etc/localtime:ro \
-v "${HOME}"/.m2:/root/.m2 \
-v "${HOME}"/.npm:/root/.npm \
-v /mnt/ccache/.ccache:/root/.ccache \
-v "${REMOTE_CCACHE}":/root/ccache \
-v "${git_storage_path}":/root/git \
-v "${teamcity_build_checkoutDir}":/root/doris \
"${docker_image}" \
/bin/bash -c "mkdir -p ${git_storage_path} \
&& cp -r /root/git/* ${git_storage_path}/ \
&& cd /root/doris \
&& export CCACHE_LOGFILE=/tmp/cache.debug \
&& export CCACHE_REMOTE_STORAGE=file:///root/ccache \
&& export EXTRA_CXX_FLAGS=-O3 \
&& export USE_JEMALLOC='ON' \
&& export ENABLE_PCH=OFF \
&& export CUSTOM_NPM_REGISTRY=https://registry.npmjs.org \
&& bash build.sh --fe --be --clean 2>&1 | tee build.log"
set +x
set -x
succ_symble="Successfully build Doris"
if [[ -d output ]] && grep "${succ_symble}" "${teamcity_build_checkoutDir}"/build.log; then
echo "INFO: ${succ_symble}"
else
echo -e "ERROR: BUILD FAILED"
exit 1
fi