github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/git/hooks/pre-push (about) 1 #!/bin/bash 2 3 REPO_DIR="$(git rev-parse --show-toplevel)" 4 source "${REPO_DIR}/util/logging.sh" 5 source "${REPO_DIR}/util/commands.sh" 6 7 DOCKER_INSTANCE="${DOCKER_INSTANCE:-wptd-dev-instance}" 8 9 info "Checking where we're pushing..." 10 IS_MASTER="false" 11 while read local_ref local_sha remote_ref remote_sha 12 do 13 debug "$local_ref $local_sha $remote_ref $remote_sha" 14 if [[ -n "$remote_ref" ]]; 15 then 16 if [[ "$(echo $remote_ref | sed -e 's,.*/\(.*\),\1,')" == "master" ]] 17 then 18 IS_MASTER="true" 19 fi 20 fi 21 done 22 23 if [[ "${IS_MASTER}" == "true" ]] 24 then 25 confirm "Are you sure you want to push master?" || fatal "User cancelled the push" 26 fi 27 28 # Check for uncommitted changes. 29 info "Checking for uncommitted changes..." 30 ! git diff . 2>&1 | read > /dev/null 2>&1 31 DIFF_STATUS="${?}" 32 if [ "${DIFF_STATUS}" != "0" ]; then 33 confirm "You have uncommitted local changes. Push committed changes anyway?" \ 34 || fatal "User cancelled the push" 35 fi 36 37 info "Running pre-push checks in docker..." 38 docker inspect "${DOCKER_INSTANCE}" > /dev/null 2>&1 39 INSPECT_STATUS="${?}" 40 41 DOCKER_INSTANCE_PID="" 42 if [ "${INSPECT_STATUS}" != "0" ]; then 43 info "Docker instance ${DOCKER_INSTANCE} not found. Starting it..." 44 docker run -t -d --entrypoint /bin/bash \ 45 -v "${WPTD_PATH}":/home/user/wpt.fyi \ 46 -u $(id -u $USER):$(id -g $USER) \ 47 --name "${DOCKER_INSTANCE}" wptd-dev & 48 DOCKER_INSTANCE_PID="${!}" 49 # Ensure rights. 50 wptd_useradd 51 wptd_chown "/home/user" 52 else 53 info "Found existing docker instance ${DOCKER_INSTANCE}" 54 fi 55 56 docker exec -t -u $(id -u $USER):$(id -g $USER) "${DOCKER_INSTANCE}" make prepush 57 LINT_STATUS="${?}" 58 FINAL_STATUS="${LINT_STATUS}" 59 if [ "${LINT_STATUS}" != "0" ]; then 60 confirm "Lint failed. Push anyway?" || fatal "User cancelled the push" 61 info "Pushing in spite of lint errors..." 62 FINAL_STATUS="0" 63 fi 64 65 if [ "${DOCKER_INSTANCE_PID}" != "" ]; then 66 kill "${DOCKER_INSTANCE_PID}" 67 fi 68 69 if [ "${FINAL_STATUS}" == "0" ]; then 70 info "Pre-push exit status: ${FINAL_STATUS}" 71 else 72 error "Pre-push exit status: ${FINAL_STATUS}" 73 fi 74 75 exit "${FINAL_STATUS}"