This repository keeps the resume source in resume.md and generates three outputs:
resume.htmlresume.pdfresume.docx
GitHub Pages serves the generated files from the Actions build artifact. They are not stored in git.
Live site: cv.daviot.info
If you fork this repository for your own resume, the usual workflow is:
- replace the content in
resume.mdwith your own resume data - update the
titleand optionalmarginfront matter inresume.md - adjust the HTML presentation in
css/resume.cssif you want different styling - adjust the HTML shell in
templates/resume.html5if you want a different page structure or download links - run
make alllocally and review the generated files indist/ - if you publish through GitHub Pages, update or remove
CNAMEto match your own domain setup
The generated outputs are:
dist/resume.htmldist/resume.pdfdist/resume.docx
Requirements:
pandoc- A PDF engine:
tectonicis the default for local builds in this repositoryxelatexis used in GitHub Actions because it is available from Ubuntu packages there
python3PyYAMLfor parsing Markdown front matter inscripts/document_tools.pyrufffor Python linting
Tested local setup on macOS:
brew install pandoc
brew install tectonic
python3 -m pip install PyYAML ruffAlternative on macOS:
brew install --cask mactex-no-guimactex-no-gui works as the TeX distribution for xelatex, but it is a large download and install.
Other platforms are not documented or tested in this repository. For broader setup guidance on Linux and other environments, see the upstream project: mszep/pandoc_resume.
The Makefile also prints install hints:
make depsTo check that the required tools are available:
make check-depsRun the Python linter:
make lintBuild everything into dist/:
make allBuild individual formats:
make html
make pdf
make docxClean generated files:
make cleanIf you want to use a different PDF engine temporarily, override it:
make pdf PDF_ENGINE=xelatexCI note:
GitHub Actions builds the PDF with PDF_ENGINE=xelatex and installs texlive-xetex, while local builds still default to tectonic.
To preview the generated site locally:
python3 -m http.server --directory dist 8000Then open http://localhost:8000.
resume.md: the single source document for the resume content, including front matter such astitleandmargincss/resume.css: the stylesheet for the generated HTML resume and the GitHub Pages sitetemplates/resume.html5: the Pandoc HTML template that wraps the generated resume bodyscripts/document_tools.py: Python helper for reading Markdown front matter and post-processing DOCX marginsscripts/latex_center_blockquotes.lua: Pandoc Lua filter used only for PDF generationtests/test_document_tools.py: unit tests for the Python document helper scriptMakefile: local build, lint, test, and dependency-check entry point.github/workflows/deploy.yml: CI workflow that lints, tests, builds, and deploys the site to GitHub Pagesindex.html: redirect page used as the site root so/forwards to/resume.htmlCNAME: custom domain configuration copied into the published Pages artifactdist/: generated build output for local preview and GitHub Pages deployment; this directory is ignored by gitpyproject.toml: minimal Ruff configuration for Python lintingCHANGELOG.md: lightweight change log for repository-level updates_config.yml: legacy GitHub Pages configuration kept in the repo, but the published site is built from the Actions artifact rather than by Jekyll
The workflow in .github/workflows/deploy.yml does the following on every relevant push to master:
- installs
pandoc,python3-yaml,texlive-xetex, andruff - runs
make lint - runs
make test - runs
make all PDF_ENGINE=xelatex - uploads
dist/as the GitHub Pages artifact - deploys that artifact to GitHub Pages
The published site includes:
/resume.html/resume.pdf/resume.docx
/ redirects to /resume.html.
- Update content in
resume.md. - Adjust presentation in
css/resume.css. - Adjust the generated HTML shell in
templates/resume.html5.
CNAMEis copied into the built site so the custom domain continues to work..nojekyllis added to the build output so Pages serves the artifact as static files without Jekyll processing.
Inspired by The Markdown Resume.
The upstream project is a general-purpose pandoc resume template with broader build tooling. This repository takes a narrower approach tailored to one hosted resume site.
- Upstream uses a template-oriented project layout with
markdown/,styles/, Docker, Nix, ConTeXt, and artifact-oriented Actions. - This repo keeps a single source file at the root, preserves the existing GitHub Pages styling, and builds directly into
dist/. - Upstream is designed as a reusable resume starter.
- This repo is designed as a source-only publishing pipeline for one resume site.
- Upstream stores build logic for many environments.
- This repo optimizes for GitHub Pages deployment via Actions without committing generated
html/pdf/docxfiles.