Commit graph

18 commits

Author SHA1 Message Date
sync-test
bc13ea25d1 fix(forgejo-runner-prune): actually reach buildx cache, bring under gitops management
All checks were successful
sync-to-github / sync (push) Successful in 42s
docker system prune --volumes can never touch the buildx builder's
cache volume - it's attached to a running container, and 'volumes'
prune only removes *unattached* ones. This CronJob ran every 30
minutes for 59 days reporting 'Total reclaimed space: 0B' every
single time while each runner's buildx cache silently grew to
57-98GB (discovered chasing a disk-pressure report on nxtgauge-2/3/4).

Fix: attach the real named builder ('nxtgauge-builder', matching
what CI actually uses) first, then call 'docker buildx prune'
directly, capped at --keep-storage 20GB so it doesn't just regrow
unbounded. Verified live: manually pruned gwsh7 (80%->16% node disk)
and ktst5 (84%->47%), then confirmed the patched CronJob is a true
no-op on an already-clean cache.

Also found and cleaned up (host-level, not gitops - out of band from
k8s): 18 orphaned buildx_buildkit_* containers on nxtgauge-1 from 2
months of ad-hoc 'docker buildx create' calls with no --name reuse,
totally invisible to buildx CLI and unrelated to CI (39.63GB, node
went 76%->50%). Added a daily cron job on that host
(~/.local/bin/docker-cleanup.sh) to keep it from reaccumulating,
since that's the host's standalone Docker daemon, outside k8s/gitops
entirely.

This CronJob + its RBAC (docker-prune-sa/-role/-binding) previously
existed only as manually-applied live objects, not tracked in git -
same pattern as nxtgauge-containerd-cleanup. Adding manifests and
wiring into clusters/production so Flux manages it going forward.
2026-08-16 04:11:21 +05:30
sync-test
c9fd51d5bc fix(containerd-cleanup): use k3s-bundled ctr, bring under gitops management
All checks were successful
sync-to-github / sync (push) Successful in 39s
The prune step called bare 'ctr', which has never existed as a
standalone binary on these k3s nodes - only the k3s binary itself
(bundling 'k3s ctr'/'k3s crictl' subcommands) lives at
/usr/local/bin. The failure was silently swallowed by '|| true',
so the CronJob has been reporting Complete every 10 minutes for
68 days while doing nothing; node disk sat at 83% used.

Verified live: patched the CronJob's command to invoke
/usr/local/bin/k3s ctr directly, manually triggered a run, confirmed
it actually prunes now (deleted ~75 dangling images).

This CronJob and its ServiceAccount previously existed only as a
manually-applied live object, not tracked in git. Adding the
manifests here and wiring them into clusters/production so Flux
manages it going forward instead of it silently drifting again.
2026-08-15 23:41:59 +05:30
sync-test
75f5abd7c9 feat: add nxtgauge.com/www ingress rules, drop coming-soon from cluster kustomization
All checks were successful
sync-to-github / sync (push) Successful in 6s
Forgot to stage these in 643ab49 - the actual ingress host rules and
the removal of the apps/nxtgauge-coming-soon reference from
clusters/production/kustomization.yaml, without which nothing in the
previous commit actually took effect.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-14 04:43:57 +05:30
sync-test
93d0254b2d feat: deploy nxtgauge.com coming-soon page
The static page (coming-soon/) has existed in this repo since 167ea12
but was never actually wired up - its own README says as much ('Add
this repo to your Kustomize setup and create a Deployment + Service +
Ingress'). No ingress for the bare nxtgauge.com/www.nxtgauge.com
domain existed at all (only subdomains: api/admin/test111/llm/ci/logs).

Deploys the page as a stock nginx:1.27-alpine container (no custom
image/CI build needed - the whole site is ~183KB of static HTML/PNG/
SVG) with the content mounted via two ConfigMaps (configmap-html for
index.html + nginx.conf, configmap-assets for the logo/trademark
files - split because ConfigMap keys can't contain '/', so the
assets/ subdirectory needed its own map). 2 replicas, standard
readiness/liveness probes, ingress for both nxtgauge.com and
www.nxtgauge.com terminating TLS via the existing letsencrypt-prod
ClusterIssuer.

Confirmed DNS for both hostnames already resolves through the same
Cloudflare-proxied IPs as the working test111.nxtgauge.com subdomain -
no DNS changes needed, this starts serving as soon as Flux applies it.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-14 03:41:19 +05:30
sync-test
d503a32de7 feat(ai): fix Ollama resource limits and bring LiteLLM under GitOps management
All checks were successful
sync-to-forgejo / sync (push) Successful in 10s
Phase 1 of the AI architecture doc ("Improve Generation Quality") —
qwen3:4b and qwen3:8b were already pulled onto the Ollama PVC, and
apps/litellm/base/configmap.yaml already had the correct model_list
mapping every feature alias to them instead of gemma3:270m. Neither
was actually in effect:

1. apps/litellm was never included in
   clusters/production/kustomization.yaml, so it was only ever
   deployed by a one-off manual `kubectl apply` and has been
   completely outside GitOps ever since (same root cause as the
   ai-guard registry drift found earlier). Added it to the root
   kustomization. Corrected its image reference from
   registry.nxtgauge.com/litellm:latest (doesn't appear to exist) to
   ghcr.io/berriai/litellm:latest, matching what's actually running
   live — adopting this file without that fix would have broken a
   working deployment the moment Flux started managing it.

2. apps/ollama/base/deployment.yaml's memory limit (1500Mi) was too
   small to ever load qwen3:4b (~2.5GB) or qwen3:8b (~5.2GB) — every
   model alias in the (also-never-applied) LiteLLM config was
   therefore unusable regardless of what it was named. Raised to
   4 CPU / 8Gi limit (node has 16GB total, was at ~26% memory use) and
   added OLLAMA_KEEP_ALIVE=30m so a loaded model survives the gaps
   between bursty feature requests instead of reloading from disk on
   every first call after 5+ minutes idle.
2026-07-21 06:30:13 +05:30
sync-test
c950c372b7 fix(flux): simplify ImageUpdateAutomation commit messages
All checks were successful
sync-to-forgejo / sync (push) Successful in 24s
- Remove complex template with .Changed.Images that was causing errors
- Use simple commit messages for ImageUpdateAutomation
- Keep ImageRepository and ImagePolicy configurations
2026-07-05 22:40:48 +00:00
sync-test
a5ecc12648 fix(flux): remove filterTags from ImagePolicies
All checks were successful
sync-to-forgejo / sync (push) Successful in 17s
- Remove filterTags pattern that wasn't matching actual registry tags
- ImagePolicies now resolve correctly to available tags
- Tags found: ghcr-migration, manual-build, high-performance-latest
2026-07-06 04:08:20 +05:30
sync-test
581c6c78e1 feat(flux): add Image Automation for all nxtgauge apps
All checks were successful
sync-to-forgejo / sync (push) Successful in 26s
2026-07-06 03:56:23 +05:30
sync-test
f0906d2c67 Add Traceworks Flux image automation
All checks were successful
sync-to-forgejo / sync (push) Successful in 18s
2026-07-05 23:04:54 +05:30
sync-test
f9306faf73 ops(flux): switch gitops source to Forgejo
All checks were successful
sync-to-forgejo / sync (push) Successful in 15s
2026-07-04 19:41:25 +05:30
Ashwin Kumar Sivakumar
b4f371d415 Encrypt all secrets with SOPS, add Flux decryption support, rotate JWT_SECRET/AI_SERVICE_KEY
- Add .sops.yaml (age) and encrypt every plaintext Secret manifest in apps/
- Commit the Flux GitRepository/Kustomization (previously only applied manually)
  with a decryption stanza referencing the sops-age key (created out-of-band,
  not committed)
- Rotate JWT_SECRET (previously exposed in plaintext) and set a real
  AI_SERVICE_KEY (was an empty placeholder), shared between
  nxtgauge-backend-rust and nxtgauge-ai-assistant
- Wire JWT_SECRET into the ai-assistant deployment (was missing entirely,
  causing every authenticated request to fail)
- Redact the leaked LiteLLM production master key from README/OPENCODE_CONNECT
  docs; move the litellm prod overlay off a plaintext secretGenerator onto an
  encrypted patch
2026-07-02 17:56:28 +05:30
Ashwin Kumar Sivakumar
c0abc5e152 feat(ci): add github self-hosted runners 2026-06-16 00:47:15 +05:30
Ashwin Kumar Sivakumar
fce1da5b3f chore: remove forgejo and registry dependencies 2026-06-15 01:52:43 +05:30
Ashwin Kumar Sivakumar
f5d1041f14 fix: add openobserve-alerts to cluster kustomization and disable Telegram alerts 2026-06-12 04:26:32 +05:30
Ashwin Kumar Sivakumar
c4a7e1e330 chore: remove argocd and standardize on flux 2026-06-11 17:17:42 +05:30
Ashwin Kumar Sivakumar
bd389ac480 fix(flux): correct relative paths to apps/ in cluster kustomization 2026-06-08 20:57:15 +05:30
Ashwin Kumar Sivakumar
216a363c66 fix(flux): point cluster kustomization at each app's overlays/prod 2026-06-08 20:56:36 +05:30
Ashwin Kumar Sivakumar
6674264bad chore(flux): add cluster/production kustomization pointing at apps 2026-06-08 20:13:43 +05:30