C1: clean up cv + docs minikube artifacts (#343)

## Summary

Follow-up to #342. The cv and docs services are now live on indri (Caddy file_server backed by ansible-managed tarball extraction) and verified working. This PR removes the dead minikube artifacts and the tooling shims that referenced them.

## Changes

**Deletions:**
- ``argocd/apps/{cv,docs}.yaml``
- ``argocd/manifests/{cv,docs}/`` (deployment, service, ingress, pdb, kustomization)
- ``containers/{cv,quartz}/`` (Dockerfiles + start scripts)

**Tooling:**
- ``mise-tasks/container-version-check``: remove the ``quartz``→``docs`` CONTAINER_TO_SERVICE mapping (containers/quartz no longer exists)
- ``service-versions.yaml``: bump ``docs.current-version`` to ``v1.16.0`` (the blumeops docs release tag) and trim the migration-window comment

## Live state context

The argocd Applications ``cv`` and ``docs`` were already deleted from the cluster manually as part of the cutover; this PR just removes the YAML files that the ``apps`` app-of-apps was still ingesting. After merge, ``argocd app sync apps`` will reconcile and the ``apps`` Application returns to Synced.

The Caddyfile ``handle_errors`` bug that briefly crashed all ``*.ops.eblu.me`` services during cutover is fixed in a separate C0 (``2ee53fe``) on main, not here.

## Test plan
- [x] ``mise run container-version-check --all-files`` clean
- [x] ``mise run service-review --type ansible`` shows cv at 1.0.3, docs at v1.16.0
- [ ] After merge: ``argocd app sync apps`` returns clean (cv/docs entries gone, no children to reconcile)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Reviewed-on: #343
This commit is contained in:
Erich Blume 2026-04-29 15:18:39 -07:00
commit 5096223b48
21 changed files with 4 additions and 458 deletions

View file

@ -1,30 +0,0 @@
# CV/Resume Static Site Server
# Downloads and serves a CV site tarball (HTML+CSS+PDF) via nginx
#
# Configuration (via environment):
# CV_RELEASE_URL - URL to download the CV content tarball
#
# The container downloads the tarball on startup, extracts it, and serves with nginx.
ARG CONTAINER_APP_VERSION=1.0.3
FROM nginx:alpine
ARG CONTAINER_APP_VERSION
LABEL org.opencontainers.image.title="CV"
LABEL org.opencontainers.image.description="Static site server for CV/resume"
LABEL org.opencontainers.image.version="${CONTAINER_APP_VERSION}"
LABEL org.opencontainers.image.source="https://forge.eblu.me/eblume/blumeops"
LABEL org.opencontainers.image.vendor="blumeops"
# Install curl for downloading release assets
RUN apk add --no-cache curl
# Copy startup script and nginx config
COPY start.sh /start.sh
COPY default.conf /etc/nginx/conf.d/default.conf
RUN chmod +x /start.sh
EXPOSE 80
CMD ["/start.sh"]

View file

@ -1,33 +0,0 @@
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
# Enable gzip compression
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript;
# Cache static assets
location ~* \.(css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# Force PDF download
location = /resume.pdf {
add_header Content-Disposition 'attachment; filename="erich-blume-resume.pdf"';
}
# Serve files directly
location / {
try_files $uri $uri/ =404;
}
# Health check endpoint
location /healthz {
access_log off;
return 200 "ok\n";
add_header Content-Type text/plain;
}
}

View file

@ -1,31 +0,0 @@
#!/bin/sh
set -e
HTML_DIR="/usr/share/nginx/html"
# Check for required environment variable
if [ -z "$CV_RELEASE_URL" ]; then
echo "Error: CV_RELEASE_URL environment variable is required"
echo "Set it to the URL of the CV content tarball to serve"
exit 1
fi
echo "Downloading CV content from: $CV_RELEASE_URL"
# Download the tarball
if ! curl -fsSL "$CV_RELEASE_URL" -o /tmp/cv.tar.gz; then
echo "Error: Failed to download CV content from $CV_RELEASE_URL"
exit 1
fi
# Clear existing content and extract
rm -rf "${HTML_DIR:?}"/*
echo "Extracting CV content to $HTML_DIR"
tar -xzf /tmp/cv.tar.gz -C "$HTML_DIR"
rm /tmp/cv.tar.gz
echo "CV content extracted successfully"
echo "Starting nginx..."
# Start nginx in foreground
exec nginx -g "daemon off;"

View file

@ -1,31 +0,0 @@
# Quartz Static Site Server
# Downloads and serves a Quartz-built static site from a release bundle
#
# Configuration (via environment):
# DOCS_RELEASE_URL - URL to download the static site tarball
#
# The container downloads the tarball on startup, extracts it, and serves with nginx.
ARG CONTAINER_APP_VERSION=1.28.2
ARG NGINX_VERSION=${CONTAINER_APP_VERSION}
FROM nginx:${NGINX_VERSION}-alpine
ARG CONTAINER_APP_VERSION
LABEL org.opencontainers.image.title="Quartz"
LABEL org.opencontainers.image.description="Static site server for Quartz-built documentation"
LABEL org.opencontainers.image.version="${CONTAINER_APP_VERSION}"
LABEL org.opencontainers.image.source="https://forge.eblu.me/eblume/blumeops"
LABEL org.opencontainers.image.vendor="blumeops"
# Install curl for downloading release assets
RUN apk add --no-cache curl
# Copy startup script and nginx config
COPY start.sh /start.sh
COPY default.conf /etc/nginx/conf.d/default.conf
RUN chmod +x /start.sh
EXPOSE 80
CMD ["/start.sh"]

View file

@ -1,34 +0,0 @@
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
# Enable gzip compression
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml text/javascript;
# Cache static assets
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# Static file serving — no SPA fallback.
# Quartz generates complete HTML for every page, so all valid URLs
# map to real files. Non-existent paths get 404.html (generated by
# Quartz's NotFoundPage plugin), preventing the spider-trap issue
# where crawlers would get index.html for fabricated URLs.
location / {
try_files $uri $uri/ $uri.html =404;
}
error_page 404 /404.html;
# Health check endpoint
location /healthz {
access_log off;
return 200 "ok\n";
add_header Content-Type text/plain;
}
}

View file

@ -1,31 +0,0 @@
#!/bin/sh
set -e
HTML_DIR="/usr/share/nginx/html"
# Check for required environment variable
if [ -z "$DOCS_RELEASE_URL" ]; then
echo "Error: DOCS_RELEASE_URL environment variable is required"
echo "Set it to the URL of the static site tarball to serve"
exit 1
fi
echo "Downloading docs from: $DOCS_RELEASE_URL"
# Download the tarball
if ! curl -fsSL "$DOCS_RELEASE_URL" -o /tmp/docs.tar.gz; then
echo "Error: Failed to download docs from $DOCS_RELEASE_URL"
exit 1
fi
# Clear existing content and extract
rm -rf "${HTML_DIR:?}"/*
echo "Extracting docs to $HTML_DIR"
tar -xzf /tmp/docs.tar.gz -C "$HTML_DIR"
rm /tmp/docs.tar.gz
echo "Docs extracted successfully"
echo "Starting nginx..."
# Start nginx in foreground
exec nginx -g "daemon off;"