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) <noreply@anthropic.com>
This commit is contained in:
parent
2ee53fe375
commit
f1f21213e5
21 changed files with 4 additions and 458 deletions
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
---
|
|
||||||
apiVersion: policy/v1
|
|
||||||
kind: PodDisruptionBudget
|
|
||||||
metadata:
|
|
||||||
name: cv
|
|
||||||
spec:
|
|
||||||
minAvailable: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: cv
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: cv
|
|
||||||
namespace: cv
|
|
||||||
spec:
|
|
||||||
selector:
|
|
||||||
app: cv
|
|
||||||
ports:
|
|
||||||
- name: http
|
|
||||||
port: 80
|
|
||||||
targetPort: 80
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
---
|
|
||||||
apiVersion: policy/v1
|
|
||||||
kind: PodDisruptionBudget
|
|
||||||
metadata:
|
|
||||||
name: docs
|
|
||||||
spec:
|
|
||||||
minAvailable: 1
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: docs
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: docs
|
|
||||||
namespace: docs
|
|
||||||
spec:
|
|
||||||
selector:
|
|
||||||
app: docs
|
|
||||||
ports:
|
|
||||||
- name: http
|
|
||||||
port: 80
|
|
||||||
targetPort: 80
|
|
||||||
|
|
@ -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"]
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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;"
|
|
||||||
|
|
@ -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"]
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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;"
|
|
||||||
|
|
@ -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.
|
||||||
|
|
@ -42,7 +42,6 @@ BLACKLIST = {"kubectl"}
|
||||||
|
|
||||||
# Container dir name → service-versions.yaml name (when they differ)
|
# Container dir name → service-versions.yaml name (when they differ)
|
||||||
CONTAINER_TO_SERVICE = {
|
CONTAINER_TO_SERVICE = {
|
||||||
"quartz": "docs",
|
|
||||||
"kiwix-serve": "kiwix",
|
"kiwix-serve": "kiwix",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -233,14 +233,12 @@ services:
|
||||||
- name: docs
|
- name: docs
|
||||||
type: ansible
|
type: ansible
|
||||||
last-reviewed: 2026-04-29
|
last-reviewed: 2026-04-29
|
||||||
current-version: "1.28.2"
|
current-version: "v1.16.0"
|
||||||
upstream-source: https://forge.eblu.me/eblume/blumeops/releases
|
upstream-source: https://forge.eblu.me/eblume/blumeops/releases
|
||||||
notes: >-
|
notes: >-
|
||||||
Quartz-built tarball downloaded by ansible/roles/docs into ~/blumeops/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
|
on indri; served directly by Caddy (kind=static, try_html). current-version
|
||||||
minikube 2026-04-29. current-version still tracks the legacy quartz/nginx
|
tracks the blumeops docs release tag.
|
||||||
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.
|
|
||||||
|
|
||||||
- name: forgejo-runner
|
- name: forgejo-runner
|
||||||
type: argocd
|
type: argocd
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue