Eliminate double towncrier run in release workflow (#199)

## Summary

- Added a new `build_quartz` Dagger function that builds the Quartz site from a pre-processed source tree (no towncrier)
- Reordered the release workflow so towncrier runs **once** on the runner, then passes the updated working tree to `build-quartz`
- `build_docs` and `build_changelog` are preserved for standalone use — `build_docs` now delegates to `build_quartz` internally

## Motivation

Previously towncrier ran twice per release: once inside a Dagger container (via `build_docs` → `build_changelog`) and once on the runner to capture CHANGELOG.md changes for the git commit. This was wasteful and fragile — if towncrier behavior changed, the two runs could produce different results.

## Test plan

- [ ] Review diff to confirm workflow step ordering is correct
- [ ] Trigger a release and confirm towncrier runs only once
- [ ] Verify the docs tarball contains the updated CHANGELOG.md
- [ ] `dagger call build-quartz --src=. --version=vX.Y.Z` should work standalone

Reviewed-on: https://forge.ops.eblu.me/eblume/blumeops/pulls/199
This commit is contained in:
Erich Blume 2026-02-16 21:24:34 -08:00
commit 779b7d6709
5 changed files with 21 additions and 45 deletions

View file

@ -26,7 +26,7 @@ Direct link: https://forge.ops.eblu.me/eblume/blumeops/actions?workflow=build-bl
The `build-blumeops` workflow (`.forgejo/workflows/build-blumeops.yaml`):
1. **Resolves version** — Uses input or auto-increments from latest release
2. **Builds changelog**Calls `dagger call build-changelog` (towncrier in a container)
2. **Builds changelog**Runs towncrier on the runner to update `CHANGELOG.md`
3. **Builds docs** — Calls `dagger call build-docs` (Quartz build in a container)
4. **Creates release** — Uploads `docs-<version>.tar.gz` to Forgejo releases
5. **Updates deployment** — Edits `argocd/manifests/docs/deployment.yaml` with new URL