This repository contains the LaTeX source for Siddhartha Srinivasa's academic CV with automated YAML-to-CSV conversion and cross-repository build triggers.
# Using Makefile (recommended)
make all # Sync data + pubs + build CV
make sync-data # Fetch latest YAML and generate CSVs
make sync-pubs # Fetch latest publications
make build # Build CV PDF
make clean # Clean auxiliary files
make test # Validate YAML data
# Or use individual commands
python3 yaml2csv.py --owner siddhss5 --repo siddhss5.github.io --branch main --output-dir data/
latexmk -pdf sidd-cv.tex- YAML Source of Truth: People from the lab's pubs repo; awards and press from the website repo
- Automated CSV Generation: Python script fetches YAML and generates sorted CSV files
- Cross-Repo Automation: CV automatically rebuilds when those YAML files change
- Smart Sorting: Built-in sorting eliminates need for manual data ordering
- Full Bibliography Support: Handles journals, conferences, and miscellaneous publications
- URL Support: Clickable links in press coverage section
├── sidd-cv.tex # Main CV document
├── yaml2csv.py # Script to convert YAML → CSV
├── latexmkrc # latexmk configuration
├── data/ # CSV data files (generated from YAML)
│ ├── students-phd.csv # PhD students (generated)
│ ├── students-ms.csv # MS students (generated)
│ ├── postdocs.csv # Postdoctoral fellows (generated)
│ ├── grants.csv # Research grants (hand-edited)
│ ├── awards.csv # Awards (generated)
│ └── press.csv # Press coverage (generated)
├── pubs/ # Bibliography files
│ ├── siddpubs-journal.bib
│ ├── siddpubs-conf.bib
│ └── siddpubs-misc.bib
└── *.tex # Section files (mentoring, press, etc.)
Most CV data is maintained in YAML files elsewhere:
people.yamlin personalrobotics/pubs - PhD students, MS students and postdocs, including the roles a person held before their current or last one (earlier_roles). The lab website and goodrobot.ai read the same file.data/awards.yamlin the website repository - Awards and honorsdata/press.yamlin the website repository - Press coverage
Exception: data/grants.csv remains hand-edited in this repository.
Run yaml2csv.py to fetch the YAML and generate CSV files (--people-owner, --people-repo and --people-branch say where people.yaml is, defaulting to personalrobotics/pubs on master):
python3 yaml2csv.py --owner siddhss5 --repo siddhss5.github.io --branch main --output-dir data/The script automatically:
- Fetches the latest YAML, and fails if
people.yamlcannot be fetched rather than keep stale mentoring tables - Converts YAML to CSV format that LaTeX datatool expects
- Applies proper sorting (e.g., PhD students by Finish:desc, Start:desc)
- Handles current vs. alumni distinctions (empty end_year fields)
This repo → the website. When a build commits a rebuilt sidd-cv.pdf, it
sends a cv-updated repository_dispatch to siddhss5/siddhss5.github.io,
which rebuilds and fetches the PDF into site/assets/. The website no longer
keeps its own copy. This needs a fine-grained PAT with Contents: write on
the website repo, stored here as the secret SITE_REPO_PAT; without it the
dispatch step fails on its own and the website picks the CV up on its next
build instead.
The website → this repo. When awards.yaml or press.yaml changes there,
the website's trigger-cv-build.yml dispatches yaml-updated here and
build.yml rebuilds. That needs a PAT with Actions: write on this repo,
held in the website repo as CV_REPO_PAT.
personalrobotics/pubs → this repo. When people.yaml or a .bib file
changes on pubs' master, its notify.yaml dispatches yaml-updated here the
same way, with the same kind of PAT held in pubs as CV_REPO_PAT.
The daily backstop. sync-pubs.yml refreshes pubs/*.bib from
personalrobotics/pubs, regenerates the CSVs, and rebuilds if either changed. It
runs daily, so anything the two dispatches miss — a paper award added to a
.bib file, for instance, which nothing notifies about — is picked up within a
day. It used to run weekly and to check only the .bib files, so a change to
the website's YAML alone rebuilt nothing at all.
# Build the CV
latexmk -pdf sidd-cv.tex
# Force rebuild (useful when CSV files change)
latexmk -pdf -g sidd-cv.tex
# Clean auxiliary files
latexmk -c# Generate CSV files from YAML first
python3 yaml2csv.py --owner siddhss5 --repo siddhss5.github.io --branch main --output-dir data/
# Compile LaTeX
pdflatex sidd-cv.tex
bibtex jour
bibtex conf
bibtex misc
pdflatex sidd-cv.tex
pdflatex sidd-cv.texThe latexmkrc file configures the build process:
- Monitors CSV files for changes
- Uses pdflatex as the default engine
- Cleans auxiliary files automatically
The Python script handles YAML-to-CSV conversion:
- Fetches YAML files from website repo via GitHub API
- Maps YAML fields to CSV columns (e.g.,
co_advisor→Coadvisor) - Applies sorting rules for each data type
- Handles empty fields correctly (e.g., current students have no end_year)
- LaTeX: TeX Live 2025 or later
- Python 3.9+: For yaml2csv.py script
- PyYAML: Install with
pip install pyyaml - latexmk: For automated compilation
- datatool: LaTeX package for CSV processing
If CSV files aren't being generated:
# Check if yaml2csv.py runs
python3 yaml2csv.py --owner siddhss5 --repo siddhss5.github.io --branch main --output-dir data/
# Verify PyYAML is installed
pip install pyyaml
# Force rebuild with latexmk
latexmk -pdf -g sidd-cv.texIf compilation fails:
# Clean all auxiliary files
latexmk -c
# Check for missing dependencies
tlmgr install datatoolIf references aren't resolved:
# Force bibliography rebuild
latexmk -pdf -g sidd-cv.tex- For people, awards, press: Edit YAML files in the website repo
- Push changes to trigger automatic CV rebuild via repository_dispatch
- For grants: Edit
data/grants.csvdirectly in this repo (hand-edited) - Run
latexmk -pdf sidd-cv.texto rebuild locally
Edit the SORT_SPECS dictionary in yaml2csv.py:
SORT_SPECS = {
"students-phd.csv": [("Finish", "desc"), ("Start", "desc")],
# Add or modify sort rules here
}For development, it's recommended to use a virtual environment:
# Create virtual environment
python3 -m venv venv
# Activate virtual environment
source venv/bin/activate # On macOS/Linux
# or: venv\Scripts\activate # On Windows
# Install dependencies
pip install pyyamlBefore committing, test your changes:
# 1. Update CSV files from YAML
python3 yaml2csv.py --owner siddhss5 --repo siddhss5.github.io --branch main --output-dir data/
# 2. Compile the CV
latexmk -pdf sidd-cv.tex
# 3. Verify the PDF output
open sidd-cv.pdf # macOS
# or: xdg-open sidd-cv.pdf # LinuxThe pubs/ directory contains BibTeX files for different publication types:
siddpubs-journal.bib- Journal paperssiddpubs-conf.bib- Conference paperssiddpubs-misc.bib- Technical reports, theses
To update publications:
Option 1: Automatic sync (recommended)
- Publications auto-sync weekly via GitHub Actions
- Or run manually:
make sync-pubs/./sync-pubs.sh
Option 2: Manual editing
- Edit the appropriate
.bibfile directly - Run
make buildorlatexmk -pdf sidd-cv.texto rebuild - Verify changes in the generated PDF
- Commit both
.bibchanges andsidd-cv.pdf
Note: The pubs/ directory is tracked directly in this repository (not a submodule). Publications are synced from personalrobotics/pubs.
If LaTeX compilation fails with missing CSV errors:
# Regenerate all CSV files from YAML
python3 yaml2csv.py --owner siddhss5 --repo siddhss5.github.io --branch main --output-dir data/
# Force rebuild
latexmk -pdf -g sidd-cv.texpip install pyyaml
# If using system Python on macOS:
python3 -m pip install --user pyyamlIf publication changes aren't reflected:
# Clean all auxiliary files
latexmk -c
# Remove bibliography cache
rm *.bbl *.blg *.aux
# Force full rebuild
latexmk -pdf -g sidd-cv.tex- Check the Actions tab for detailed error logs
- Verify YAML files are valid in the website repo
- Ensure
CV_REPO_PATsecret is configured in website repo (for cross-repo triggers) - Test locally with the same commands as CI uses
This repository includes automated PDF building via GitHub Actions:
- Triggers:
- Push to
mainbranch - Pull requests
- Repository dispatch from website repo (when YAML files change)
- Manual workflow dispatch
- Push to
- Actions:
- Fetches YAML files from website repo
- Converts YAML to CSV using yaml2csv.py
- Compiles PDF using latexmk
- Commits updated PDF back to repo
When YAML files are updated in the website repo:
- Website repo workflow sends
repository_dispatchevent - CV repo workflow triggers automatically
- Fresh CSV files are generated from latest YAML
- PDF is rebuilt and committed
.github/workflows/build.yml- CV build workflow (this repo).github/workflows/sync-pubs.yml- Weekly publication sync (this repo).github/workflows/trigger-cv-build.yml- Trigger workflow (website repo)
The website repo needs a CV_REPO_PAT secret (Personal Access Token) with repo scope to trigger builds in this repo.
This CV template and data are for personal use by Siddhartha Srinivasa.