CombiningDratAndTravis
What is Travis CI?
Travis CI is a hosted continuous integration service. It is integrated with GitHub and offers first class support for a number of languages, but importantly for us, R. Travis CI enables package authors to continually ensure their package always build and passes associated unit tests.
Whenever a commit is pushed to a git repository that contains an R package, Travis CI attempts to build the associated R package (see r-travis for R specific examples). This ensures the repository always contains a working package. This vignette describes a modification to the standard Travis CI workflow. If a package build is successful, the package is then pushed to a drat repository.
Preliminaries
Unsurprisingly in order to integrate Travis CI with drat, you must first to have a drat repository and secondly add Travis CI support to that repository.
Workflow
-
To allow Travis CI to push to your GitHub repository, we need to generate a GitHub API token. After re-entering your password, just select
repo, or if your repository is public, selectpublic_repo. GitHub will create the token and give you a chance to copy it down. -
Travis CI will then encrypt this token. The short story is:
Ifsudois not available, you can do a local install cdto the R package directory and run where$MY_ACCESS_TOKENis your access token. The--add env.globalautomatically adds the token to your.travis.ymlfile.-
Add the
deploy.shshell script to your repository and edit appropriately. An example is found at the end of this vignette and also in the dratTravis repository. -
Add the lines
to yourafter_success: - test $TRAVIS_PULL_REQUEST == "false" && test $TRAVIS_BRANCH == "master" && bash deploy.sh.travis.ymlfile. This means yourdratrepository is only updated- for successful builds;
- only on the master branch;
- and not for pull requests.
Example deploy.sh script
#!/bin/bash
set -o errexit -o nounset
addToDrat(){
PKG_REPO=$PWD
cd ..; mkdir drat; cd drat
## Set up Repo parameters
git init
git config user.name "XXX YYY"
git config user.email "XXXX@example.com"
git config --global push.default simple
## Get drat repo
git remote add upstream "https://$GH_TOKEN@github.com/GITHUB_USERNAME/drat.git"
git fetch upstream 2>err.txt
git checkout gh-pages
Rscript -e "drat::insertPackage('$PKG_REPO/$PKG_TARBALL', \
repodir = '.', \
commit='Travis update: build $TRAVIS_BUILD_NUMBER')"
git push 2> /tmp/err.txt
}
addToDrat
If you use a docs/ directory in the main branch, omit git checkout
gh-pages and use cd docs instead.