mirror of
https://github.com/git/git.git
synced 2024-11-01 23:07:55 +01:00
029aeeed55
Most Git developers work on Linux and they have no way to know if their changes would break the Git for Windows build. Let's fix that by adding a job to TravisCI that builds and tests Git on Windows. Unfortunately, TravisCI does not support Windows. Therefore, we did the following: * Johannes Schindelin set up a Visual Studio Team Services build sponsored by Microsoft and made it accessible via an Azure Function that speaks a super-simple API. We made TravisCI use this API to trigger a build, wait until its completion, and print the build and test results. * A Windows build and test run takes up to 3h and TravisCI has a timeout after 50min for Open Source projects. Since the TravisCI job does not use heavy CPU/memory/etc. resources, the friendly TravisCI folks extended the job timeout for git/git to 3h. Things, that would need to be done: * Someone with write access to https://travis-ci.org/git/git would need to add the secret token as "GFW_CI_TOKEN" variable in the TravisCI repository setting [1]. Afterwards the build should just work. Things, that might need to be done: * The Windows box can only process a single build at a time. A second Windows build would need to wait until the first finishes. This waiting time and the build time after the wait could exceed the 3h threshold. If this is a problem, then it is likely to happen every day as usually multiple branches are pushed at the same time (pu/next/ master/maint). I cannot test this as my TravisCI account has the 50min timeout. One solution could be to limit the number of concurrent TravisCI jobs [2]. [1] https://docs.travis-ci.com/user/environment-variables#Defining-Variables-in-Repository-Settings [2] https://docs.travis-ci.com/user/customizing-the-build#Limiting-Concurrent-Builds Signed-off-by: Lars Schneider <larsxschneider@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
74 lines
1.8 KiB
Bash
Executable file
74 lines
1.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# Script to trigger the a Git for Windows build and test run.
|
|
# Set the $GFW_CI_TOKEN as environment variable.
|
|
# Pass the branch (only branches on https://github.com/git/git are
|
|
# supported) and a commit hash.
|
|
#
|
|
|
|
test $# -ne 2 && echo "Unexpected number of parameters" && exit 1
|
|
test -z "$GFW_CI_TOKEN" && echo "GFW_CI_TOKEN not defined" && exit
|
|
|
|
BRANCH=$1
|
|
COMMIT=$2
|
|
|
|
gfwci () {
|
|
local CURL_ERROR_CODE HTTP_CODE
|
|
exec 3>&1
|
|
HTTP_CODE=$(curl \
|
|
-H "Authentication: Bearer $GFW_CI_TOKEN" \
|
|
--silent --retry 5 --write-out '%{HTTP_CODE}' \
|
|
--output >(sed "$(printf '1s/^\xef\xbb\xbf//')" >cat >&3) \
|
|
"https://git-for-windows-ci.azurewebsites.net/api/TestNow?$1" \
|
|
)
|
|
CURL_ERROR_CODE=$?
|
|
if test $CURL_ERROR_CODE -ne 0
|
|
then
|
|
return $CURL_ERROR_CODE
|
|
fi
|
|
if test "$HTTP_CODE" -ge 400 && test "$HTTP_CODE" -lt 600
|
|
then
|
|
return 127
|
|
fi
|
|
}
|
|
|
|
# Trigger build job
|
|
BUILD_ID=$(gfwci "action=trigger&branch=$BRANCH&commit=$COMMIT&skipTests=false")
|
|
if test $? -ne 0
|
|
then
|
|
echo "Unable to trigger Visual Studio Team Services Build"
|
|
echo "$BUILD_ID"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if the $BUILD_ID contains a number
|
|
case $BUILD_ID in
|
|
''|*[!0-9]*) echo "Unexpected build number: $BUILD_ID" && exit 1
|
|
esac
|
|
|
|
echo "Visual Studio Team Services Build #${BUILD_ID}"
|
|
|
|
# Wait until build job finished
|
|
STATUS=
|
|
RESULT=
|
|
while true
|
|
do
|
|
LAST_STATUS=$STATUS
|
|
STATUS=$(gfwci "action=status&buildId=$BUILD_ID")
|
|
test "$STATUS" = "$LAST_STATUS" || printf "\nStatus: $STATUS "
|
|
printf "."
|
|
|
|
case "$STATUS" in
|
|
inProgress|postponed|notStarted) sleep 10 ;; # continue
|
|
"completed: succeeded") RESULT="success"; break;; # success
|
|
*) echo "Unhandled status: $STATUS"; break;; # failure
|
|
esac
|
|
done
|
|
|
|
# Print log
|
|
echo ""
|
|
echo ""
|
|
gfwci "action=log&buildId=$BUILD_ID" | cut -c 30-
|
|
|
|
# Set exit code for TravisCI
|
|
test "$RESULT" = "success"
|