LaTeX + Drone CI + Minio + CMake

I like LaTeX for content structure separated from style.

Let’s go, Right now, we’re doing inside how I build this CI/CD.

Which and why

latex-builder

What is it?

It’s my Docker image sycured/latex-builder / Buildah script based on archlinux which include all I need to build my LaTeX documents.

I include my pdfcompressor to compress PDF files.

Drone CI

Drone CI is the easiest and powerful CI/CD that I tested and it’s written in Go. In addition, Drone CLI permits you to run your .drone.yml on your computer using Docker without necessitating to push to the repository (command: drone exec).

MinIO

It’s good to save artifacts from CI/CD, I use MinIO (S3 compatible).

I created a dedicated bucket and inside I put artifacts from CI/CD inside the right folder.

For my CV, the folder cv is read-only for anonymous access; it’s perfect to always share the latest version.

CMake

My ultimate weapon about compiling LaTeX documents, I use one CMake module: UseLATEX.

You need to write a CMakeLists.txt like:

cmake_minimum_required(VERSION 2.8.4)

project(cv NONE)
include(UseLATEX)

file(GLOB_RECURSE english_files RELATIVE ${CMAKE_SOURCE_DIR} english/*.tex)
file(GLOB_RECURSE english-new_files RELATIVE ${CMAKE_SOURCE_DIR} english-new/*.tex)

add_latex_document(
    english.tex
    INPUTS ${english_files}
    FORCE_PDF
    )

add_latex_document(
    english-new.tex
    INPUTS ${english-new_files}
    FORCE_PDF
    )

How to use it in CI/CD?

I include a shell script: run.sh

#!/bin/bash
BD="/tmp/build_cv"
CD=`pwd`
rm -rf "$BD" ; mkdir "$BD" && cd "$BD" && cmake -G Ninja "$CD" && ninja && \
pdfcompressor -2 -o cv-en.pdf -i english.pdf && \
pdfcompressor -2 -o cv-en-new.pdf -i english-new.pdf

What’s ninja?

Why using this old make with CMake?

No reason, you can use CMake with steroid: Ninja

Ninja is a small build system with a focus on speed – https://ninja-build.org/

I need performance (rewriting pdfcompressor to optimize speed: roadmap)