Blog for LibreCourseUY, built with Hugo and the
PaperMod theme, and auto-deployed via GitHub Actions. Every push to main
builds a Docker image and publishes it to GHCR.
git clone --recurse-submodules https://github.com/LibreCourseUY/libreblog
cd libreblog
hugo serverThe site is generated from content/ and configured in hugo.yaml.
A GitHub Actions workflow (.github/workflows/weekly-tldr.yml) runs every
Monday at 12:00 UTC. It:
- pulls the last week of tech news from the RSS feeds in
scripts/feeds.txt; - asks Gemini to write an edition in the house style (
scripts/tldr_style.md, using the latest editions as examples) with exactly 14 news items; - validates the result (front matter, sections, source links, footer, no
em dashes, no double hyphens) and writes
content/tldr/vX.Y.md; - opens a pull request. Merge it to publish.
- Add the repository secret
GEMINI_API_KEY. - Enable Settings -> Actions -> "Allow GitHub Actions to create and approve pull requests".
python -m venv .venv
.venv/bin/pip install -r scripts/requirements.txt
# print a draft without writing or opening a PR
GEMINI_API_KEY=... .venv/bin/python scripts/generate_tldr.py --dry-run
# write the file locally (no commit, no PR)
GEMINI_API_KEY=... .venv/bin/python scripts/generate_tldr.pyUseful flags: --since-days N, --model gemini-flash-lite-latest, --force.
The generator retries transient Gemini errors and falls back to other
available models when the requested one is overloaded. Set TLDR_MODELS to a
comma-separated list to control the fallback order.
The workflow also supports manual dispatch with the dry_run and since_days
inputs.
.venv/bin/python -m unittest scripts.test_generate_tldrMIT, see LICENSE.