I recently wanted to make my resume easier to maintain and especially version control. It was especially difficult to update across multiple files. So I set up a Gitlab Latex resume and setup Gitlabs' continuous integration to upload the pdfs to Dropbox. I wanted to share those steps so anyone else looking to do the same will hopefully have an easier time.

Why to not start with an existing project

There were a few projects for me to look at but I found a Latex resume that uses xelatex to build, so I wanted to setup a custom Dockerfile to build from. The other projects had out of date documents too.

Latex Resume

You can get your resume where ever you find one that you like the layout of. I got my resume here, I have worked with Latex before so editing & building were pretty straightforward.

Gitlab Repo

So next you will want to create a private repo on Gitlab to host your resume versions as Latex files. The branching strategy I went with is I created a master branch, and a couple more branches for generic positions. Then when I apply I make a company specific branch based off the closest matching job branch. I like to think of my branches as an unbounded tree.

Gitlab CI

Continuous Integration just runs a script after pushing a commit. Gitlab uses a yaml file to define your CI pipeline. Below is Gitlabs CI summary.

Here is my final CI script, it builds the resume & cover letter, renames the pdfs to include the branch name then uploads them to Dropbox.

Dropbox Uploader

I wanted to find a way to upload to Dropbox over the command-line so I found this project. You should read the README and setup an app in your Dropbox to give it API access.

Final Gitlab CI Yaml

image: mrengineer13/xe-latex:1.0.0-RC2

    - xelatex resume.tex        
    - xelatex cover_letter.tex      
      - "*.pdf"
    - mv resume.pdf {$CI_COMMIT_REF_SLUG}_resume.pdf    
    - mv cover_letter.pdf {$CI_COMMIT_REF_SLUG}_cover_letter.pdf    
    - mv ./*.pdf /Dropbox-Uploader/    
    - cd /Dropbox-Uploader    
    - echo 'OAUTH_ACCESS_TOKEN=<API KEY>' >> dropbox_uploader_config  
    - ./dropbox_uploader.sh -f ./dropbox_uploader_config upload ./*.pdf pdfs/

Custom Docker Hub image

Originally I used an image based on a xelatex image I found, then I had quite a bit more in my yaml and of-course terribly slow build times, over 10 minutes! So I made a custom Dockerfile, the source is here. I also had to publish that image on Docker Hub so here it is - public access for Gitlab.

Now, with my new Docker image it builds in under 2 minutes - a big improvement! What's next? I want to have the sections in my resume update from the job description.