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@xxxxxxxxx> --- Notes: Base Ref: master Web-Diff: https://github.com/larsxschneider/git/commit/322094c0a2 Checkout: git fetch https://github.com/larsxschneider/git travisci/win-v1 && git checkout 322094c0a2 .travis.yml | 11 ++++++++++ ci/run-windows-build.sh | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100755 ci/run-windows-build.sh diff --git a/.travis.yml b/.travis.yml index 591cc57b80..a7e98ae519 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,6 +39,17 @@ env: matrix: include: + - env: Windows + os: linux + compiler: + addons: + before_install: + before_script: + script: + - > + test "$TRAVIS_REPO_SLUG" != "git/git" || + ci/run-windows-build.sh $GFW_CI_TOKEN $TRAVIS_BRANCH $(git rev-parse HEAD) + after_failure: - env: Linux32 os: linux services: diff --git a/ci/run-windows-build.sh b/ci/run-windows-build.sh new file mode 100755 index 0000000000..324a9ea4e6 --- /dev/null +++ b/ci/run-windows-build.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +# +# Script to trigger the a Git for Windows build and test run. +# Pass a token, the branch (only branches on https://github.com/git/git) +# are supported), and a commit hash. +# + +[ $# -eq 3 ] || (echo "Unexpected number of parameters" && exit 1) + +TOKEN=$1 +BRANCH=$2 +COMMIT=$3 + +gfwci () { + curl \ + -H "Authentication: Bearer $TOKEN" \ + --silent --retry 5 \ + "https://git-for-windows-ci.azurewebsites.net/api/TestNow?$1" | + sed "$(printf '1s/^\xef\xbb\xbf//')" # Remove the Byte Order Mark +} + +# Trigger build job +BUILD_ID=$(gfwci "action=trigger&branch=$BRANCH&commit=$COMMIT&skipTests=false") + +# Check if the $BUILD_ID contains a number +case $BUILD_ID in + ''|*[!0-9]*) echo $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") + [ "$STATUS" == "$LAST_STATUS" ] || printf "\nStatus: $STATUS " + printf "." + + case $STATUS in + inProgress|postponed|notStarted) sleep 10 ;; # continue + "completed: succeeded") RESULT="success"; break;; # success + *) echo "Unknown: $STATUS"; break;; # failure + esac +done + +# Print log +echo "" +echo "" +gfwci "action=log&buildId=$BUILD_ID" | cut -c 30- + +# Set exit code for TravisCI +[ "$RESULT" == "success" ] base-commit: afd6726309f57f532b4b989a75c1392359c611cc -- 2.11.1