1#!/usr/bin/env bash 2# 3# Script to trigger the Git for Windows build and test run. 4# Set the $GFW_CI_TOKEN as environment variable. 5# Pass the branch (only branches on https://github.com/git/git are 6# supported) and a commit hash. 7# 8 9test$#-ne2&&echo"Unexpected number of parameters"&&exit1 10test -z"$GFW_CI_TOKEN"&&echo"GFW_CI_TOKEN not defined"&&exit 11 12BRANCH=$1 13COMMIT=$2 14 15gfwci () { 16local CURL_ERROR_CODE HTTP_CODE 17 CONTENT_FILE=$(mktemp -t "git-windows-ci-XXXXXX") 18whiletest -z$HTTP_CODE 19do 20 HTTP_CODE=$(curl \ 21-H"Authentication: Bearer$GFW_CI_TOKEN" \ 22--silent --retry5--write-out'%{HTTP_CODE}' \ 23--output>(sed"$(printf '1s/^\xef\xbb\xbf//')">$CONTENT_FILE) \ 24"https://git-for-windows-ci.azurewebsites.net/api/TestNow?$1" \ 25) 26 CURL_ERROR_CODE=$? 27# The GfW CI web app sometimes returns HTTP errors of 28# "502 bad gateway" or "503 service unavailable". 29# We also need to check the HTTP content because the GfW web 30# app seems to pass through (error) results from other Azure 31# calls with HTTP code 200. 32# Wait a little and retry if we detect this error. More info: 33# https://docs.microsoft.com/en-in/azure/app-service-web/app-service-web-troubleshoot-http-502-http-503 34iftest$HTTP_CODE-eq502|| 35test$HTTP_CODE-eq503|| 36grep"502 - Web server received an invalid response"$CONTENT_FILE>/dev/null 37then 38sleep10 39 HTTP_CODE= 40fi 41done 42cat$CONTENT_FILE 43rm$CONTENT_FILE 44iftest$CURL_ERROR_CODE-ne0 45then 46return$CURL_ERROR_CODE 47fi 48iftest"$HTTP_CODE"-ge400&&test"$HTTP_CODE"-lt600 49then 50return127 51fi 52} 53 54# Trigger build job 55BUILD_ID=$(gfwci "action=trigger&branch=$BRANCH&commit=$COMMIT&skipTests=false") 56iftest $? -ne0 57then 58echo"Unable to trigger Visual Studio Team Services Build" 59echo"$BUILD_ID" 60exit1 61fi 62 63# Check if the $BUILD_ID contains a number 64case$BUILD_IDin 65''|*[!0-9]*)echo"Unexpected build number:$BUILD_ID"&&exit1 66esac 67 68echo"Visual Studio Team Services Build #${BUILD_ID}" 69 70# Wait until build job finished 71STATUS= 72RESULT= 73while true 74do 75 LAST_STATUS=$STATUS 76 STATUS=$(gfwci "action=status&buildId=$BUILD_ID") 77test"$STATUS"="$LAST_STATUS"||printf"\nStatus: %s ""$STATUS" 78printf"." 79 80case"$STATUS"in 81 inProgress|postponed|notStarted)sleep10;;# continue 82"completed: succeeded") RESULT="success";break;;# success 83"completed: failed")break;;# failure 84*)echo"Unhandled status:$STATUS";break;;# unknown 85esac 86done 87 88# Print log 89echo"" 90echo"" 91gfwci "action=log&buildId=$BUILD_ID"| cut -c30- 92 93# Set exit code for TravisCI 94test"$RESULT"="success"