parent
d1b93287f2
commit
4b278fe14f
2 changed files with 147 additions and 2 deletions
@ -0,0 +1,145 @@ |
||||
#!/usr/bin/env bash |
||||
set -e |
||||
|
||||
YELLOW='\033[0;33m' |
||||
GREEN='\033[0;32m' |
||||
UNDERLINE='\033[4m' |
||||
BOLD='\033[1m' |
||||
NC='\033[0m' |
||||
|
||||
BRANCH="master" |
||||
RUNS="20" |
||||
|
||||
COOKIE_JAR=/tmp/cookies |
||||
CRUMB=$(curl -s --cookie-jar $COOKIE_JAR 'https://jenkins.comma.life/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') |
||||
|
||||
function loop() { |
||||
JENKINS_BRANCH="__jenkins_loop_${BRANCH}" |
||||
API_ROUTE="https://jenkins.comma.life/job/openpilot/job/$JENKINS_BRANCH" |
||||
|
||||
for run in $(seq 1 $((RUNS / 2))); do |
||||
|
||||
N=2 |
||||
TEST_BUILDS=() |
||||
|
||||
# Try to find previous builds |
||||
ALL_BUILDS=( $(curl -s $API_ROUTE/api/json | jq .builds.[].number 2> /dev/null || :) ) |
||||
|
||||
# No builds. Create branch |
||||
if [[ ${#ALL_BUILDS[@]} -eq 0 ]]; then |
||||
TEMP_DIR=$(mktemp -d) |
||||
GIT_LFS_SKIP_SMUDGE=1 git clone --quiet -b $BRANCH --depth=1 --no-tags git@github.com:commaai/openpilot $TEMP_DIR |
||||
git -C $TEMP_DIR checkout --quiet -b $JENKINS_BRANCH |
||||
echo "TESTING" >> $TEMP_DIR/testing_jenkins |
||||
git -C $TEMP_DIR add testing_jenkins |
||||
git -C $TEMP_DIR commit --quiet -m "testing" |
||||
git -C $TEMP_DIR push --quiet -f origin $JENKINS_BRANCH |
||||
rm -rf $TEMP_DIR |
||||
FIRST_BUILD=1 |
||||
echo '' |
||||
echo 'waiting on Jenkins...' |
||||
echo '' |
||||
sleep 90 |
||||
else |
||||
# Found some builds. Wait for them to end if they are still running |
||||
for i in ${ALL_BUILDS[@]}; do |
||||
running=$(curl -s $API_ROUTE/$i/api/json/ | jq .inProgress) |
||||
if [[ $running == "false" ]]; then |
||||
continue |
||||
fi |
||||
TEST_BUILDS=( ${ALL_BUILDS[@]} ) |
||||
N=${#TEST_BUILDS[@]} |
||||
break |
||||
done |
||||
fi |
||||
|
||||
# No running builds found |
||||
if [[ ${#TEST_BUILDS[@]} -eq 0 ]]; then |
||||
FIRST_BUILD=$(curl -s $API_ROUTE/api/json | jq .nextBuildNumber) |
||||
LAST_BUILD=$((FIRST_BUILD+N-1)) |
||||
TEST_BUILDS=( $(seq $FIRST_BUILD $LAST_BUILD) ) |
||||
|
||||
# Start N new builds |
||||
for i in ${TEST_BUILDS[@]}; |
||||
do |
||||
echo "Starting build $i" |
||||
curl -s --output /dev/null --cookie $COOKIE_JAR -H "$CRUMB" -X POST $API_ROUTE/build?delay=0sec |
||||
sleep 5 |
||||
done |
||||
echo "" |
||||
fi |
||||
|
||||
# Wait for all builds to end |
||||
while true; do |
||||
sleep 30 |
||||
|
||||
count=0 |
||||
for i in ${TEST_BUILDS[@]}; |
||||
do |
||||
RES=$(curl -s -w "\n%{http_code}" --cookie $COOKIE_JAR -H "$CRUMB" $API_ROUTE/$i/api/json) |
||||
HTTP_CODE=$(tail -n1 <<< "$RES") |
||||
JSON=$(sed '$ d' <<< "$RES") |
||||
|
||||
if [[ $HTTP_CODE == "200" ]]; then |
||||
STILL_RUNNING=$(echo $JSON | jq .inProgress) |
||||
if [[ $STILL_RUNNING == "true" ]]; then |
||||
echo -e "Build $i: ${YELLOW}still running${NC}" |
||||
continue |
||||
else |
||||
count=$((count+1)) |
||||
echo -e "Build $i: ${GREEN}done${NC}" |
||||
fi |
||||
else |
||||
echo "No status for build $i" |
||||
fi |
||||
done |
||||
echo "See live results: ${API_ROUTE}/buildTimeTrend" |
||||
echo "" |
||||
|
||||
if [[ $count -ge $N ]]; then |
||||
break |
||||
fi |
||||
done |
||||
|
||||
done |
||||
} |
||||
|
||||
function usage() { |
||||
echo "" |
||||
echo "Run the Jenkins tests multiple times on a specific branch" |
||||
echo "" |
||||
echo -e "${BOLD}${UNDERLINE}Options:${NC}" |
||||
echo -e " ${BOLD}-n, --n${NC}" |
||||
echo -e " Specify how many runs to do (default to ${BOLD}20${NC})" |
||||
echo -e " ${BOLD}-b, --branch${NC}" |
||||
echo -e " Specify which branch to run the tests against (default to ${BOLD}master${NC})" |
||||
echo "" |
||||
} |
||||
|
||||
function _looper() { |
||||
if [[ $# -eq 0 ]]; then |
||||
usage |
||||
exit 0 |
||||
fi |
||||
|
||||
# parse Options |
||||
while [[ $# -gt 0 ]]; do |
||||
case $1 in |
||||
-n | --n ) shift 1; RUNS="$1"; shift 1 ;; |
||||
-b | --b | --branch | -branch ) shift 1; BRANCH="$1"; shift 1 ;; |
||||
* ) usage; exit 0 ;; |
||||
esac |
||||
done |
||||
|
||||
echo "" |
||||
echo -e "You are about to start $RUNS Jenkins builds against the $BRANCH branch." |
||||
echo -e "If you expect this to run overnight, ${UNDERLINE}${BOLD}unplug the cold reboot power switch${NC} from the testing closet before." |
||||
echo "" |
||||
read -p "Press (y/Y) to confirm: " choice |
||||
if [[ "$choice" == "y" || "$choice" == "Y" ]]; then |
||||
loop |
||||
fi |
||||
|
||||
} |
||||
|
||||
_looper $@ |
Loading…
Reference in new issue