Yung-Hsiang Lu and George K. Thiruvathukal, Software Engineering and Machine Learning, PurdueCAM2Project/SE4ML, Zenodo, http://doi.org/10.5281/zenodo.2532051.
Our work is under active development, so please make sure to use this DOI, which always points to the current tagged release (or pre-release) version.
We are working to set up a nicer web page (for students and other users).
In the meantime, you can download the latest prerelease by visiting Releases.
Profs. Lu and Thiruvathukal do point releases as new material appears. We are not even close to 1.0 yet, but hope to do a major release sometime this semester.
This is a work in progress by Profs. Yung-Hsiang Lu (Purdue) and George K. Thiruvathukal (Loyola University Chicago). We'll be discussing methods for software development/engineering and machine learning.
We were interested to figure out how to use Travis to build LaTeX books hosted on GitHub. Note that we are well aware of collaborative LaTeX tools (e.g. Overleaf and Authorea). However, these tools don't support the distributed workflows of Git. Because we ultimately hope to take advantage of pull requests, we need a GitHub (or equivalent) system to manage changes to this book.
GitHub provides support for Releases, which is a replacement for downloads. You can create releases based on a git tag
. Combined with a continuous integration system like Travis, you can ensure your LaTeX book builds successfully and, if tagged, deploys to GitHub Releases for your repository.
You can see the latest details in my .travis.yml
file. But here is walkthrough.
-
Use the newer style containers at Travis.
sudo: false language: python
-
Declare the needed LaTeX packages. Keep in mind that although you can use
texlive-full
, you'll come to regret it quickly. Choosing the full install takes almost 10-15 minutes in my testing. So I have carefully selected the packages that work with Ubuntu 14.04. (yes, that's what Travis is using. Ugh.)addons: apt: packages: - latex-xcolor - texlive-base - texlive-latex-base - texlive-latex-recommended - texlive-fonts-recommended - texlive-fonts-extra - texlive-latex-extra - texlive-formats-extra - texlive-bibtex-extra - texlive-humanities - texinfo - texlive-science - latexmk
-
Create your LaTeX book. In my case, I use a Makefile for this. We're going to switch to
latexmk
soon but are having some problems with it, hence the additional package you see in the above.script: - make book
-
Now here is where things get a bit dicey. You need to declare what you want to deploy--and how you're going to do it. In this case, I'm deploying to our project at
PurdueCAM2Project/SE4ML
. In order for this to work, you need to take some preliminary steps. I'll go through each of these. -
There have been a number of changes to Travis lately, owing to the corresponding changes also happening at GitHub, where apps are being phased in and services phased out, respectively. So you will be moving to
travis-ci.com
(as opposed totravis-ci.org
). You should set up thetravis
gem (from Ruby) if you haven't done so already. This gives you command line support to set up the following block of YAML code (mostly).travis setup releases --pro
deploy: provider: releases api_key: secure: NA6E8nfyjpc8clNYP9pT5jBKK95ughnNoneki/V87zvBWg8xFWz58A8ltnFW7ulGn41p2QGZ0tRVysn72bC27X/Ditlr+W8LsLODpLWhXrY6eVp1mTQsYY5DBRKv5fAxCNz5ttQywSz03V8SgJyM4inQlJo9WNzZ7EKt+/MGgh7NIGAxQYc6G8LqvnoDNmbYAMz7ewtyOkEbZvCRrMqCZn/06qFnf4/l14RYsIacnpRyiakRylssA5piiNCG0H5NV772vrPNttDMWFSm/Oi7Z4U9G/uvpX9s0ylZRXJEmn3OGZkonvc15Q2MK0FCxM5AutDzlS+vLGcMFCKdLiV+b7AMN8E/iCJSC8sR036VIc1GLlRUvn+KlL8Txt3wa1i09gmo7cLEtwwrtP8svOnItyqCOyQ/y59ZBLIynhFcrEpg3v/03TblU9j7+c0cJ+tHv3CLh373q1QzZH4XOi+Xy23aRRwRM1sxWBoS398p/51lj54er865E8Nc7NfoINilO1v/yNLFEi7gRSs8rBbzq09u4KIavmel5xTsdQ+KDwmt+tDdTj0Oj5OJWci8dsz1v24xOXNf9BntlDw8wRsV4Ksxe0fppifoGm9/O+6HqXyA5PdVS0ehWVjOIdR1sA92NFCUFXhP0xBidowlD1PvvihYo6aqQYbvp2UL5qw2m3E= file: - "se4ml.pdf" skip_cleanup: true on: repo: PurdueCAM2Project/SE4ML tags: true
I say mostly because not all of what you see here is added to your .travis.yml automagically. First, the
api_key:
. You need to usetravis encrypt
to create this. You also need to add theskip_cleanup: true
andon: repo:
key you see here (with your own repo-specific info). We do not cover API keys here as this is easy to do within GitHub, and there are plenty of resources that explain how to do it. Lastly, don't forget theon: tags:
key. You need to set this in order to trigger a release anytime you apply a tag and push it to your repo. In my case, I don't want every commit to trigger a release--just the milestones (major and minor). We use simple versioning likev0.1
orv0.1.1
at this stage. But any legitimate tagging scheme will work. If yougit tag
it, the release will show up.The
file:
key is used to list any files you'd like to be deployed to GitHub Releases for your project. These files will be in addition to the .zip and .tar.gz (tarball) that are done by default. (I am still working on how to disable those. My release is simply the .pdf for those who want to view the book in progress.)
-
The general resource at Travis CI provides a useful overview.
-
This page by Victor Hurdagaci describes his experiences and is a helpful starting point. I hope some of the additional details provided above will prove helpful.
Please don't hesitate to contact me (gkthiruvathukal). See my profile for contact information.