Created
November 26, 2018 14:52
-
-
Save bwheatley/3329848eb3e342d8fbb9e0cc3d712d2c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh -f | |
# Trigger a new Travis-CI job. | |
# Ordinarily, a new Travis job is triggered when a commit is pushed to a | |
# GitHub repository. The trigger-travis.sh script provides a programmatic | |
# way to trigger a new Travis job. | |
# Usage: | |
# trigger-travis.sh [--pro] [--branch BRANCH] GITHUBID GITHUBPROJECT TRAVIS_ACCESS_TOKEN [MESSAGE] | |
# For example: | |
# trigger-travis.sh typetools checker-framework `cat ~/private/.travis-access-token` "Trigger for testing" | |
# | |
# where --pro means to use travis-ci.com instead of travis-ci.org, and | |
# where TRAVIS_ACCESS_TOKEN is, or ~/private/.travis-access-token contains, | |
# the Travis access token. | |
# | |
# Your Travis access token is the text after "Your access token is " in | |
# the output of this compound command: | |
# travis login && travis token | |
# (If the travis program isn't installed, then use either of these two commands: | |
# gem install travis | |
# sudo apt-get install ruby-dev && sudo gem install travis | |
# Don't do "sudo apt-get install travis" which installs a trajectory analyzer.) | |
# Note that the Travis access token output by `travis token` differs from the | |
# Travis token available at https://travis-ci.org/profile . | |
# If you store it in in a file, make sure the file is not readable by others, | |
# for example by running: chmod og-rwx ~/private/.travis-access-token | |
# To use this script to trigger a dependent build in Travis, do two things: | |
# | |
# 1. Set an environment variable TRAVIS_ACCESS_TOKEN by navigating to | |
# https://travis-ci.org/MYGITHUBID/MYGITHUBPROJECT/settings | |
# The TRAVIS_ACCESS_TOKEN environment variable will be set when Travis runs | |
# the job, but won't be visible to anyone browsing https://travis-ci.org/. | |
# | |
# 2. Add the following to your .travis.yml file, where you replace | |
# OTHERGITHUB* by a specific downstream project, but you leave | |
# $TRAVIS_ACCESS_TOKEN as literal text: | |
# | |
# jobs: | |
# include: | |
# - stage: trigger downstream | |
# jdk: oraclejdk8 | |
# script: | | |
# echo "TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST" | |
# if [[ ($TRAVIS_BRANCH == master) && | |
# ($TRAVIS_PULL_REQUEST == false) ]] ; then | |
# curl -LO --retry 3 https://raw.github.com/mernst/plume-lib/master/bin/trigger-travis.sh | |
# sh trigger-travis.sh OTHERGITHUBID OTHERGITHUBPROJECT $TRAVIS_ACCESS_TOKEN | |
# fi | |
# TODO: Show how to use the --branch command-line argument. | |
# TODO: Enable the script to clone a particular branch rather than master. | |
# This would require a way to know the relationships among branches in | |
# different GitHub projects. It's easier to run all your tests within a | |
# single Travis job, if they fit within Travis's 50-minute time limit. | |
# An alternative to this script would be to install the Travis command-line | |
# client and then run: | |
# travis restart -r OTHERGITHUBID/OTHERGITHUBPROJECT | |
# That is undesirable because it restarts an old job, destroying its history, | |
# rather than starting a new job which is our goal. | |
# Parts of this script were originally taken from | |
# http://docs.travis-ci.com/user/triggering-builds/ | |
if [ "$#" -lt 3 ] || [ "$#" -ge 7 ]; then | |
echo "Wrong number of arguments $# to trigger-travis.sh; run like:" | |
echo " trigger-travis.sh [--pro] [--branch BRANCH] GITHUBID GITHUBPROJECT TRAVIS_ACCESS_TOKEN [MESSAGE]" >&2 | |
exit 1 | |
fi | |
if [ "$1" = "--pro" ] ; then | |
TRAVIS_URL=travis-ci.com | |
shift | |
else | |
TRAVIS_URL=travis-ci.org | |
fi | |
if [ "$1" = "--branch" ] ; then | |
shift | |
BRANCH="$1" | |
shift | |
else | |
BRANCH=master | |
fi | |
USER=$1 | |
REPO=$2 | |
TOKEN=$3 | |
if [ $# -eq 4 ] ; then | |
MESSAGE=",\"message\": \"$4\"" | |
elif [ -n "$TRAVIS_REPO_SLUG" ] ; then | |
MESSAGE=",\"message\": \"Triggered by upstream build of $TRAVIS_REPO_SLUG commit "`git rev-parse --short HEAD`"\"" | |
else | |
MESSAGE="" | |
fi | |
## For debugging: | |
# echo "USER=$USER" | |
# echo "REPO=$REPO" | |
# echo "TOKEN=$TOKEN" | |
# echo "MESSAGE=$MESSAGE" | |
body="{ | |
\"request\": { | |
\"branch\":\"$BRANCH\" | |
$MESSAGE | |
}}" | |
# It does not work to put / in place of %2F in the URL below. I'm not sure why. | |
curl -s -X POST \ | |
-H "Content-Type: application/json" \ | |
-H "Accept: application/json" \ | |
-H "Travis-API-Version: 3" \ | |
-H "Authorization: token ${TOKEN}" \ | |
-d "$body" \ | |
https://api.${TRAVIS_URL}/repo/${USER}%2F${REPO}/requests \ | |
| tee /tmp/travis-request-output.$$.txt | |
if grep -q '"@type": "error"' /tmp/travis-request-output.$$.txt; then | |
exit 1 | |
fi | |
if grep -q 'access denied' /tmp/travis-request-output.$$.txt; then | |
exit 1 | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment