Deploy JobSync — job search tracker on ringtail k3s #288

Merged
eblume merged 20 commits from mikado/jobsync into main 2026-03-08 11:02:06 -07:00

20 commits

Author SHA1 Message Date
ae72092ed7 C2(jobsync): finalize — rework cards into standalone docs
Delete mirror-jobsync and integrate-jobsync-ollama (no standalone
value). Rework build-jobsync-container and deploy-jobsync into
operational reference documentation. Add changelog fragment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 11:00:06 -07:00
9d1e7eff12 C2(jobsync): close — deploy-jobsync
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 10:57:02 -07:00
c42d219cb6 C2(jobsync): impl — update image tag to v1.1.4-e51ec83-nix
Container with /usr/bin/env symlink for npx shebang resolution.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:45:49 -07:00
e51ec83c41 C2(jobsync): impl — add /usr/bin/env symlink for npx-installed scripts
npx-downloaded prisma has `#!/usr/bin/env node` shebang. Nix containers
lack FHS paths; create the symlink in extraCommands.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:44:36 -07:00
1124b07870 C2(jobsync): impl — update image tag to v1.1.4-6b36d53-nix
Simplified container with npx -y for prisma migrations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:40:21 -07:00
6b36d53bab C2(jobsync): impl — simplify: use npx -y for runtime prisma migrate
Instead of bundling prisma CLI and its deep dependency tree in the nix
image, use `npx -y prisma@6.19.0 migrate deploy` like upstream does.
npx downloads prisma at container startup — network is available at
runtime, only blocked during nix build.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:26:13 -07:00
87930e5e31 C2(jobsync): impl — skip npm prune, copy prisma transitive deps
Prisma CLI (devDep) has a deep transitive dependency tree that must
be present at runtime for `migrate deploy`. Skip npm prune entirely
and explicitly copy all prisma packages and their transitive deps
into the output.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:23:28 -07:00
2384a15cbf C2(jobsync): impl — update image tag to v1.1.4-fdac2e3-nix
Container with /tmp directory fix for prisma get-platform.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:14:39 -07:00
fdac2e3699 C2(jobsync): impl — add /tmp and /data directories to nix container
Prisma's get-platform module requires /tmp for temp files. Nix
containers don't create standard directories by default.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:10:11 -07:00
6187ade18f C2(jobsync): impl — update image tag to v1.1.4-846d879-nix
Container with fixed @prisma/engines copy and local prisma binary.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:06:16 -07:00
846d879b40 C2(jobsync): impl — fix @prisma/engines copy in installPhase
The cp -r of @prisma/ into an existing node_modules/@prisma/ nested
incorrectly. Use cp -rn with glob to merge contents instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 09:00:24 -07:00
8d272eee83 C2(jobsync): impl — update image tag to v1.1.4-27039e7-nix
Point kustomization at the container with the fixed entrypoint.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 08:46:05 -07:00
27039e7fe7 C2(jobsync): impl — fix entrypoint to use local prisma binary
npx is not available in the nix container. Call prisma directly via
node node_modules/prisma/build/index.js instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 08:39:42 -07:00
2220944a15 C2(jobsync): impl — ArgoCD app, k8s manifests, Caddy route
ArgoCD Application targeting ringtail k3s cluster.
Manifests: Deployment, Service, Tailscale Ingress, PVC (local-path),
ExternalSecret (1Password auth_secret + encryption_key).
Caddy route: jobsync.ops.eblu.me -> jobsync.tail8d86e.ts.net.
Ollama integration via OLLAMA_BASE_URL env var in deployment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 08:33:13 -07:00
5b71bb2398 C2(jobsync): close build-jobsync-container, integrate-jobsync-ollama
build-jobsync-container: Updated with lessons learned (prisma-engines
from nixpkgs, Google Fonts sandbox workaround, arm64 vs x86_64).
integrate-jobsync-ollama: Configuration-only card, env var will be
set in the deployment manifest.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 08:30:51 -07:00
b1616bc96b C2(jobsync): impl — fix nix derivation for ringtail build
Use nixpkgs prisma-engines to avoid network downloads in nix sandbox.
Patch out Google Fonts import (Inter) since sandbox blocks network;
falls back to system sans-serif font stack.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:28:31 -08:00
874a967000 C2(jobsync): impl — nix container derivation and entrypoint
Add containers/jobsync/default.nix (buildNpmPackage + dockerTools) and
entrypoint.sh (prisma migrate + node server.js). Hashes are empty
placeholders — will be filled from first build attempt on ringtail.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:08:38 -08:00
92f0b190b8 C2(jobsync): close mirror-jobsync
Mirror already exists at forge.ops.eblu.me/mirrors/jobsync from
previous cycle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:00:57 -08:00
60507ee719 C2(jobsync): plan — update cards with learnings from first attempt
build-jobsync-container: document prisma devDep pruning pitfall,
nix entrypoint path issue, and verification step.

deploy-jobsync: document service-versions.yaml requirement,
image tag format, and 1Password item already created.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:00:03 -08:00
15ceeb5f9d C2(jobsync): plan — Mikado cards for JobSync deployment
Cards:
- deploy-jobsync (goal): Deploy JobSync to ringtail k3s via ArgoCD
- build-jobsync-container: Nix container build (buildLayeredImage)
- mirror-jobsync: Mirror upstream to forge
- integrate-jobsync-ollama: Wire up existing Ollama for AI features

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 20:43:14 -08:00