aboutsummaryrefslogtreecommitdiff
path: root/lt-qcom-linux-automerge/builders.sh
blob: 98a0ccdf705a548673da5c24b3ea1a917f454bd0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/bin/bash

echo "Starting ${JOB_NAME} with the following parameters:"
echo "AUTOMERGE_REPO_URL: ${AUTOMERGE_REPO_URL}"
echo "AUTOMERGE_BRANCH: ${AUTOMERGE_BRANCH}"
echo "CONFIG_REPO_URL: ${CONFIG_REPO_URL}"
echo "CONFIG_BRANCH: ${CONFIG_BRANCH}"
echo "KERNEL_REPO_URL: ${KERNEL_REPO_URL}"
echo "INTEGRATION_REPO_URL: ${INTEGRATION_REPO_URL}"
echo "INTEGRATION_BRANCH: ${INTEGRATION_BRANCH}"
echo "KERNEL_CI_REPO_URL: ${KERNEL_CI_REPO_URL}"
echo "KERNEL_CI_BRANCH: ${KERNEL_CI_BRANCH}"

set -ex

git config --global user.name "Linaro CI"
git config --global user.email "ci_notify@linaro.org"
git config --global core.sshCommand "ssh -F ${HOME}/qcom.sshconfig"

cat << EOF > ${HOME}/qcom.sshconfig
Host git.linaro.org
    User git
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no
EOF
chmod 0600 ${HOME}/qcom.sshconfig

# Use a persistent storage to avoid clone every time the integration repository
PERSISTENT_PATH=${HOME}/srv/qcomlt/linux_automerge
mkdir -p ${PERSISTENT_PATH}
KERNEL_REPO_BARE_PATH=${PERSISTENT_PATH}/$(basename ${KERNEL_REPO_URL})
if [ -d "${KERNEL_REPO_BARE_PATH}" ]; then
	echo "Updating kernel bare repo ..."
	pushd $(pwd)
	cd ${KERNEL_REPO_BARE_PATH}
	if [ -f "gc.log" ]; then
		cat gc.log
		git gc
		git prune
		rm -f gc.log
	fi
	git fetch --all -v
	git update-server-info
	popd
else
	echo "Cloning integration bare repo ..."
	git clone --bare ${KERNEL_REPO_URL} ${KERNEL_REPO_BARE_PATH}
fi
INTEGRATION_REPO_PATH=$(pwd)/$(basename ${INTEGRATION_REPO_URL})
echo "Cloning integration repo ..."
git clone ${KERNEL_REPO_BARE_PATH} ${INTEGRATION_REPO_PATH}

pushd $(pwd)
export INTG_REMOTE=automerge-intg
cd ${INTEGRATION_REPO_PATH}

git remote add ${INTG_REMOTE} ${INTEGRATION_REPO_URL}
git fetch ${INTG_REMOTE}
set +e
git branch -a | grep "remotes/${INTG_REMOTE}/${INTEGRATION_BRANCH}$"
branch_exists=$?
set -e
if [ $branch_exists -ne 0 ]; then
	echo "Creating initial integration branch ..."
	git push ${INTG_REMOTE} HEAD:${INTEGRATION_BRANCH}
	git fetch -v ${INTG_REMOTE}
fi
git checkout -b ${INTEGRATION_BRANCH} ${INTG_REMOTE}/${INTEGRATION_BRANCH}
popd

echo "Initializing automerge execution ..."
pushd $(pwd)
AUTOMERGE_PATH=$(pwd)/automerge
git clone ${AUTOMERGE_REPO_URL} -b ${AUTOMERGE_BRANCH} ${AUTOMERGE_PATH}
export PATH=${AUTOMERGE_PATH}:$PATH

cd ${AUTOMERGE_PATH}
export CONFIG_PATH=''
if [ ! -z ${CONFIG_REPO_URL} ]; then
	export CONFIG_REPO_PATH=${AUTOMERGE_PATH}/$(basename ${CONFIG_REPO_URL})
	git clone ${CONFIG_REPO_URL} -b ${CONFIG_BRANCH} ${CONFIG_REPO_PATH}

	if [ -f ${CONFIG_REPO_PATH}/automerge-ci.conf ]; then
		export CONFIG_PATH=${CONFIG_REPO_PATH}/automerge-ci.conf
	fi
fi

if [ -f ${CONFIG_PATH} ]; then
	echo "Using configuration from repository"
	cat ${CONFIG_PATH}
else
	echo "Using default configuration"
	cat <<EOF > automerge-ci.conf
baseline git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
EOF

	export CONFIG_PATH=${AUTOMERGE_PATH}/automerge-ci.conf
fi

AUTOMERGE_CONFIG=$(sed ':a;N;$!ba;s/\n/\\n\\\n/g' ${CONFIG_PATH})

# * Disable exit when fail to collect automerge_result_variables for builders-kernel.sh and email
# * TODO: Add support in ci-merge to create a log (instead of use tee)
set +e
set -o pipefail
ci-merge -l ${INTEGRATION_REPO_PATH} -r ${INTEGRATION_REPO_URL} -i ${INTEGRATION_BRANCH} -c ${RERERE_REPO_URL} | tee automerge.log
AUTOMERGE_EXIT_CODE=$?
set +o pipefail
AUTOMERGE_BRANCH_FAILED=$(grep 'Merge failed' automerge.log | sed ':a;N;$!ba;s/\n/\\n\\\n/g')
set -e
popd

echo "AUTOMERGE_CONFIG=${AUTOMERGE_CONFIG}" > automerge_result_variables
echo "AUTOMERGE_BRANCH_FAILED=${AUTOMERGE_BRANCH_FAILED}" >> automerge_result_variables
echo "AUTOMERGE_EXIT_CODE=${AUTOMERGE_EXIT_CODE}" >> automerge_result_variables
echo "INTEGRATION_REPO_PATH=${INTEGRATION_REPO_PATH}" >> automerge_result_variables