From f1f21213e59b2ccf2c5e7731c729985d700feb24 Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Wed, 29 Apr 2026 15:17:40 -0700 Subject: [PATCH] C1: clean up cv + docs minikube artifacts Removes the dead minikube manifests, container builds, and tooling shims left behind after the cv + docs migration to indri-native (#342). Deletions: - argocd/apps/{cv,docs}.yaml - argocd/manifests/{cv,docs}/ - containers/{cv,quartz}/ 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, now that the legacy nginx-base version pin is gone) and trim the migration-window comment. After merge: argocd app sync apps to clear the OutOfSync state caused by the still-present apps/{cv,docs}.yaml entries in the previous main. Co-Authored-By: Claude Opus 4.7 (1M context) --- argocd/apps/cv.yaml | 18 ------- argocd/apps/docs.yaml | 18 ------- argocd/manifests/cv/deployment.yaml | 51 ------------------- argocd/manifests/cv/ingress-tailscale.yaml | 27 ---------- argocd/manifests/cv/kustomization.yaml | 12 ----- argocd/manifests/cv/pdb.yaml | 10 ---- argocd/manifests/cv/service.yaml | 13 ----- argocd/manifests/docs/deployment.yaml | 51 ------------------- argocd/manifests/docs/ingress-tailscale.yaml | 27 ---------- argocd/manifests/docs/kustomization.yaml | 12 ----- argocd/manifests/docs/pdb.yaml | 10 ---- argocd/manifests/docs/service.yaml | 13 ----- containers/cv/Dockerfile | 30 ----------- containers/cv/default.conf | 33 ------------ containers/cv/start.sh | 31 ----------- containers/quartz/Dockerfile | 31 ----------- containers/quartz/default.conf | 34 ------------- containers/quartz/start.sh | 31 ----------- ...cleanup-cv-docs-minikube-artifacts.misc.md | 1 + mise-tasks/container-version-check | 1 - service-versions.yaml | 8 ++- 21 files changed, 4 insertions(+), 458 deletions(-) delete mode 100644 argocd/apps/cv.yaml delete mode 100644 argocd/apps/docs.yaml delete mode 100644 argocd/manifests/cv/deployment.yaml delete mode 100644 argocd/manifests/cv/ingress-tailscale.yaml delete mode 100644 argocd/manifests/cv/kustomization.yaml delete mode 100644 argocd/manifests/cv/pdb.yaml delete mode 100644 argocd/manifests/cv/service.yaml delete mode 100644 argocd/manifests/docs/deployment.yaml delete mode 100644 argocd/manifests/docs/ingress-tailscale.yaml delete mode 100644 argocd/manifests/docs/kustomization.yaml delete mode 100644 argocd/manifests/docs/pdb.yaml delete mode 100644 argocd/manifests/docs/service.yaml delete mode 100644 containers/cv/Dockerfile delete mode 100644 containers/cv/default.conf delete mode 100644 containers/cv/start.sh delete mode 100644 containers/quartz/Dockerfile delete mode 100644 containers/quartz/default.conf delete mode 100644 containers/quartz/start.sh create mode 100644 docs/changelog.d/cleanup-cv-docs-minikube-artifacts.misc.md diff --git a/argocd/apps/cv.yaml b/argocd/apps/cv.yaml deleted file mode 100644 index ad09a8d..0000000 --- a/argocd/apps/cv.yaml +++ /dev/null @@ -1,18 +0,0 @@ ---- -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: cv - namespace: argocd -spec: - project: default - source: - repoURL: ssh://forgejo@forge.ops.eblu.me:2222/eblume/blumeops.git - targetRevision: main - path: argocd/manifests/cv - destination: - server: https://kubernetes.default.svc - namespace: cv - syncPolicy: - syncOptions: - - CreateNamespace=true diff --git a/argocd/apps/docs.yaml b/argocd/apps/docs.yaml deleted file mode 100644 index cd8db35..0000000 --- a/argocd/apps/docs.yaml +++ /dev/null @@ -1,18 +0,0 @@ ---- -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: docs - namespace: argocd -spec: - project: default - source: - repoURL: ssh://forgejo@forge.ops.eblu.me:2222/eblume/blumeops.git - targetRevision: main - path: argocd/manifests/docs - destination: - server: https://kubernetes.default.svc - namespace: docs - syncPolicy: - syncOptions: - - CreateNamespace=true diff --git a/argocd/manifests/cv/deployment.yaml b/argocd/manifests/cv/deployment.yaml deleted file mode 100644 index f2b00e6..0000000 --- a/argocd/manifests/cv/deployment.yaml +++ /dev/null @@ -1,51 +0,0 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: cv - namespace: cv -spec: - replicas: 2 - strategy: - type: RollingUpdate - rollingUpdate: - maxUnavailable: 0 - maxSurge: 1 - selector: - matchLabels: - app: cv - template: - metadata: - labels: - app: cv - spec: - securityContext: - seccompProfile: - type: RuntimeDefault - containers: - - name: cv - image: registry.ops.eblu.me/blumeops/cv:kustomized - ports: - - containerPort: 80 - name: http - env: - - name: CV_RELEASE_URL - value: "https://forge.eblu.me/api/packages/eblume/generic/cv/v1.0.3/cv-v1.0.3.tar.gz" - resources: - requests: - memory: "64Mi" - cpu: "10m" - limits: - memory: "128Mi" - livenessProbe: - httpGet: - path: /healthz - port: 80 - initialDelaySeconds: 10 - periodSeconds: 30 - readinessProbe: - httpGet: - path: /healthz - port: 80 - initialDelaySeconds: 5 - periodSeconds: 10 diff --git a/argocd/manifests/cv/ingress-tailscale.yaml b/argocd/manifests/cv/ingress-tailscale.yaml deleted file mode 100644 index 489f95a..0000000 --- a/argocd/manifests/cv/ingress-tailscale.yaml +++ /dev/null @@ -1,27 +0,0 @@ ---- -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: cv-tailscale - namespace: cv - annotations: - tailscale.com/proxy-class: "default" - tailscale.com/proxy-group: "ingress" - tailscale.com/tags: "tag:k8s,tag:flyio-target" - gethomepage.dev/enabled: "true" - gethomepage.dev/name: "CV" - gethomepage.dev/group: "Services" - gethomepage.dev/icon: "mdi-file-document" - gethomepage.dev/description: "Resume / CV" - gethomepage.dev/href: "https://cv.eblu.me" - gethomepage.dev/pod-selector: "app=cv" -spec: - ingressClassName: tailscale - defaultBackend: - service: - name: cv - port: - number: 80 - tls: - - hosts: - - cv diff --git a/argocd/manifests/cv/kustomization.yaml b/argocd/manifests/cv/kustomization.yaml deleted file mode 100644 index 199108d..0000000 --- a/argocd/manifests/cv/kustomization.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -namespace: cv -resources: - - deployment.yaml - - service.yaml - - ingress-tailscale.yaml - - pdb.yaml -images: - - name: registry.ops.eblu.me/blumeops/cv - newTag: v1.0.3-613f05d diff --git a/argocd/manifests/cv/pdb.yaml b/argocd/manifests/cv/pdb.yaml deleted file mode 100644 index db5240d..0000000 --- a/argocd/manifests/cv/pdb.yaml +++ /dev/null @@ -1,10 +0,0 @@ ---- -apiVersion: policy/v1 -kind: PodDisruptionBudget -metadata: - name: cv -spec: - minAvailable: 1 - selector: - matchLabels: - app: cv diff --git a/argocd/manifests/cv/service.yaml b/argocd/manifests/cv/service.yaml deleted file mode 100644 index 23e0e94..0000000 --- a/argocd/manifests/cv/service.yaml +++ /dev/null @@ -1,13 +0,0 @@ ---- -apiVersion: v1 -kind: Service -metadata: - name: cv - namespace: cv -spec: - selector: - app: cv - ports: - - name: http - port: 80 - targetPort: 80 diff --git a/argocd/manifests/docs/deployment.yaml b/argocd/manifests/docs/deployment.yaml deleted file mode 100644 index c477b83..0000000 --- a/argocd/manifests/docs/deployment.yaml +++ /dev/null @@ -1,51 +0,0 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: docs - namespace: docs -spec: - replicas: 2 - strategy: - type: RollingUpdate - rollingUpdate: - maxUnavailable: 0 - maxSurge: 1 - selector: - matchLabels: - app: docs - template: - metadata: - labels: - app: docs - spec: - securityContext: - seccompProfile: - type: RuntimeDefault - containers: - - name: docs - image: registry.ops.eblu.me/blumeops/quartz:kustomized - ports: - - containerPort: 80 - name: http - env: - - name: DOCS_RELEASE_URL - value: "https://forge.eblu.me/eblume/blumeops/releases/download/v1.16.0/docs-v1.16.0.tar.gz" - resources: - requests: - memory: "64Mi" - cpu: "10m" - limits: - memory: "128Mi" - livenessProbe: - httpGet: - path: /healthz - port: 80 - initialDelaySeconds: 10 - periodSeconds: 30 - readinessProbe: - httpGet: - path: /healthz - port: 80 - initialDelaySeconds: 5 - periodSeconds: 10 diff --git a/argocd/manifests/docs/ingress-tailscale.yaml b/argocd/manifests/docs/ingress-tailscale.yaml deleted file mode 100644 index 047e823..0000000 --- a/argocd/manifests/docs/ingress-tailscale.yaml +++ /dev/null @@ -1,27 +0,0 @@ ---- -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: docs-tailscale - namespace: docs - annotations: - tailscale.com/proxy-class: "default" - tailscale.com/proxy-group: "ingress" - tailscale.com/tags: "tag:k8s,tag:flyio-target" - gethomepage.dev/enabled: "true" - gethomepage.dev/name: "Docs" - gethomepage.dev/group: "Services" - gethomepage.dev/icon: "mdi-book-open-page-variant" - gethomepage.dev/description: "BlumeOps Documentation" - gethomepage.dev/href: "https://docs.eblu.me" - gethomepage.dev/pod-selector: "app=docs" -spec: - ingressClassName: tailscale - defaultBackend: - service: - name: docs - port: - number: 80 - tls: - - hosts: - - docs diff --git a/argocd/manifests/docs/kustomization.yaml b/argocd/manifests/docs/kustomization.yaml deleted file mode 100644 index a16185f..0000000 --- a/argocd/manifests/docs/kustomization.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -namespace: docs -resources: - - deployment.yaml - - service.yaml - - ingress-tailscale.yaml - - pdb.yaml -images: - - name: registry.ops.eblu.me/blumeops/quartz - newTag: v1.28.2-613f05d diff --git a/argocd/manifests/docs/pdb.yaml b/argocd/manifests/docs/pdb.yaml deleted file mode 100644 index a87b8e9..0000000 --- a/argocd/manifests/docs/pdb.yaml +++ /dev/null @@ -1,10 +0,0 @@ ---- -apiVersion: policy/v1 -kind: PodDisruptionBudget -metadata: - name: docs -spec: - minAvailable: 1 - selector: - matchLabels: - app: docs diff --git a/argocd/manifests/docs/service.yaml b/argocd/manifests/docs/service.yaml deleted file mode 100644 index 62b0f83..0000000 --- a/argocd/manifests/docs/service.yaml +++ /dev/null @@ -1,13 +0,0 @@ ---- -apiVersion: v1 -kind: Service -metadata: - name: docs - namespace: docs -spec: - selector: - app: docs - ports: - - name: http - port: 80 - targetPort: 80 diff --git a/containers/cv/Dockerfile b/containers/cv/Dockerfile deleted file mode 100644 index 9bfebe0..0000000 --- a/containers/cv/Dockerfile +++ /dev/null @@ -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"] diff --git a/containers/cv/default.conf b/containers/cv/default.conf deleted file mode 100644 index 7c89b08..0000000 --- a/containers/cv/default.conf +++ /dev/null @@ -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; - } -} diff --git a/containers/cv/start.sh b/containers/cv/start.sh deleted file mode 100644 index bb81c20..0000000 --- a/containers/cv/start.sh +++ /dev/null @@ -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;" diff --git a/containers/quartz/Dockerfile b/containers/quartz/Dockerfile deleted file mode 100644 index 8ffd44c..0000000 --- a/containers/quartz/Dockerfile +++ /dev/null @@ -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"] diff --git a/containers/quartz/default.conf b/containers/quartz/default.conf deleted file mode 100644 index 64eec4e..0000000 --- a/containers/quartz/default.conf +++ /dev/null @@ -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; - } -} diff --git a/containers/quartz/start.sh b/containers/quartz/start.sh deleted file mode 100644 index 778eeb1..0000000 --- a/containers/quartz/start.sh +++ /dev/null @@ -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;" diff --git a/docs/changelog.d/cleanup-cv-docs-minikube-artifacts.misc.md b/docs/changelog.d/cleanup-cv-docs-minikube-artifacts.misc.md new file mode 100644 index 0000000..79a81cf --- /dev/null +++ b/docs/changelog.d/cleanup-cv-docs-minikube-artifacts.misc.md @@ -0,0 +1 @@ +Removed the dead minikube manifests, container builds, and tooling shims left behind after the cv + docs migration to indri-native (#342). Deletes `argocd/{apps,manifests}/{cv,docs}/`, `containers/{cv,quartz}/`, and the `quartz`→`docs` mapping in `mise-tasks/container-version-check`. Bumps `docs.current-version` to `v1.16.0` (the blumeops release tag) now that the legacy nginx-base version pin is gone. diff --git a/mise-tasks/container-version-check b/mise-tasks/container-version-check index 6270ae1..95cf6f0 100755 --- a/mise-tasks/container-version-check +++ b/mise-tasks/container-version-check @@ -42,7 +42,6 @@ BLACKLIST = {"kubectl"} # Container dir name → service-versions.yaml name (when they differ) CONTAINER_TO_SERVICE = { - "quartz": "docs", "kiwix-serve": "kiwix", } diff --git a/service-versions.yaml b/service-versions.yaml index d77fa13..f4f4a6a 100644 --- a/service-versions.yaml +++ b/service-versions.yaml @@ -233,14 +233,12 @@ services: - name: docs type: ansible last-reviewed: 2026-04-29 - current-version: "1.28.2" + current-version: "v1.16.0" upstream-source: https://forge.eblu.me/eblume/blumeops/releases notes: >- 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 - containers/quartz Dockerfile is removed in the cleanup commit. + on indri; served directly by Caddy (kind=static, try_html). current-version + tracks the blumeops docs release tag. - name: forgejo-runner type: argocd