Setting up Travis

Its always fun to learn and implement new technologies. Travis-CI a FOSS for continuous integration and deployment, is one such tool I always wanted to learn. Finally, today, I did get some motivation to get started with Travis to auto build and deploy a paper I am currently writing in LaTex.

The code is hosted on Github within a private repository, Travis pro provides access to build, test and deploy from private repositories.

Installing Travis

Run the following commands to install and setup Travis-cli which will help auto-generation of configuration file .travis.yml. This file can also be created without the tool, auto generation always makes life easy.

        curl -sSL https://get.rvm.io | bash -s stable --ruby
        source /$HOME/.rvm/scripts/rvm
        gem install travis

Setup Github and Travis

Goto settings on the Github repository, Choose webhooks and services > Add service and select Travis-CI. This will allow travis to start building when a commit has been pushed.

Also, make sure the repository is enabled within the Travis webpage. on the travis home page, you can toggle required repositories for building.

Generate and configure .travis.yml

.travis.yml is a configuration file that defines the build process for your repository. Travis documentation provides an in-depth explanation for the various build configurations. Here I will stick to my own requirement.

Go to the cloned repository, use the command:

        travis setup releases

Follow the steps to generate the .travis.yml file.

Update the .travis.yml file based on need, here is the file I use.

        before_install:
        - "sudo apt-get update && sudo apt-get install -y --no-install-recommends  dvipng latexmk texlive texlive-base texlive-full"
        script:
        - latexmk -pdf myTexFile.tex
        before_deploy:
        - git fetch --tags
        deploy:
          provider: releases
          api_key:[Your Key]
          file: myTexFile.pdf
          skip_cleanup: true
         on:
            repo: gitUsername/repoName
            tags: true
            all_branches: true

The main updates here are, the before_install scripts, we first install all dependencies before actually compiling the program. skip_cleanup tells Travis not to stash all changes before the code is deployed.

This configuration is done for all tagged commits on Github. For various issues, the field all_branches needs to be defined and also git fetch --tags makes sure it has all valid tags before starting the deploy phase.

Testing

It must now be possible to automatically generate builds, to generate a build make sure to tag your commit, using:

      git commit -a -m "Message"
      git tag tagName
      git push origin master --tags

This should now trigger a build on the Travis server. Builds can be monitored from the user’s homepage. If build and deployment was a success, you should see the files under releases tab on the repository.