GitHub Actions¶
The Problem¶
Every software project has repetitive tasks that must run consistently:
- On every update: Run tests, redeploy documentation
- On every release: Run tests, update
schema.jsonand examples, build executables for 4 platforms, build package, upload to PyPI, publish Docker image
You could do these manually. But manual means:
- Forgetting steps ("Did I update
schema.json? Did I build the Windows executable?") - Wasted time ("Why am I doing the same 15 steps every release?")
What if you could write down these tasks once, and have them run automatically every time?
That's what CI/CD (Continuous Integration/Continuous Deployment) is. And GitHub Actions is GitHub's platform for it.
What are GitHub Actions?¶
GitHub actions are automation scripts that run on GitHub's servers when certain events happen.
You define them in .github/workflows/*.yaml files. Each file describes:
- When to run: push to main? Pull request? New release?
- What to do: Run tests? Build docs? Publish package?
- Where to run: Linux? Windows? macOS? Multiple versions?
GitHub reads these files and executes them automatically when the triggering events occur.
Why GitHub's servers? Because you don't want to worry about it. Push your code, turn off your computer, you're done. GitHub handles the rest (running tests, deploying docs, building packages) without you having to keep your machine on or manually run anything.
RenderCV's Workflows¶
RenderCV has 5 workflows. Each handles a specific automation task.
How workflows start: Every workflow begins the same way: clone the repository, install uv, install just, then run some just commands. This recreates the same environment you'd have locally (see Setup).
1. test.yaml: Run Tests¶
When it runs:
- Every push to
mainbranch - Every pull request
- Manually (via GitHub UI)
- When called by other workflows
What it does:
- Runs
just test-coverageacross 9 different environments (3 operating systems × 3 Python versions: 3.12, 3.13, 3.14) - Combines all coverage reports and uploads them to show the coverage report
2. deploy-docs.yaml: Deploy Documentation¶
When it runs:
- Every push to
mainbranch - Manually (via GitHub UI)
What it does:
- Builds the documentation website using
just build-docs - Uploads it to GitHub Pages
- Documentation is now live at https://docs.rendercv.com
3. update-files.yaml: Update Generated Files¶
When it runs:
- Manually (via GitHub UI)
What it does:
- Regenerates files derived from code:
schema.jsonusingjust update-schema- Example YAML files and PDFs in
examples/folder usingjust update-examples - Entry figures using
just update-entry-figures - Commits and pushes these changes to the repository
4. create-executables.yaml: Create Executables¶
When it runs:
- Manually (via GitHub UI)
- When called by the release workflow
What it does:
- Builds standalone executables using
just create-executablefor 4 platforms: - Linux (x86_64 and ARM64)
- macOS (ARM64)
- Windows (x86_64)
- Uploads executables as artifacts
These are single-file executables that users can download and run without installing Python.
5. release.yaml: Publish a Release¶
When it runs:
- When a new GitHub release is published
What it does:
This is the complete release pipeline. It orchestrates everything:
- Run tests: Calls
test.yamlto ensure everything works - Build package: Installs
uv, builds Python wheel and source distribution usinguv build - Create executables: Calls
create-executables.yamlfor all platforms - Add assets to GitHub release: Downloads and adds executables and wheel to the release
- Publish to PyPI: Downloads and uploads package so users can
pip install rendercv - Publish Docker image: Builds and pushes Docker image to GitHub Container Registry
Learn More¶
- See
.github/workflows/for RenderCV's workflow files - See GitHub Actions Documentation for the official documentation.