From 5b52f18356cb0b7aa03846c0b5bb16d74c3c9e30 Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Wed, 29 Apr 2026 14:54:01 -0700 Subject: [PATCH] cv+docs: relocate content under ~/blumeops/{cv,docs} Keeps blumeops-managed state grouped under a single namespace in the home dir rather than scattered top-level dirs. Caddy block paths are derived from cv_content_dir / docs_content_dir, so the role-defaults edit propagates automatically. Validated end-to-end on indri: tarballs extracted to the new paths, sentinels written, second run is idempotent. Old ~/cv and ~/docs from the earlier validation run were removed. Co-Authored-By: Claude Opus 4.7 (1M context) --- ansible/roles/cv/defaults/main.yml | 2 +- ansible/roles/docs/defaults/main.yml | 2 +- docs/how-to/operations/cv-on-indri.md | 8 ++++---- docs/how-to/operations/docs-on-indri.md | 8 ++++---- docs/reference/services/cv.md | 4 ++-- docs/reference/services/docs.md | 4 ++-- service-versions.yaml | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ansible/roles/cv/defaults/main.yml b/ansible/roles/cv/defaults/main.yml index 6a00eb5..734e52b 100644 --- a/ansible/roles/cv/defaults/main.yml +++ b/ansible/roles/cv/defaults/main.yml @@ -5,6 +5,6 @@ cv_version: "v1.0.3" cv_release_url: "https://forge.eblu.me/api/packages/eblume/generic/cv/{{ cv_version }}/cv-{{ cv_version }}.tar.gz" -cv_home: /Users/erichblume/cv +cv_home: /Users/erichblume/blumeops/cv cv_content_dir: "{{ cv_home }}/content" cv_version_sentinel: "{{ cv_home }}/.installed-version" diff --git a/ansible/roles/docs/defaults/main.yml b/ansible/roles/docs/defaults/main.yml index cbddd1c..f09221b 100644 --- a/ansible/roles/docs/defaults/main.yml +++ b/ansible/roles/docs/defaults/main.yml @@ -6,6 +6,6 @@ docs_version: "v1.16.0" docs_release_url: "https://forge.eblu.me/eblume/blumeops/releases/download/{{ docs_version }}/docs-{{ docs_version }}.tar.gz" -docs_home: /Users/erichblume/docs +docs_home: /Users/erichblume/blumeops/docs docs_content_dir: "{{ docs_home }}/content" docs_version_sentinel: "{{ docs_home }}/.installed-version" diff --git a/docs/how-to/operations/cv-on-indri.md b/docs/how-to/operations/cv-on-indri.md index cb40eea..432acab 100644 --- a/docs/how-to/operations/cv-on-indri.md +++ b/docs/how-to/operations/cv-on-indri.md @@ -19,8 +19,8 @@ CV is a tiny static site (HTML + CSS + PDF). It needs no daemon, no database, no | Concern | Path / detail | |---|---| -| Content dir | `/Users/erichblume/cv/content/` | -| Version sentinel | `/Users/erichblume/cv/.installed-version` | +| Content dir | `/Users/erichblume/blumeops/cv/content/` | +| Version sentinel | `/Users/erichblume/blumeops/cv/.installed-version` | | Caddy entry | `cv` service in `ansible/roles/caddy/defaults/main.yml` (`kind: static`) | | Public URL | `https://cv.eblu.me` (via [[flyio-proxy]]) | | Private URL | `https://cv.ops.eblu.me` (Caddy on indri) | @@ -44,8 +44,8 @@ Two paths: ## Verify ```fish -ssh indri 'cat ~/cv/.installed-version' -ssh indri 'ls -la ~/cv/content/' +ssh indri 'cat ~/blumeops/cv/.installed-version' +ssh indri 'ls -la ~/blumeops/cv/content/' curl -fsSI https://cv.ops.eblu.me/ # private curl -fsSI https://cv.eblu.me/ # public curl -fsSI https://cv.eblu.me/resume.pdf | grep -i disposition diff --git a/docs/how-to/operations/docs-on-indri.md b/docs/how-to/operations/docs-on-indri.md index 3351e2e..e683db5 100644 --- a/docs/how-to/operations/docs-on-indri.md +++ b/docs/how-to/operations/docs-on-indri.md @@ -19,8 +19,8 @@ The docs site is fully static HTML produced by Quartz. Caddy can serve the extra | Concern | Path / detail | |---|---| -| Content dir | `/Users/erichblume/docs/content/` | -| Version sentinel | `/Users/erichblume/docs/.installed-version` | +| Content dir | `/Users/erichblume/blumeops/docs/content/` | +| Version sentinel | `/Users/erichblume/blumeops/docs/.installed-version` | | Caddy entry | `docs` service in `ansible/roles/caddy/defaults/main.yml` (`kind: static`, `try_html: true`) | | Public URL | `https://docs.eblu.me` (via [[flyio-proxy]]) | | Private URL | `https://docs.ops.eblu.me` (Caddy on indri) | @@ -39,8 +39,8 @@ The Caddy block uses `try_files {path} {path}/ {path}.html` and a `handle_errors ## Verify ```fish -ssh indri 'cat ~/docs/.installed-version' -ssh indri 'ls ~/docs/content/' +ssh indri 'cat ~/blumeops/docs/.installed-version' +ssh indri 'ls ~/blumeops/docs/content/' curl -fsSI https://docs.ops.eblu.me/ # private curl -fsSI https://docs.eblu.me/ # public curl -fsSI https://docs.eblu.me/explanation/agent-change-process # clean URL → .html fallback diff --git a/docs/reference/services/cv.md b/docs/reference/services/cv.md index adbaeaa..1bc5f15 100644 --- a/docs/reference/services/cv.md +++ b/docs/reference/services/cv.md @@ -18,7 +18,7 @@ Personal resume/CV served as a static HTML page with PDF download, built from YA | **Public URL** | `cv.eblu.me` (via [[flyio-proxy]]) | | **Private URL** | `cv.ops.eblu.me` (Caddy on indri) | | **Deployment** | Ansible role `cv` on indri (no daemon — Caddy serves files directly) | -| **Content dir** | `~/cv/content/` on indri | +| **Content dir** | `~/blumeops/cv/content/` on indri | | **Source repo** | `forge.eblu.me/eblume/cv` (private, not mirrored to GitHub) | | **Content packages** | `forge.eblu.me/eblume/-/packages` (generic package `cv`) | @@ -29,7 +29,7 @@ Migrated from minikube to indri-native on 2026-04-29 (see [[cv-on-indri]]). 1. **Source**: `resume.yaml` (content) + `template.html` (Jinja2) + `style.css` in the cv repo 2. **Build**: `render.py` (uv script runner) generates `index.html`; WeasyPrint generates `resume.pdf` 3. **Release**: Dagger `build` function packages `index.html`, `style.css`, `resume.pdf` into a tarball, uploaded to Forgejo generic packages -4. **Deploy**: ansible role downloads the tarball into `~/cv/content/` on indri; Caddy serves the directory directly +4. **Deploy**: ansible role downloads the tarball into `~/blumeops/cv/content/` on indri; Caddy serves the directory directly ## Endpoints diff --git a/docs/reference/services/docs.md b/docs/reference/services/docs.md index 1274b0f..8ca8310 100644 --- a/docs/reference/services/docs.md +++ b/docs/reference/services/docs.md @@ -18,7 +18,7 @@ Documentation site built with [Quartz](https://quartz.jzhao.xyz/). | **Public URL** | https://docs.eblu.me (via [[flyio-proxy]]) | | **Private URL** | `docs.ops.eblu.me` (Caddy on indri) | | **Deployment** | Ansible role `docs` on indri (no daemon — Caddy serves files directly) | -| **Content dir** | `~/docs/content/` on indri | +| **Content dir** | `~/blumeops/docs/content/` on indri | | **Source** | `docs/` directory in blumeops repo | | **Build** | Forgejo workflow `build-blumeops.yaml` | @@ -28,7 +28,7 @@ Migrated from minikube to indri-native on 2026-04-29 (see [[docs-on-indri]]). 1. **Source**: Markdown files in `docs/` with Obsidian-compatible wiki-links 2. **Build**: `Build BlumeOps` Forgejo workflow runs towncrier + Quartz, uploads tarball as a release asset, and bumps `docs_version` in the ansible role -3. **Deploy**: ansible role downloads the tarball into `~/docs/content/` on indri; Caddy serves the directory directly with Quartz-style `try_files` (path → path/ → path.html → 404.html) +3. **Deploy**: ansible role downloads the tarball into `~/blumeops/docs/content/` on indri; Caddy serves the directory directly with Quartz-style `try_files` (path → path/ → path.html → 404.html) ## Configuration diff --git a/service-versions.yaml b/service-versions.yaml index fd0416f..d77fa13 100644 --- a/service-versions.yaml +++ b/service-versions.yaml @@ -226,7 +226,7 @@ services: current-version: "1.0.3" upstream-source: https://forge.eblu.me/eblume/cv notes: >- - Static tarball downloaded by ansible/roles/cv into ~/cv/content on indri; + Static tarball downloaded by ansible/roles/cv into ~/blumeops/cv/content on indri; served directly by Caddy (kind=static). Migrated from minikube 2026-04-29. Review build deps (WeasyPrint, Jinja2) in source repo on upstream review. @@ -236,7 +236,7 @@ services: current-version: "1.28.2" upstream-source: https://forge.eblu.me/eblume/blumeops/releases notes: >- - Quartz-built tarball downloaded by ansible/roles/docs into ~/docs/content + Quartz-built tarball downloaded by ansible/roles/docs into ~/blumeops/docs/content on indri; served directly by Caddy (kind=static, try_html). Migrated from minikube 2026-04-29. current-version still tracks the legacy quartz/nginx base; will switch to the docs release tag (e.g. v1.16.0) once the dead