mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-10-27 16:43:59 +08:00
22a8575199
Keep official openpilot ancestry and dependency licenses. Store resources directly in Git, remove LFS setup requirements, and leave the downloadable big model outside the source tree.
130 lines
3.4 KiB
Bash
Executable File
130 lines
3.4 KiB
Bash
Executable File
#!/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)')
|
|
|
|
FIRST_LOOP=1
|
|
|
|
function loop() {
|
|
JENKINS_BRANCH="__jenkins_loop_${BRANCH}_$(date +%s)"
|
|
API_ROUTE="https://jenkins.comma.life/job/openpilot/job/$JENKINS_BRANCH"
|
|
|
|
for run in $(seq 1 $((RUNS / 2))); do
|
|
|
|
N=2
|
|
|
|
if [[ $FIRST_LOOP ]]; then
|
|
TEMP_DIR=$(mktemp -d)
|
|
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: $(date)" >> "$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
|
|
FIRST_LOOP=""
|
|
fi
|
|
|
|
FIRST_BUILD=$(curl -s "$API_ROUTE/api/json" | jq .nextBuildNumber)
|
|
LAST_BUILD=$((FIRST_BUILD+N-1))
|
|
read -r -a TEST_BUILDS <<< "$(seq -s ' ' "$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 ""
|
|
|
|
# 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 -r -p "Press (y/Y) to confirm: " choice
|
|
if [[ "$choice" == "y" || "$choice" == "Y" ]]; then
|
|
loop
|
|
fi
|
|
|
|
}
|
|
|
|
_looper "$@"
|