Decommission JobSync service (#308)
All checks were successful
Build Container / detect (push) Successful in 3s

## Summary

- Remove all JobSync infrastructure: ArgoCD app, k8s manifests, container build (nix), Caddy reverse proxy entry, Homepage dashboard entry, service-versions tracking, and all documentation
- Runtime teardown already completed: ArgoCD app cascade-deleted (removes deployment, PVC, service, ingress, external-secret), forge mirror deleted, 1Password item archived, local clone removed

## Motivation

Replacing JobSync with a datasette-based job tracking pipeline driven by mise tasks and a Claude agent frontend. JobSync's Next.js server actions don't expose a useful API for automation.

## Remaining manual steps after merge

- Provision Caddy to remove the stale proxy route: `mise run provision-indri -- --tags caddy`
- Sync Homepage: `argocd app sync homepage`
- Verify namespace cleanup on ringtail: `kubectl get ns jobsync --context=k3s-ringtail` (should be gone)

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

Reviewed-on: #308
This commit is contained in:
Erich Blume 2026-03-24 08:44:23 -07:00
commit fc45989a6c
18 changed files with 1 additions and 588 deletions

View file

@ -1,18 +0,0 @@
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: jobsync
namespace: argocd
spec:
project: default
source:
repoURL: ssh://forgejo@forge.ops.eblu.me:2222/eblume/blumeops.git
targetRevision: main
path: argocd/manifests/jobsync
destination:
server: https://ringtail.tail8d86e.ts.net:6443
namespace: jobsync
syncPolicy:
syncOptions:
- CreateNamespace=true

View file

@ -68,11 +68,6 @@
enableBlocks: true
enableNowPlaying: false
fields: ["movies", "series", "episodes"]
- Services:
- JobSync:
href: https://jobsync.ops.eblu.me
icon: mdi-briefcase-search
description: Job application tracker
- Infrastructure:
- Authentik:
href: https://authentik.ops.eblu.me

View file

@ -1,78 +0,0 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: jobsync
namespace: jobsync
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: jobsync
template:
metadata:
labels:
app: jobsync
spec:
containers:
- name: jobsync
image: blumeops/jobsync:kustomized
ports:
- containerPort: 3000
name: http
env:
- name: DATABASE_URL
value: "file:/data/dev.db"
- name: NEXTAUTH_URL
value: "https://jobsync.ops.eblu.me"
- name: AUTH_TRUST_HOST
value: "true"
- name: NEXT_TELEMETRY_DISABLED
value: "1"
- name: TZ
value: "America/Los_Angeles"
- name: OLLAMA_BASE_URL
value: "http://ollama.ollama.svc.cluster.local:11434"
- name: AUTH_SECRET
valueFrom:
secretKeyRef:
name: jobsync-secrets
key: auth_secret
- name: ENCRYPTION_KEY
valueFrom:
secretKeyRef:
name: jobsync-secrets
key: encryption_key
- name: RAPIDAPI_KEY
valueFrom:
secretKeyRef:
name: jobsync-secrets
key: rapidapi_key
volumeMounts:
- name: data
mountPath: /data
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 30
periodSeconds: 30
readinessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 10
periodSeconds: 10
volumes:
- name: data
persistentVolumeClaim:
claimName: jobsync-data

View file

@ -1,27 +0,0 @@
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: jobsync-secrets
namespace: jobsync
spec:
refreshInterval: 1h
secretStoreRef:
kind: ClusterSecretStore
name: onepassword-blumeops
target:
name: jobsync-secrets
creationPolicy: Owner
data:
- secretKey: auth_secret
remoteRef:
key: JobSync
property: auth_secret
- secretKey: encryption_key
remoteRef:
key: JobSync
property: encryption_key
- secretKey: rapidapi_key
remoteRef:
key: JobSync
property: rapidapi_key

View file

@ -1,26 +0,0 @@
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: jobsync-tailscale
namespace: jobsync
annotations:
tailscale.com/proxy-class: "default"
tailscale.com/proxy-group: "ingress"
gethomepage.dev/enabled: "true"
gethomepage.dev/name: "JobSync"
gethomepage.dev/group: "Services"
gethomepage.dev/icon: "mdi-briefcase-search"
gethomepage.dev/description: "Job application tracker"
gethomepage.dev/href: "https://jobsync.ops.eblu.me"
gethomepage.dev/pod-selector: "app=jobsync"
spec:
ingressClassName: tailscale
defaultBackend:
service:
name: jobsync
port:
number: 3000
tls:
- hosts:
- jobsync

View file

@ -1,15 +0,0 @@
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: jobsync
resources:
- pvc.yaml
- external-secret.yaml
- deployment.yaml
- service.yaml
- ingress-tailscale.yaml
images:
- name: blumeops/jobsync
newName: registry.ops.eblu.me/blumeops/jobsync
newTag: "v1.1.4-3a811fb-nix"

View file

@ -1,13 +0,0 @@
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jobsync-data
namespace: jobsync
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 5Gi

View file

@ -1,13 +0,0 @@
---
apiVersion: v1
kind: Service
metadata:
name: jobsync
namespace: jobsync
spec:
selector:
app: jobsync
ports:
- name: http
port: 3000
targetPort: 3000