Add reference/tools/ category with Dagger, ArgoCD CLI, Ansible, and Pulumi cards (#178)

## Summary

- Create `docs/reference/tools/` with four reference cards: Dagger (build engine), ArgoCD CLI (deployment workflows), Ansible (config management), and Pulumi (DNS/Tailscale IaC)
- Move `ansible/roles.md` → `tools/ansible.md`, broadened with CLI patterns and dry-run usage
- Update `reference.md` index: add "Tools" section, remove old "Ansible" section
- Update `update-documentation.md` to reflect Dagger build process (workflow steps, manual build recipe, runner environment)
- Update `adopt-dagger-ci.md` plan to note how-to articles were handled via reference card + existing how-to updates
- Fix all broken `[[roles]]` wiki-links across 5 files → `[[ansible]]`

## Verification

- `docs-check-links` ✓ — no broken wiki-links
- `docs-check-index` ✓ — all docs referenced in category index
- `docs-check-filenames` ✓ — no duplicate filenames
- All pre-commit hooks pass

Reviewed-on: https://forge.ops.eblu.me/eblume/blumeops/pulls/178
This commit is contained in:
Erich Blume 2026-02-12 19:18:46 -08:00
commit 517080aeab
13 changed files with 237 additions and 48 deletions

View file

@ -137,6 +137,6 @@ See [[alloy]] for how metrics are collected from textfiles.
## Related
- [[roles|Roles]] - Available roles reference
- [[ansible]] - Available roles reference
- [[indri]] - Target host
- [[observability]] - Metrics collection

View file

@ -517,14 +517,9 @@ BuildKit caches aggressively, making repeated builds fast. Since the Forgejo run
- **Changelog dates show UTC date:** Towncrier uses `datetime.date.today()` which respects `TZ`, and `tzdata` is installed in the runner image, but the changelog still renders tomorrow's date (UTC). The runner pod and job containers both have `TZ=America/Los_Angeles` set. Root cause is unresolved — may require passing an explicit `--date` flag to towncrier or patching the Dagger `build_changelog` container.
## How-To Articles to Write
## How-To Articles
The following how-to guides should be created alongside implementation:
| Article | Description |
|---------|-------------|
| `docs/how-to/use-dagger-containers.md` | Creating and iterating on containers with Dagger (build, terminal, publish workflow) |
| `docs/how-to/release-docs.md` | Updated docs release process using Dagger + Forgejo packages (replaces current [[update-documentation]]) |
Standalone how-to articles for Dagger were deemed unnecessary — the existing [[update-documentation]] how-to was updated to reflect the Dagger build process, and a [[dagger]] reference card covers CLI usage and function signatures.
## Reference

View file

@ -25,13 +25,13 @@ 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** - Runs towncrier to collect changelog fragments
3. **Builds docs** - Clones Quartz, builds static site from `docs/`
4. **Creates release** - Uploads `docs-<version>.tar.gz` to Forgejo releases
5. **Updates deployment** - Edits `argocd/manifests/docs/deployment.yaml` with new URL
6. **Commits changes** - Pushes changelog and deployment updates to main
7. **Deploys** - Syncs the `docs` ArgoCD app
1. **Resolves version** Uses input or auto-increments from latest release
2. **Builds changelog** — Calls `dagger call build-changelog` (towncrier in a container)
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
6. **Commits changes** Pushes changelog and deployment updates to main
7. **Deploys** Syncs the `docs` ArgoCD app
## Changelog Fragments (Towncrier)
@ -66,7 +66,7 @@ The workflow runs on the `k8s` label, which uses the [[forgejo]]-runner in Kuber
- **Runner deployment**: `argocd/manifests/forgejo-runner/`
- **Job image**: `registry.ops.eblu.me/blumeops/forgejo-runner:latest`
- **Includes**: Node.js 24, npm, git, jq, Docker CLI, uv/uvx, argocd CLI
- **Build engine**: [[dagger]] CLI installed at runtime; Node.js and Python run inside Dagger containers
The job image is built from `containers/forgejo-runner/Dockerfile`.
@ -89,24 +89,14 @@ Quartz is cloned fresh during each build (not vendored) to use the latest versio
To test docs locally without triggering a release:
```bash
# Clone Quartz
git clone --depth 1 https://github.com/jackyzha0/quartz.git /tmp/quartz
cd /tmp/quartz
# Build docs tarball (identical to CI)
dagger call build-docs --src=. --version=dev export --path=./docs-dev.tar.gz
# Install dependencies
npm ci
# Inspect the output
tar tf docs-dev.tar.gz | head -20
# Copy config and content
cp /path/to/blumeops/docs/quartz.config.ts .
cp /path/to/blumeops/docs/quartz.layout.ts .
rm -rf content
cp -r /path/to/blumeops/docs content
# Build
npx quartz build
# Serve locally
npx quartz build --serve
# Debug a Quartz build failure interactively
dagger call --interactive build-docs --src=. --version=dev
```
## Troubleshooting
@ -128,5 +118,6 @@ npx quartz build --serve
## Related
- [[docs]] - Documentation service reference
- [[dagger]] - Build engine reference
- [[forgejo]] - Git forge and CI/CD
- [[argocd]] - GitOps deployment