blob: 14679c9114d5f019e42452e1aeacf6df151dac17 [file] [log] [blame]
kelvin.zhanga1170fa2022-03-03 20:06:57 +08001#!/bin/bash
2#
3# Copyright (c) 2021-2022 Amlogic, Inc. All rights reserved.
4#
5# SPDX-License-Identifier: MIT
6#
7
Kelvin Zhange1cb8732022-03-22 11:39:49 +08008source /etc/profile.d/TOOLSENV.sh
9
kelvin.zhanga1170fa2022-03-03 20:06:57 +080010export PATH=/opt/cmake-3.18.4-Linux-x86_64/bin/:$PATH
11export PATH=/proj/coverity/cov-analysis/bin/:$PATH
12export LM_LICENSE_FILE=/mnt/fileroot/jenkins/Xplorer_key.txt:$LM_LICENSE_FILE
13export PATH=/opt/xtensa/XtDevTools/install/tools/RG-2018.9-linux/XtensaTools/bin:$PATH
14export XTENSA_SYSTEM=/opt/xtensa/XtDevTools/install/builds/RG-2018.9-linux/Amlogic_v0/config
15export XTENSA_CORE=Amlogic_v0
16
17if [ -z "$MANIFEST_URL" ] || [ -z "$MANIFEST_BRANCH" ] || [ -z "$PROJECT_NAME" ] || [ -z "$BRANCH_NAME" ]; then
18 echo "NULL params!"
19 exit 1
20fi
21
Kelvin Zhangd64c8832022-04-02 19:56:24 +080022if [ "$SUBMIT_TYPE" = "daily" -o "$SUBMIT_TYPE" = "release" ];then
kelvin.zhanga1170fa2022-03-03 20:06:57 +080023 BUILDCHECK_BASE_PATH=/mnt/fileroot/autobuild/workdir/workspace/RTOS/RTOS_SDK/patchbuild
kelvin.zhang01393902022-03-03 20:42:46 +080024elif [ "$SUBMIT_TYPE" = "every" ];then
kelvin.zhanga1170fa2022-03-03 20:06:57 +080025 BUILDCHECK_BASE_PATH=/mnt/fileroot/jenkins/build-check
kelvin.zhanga1170fa2022-03-03 20:06:57 +080026fi
27
28MATCH_PATTERN="projects/"
Kelvin Zhange1cb8732022-03-22 11:39:49 +080029BRANCH=${MANIFEST_BRANCH#*${MATCH_PATTERN}}
kelvin.zhanga1170fa2022-03-03 20:06:57 +080030WORK_DIR=$BUILDCHECK_BASE_PATH/$PROJECT_NAME/$BRANCH
Kelvin Zhangb2630702022-04-20 11:22:32 +080031OUTPUT_DIR=$WORK_DIR/output
kelvin.zhanga1170fa2022-03-03 20:06:57 +080032
Kelvin Zhang81eb1b12022-06-09 14:35:18 +080033LAST_FULL_MANIFEST="$OUTPUT_DIR/manifest_last.xml"
34CURRENT_FULL_MANIFEST="$OUTPUT_DIR/manifest.xml"
35DIFF_FULL_MANIFEST="$OUTPUT_DIR/updates.xml"
36LAST_MANIFEST="$OUTPUT_DIR/tmp_manifest_last.xml"
37CURRENT_MANIFEST="$OUTPUT_DIR/tmp_manifest.xml"
38DIFF_MANIFEST="$OUTPUT_DIR/tmp_updates.xml"
39JENKINS_TRIGGER="$OUTPUT_DIR/jenkins_trigger.txt"
Kelvin Zhangb2630702022-04-20 11:22:32 +080040BUILD_LOG="$OUTPUT_DIR/build.log"
kelvin.zhang5fd25982022-03-04 09:43:01 +080041
Kelvin Zhangb2630702022-04-20 11:22:32 +080042if [ -n "$EXCLUDE_REPOS" ]; then
43 echo "Exclude repos:"
44 echo "$EXCLUDE_REPOS"
45 while IFS= read -r line
46 do
47 [ -n "$REPO_SYNC_IPATTERN" ] && REPO_SYNC_IPATTERN+="|"
48 REPO_SYNC_IPATTERN+="$line"
49 done <<< "$EXCLUDE_REPOS"
50fi
51
52[ "$FRESH_DOWNLOAD" = "yes" ] && rm -rf $WORK_DIR
53
kelvin.zhang01393902022-03-03 20:42:46 +080054if [ ! -d "$WORK_DIR" ]; then
55 echo -e "\n======== Downloading source code ========"
56 mkdir -p $WORK_DIR
Kelvin Zhangb2630702022-04-20 11:22:32 +080057 mkdir -p $OUTPUT_DIR
kelvin.zhang01393902022-03-03 20:42:46 +080058 cd $WORK_DIR
59 repo init -u ${MANIFEST_URL} -b ${MANIFEST_BRANCH} --repo-url=git://scgit.amlogic.com/tools/repo.git --no-repo-verify
kelvin.zhang5fd25982022-03-04 09:43:01 +080060else
61 echo -e "\n======== Syncing source code ========"
62 cd $WORK_DIR
Kelvin Zhang442c9152022-05-30 17:29:53 +080063 if [ -n "$REPO_SYNC_IPATTERN" ]; then
64 repo forall -i "$REPO_SYNC_IPATTERN" -c git reset -q --hard origin/$BRANCH_NAME
65 else
66 repo forall -c git reset -q --hard origin/$BRANCH_NAME
67 fi
Kelvin Zhang81eb1b12022-06-09 14:35:18 +080068 repo manifest -r -o $LAST_FULL_MANIFEST
69 repo manifest -o $LAST_MANIFEST
kelvin.zhang01393902022-03-03 20:42:46 +080070fi
kelvin.zhanga1170fa2022-03-03 20:06:57 +080071
Kelvin Zhang81eb1b12022-06-09 14:35:18 +080072repo sync -cq -j8 --prune
Kelvin Zhang442c9152022-05-30 17:29:53 +080073[ "$?" -ne 0 ] && cd - && echo "Sync error! will do fresh download next time" && exit 1
74if [ -n "$REPO_SYNC_IPATTERN" ]; then
75 repo forall -i "$REPO_SYNC_IPATTERN" -c git reset -q --hard origin/$BRANCH_NAME
76else
77 repo forall -c git reset -q --hard origin/$BRANCH_NAME
78fi
Kelvin Zhang81eb1b12022-06-09 14:35:18 +080079repo manifest -r -o $CURRENT_FULL_MANIFEST
80repo manifest -o $CURRENT_MANIFEST
kelvin.zhang5fd25982022-03-04 09:43:01 +080081echo -e "======== Done ========\n"
kelvin.zhang01393902022-03-03 20:42:46 +080082
Kelvin Zhang81eb1b12022-06-09 14:35:18 +080083if [ -f $LAST_FULL_MANIFEST ] && [ -f $CURRENT_FULL_MANIFEST ]; then
84 comm -23 <(sort $LAST_FULL_MANIFEST) <(sort $CURRENT_FULL_MANIFEST) > $DIFF_FULL_MANIFEST
kelvin.zhang5fd25982022-03-04 09:43:01 +080085
Kelvin Zhang81eb1b12022-06-09 14:35:18 +080086 if [ -s $DIFF_FULL_MANIFEST ]; then
kelvin.zhang5fd25982022-03-04 09:43:01 +080087 echo "======== Recent Changes ========"
88
89 while IFS= read -r line
90 do
91 keyline=`echo "$line" | grep 'name=.* path='`
92
93 for keyword in $keyline; do
94 [[ $keyword == path=* ]] && repo_path=`echo ${keyword#*path=} | sed 's/\"//g'`
95 [[ $keyword == name=* ]] && repo_name=`echo ${keyword#*name=} | sed 's/\"//g'`
96 [[ $keyword == revision=* ]] && repo_version=`echo ${keyword#*revision=} | sed 's/\"//g'`
97 done
98
99 if [ -d "$repo_path" ]; then
100 pushd $repo_path > /dev/null
101 echo -e "\nProject $repo_name"
102 git log $repo_version..HEAD
103 popd > /dev/null
104 fi
Kelvin Zhang81eb1b12022-06-09 14:35:18 +0800105 done < $DIFF_FULL_MANIFEST
kelvin.zhang5fd25982022-03-04 09:43:01 +0800106 else
107 echo -e "======== Nothing changed since last build ========"
108 fi
Kelvin Zhang81eb1b12022-06-09 14:35:18 +0800109 rm -f $DIFF_FULL_MANIFEST
110fi
111
112gen_jenkins_trigger() {
kelvin.zhang57cbd922022-06-15 17:42:37 +0800113 if [ -s $CURRENT_MANIFEST ]; then
Kelvin Zhang81eb1b12022-06-09 14:35:18 +0800114 echo "======== Generate Jenkins Trigger ========"
115
116 rm -f $JENKINS_TRIGGER
117
118 while IFS= read -r line
119 do
120 keyline=`echo "$line" | grep 'name=.* path='`
121 unset repo_name
122 for keyword in $keyline; do
123 [[ $keyword == name=* ]] && repo_name=`echo ${keyword#*name=} | sed 's/\"//g'`
124 done
125
126 if [ -n "$repo_name" ]; then
kelvin.zhang57cbd922022-06-15 17:42:37 +0800127 echo "$repo_name"
Kelvin Zhang81eb1b12022-06-09 14:35:18 +0800128 echo "p=$repo_name" >> $JENKINS_TRIGGER
129 echo "b=projects/amlogic-dev" >> $JENKINS_TRIGGER
130 fi
kelvin.zhang57cbd922022-06-15 17:42:37 +0800131 done < $CURRENT_MANIFEST
Kelvin Zhang81eb1b12022-06-09 14:35:18 +0800132 fi
133 rm -f $LAST_MANIFEST $CURRENT_MANIFEST $DIFF_MANIFEST
134}
135
136if [ ! -f $LAST_MANIFEST ] && [ -f $CURRENT_MANIFEST ]; then
Kelvin Zhang81eb1b12022-06-09 14:35:18 +0800137 gen_jenkins_trigger
138fi
139if [ -f $LAST_MANIFEST ] && [ -f $CURRENT_MANIFEST ]; then
140 comm -3 <(sort $LAST_MANIFEST) <(sort $CURRENT_MANIFEST) > $DIFF_MANIFEST
kelvin.zhang57cbd922022-06-15 17:42:37 +0800141 [ -s $DIFF_MANIFEST ] && gen_jenkins_trigger
kelvin.zhang5fd25982022-03-04 09:43:01 +0800142fi
143
144if [ -n "$GERRIT_PROJECT" ] && [ -n "$GERRIT_PATCHSET_NUMBER" ] && [ -n "$GERRIT_CHANGE_NUMBER" ]; then
Kelvin Zhang90176112022-04-26 16:22:25 +0800145 echo -e "\n======== Applying Gerrit change $GERRIT_CHANGE_NUMBER on Project $GERRIT_PROJECT ========"
Kelvin Zhang81eb1b12022-06-09 14:35:18 +0800146 keyline=`grep "name=\"$GERRIT_PROJECT\"" $CURRENT_FULL_MANIFEST`
kelvin.zhang5fd25982022-03-04 09:43:01 +0800147
148 for keyword in $keyline; do
149 if [[ $keyword == path=* ]]; then
150 repo_path=`echo ${keyword#*path=} | sed 's/\"//g'`
151 break;
152 fi
153 done
154
155 if [ -d "$repo_path" ]; then
156 pushd $repo_path > /dev/null
157 l2=${GERRIT_CHANGE_NUMBER: -2}
158 git fetch ssh://scgit.amlogic.com:29418/${GERRIT_PROJECT} refs/changes/${l2}/${GERRIT_CHANGE_NUMBER}/${GERRIT_PATCHSET_NUMBER}
159 git cherry-pick FETCH_HEAD
160 if [ "$?" -ne 0 ]; then
161 echo -e "========= Applying patch failed! =========\n"
162 exit 1
163 fi
164 popd > /dev/null
165 else
166 echo "No such directory! $repo_path"
167 exit 1
168 fi
169 echo -e "======== Done ========\n"
170fi
171
kelvin.zhang2219b412022-03-04 16:44:41 +0800172# Manually cherry pick patches
Kelvin Zhang0f582792022-08-31 18:52:20 +0800173source scripts/cherry_pick.sh
kelvin.zhang2219b412022-03-04 16:44:41 +0800174
Kelvin Zhangaa84d882022-04-22 13:38:46 +0800175# Include publish functions
176source scripts/publish.sh
177
Kelvin Zhangd64c8832022-04-02 19:56:24 +0800178if [[ "$SUBMIT_TYPE" == "release" ]]; then
179 echo "========= Building all packages ========"
Kelvin Zhangb2630702022-04-20 11:22:32 +0800180 ./scripts/build_all_pkg.sh > $BUILD_LOG 2>&1
Kelvin Zhangd64c8832022-04-02 19:56:24 +0800181 if [ "$?" -eq 0 ]; then
Kelvin Zhangaa84d882022-04-22 13:38:46 +0800182 post_publish_packages >> $BUILD_LOG 2>&1
Kelvin Zhangd64c8832022-04-02 19:56:24 +0800183 echo "======== Done ========"
184 else
Kelvin Zhangb2630702022-04-20 11:22:32 +0800185 cat $BUILD_LOG
Kelvin Zhangd64c8832022-04-02 19:56:24 +0800186 echo -e "\nAborted!"
187 exit 1
188 fi
kelvin.zhang5fd25982022-03-04 09:43:01 +0800189else
Kelvin Zhangd64c8832022-04-02 19:56:24 +0800190 echo "========= Building all projects ========"
Kelvin Zhang0f582792022-08-31 18:52:20 +0800191 source scripts/build_all.sh #> $BUILD_LOG 2>&1
Kelvin Zhangd64c8832022-04-02 19:56:24 +0800192 if [ "$?" -eq 0 ]; then
Kelvin Zhang8ce1b6e2022-05-30 17:36:49 +0800193 grep -qr "warning: " $BUILD_LOG
194 [ "$?" -eq 0 ] && cat $BUILD_LOG && echo -e "\nAborted with warnings!" && exit 1
Kelvin Zhang0322c7e2022-04-25 18:19:41 +0800195 [[ "$SUBMIT_TYPE" == "daily" ]] && post_publish_images >> $BUILD_LOG 2>&1
Kelvin Zhangd64c8832022-04-02 19:56:24 +0800196 echo "======== Done ========"
197 else
Kelvin Zhangb2630702022-04-20 11:22:32 +0800198 cat $BUILD_LOG
Kelvin Zhang8ce1b6e2022-05-30 17:36:49 +0800199 echo -e "\nAborted with errors!"
Kelvin Zhangd64c8832022-04-02 19:56:24 +0800200 exit 1
201 fi
kelvin.zhang5fd25982022-03-04 09:43:01 +0800202fi