Skip to content

build: port calendaring-jmap's uv, Makefile and docs setup - #48

Merged
SashankBhamidi merged 1 commit into
mainfrom
build/uv-makefile
Nov 11, 2026
Merged

SashankBhamidi merged 1 commit into
mainfrom
build/uv-makefile

Conversation

@SashankBhamidi

Copy link
Copy Markdown
Member

Moves development to uv and a Makefile, as calendaring-jmap has it: dependency groups replace the dev and docs extras, uv.lock is tracked, and CI, the release workflow and Read the Docs all run through make. The docs build, link check and Vale move into documentation.yml.

The reference pages are now generated by sphinx-apidoc, the theme is calendaring-jmap's, and Vale follows its setup and fails CI on errors.

Where it differs from calendaring-jmap:

  • Targets use uv run, since .venv/bin paths don't work on Windows.
  • CI runs make lint, which only checks, instead of make format.
  • The docs build on Python 3.13 and 3.14, because Sphinx 9.2 needs 3.13.
  • linkcheckbroken fails when sphinx-build does, and Vale's role pattern no longer skips the prose between two roles.

@codecov

codecov Bot commented Nov 11, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@SashankBhamidi
SashankBhamidi removed the request for review from stevepiercy November 11, 2026 11:22
@SashankBhamidi
SashankBhamidi merged commit a985778 into main Nov 11, 2026
16 checks passed
@SashankBhamidi
SashankBhamidi deleted the build/uv-makefile branch November 11, 2026 11:29
@SashankBhamidi

Copy link
Copy Markdown
Member Author

@stevepiercy just tagging you for context, no need to review this one. I ported the calendaring-jmap setup over to calendaring-sync, and it turned into a bit of a journey.

It started on my Windows machine, where none of the make targets would run. The .venv/bin/... paths come out empty there, so make html ended up running "" as the command. I switched everything to uv run, which finds the environment on any platform.

Then I tested linkcheckbroken by putting a broken link on a page on purpose, and the target still passed. Two things were going on. Only grep's exit status counts, so even a crashed sphinx-build passes. And on Windows, sphinx-build colors its output even into a pipe, so grep never matched "broken" anyway. Reading PIPESTATUS and passing --no-color sorted both.

Vale had a quieter one. The TokenIgnores pattern uses .+, so on a line with two roles it skips everything from the first role to the last backtick, prose included. When I changed it to [^\x60]+, three alerts showed up here that had been hidden all along.

A couple more while I was reading the config. The lint job runs make format, which fixes files instead of checking them, so it can never fail. The Read the Docs skip list starts with ., which matches every file, so the skip never actually kicks in. And Jinja drops a template's last newline, so the apidoc templates need a trailing blank line, and then end-of-file-fixer has to leave them alone.

I'll send the same fixes to calendaring-jmap in a PR, and would love your review there.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant