441 Commits

Author SHA1 Message Date
d0ef8f30b9 chore(deps): update helm release cloudnative-pg to v0.28.0 2026-04-02 00:00:33 +00:00
98f63b1576 Merge pull request 'chore(deps): update helm release immich to v1.2.2' (#190) from renovate/immich-1.x into fresh-start 2026-04-01 00:00:35 +00:00
edba33b552 chore(deps): update helm release immich to v1.2.2 2026-04-01 00:00:32 +00:00
054df42d8b update qwen3.5 4b ctx size to 128k 2026-03-30 21:05:00 +02:00
08db022d0d Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v199-vulkan-b8576' (#189) from renovate/ghcr.io-mostlygeek-llama-swap-199.x into fresh-start 2026-03-30 00:00:52 +00:00
e485a4fc7f chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v199-vulkan-b8576 2026-03-30 00:00:49 +00:00
9e74ed6a19 increase --fit-target to 1.5GB 2026-03-29 23:50:45 +02:00
42e89c9bb7 Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v199-vulkan-b8562' (#188) from renovate/ghcr.io-mostlygeek-llama-swap-199.x into fresh-start 2026-03-29 00:00:53 +00:00
99bc04b76a chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v199-vulkan-b8562 2026-03-29 00:00:50 +00:00
7ee77e33d4 Merge pull request 'chore(deps): update helm release cert-manager to v1.20.1' (#186) from renovate/cert-manager-1.x into fresh-start 2026-03-28 00:05:47 +00:00
8bdd5f2196 chore(deps): update helm release cert-manager to v1.20.1 2026-03-28 00:05:44 +00:00
1d8cb85bd4 Merge pull request 'chore(deps): update renovate/renovate docker tag to v43.95.0' (#163) from renovate/renovate-renovate-43.x into fresh-start
Reviewed-on: #163
2026-03-27 17:43:07 +00:00
eeb302b63b Merge pull request 'chore(deps): update helm release immich to v1.2.1' (#175) from renovate/immich-1.x into fresh-start
Reviewed-on: #175
2026-03-27 17:42:59 +00:00
69b437ed3b Merge pull request 'chore(deps): update helm release k8up to v4.9.0' (#182) from renovate/k8up-4.x into fresh-start
Reviewed-on: #182
2026-03-27 17:42:52 +00:00
54674a6e79 Merge pull request 'chore(deps): update helm release open-webui to v12.13.0' (#183) from renovate/open-webui-12.x into fresh-start
Reviewed-on: #183
2026-03-27 17:42:46 +00:00
a9da405326 chore(deps): update renovate/renovate docker tag to v43.95.0 2026-03-27 17:42:10 +00:00
264871bf68 Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v199-vulkan-b8547' (#185) from renovate/ghcr.io-mostlygeek-llama-swap-199.x into fresh-start 2026-03-27 17:42:09 +00:00
6bcd0ba464 chore(deps): update helm release open-webui to v12.13.0 2026-03-27 17:42:07 +00:00
cb53301926 chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v199-vulkan-b8547 2026-03-27 17:42:04 +00:00
110817b748 Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v199' (#184) from renovate/ghcr.io-mostlygeek-llama-swap-199.x into fresh-start
Reviewed-on: #184
2026-03-27 17:40:38 +00:00
66cb3c9d82 chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v199 2026-03-27 00:00:28 +00:00
42ae7af649 chore(deps): update helm release k8up to v4.9.0 2026-03-26 00:00:57 +00:00
cffcb1cc2d Merge pull request 'chore(deps): update helm release openbao to v0.26.2' (#181) from renovate/openbao-0.x into fresh-start 2026-03-26 00:00:57 +00:00
a4a7dd6fe6 Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8508' (#180) from renovate/ghcr.io-mostlygeek-llama-swap-198.x into fresh-start 2026-03-26 00:00:54 +00:00
52b8ca79dc chore(deps): update helm release openbao to v0.26.2 2026-03-26 00:00:54 +00:00
9a1fe1f740 chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8508 2026-03-26 00:00:49 +00:00
e996a60378 Merge pull request 'chore(deps): update helm release cert-manager-webhook-ovh to v0.9.5' (#179) from renovate/cert-manager-webhook-ovh-0.x into fresh-start 2026-03-25 00:00:35 +00:00
0ccd4d93f1 chore(deps): update helm release immich to v1.2.1 2026-03-25 00:00:34 +00:00
d667c6c0fc Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8496' (#178) from renovate/ghcr.io-mostlygeek-llama-swap-198.x into fresh-start 2026-03-25 00:00:33 +00:00
4254ebc9ef chore(deps): update helm release cert-manager-webhook-ovh to v0.9.5 2026-03-25 00:00:32 +00:00
8cf02fea0e chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8496 2026-03-25 00:00:29 +00:00
aa3c74d6a7 Merge pull request 'chore(deps): update helm release cilium to v1.19.2' (#177) from renovate/cilium-1.x into fresh-start 2026-03-24 00:00:44 +00:00
289089428e Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8477' (#176) from renovate/ghcr.io-mostlygeek-llama-swap-198.x into fresh-start 2026-03-24 00:00:41 +00:00
a93f6ec36f chore(deps): update helm release cilium to v1.19.2 2026-03-24 00:00:41 +00:00
1d85bf3a88 chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8477 2026-03-24 00:00:39 +00:00
f495debf25 Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8468' (#174) from renovate/ghcr.io-mostlygeek-llama-swap-198.x into fresh-start 2026-03-23 00:00:24 +00:00
bfede17c87 chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8468 2026-03-23 00:00:21 +00:00
08ca3f4c4e Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8461' (#173) from renovate/ghcr.io-mostlygeek-llama-swap-198.x into fresh-start 2026-03-22 00:00:27 +00:00
471c0ba62d chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8461 2026-03-22 00:00:23 +00:00
261141f509 Merge pull request 'chore(deps): update helm release k8up to v4.8.7' (#172) from renovate/k8up-4.x into fresh-start 2026-03-20 22:31:45 +00:00
86d5751842 Merge pull request 'chore(deps): update helm release immich to v1.1.3' (#171) from renovate/immich-1.x into fresh-start 2026-03-20 22:31:42 +00:00
43e531a3ca chore(deps): update helm release k8up to v4.8.7 2026-03-20 22:31:41 +00:00
9a0764268b Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8445' (#170) from renovate/ghcr.io-mostlygeek-llama-swap-198.x into fresh-start 2026-03-20 22:31:39 +00:00
7c88498756 chore(deps): update helm release immich to v1.1.3 2026-03-20 22:31:38 +00:00
8717526358 chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8445 2026-03-20 22:31:36 +00:00
b6a7e5092c Merge pull request 'chore(deps): update helm release ingress-nginx to v4.15.1' (#169) from renovate/ingress-nginx-4.x into fresh-start 2026-03-20 00:00:56 +00:00
27f7a5f29a Merge pull request 'chore(deps): update helm release immich to v1.1.2' (#168) from renovate/immich-1.x into fresh-start 2026-03-20 00:00:52 +00:00
9d0fd0981a chore(deps): update helm release ingress-nginx to v4.15.1 2026-03-20 00:00:52 +00:00
51bc53dbbc chore(deps): update helm release immich to v1.1.2 2026-03-20 00:00:50 +00:00
ce0b13ebb3 change kv cache quant to q8_0 2026-03-20 00:57:39 +01:00
516e157d39 Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8400' (#167) from renovate/ghcr.io-mostlygeek-llama-swap-198.x into fresh-start 2026-03-19 00:00:38 +00:00
73d6d1f15a chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8400 2026-03-19 00:00:34 +00:00
c51fc2a5ef Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8390' (#166) from renovate/ghcr.io-mostlygeek-llama-swap-198.x into fresh-start 2026-03-18 00:00:31 +00:00
8d994e7aa1 chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8390 2026-03-18 00:00:28 +00:00
5b551c6c6e switch pullPolicy to Always on crawl4ai-proxy 2026-03-17 01:47:29 +01:00
7e7b3e3d71 add max ctx on llama.cpp 2026-03-17 01:33:35 +01:00
9f315b38e3 use modded crawl4ai proxy image 2026-03-17 01:24:09 +01:00
3e1a806db1 Merge pull request 'chore(deps): update helm release openbao to v0.26.1' (#165) from renovate/openbao-0.x into fresh-start 2026-03-17 00:01:02 +00:00
f7dba45165 Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8369' (#164) from renovate/ghcr.io-mostlygeek-llama-swap-198.x into fresh-start 2026-03-17 00:01:00 +00:00
c8fac3201a chore(deps): update helm release openbao to v0.26.1 2026-03-17 00:01:00 +00:00
82864a4738 chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8369 2026-03-17 00:00:58 +00:00
b54c05b956 add crawl4ai-proxy for openwebui 2026-03-16 20:25:30 +01:00
afdada25a0 add crawl4ai deployment 2026-03-16 19:42:01 +01:00
79315d32db add GLM-4.7-Flash model 2026-03-16 18:19:28 +01:00
a2a5cd72a9 configure open webui to use sso from authentik 2026-03-16 17:30:16 +01:00
c2706a8af2 Merge pull request 'chore(deps): update renovate/renovate docker tag to v43.76.1' (#157) from renovate/renovate-renovate-43.x into fresh-start
Reviewed-on: #157
2026-03-15 17:40:55 +00:00
610ca0017e Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8352' (#162) from renovate/ghcr.io-mostlygeek-llama-swap-198.x into fresh-start 2026-03-15 17:40:29 +00:00
466932347a chore(deps): update renovate/renovate docker tag to v43.76.1 2026-03-15 17:40:29 +00:00
afbcea4e82 chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198-vulkan-b8352 2026-03-15 17:40:26 +00:00
20ad26ed31 Merge pull request 'chore(deps): update alpine docker tag to v3.23' (#158) from renovate/alpine-3.x into fresh-start
Reviewed-on: #158
2026-03-15 17:38:29 +00:00
7a2d1e0437 Merge pull request 'chore(deps): update helm release openbao to v0.26.0' (#159) from renovate/openbao-0.x into fresh-start
Reviewed-on: #159
2026-03-15 17:38:19 +00:00
6b5929fb95 Merge pull request 'chore(deps): update golang docker tag to v1.26' (#160) from renovate/golang-1.x into fresh-start
Reviewed-on: #160
2026-03-15 17:37:51 +00:00
6b64f1a8b8 Merge pull request 'chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198' (#161) from renovate/ghcr.io-mostlygeek-llama-swap-198.x into fresh-start
Reviewed-on: #161
2026-03-15 17:37:40 +00:00
4b4cec10be chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v198 2026-03-15 00:00:34 +00:00
1f319d607a chore(deps): update golang docker tag to v1.26 2026-03-15 00:00:32 +00:00
7d90001f18 chore(deps): update alpine docker tag to v3.23 2026-03-15 00:00:30 +00:00
7948f53d1d add authentik vault policies 2026-03-14 20:12:01 +01:00
829a5a3fd8 add authentik deployment 2026-03-14 20:08:48 +01:00
cf28dcb5eb add missing allowed renovate command 2026-03-14 19:58:35 +01:00
4f1764d192 fix shell completion in garm-cli 2026-03-14 19:27:45 +01:00
49f88e4f96 remove non-functional garm image update workflow 2026-03-14 19:27:35 +01:00
4aca8daecd add mermaid preview extenstion to vscode recommendations 2026-03-14 19:01:29 +01:00
005b52dc4f update devenv and add opencode and tea 2026-03-14 18:27:44 +01:00
d39846422b change gitea port to 80 as workaround of runner bug 2026-03-14 15:51:40 +01:00
bc4f378df3 increase proxy body size on gitea ingress 2026-03-14 03:40:17 +01:00
db91415017 add missing permission to get namespaces to garm 2026-03-14 03:04:02 +01:00
3c071b88df add action to automatically update garm runner 2026-03-14 02:55:03 +01:00
c5ef5e2273 update garm to main branch 2026-03-14 02:42:23 +01:00
c55c37f0ac add ingress for garm 2026-03-14 01:40:11 +01:00
493f939551 chore(deps): update helm release openbao to v0.26.0 2026-03-14 00:00:29 +00:00
168f480c75 add gitea actions runner manager 2026-03-13 22:37:21 +01:00
c056d86da2 Add nginx ingress annotation to increase proxy body size limit 2026-03-13 04:00:10 +01:00
58634b82ba Categorize and add missing entries to app list 2026-03-13 04:00:10 +01:00
5d1ddd6e5d Remake Ansible playbook to target MikroTik router
Basically, I've exported configuration from Mikrotik router using /export and vibe-coded playbook using the file.
2026-03-13 04:00:10 +01:00
09a3251902 chore(deps): update helm release cert-manager to v1.20.0 2026-03-13 04:00:10 +01:00
162f5529e2 chore(deps): update renovate/renovate docker tag to v43.64.6 2026-03-13 04:00:10 +01:00
75531925ef chore(deps): update helm release openbao to v0.25.7 2026-03-13 04:00:10 +01:00
9fa7888799 chore(deps): update registry.k8s.io/coredns/coredns docker tag to v1.14.2 2026-03-13 04:00:10 +01:00
b0c4e17aa8 chore(deps): update helm release cert-manager-webhook-ovh to v0.9.4 2026-03-13 04:00:10 +01:00
2d295d24e0 add 27b q3 variant of qwen3.5 2026-03-13 04:00:10 +01:00
e8efa9ddc1 lower kv cache quant to q4_0 and increase ctx to 64k 2026-03-13 04:00:10 +01:00
c88dd2899a remove ttl of all models in llama-swap 2026-03-13 04:00:10 +01:00
e2d2b32208 chore(deps): update helm release cert-manager-webhook-ovh to v0.9.3 2026-03-13 04:00:10 +01:00
8d280bc9dc chore(deps): update renovate/renovate docker tag to v43.60.6 2026-03-13 04:00:10 +01:00
f219abb74f chore(deps): update ghcr.io/mostlygeek/llama-swap docker tag to v197-vulkan-b8248 2026-03-13 04:00:10 +01:00
0130991c74 refactor: add move llama-swap package config to renovate.json 2026-03-13 04:00:10 +01:00
bbb57cc174 configure renovate to automatically merge patch updates 2026-03-13 04:00:10 +01:00
966d2c50c0 update renovate comment for llama-swap image tag management 2026-03-13 04:00:10 +01:00
fb4fcc7c12 Update renovate/renovate Docker tag to v43.60.4 2026-03-13 04:00:10 +01:00
1026beb722 Update Helm release ingress-nginx to v4.15.0 2026-03-13 04:00:10 +01:00
af737ab82b Update caddy Docker tag to v2.11.2 2026-03-13 04:00:10 +01:00
6dc09ec242 Update Helm release open-webui to v12.10.0 2026-03-13 04:00:10 +01:00
39fc38d62b add qwen3.5 4b heretic 2026-03-13 04:00:10 +01:00
e72a79be8f add glm-5 from openrouter to llama-swap 2026-03-13 04:00:10 +01:00
4fda343b01 clean up llama-swap config 2026-03-13 04:00:10 +01:00
266ced7362 adjust parameters of qwen3-coder-next 2026-03-13 04:00:10 +01:00
8a074839b1 automatically fit context on qwen3.5 2b and 4b 2026-03-13 04:00:10 +01:00
42038207fc Add Q3_K_M variand of Qwen3.5-9B 2026-03-13 04:00:10 +01:00
28cb53c031 fiix thinking versions of Qwen3.5 small 2026-03-13 04:00:10 +01:00
88a73cbb41 set strategy to recreate on llama-swap deployment 2026-03-13 04:00:10 +01:00
46a7e24932 add 2B, 4B, 9B versions of Qwen3.5 in thinking + nonthinking variants 2026-03-13 04:00:10 +01:00
cd7ebac6b9 increase target margin of 2048MB of VRAM 2026-03-13 04:00:10 +01:00
ba9db6ce41 add Qwen3.5 Small 0.8B model and replace Qwen3-VL-2B as task model 2026-03-13 04:00:10 +01:00
6dd9a717e2 shorten context for qwen3-vl-2b and lower kv cache quant 2026-03-13 04:00:10 +01:00
c67b6f7ebe add path to mmproj in qwen3.5 heretic 2026-03-13 04:00:10 +01:00
8d7cf402fd manually update llama-swap image tag 2026-03-13 04:00:10 +01:00
2a59555c3b Add more README 2026-03-13 04:00:10 +01:00
f236b89cca Update Helm release immich to v1.1.1 2026-03-13 04:00:10 +01:00
5f3f3d33ee Update renovate/renovate Docker tag to v43.46.6 2026-03-13 04:00:10 +01:00
b22498c60f Update caddy Docker tag to v2.11.1 2026-03-13 04:00:10 +01:00
13aaae7620 Update Helm release cert-manager to v1.19.4 2026-03-13 04:00:10 +01:00
1d7fba80d4 Update Helm release cert-manager-webhook-ovh to v0.9.2 2026-03-13 04:00:10 +01:00
3fdad80b22 Update Helm release openbao to v0.25.6 2026-03-13 04:00:10 +01:00
865a98ed97 revamp readme 2026-03-13 04:00:10 +01:00
78a81c5b72 Add mmproj-url for Qwen3.5-35B-A3B-heretic model 2026-03-13 04:00:10 +01:00
2bb23c4ed0 add gemma-3-270m-it-qat model 2026-03-13 04:00:10 +01:00
8c29fc8018 Add Qwen3.5-35B-A3B-heretic models 2026-03-13 04:00:10 +01:00
2836542569 Add always loaded Qwen3-VL-2B-Instruct 2026-03-13 04:00:10 +01:00
1e68450d8a Add Qwen3.5-35-A3B model 2026-03-13 04:00:10 +01:00
0a57fdd22d update CoreDNS logging configuration to include all log classes 2026-03-13 04:00:10 +01:00
a0a7b85cc2 custom config of coredns to deny ipv6 huggingface 2026-03-13 04:00:10 +01:00
2c83eb26b3 automatically fit models by llama.cpp 2026-03-13 04:00:10 +01:00
ec038d7154 fix models mount 2026-03-13 04:00:10 +01:00
b61e3b5c08 add schema reference to config.yaml 2026-03-13 04:00:10 +01:00
59bf4a1aa6 configure llama-swap to log llama.cpp output 2026-03-13 04:00:10 +01:00
63a8e2f7ac add Qwen3-Coder-Next model 2026-03-13 04:00:10 +01:00
1ddef7951a update llama-swap image 2026-03-13 04:00:10 +01:00
b431b9c038 disable built in open-webui ingress 2026-03-13 04:00:10 +01:00
6b0c50b104 increase openwebui storage to 10Gi 2026-03-13 04:00:10 +01:00
9f55d67ffa migrate llama models to ssd 2026-03-13 04:00:10 +01:00
3ffadc8628 add ssd volume for llama models 2026-03-13 04:00:10 +01:00
a138171c2f add lvmpv ssd storage class 2026-03-13 04:00:10 +01:00
a986aea9ed add openwebui 2026-03-13 04:00:10 +01:00
3939bc9138 add workaround for cert-manager-webhook-ovh 2026-03-13 04:00:10 +01:00
d8c380ac7c remove configVersion from cert-manager-webhook-ovh 2026-03-13 04:00:10 +01:00
9d086645ad Update Helm release cloudnative-pg to v0.27.1 2026-03-13 04:00:10 +01:00
2cd866b33c Update renovate/renovate Docker tag to v43.31.1 2026-03-13 04:00:10 +01:00
b72d2d93d6 Update Helm release cilium to v1.19.1 2026-03-13 04:00:10 +01:00
8183285cc9 Update Helm release openbao to v0.25.5 2026-03-13 04:00:10 +01:00
514568ae40 Update Helm release cert-manager-webhook-ovh to v0.9.1 2026-03-13 04:00:09 +01:00
f4294de967 Update Helm release vault-secrets-operator to v1.3.0 2026-03-13 04:00:09 +01:00
ec0b479ef2 Update Helm release immich to v1.1.0 2026-03-13 04:00:09 +01:00
0ca2136333 change router's ip to ::1 2026-03-13 04:00:09 +01:00
726e61b54a update talos to 1.12.4 2026-03-13 04:00:09 +01:00
d0bd54cde9 remove mayastor related talos config 2026-03-13 04:00:09 +01:00
41d3629e8a clean up old mayastor config 2026-03-13 04:00:09 +01:00
0e756c46a8 disable loki and alloy 2026-03-13 04:00:09 +01:00
17f7ee8515 disable mayastor 2026-03-13 04:00:09 +01:00
596d54ae0c remove mayastor storageclass, snapshotclass 2026-03-13 04:00:09 +01:00
2290599f7e switch searxng persistent data to lvm hdd 2026-03-13 04:00:09 +01:00
a3f30873f9 switch llama models dir to lvm hdd 2026-03-13 04:00:09 +01:00
96e5202e6d add lvm hdd llama models pvc 2026-03-13 04:00:09 +01:00
8b51286a28 move openbao's data volume to lvm 2026-03-13 04:00:09 +01:00
d210a340a7 add lvm hdd openbao volume 2026-03-13 04:00:09 +01:00
93cd4605ad remove docker registry 2026-03-13 04:00:09 +01:00
664268dbfe clean up old library volume, postgres and redis 2026-03-13 04:00:09 +01:00
99d6c36e16 switch immich to new valkey 2026-03-13 04:00:09 +01:00
70ad1e0ab3 add redis authentication 2026-03-13 04:00:09 +01:00
9d3dc4a5a2 add immich valkey server 2026-03-13 04:00:09 +01:00
28d485b7b2 reconfigure immich to use new db 2026-03-13 04:00:09 +01:00
d7e3a77f73 add new postgres cluster 2026-03-13 04:00:09 +01:00
96cb5e53b1 migrate immich to new library pvc 2026-03-13 04:00:09 +01:00
0951b5173b add new immich library volume 2026-03-13 04:00:09 +01:00
acfebdef11 add explicit volume for gitea valkey 2026-03-13 04:00:09 +01:00
d7dd1f73fc migrate gitea shared storage to new volume 2026-03-13 04:00:09 +01:00
4c561cbcad add explicit gitea shared storage volume 2026-03-13 04:00:09 +01:00
976422c174 remove old postgres cluster 2026-03-13 04:00:09 +01:00
fe1d3ca12a migrate gitea to lvmhdd backed postgres 2026-03-13 04:00:09 +01:00
3144ccdb38 fix fsType on gitea postgres volume 2026-03-13 04:00:09 +01:00
ce8eb9ae13 fix storage class name on gitea postgres vol 2026-03-13 04:00:09 +01:00
673739e2c4 add btrfs extension 2026-03-13 04:00:09 +01:00
6bfc99d066 add browse-pvc krew plugin 2026-03-13 04:00:09 +01:00
a5d9082006 use separate kubeconfig 2026-03-13 04:00:09 +01:00
b20194bc13 Update redis Docker tag to v24.1.3 2026-03-13 04:00:09 +01:00
ecf1327f53 Update Helm release gitea to v12.5.0 2026-03-13 04:00:09 +01:00
038ffbf499 Update Helm release ingress-nginx to v4.14.3 2026-03-13 04:00:09 +01:00
985a0dc3b1 Update Helm release openbao to v0.25.0 2026-03-13 04:00:09 +01:00
e344ba26e8 Update registry.k8s.io/coredns/coredns Docker tag to v1.14.1 2026-03-13 04:00:09 +01:00
6ea969b44a Update alpine Docker tag to v3.23.3 2026-03-13 04:00:09 +01:00
f2ef3fdb6a Update Helm release immich to v1.0.12 2026-03-13 04:00:09 +01:00
08a09ecb9d Update renovate/renovate Docker tag to v43 2026-03-13 04:00:09 +01:00
00d8236ad8 Update Helm release cert-manager to v1.19.3 2026-03-13 04:00:09 +01:00
a06700fd53 add pv for new postgres' gitea cluster 2026-03-13 04:00:09 +01:00
4e60185ade add backup volume snapshot class for girea postgress 2026-03-13 04:00:09 +01:00
e5cadafd19 move frigate deployment to new pvcs 2026-03-13 04:00:09 +01:00
fe5ba29264 add temporary frigate volume to migrate data 2026-03-13 04:00:09 +01:00
b978c01af4 migrate from raw flake to devenv 2026-03-13 04:00:09 +01:00
547c7d9b11 enable ts3 after copying files 2026-03-13 04:00:09 +01:00
28fbd523aa add utility to run temporary pod with pvc mounted 2026-03-13 04:00:09 +01:00
3d58fb6724 add ispeak3 ts3 server 2026-03-13 04:00:09 +01:00
5fdc621bc9 add pv-migrate to tools 2026-03-13 04:00:09 +01:00
ee23d02ec4 delete old nas pvc and use new 2026-03-13 04:00:09 +01:00
e92150a5de add secondary nas volume 2026-03-13 04:00:09 +01:00
cc9c2bca52 add lvmpv-hdd storage class 2026-03-13 04:00:09 +01:00
61d43700e9 enable openebs lvm-localpv controller 2026-03-13 04:00:09 +01:00
13cc582c7b Update Helm release cilium to v1.18.6 2026-03-13 04:00:09 +01:00
24b600427e Update registry.k8s.io/coredns/coredns Docker tag to v1.13.2 2026-03-13 04:00:09 +01:00
45a6944776 Update renovate/renovate Docker tag to v42.84.1 2026-03-13 04:00:09 +01:00
9f29aa7251 Update Helm release immich to v1.0.9 2026-03-13 04:00:08 +01:00
77904beb30 Update alpine Docker tag to v3.23.2 2026-03-13 04:00:08 +01:00
3bec27a13d Update Helm release openebs to v4.4.0 2026-03-13 04:00:08 +01:00
6a64f6cb5a Update redis Docker tag to v24 2026-03-13 04:00:08 +01:00
2d28c3aa21 Update Helm release cert-manager to v1.19.2 2026-03-13 04:00:08 +01:00
8f13e38eae Update Helm release openbao to v0.23.3 2026-03-13 04:00:08 +01:00
928136e7bf Update Helm release ingress-nginx to v4.14.1 2026-03-13 04:00:08 +01:00
ea55bf43ea Update Helm release cloudnative-pg to v0.27.0 2026-03-13 04:00:08 +01:00
72020c9f77 Update Helm release vault-secrets-operator to v1.2.0 2026-03-13 04:00:08 +01:00
3714d5663c disable librechat release, it's using bitnami's mongodb 2026-03-13 04:00:08 +01:00
20b32f1ae0 Update renovate/renovate Docker tag to v42.84.0 2026-03-13 04:00:08 +01:00
a3c6f85d1c update immich 2026-03-13 04:00:08 +01:00
9032060930 add abliterated versions of qwen3-vl 2026-03-13 04:00:08 +01:00
95879f05d7 increase free space limit on frigate to 24h and enable two-way sync 2026-03-13 04:00:08 +01:00
f13c3ae3e7 Add 8B and 2B variants of qwen3-vl 2026-03-13 04:00:08 +01:00
669beccc35 fix Qwen3-VL-4B-Instruct-GGUF models looping issue 2026-03-13 04:00:08 +01:00
5eb7b7bb0c add qwen3-vl thinking variant 2026-03-13 04:00:08 +01:00
0b677d0faf add qwen3-vl, fix librechat taking over settings and clean up llama config 2026-03-13 04:00:08 +01:00
e3325670de fix cache location after llama-swap update 2026-03-13 04:00:08 +01:00
b9200d3a4c update llama-swap 2026-03-13 04:00:08 +01:00
00ba40d168 Update Helm release cilium to v1.18.4 2026-03-13 04:00:08 +01:00
d3e00bfbc2 Update Helm release cloudnative-pg to v0.26.1 2026-03-13 04:00:08 +01:00
1db1394c6a Update Helm release openbao to v0.19.2 2026-03-13 04:00:08 +01:00
7841f58b3d Update registry.k8s.io/coredns/coredns Docker tag to v1.13.1 2026-03-13 04:00:08 +01:00
a038f5aa8c Update Helm release immich to v1.0.6 2026-03-13 04:00:08 +01:00
9cefdefa75 Update Helm release ingress-nginx to v4.14.0 2026-03-13 04:00:08 +01:00
c116a30fe3 Update renovate/renovate Docker tag to v42 2026-03-13 04:00:08 +01:00
d1a95c6001 add nas deployment 2026-03-13 04:00:08 +01:00
8063cbaf80 update llama-swap docker image 2026-03-13 04:00:08 +01:00
77ebe2cc89 Update caddy Docker tag to v2.10.2 2026-03-13 04:00:08 +01:00
4d42cd2fd6 Update Helm release cert-manager to v1.19.1 2026-03-13 04:00:08 +01:00
1137079fb6 Update renovate/renovate Docker tag to v41.152.7 2026-03-13 04:00:08 +01:00
049641cc6b Update Helm release immich to v1 2026-03-13 04:00:08 +01:00
86cae7f8eb Update Helm release openbao to v0.19.0 2026-03-13 04:00:08 +01:00
ee3323fa05 Update Helm release vault-secrets-operator to v1 2026-03-13 04:00:08 +01:00
9ac289316c Update redis Docker tag to v23 2026-03-13 04:00:08 +01:00
f239b568c4 Update Helm release immich to v0.9.7 2026-03-13 04:00:08 +01:00
b073db7438 Update Helm release librechat to v1.9.1 2026-03-13 04:00:08 +01:00
f7e9d6ee5b Update Helm release openebs to v4.3.3 2026-03-13 04:00:08 +01:00
7af6905af2 Update registry.k8s.io/coredns/coredns Docker tag to v1.13.0 2026-03-13 04:00:08 +01:00
84d553daa7 Update Helm release ingress-nginx to v4.13.3 2026-03-13 04:00:08 +01:00
50066769cd Update Helm release k8up to v4.8.6 2026-03-13 04:00:08 +01:00
2863587fc1 Update Helm release cilium to v1.18.2 2026-03-13 04:00:08 +01:00
381aba63f1 fix cert-manager-webhook-ovh config after update 2026-03-13 04:00:08 +01:00
00f3188f01 update values to current values schema 2026-03-13 04:00:08 +01:00
0ae32844c4 Update Helm release cert-manager-webhook-ovh to v0.8.0 2026-03-13 04:00:07 +01:00
072d161be7 Update Helm release gitea to v12.4.0 2026-03-13 04:00:07 +01:00
9544f4719f Add Qwen2.5-VL models 2026-03-13 04:00:07 +01:00
d5e487f831 Update renovate/renovate Docker tag to v41.82.10 2026-03-13 04:00:07 +01:00
2c46e7789f remove ollama 2026-03-13 04:00:07 +01:00
a38363662c Update Helm release gitea to v12.2.0 2026-03-13 04:00:07 +01:00
36ab225f52 Update redis Docker tag to v22 2026-03-13 04:00:07 +01:00
4347ceebeb Update Helm release ingress-nginx to v4.13.1 2026-03-13 04:00:07 +01:00
b5d27092b8 Update Helm release immich to v0.7.5 2026-03-13 04:00:07 +01:00
2543b43592 Update Helm release openbao to v0.16.3 2026-03-13 04:00:07 +01:00
033214f219 Update Helm release cloudnative-pg to v0.26.0 2026-03-13 04:00:07 +01:00
6fb2cda000 Update Helm release cilium to v1.18.1 2026-03-13 04:00:07 +01:00
2056e3be5a increase frigate config volume to 5Gi 2026-03-13 04:00:07 +01:00
624aad4938 add searxng 2026-03-13 04:00:07 +01:00
eb4ac7acf4 add qwen3-4b-2507 model 2026-03-13 04:00:07 +01:00
f447bf86fc decreate mtu on anapistuala delrosalae to 1280, hack 2026-03-13 04:00:07 +01:00
5ad66355be disable gpu accel in frigate 2026-03-13 04:00:07 +01:00
8817f18aa3 remove old nginx ingress controller 2026-03-13 04:00:07 +01:00
4d16128b5d Revert "add cameras vlan"
This reverts commit 9269f21692.
2026-03-13 04:00:07 +01:00
60fafe2a91 move all ingresses to new nginx ingress 2026-03-13 04:00:07 +01:00
e87c1df74b update gitea to new ingress 2026-03-13 04:00:07 +01:00
e363113c5e add nginx-ingress 2026-03-13 04:00:07 +01:00
feaf805208 update llama-swap 2026-03-13 04:00:07 +01:00
52c868a8dd add cameras vlan 2026-03-13 04:00:07 +01:00
c47423632a Update Helm release immich to v0.7.2 2026-03-13 04:00:07 +01:00
bac36e4c94 Update renovate/renovate Docker tag to v41.51.0 2026-03-13 04:00:07 +01:00
4ea09d6cdc Update Helm release cilium to v1.18.0 2026-03-13 04:00:07 +01:00
355f05e733 Update Helm release ollama to v1.25.0 2026-03-13 04:00:07 +01:00
3f989984ab Update Helm release immich to v0.7.1 2026-03-13 04:00:07 +01:00
7dc2ae7d87 fix nginx disconnecting too fast 2026-03-13 04:00:07 +01:00
862b411ff1 fix api endpoint in librechat 2026-03-13 04:00:07 +01:00
f9a6c0faac fix image upload in librechat 2026-03-13 04:00:07 +01:00
bf2dd44081 change chart source and update librechat 2026-03-13 04:00:07 +01:00
151d3528fb increase immich uploads volume 2026-03-13 04:00:07 +01:00
8565fb57a2 allow websockets to immich 2026-03-13 04:00:07 +01:00
93855dc712 llama automatic unloading and longer start timeout 2026-03-13 04:00:07 +01:00
241dce4524 disable warmups 2026-03-13 04:00:07 +01:00
17805e6b31 add gemma3 model 2026-03-13 04:00:07 +01:00
4b0c2020b9 use immich chart provided ingress 2026-03-13 04:00:07 +01:00
c72d798549 Update Helm release cloudnative-pg to v0.25.0 2026-03-13 04:00:07 +01:00
41dc36a52a Update renovate/renovate Docker tag to v41.43.5 2026-03-13 04:00:07 +01:00
f9a1cedc7e Update Helm release immich to v0.7.0 2026-03-13 04:00:07 +01:00
9d26ccff04 install immich 2026-03-13 04:00:07 +01:00
6f3e612dde move llama models to ssd 2026-03-13 04:00:07 +01:00
853d01f4d4 add ssd 2026-03-13 04:00:07 +01:00
8e39dafe00 fix immich postgres cluster 2026-03-13 04:00:07 +01:00
224089fe16 redis for immich 2026-03-13 04:00:07 +01:00
0848057867 Update renovate/renovate Docker tag to v41.43.2 2026-03-13 04:00:07 +01:00
fd83f896ee add immich 2026-03-13 04:00:07 +01:00
32eea7c3af add gemma3n 2026-03-13 04:00:07 +01:00
de3ef465f0 add qwen3 no thinking 2026-03-13 04:00:07 +01:00
fc8860f89a increase context size 2026-03-13 04:00:07 +01:00
869cc79898 add qwen3 2026-03-13 04:00:07 +01:00
5813db75dc gpu offload in llama.cpp 2026-03-13 04:00:07 +01:00
f0dd38fc0b add llama.cpp to librechat 2026-03-13 04:00:07 +01:00
156598de64 Update Helm release ollama to v1.24.0 2026-03-13 04:00:07 +01:00
cad6d0a471 Update Helm release openbao to v0.16.2 2026-03-13 04:00:07 +01:00
e53623dbb5 Update renovate/renovate Docker tag to v41.42.9 2026-03-13 04:00:07 +01:00
8579ff451c Update Helm release cilium to v1.17.6 2026-03-13 04:00:07 +01:00
b892de6b34 Update Helm release nginx-ingress to v2.2.1 2026-03-13 04:00:07 +01:00
a922097081 Update Helm release gitea to v12.1.2 2026-03-13 04:00:07 +01:00
af6545444b llama-swap 2026-03-13 04:00:07 +01:00
a724b3c727 adjust motion masks 2026-03-13 04:00:07 +01:00
3d8bf2d195 introduce person mask 2026-03-13 04:00:07 +01:00
ae7ca9f40d Update renovate/renovate Docker tag to v41.23.1 2026-03-13 04:00:07 +01:00
3ca6365ca4 Update Helm release ollama to v1.23.0 2026-03-13 04:00:07 +01:00
fe6dffff0e Update Helm release cert-manager to v1.18.2 2026-03-13 04:00:07 +01:00
b9b490d2ba fix config validation error 2026-03-13 04:00:07 +01:00
4c5abfcd18 run renovate once daily 2026-03-13 04:00:07 +01:00
1b2ba62394 update nix flake 2026-03-13 04:00:07 +01:00
837b97b5be tune detection objects and retention 2026-03-13 04:00:07 +01:00
411797cb07 add motion mask on cameras 2026-03-13 04:00:07 +01:00
e769ce747c fix expanding volumes 2026-03-13 04:00:07 +01:00
b0c0e0a577 increase storage for recordings 2026-03-13 04:00:07 +01:00
cdf031527f enable audio in recordings frigate 2026-03-13 04:00:07 +01:00
39ec796a2e switch to openvino cpu detector 2026-03-13 04:00:07 +01:00
5190457aa1 enable hwaccel in frigate 2026-03-13 04:00:07 +01:00
c31f567d42 use go2rtc restream to remove need for two streams from camera 2026-03-13 04:00:07 +01:00
55d24aebb9 Configure frigate webrtc 2026-03-13 04:00:07 +01:00
5f558c447e enable ingress to frigate 2026-03-13 04:00:07 +01:00
3f119c515c add cameras to frigate 2026-03-13 04:00:07 +01:00
933929511e add frigate nvr 2026-03-13 04:00:07 +01:00
11409081fb Update Helm release cert-manager-webhook-ovh to v0.7.5 2026-03-13 04:00:07 +01:00
0bb0b21a6e Update Helm release cloudnative-pg to v0.24.0 2026-03-13 04:00:07 +01:00
97a322c5c9 Update Helm release ollama to v1.21.0 2026-03-13 04:00:06 +01:00
dd5b7a5156 fix openbao injector not starting 2026-03-13 04:00:06 +01:00
067cff0043 Update Helm release openbao to v0.16.1 2026-03-13 04:00:06 +01:00
515c0c58ae Update Helm release cert-manager to v1.18.1 2026-03-13 04:00:06 +01:00
bb54cebe28 Update renovate/renovate Docker tag to v41 2026-03-13 04:00:06 +01:00
1b3f5df139 fix openebs after update 2026-03-13 04:00:06 +01:00
4a9aa5ca9e Update Helm release openebs to v4.3.2 2026-03-13 04:00:06 +01:00
a9bb43be24 Update registry.k8s.io/coredns/coredns Docker tag to v1.12.2 2026-03-13 04:00:06 +01:00
ed5f74c237 Update Helm release gitea to v12.1.1 2026-03-13 04:00:06 +01:00
8202ee0d9f Update Helm release cilium to v1.17.5 2026-03-13 04:00:06 +01:00
9b6dfe4efb Update Helm release cilium to v1.17.4 2026-03-13 04:00:06 +01:00
05686a7913 Update renovate/renovate Docker tag to v40.14.3 2026-03-13 04:00:06 +01:00
76b44470b7 fix valkey persistence in gitea chart 2026-03-13 04:00:06 +01:00
1db42b409a rename mentions of redis to valkey in gitea 2026-03-13 04:00:06 +01:00
37bd3f615c Update Helm release gitea to v12 2026-03-13 04:00:06 +01:00
db5d67be37 Update Helm release ollama to v1.17.0 2026-03-13 04:00:06 +01:00
693d8c820e move ollama api key to valut 2026-03-13 04:00:06 +01:00
f670536eeb move ovh cert-manager secret to vault 2026-03-13 04:00:06 +01:00
8251d8088a move renovate gitea token to vault 2026-03-13 04:00:06 +01:00
c2e2e91931 move some settings of renovate to configmap 2026-03-13 04:00:06 +01:00
ae6dfee85e Update renovate/renovate Docker tag to v40.11.6 2026-03-13 04:00:06 +01:00
9cac367f07 add vault secret of gitea backups 2026-03-13 04:00:06 +01:00
45dfd864e0 add vault secrets operator 2026-03-13 04:00:06 +01:00
37fdc4e939 add external-secrets 2026-03-13 04:00:06 +01:00
84cba4378c Update Helm release ollama to v1.16.0 2026-03-13 04:00:06 +01:00
b45154cc47 Update Helm release cert-manager to v1.17.2 2026-03-13 04:00:06 +01:00
9802eb1bcb Update caddy Docker tag to v2.10.0 2026-03-13 04:00:06 +01:00
dabe3cf0bf Update Helm release librechat to v1.8.10 2026-03-13 04:00:06 +01:00
0e18758068 Update renovate/renovate Docker tag to v40 2026-03-13 04:00:06 +01:00
13de92656d pin cores to minimum frequency 2026-03-13 04:00:06 +01:00
29ad46ced9 add basedpyright and make it happy 2026-03-13 04:00:06 +01:00
7d389c0a8a use nix provided python as default interpreter 2026-03-13 04:00:06 +01:00
dc7f1cc42b synchronize kubernetes auth method in recoincile script 2026-03-13 04:00:06 +01:00
36b0b83b26 gitea switch to database from cloudnativepg 2026-03-13 04:00:06 +01:00
ec9f32f901 increase ollama proxy-read-timeout on ingress 2026-03-13 04:00:06 +01:00
a85d98b5d6 fix apps kustomization 2026-03-13 04:00:06 +01:00
c7c5056562 Update renovate/renovate Docker tag to v39.253.2 2026-03-13 04:00:06 +01:00
54d5dec257 Update Helm release cilium to v1.17.3 2026-03-13 04:00:06 +01:00
854e5fa7ae Update Helm release nginx-ingress to v2.1.0 2026-03-13 04:00:06 +01:00
6671f60bde Update Helm release openbao to v0.12.0 2026-03-13 04:00:06 +01:00
4bf7bce92b remove gpt-researcher 2026-03-13 04:00:06 +01:00
dec8b8361f use tavily and openrouter in gpt researcher 2026-03-13 04:00:00 +01:00
b45a0f9263 change models used by gpt-researcher 2026-03-13 03:59:13 +01:00
b4a883cff9 enable support for websockets for researcher 2026-03-13 03:59:13 +01:00
26a9f4a03d use our own image for gpt researcher 2026-03-13 03:59:13 +01:00
7c42307aa9 add docker registry 2026-03-13 03:59:13 +01:00
d26b5ff485 add gpt-researcher 2026-03-13 03:59:13 +01:00
faf3ecfa6d update network config 2026-03-13 03:59:13 +01:00
c1b8f2d9f3 increase ollama proxy timeout 2026-03-13 03:59:13 +01:00
883d705436 Update renovate/renovate Docker tag to v39.240.1 2026-03-13 03:59:13 +01:00
e96f17230a Update Helm release ollama to v1.14.0 2026-03-13 03:59:13 +01:00
c4d7311a25 Update registry.k8s.io/coredns/coredns Docker tag to v1.12.1 2026-03-13 03:59:13 +01:00
de886071eb Update Helm release community-operator to v0.13.0 2026-03-13 03:59:13 +01:00
b1d1197373 disable proxy bufferring in ollama ingress 2026-03-13 03:59:13 +01:00
35cd6cad03 deploy gitea postgres cluster 2026-03-13 03:59:13 +01:00
da9a61c086 Fix librechat kustomization typo 2026-03-13 03:59:13 +01:00
e64ef24f11 Split renovate deployment to files 2026-03-13 03:59:13 +01:00
52b0feec66 Split librechat deployment to files 2026-03-13 03:59:12 +01:00
9a9c1a45db split ollama deployment to files 2026-03-13 03:59:12 +01:00
8ad179c72f split gitea deployment to files 2026-03-13 03:59:12 +01:00
432d03772a Move gitea kustomization to subdir 2026-03-13 03:59:12 +01:00
59703c8d12 install cloudnativepg 2026-03-13 03:59:12 +01:00
88de916e22 Update renovate/renovate Docker tag to v39.233.3 2026-03-13 03:59:12 +01:00
db4e79e3e6 Update Helm release community-operator to v0.12.1 2026-03-13 03:59:12 +01:00
2c30aaed8c Update Helm release ollama to v1.13.0 2026-03-13 03:59:12 +01:00
be103c322c enable search in librechat 2026-03-13 03:59:12 +01:00
1c4b540fdb add ingress to librechat 2026-03-13 03:59:12 +01:00
535a70d85e Install librechat from different chart 2026-03-13 03:59:12 +01:00
1b6ba010fd Remove old librechat deployment 2026-03-13 03:59:12 +01:00
81fd0c6d08 Add librechat 2026-03-13 03:59:12 +01:00
af99a3566e Add mongodb database for librechat 2026-03-13 03:59:12 +01:00
1210865c54 Mongodb operator 2026-03-13 03:59:12 +01:00
f5bc134dcf Update renovate/renovate Docker tag to v39.221.0 2026-03-13 03:59:12 +01:00
0386244e10 vulkan support in ollama 2026-03-13 03:59:12 +01:00
7e4a5fd170 Disable flux network policy 2026-03-13 03:59:12 +01:00
de211a74c6 Update renovate/renovate Docker tag to v39.220.4 2026-03-13 03:59:12 +01:00
853f1b14a3 Update Helm release ollama to v1.12.0 2026-03-13 03:59:12 +01:00
465eb1cd5e Ollama proxy fix secret ref 2026-03-13 03:59:12 +01:00
5d0b6d1b99 add cert-manager annotation to ollama ingress 2026-03-13 03:59:12 +01:00
0ad763649b disable https for caddy 2026-03-13 03:59:12 +01:00
c5d4b70fd4 add ollama proxy and ingress 2026-03-13 03:59:12 +01:00
d918a548fd Update renovate/renovate Docker tag to v39.218.1 2026-03-13 03:59:12 +01:00
f832e58040 Update Helm release gitea to v11.0.1 2026-03-13 03:59:12 +01:00
f9d79ad402 add ollama deployment 2026-03-13 03:59:12 +01:00
461e2e0f01 Reapply "Merge pull request 'Update Helm release gitea to v11' (#9) from renovate/gitea-11.x into fresh-start"
This reverts commit d9a22723ef.
2026-03-13 03:59:12 +01:00
4a4e646b0a Revert "Merge pull request 'Update Helm release gitea to v11' (#9) from renovate/gitea-11.x into fresh-start"
This reverts commit f97a655ad5, reversing
changes made to f36ce88026.
2026-03-13 03:59:12 +01:00
4020b93dca Remove custom gitea tag from values 2026-03-13 03:59:12 +01:00
fb2d5cbcea Update Helm release gitea to v11 2026-03-13 03:59:12 +01:00
177bfa0d1a Update Helm release openebs to v4.2.0 2026-03-13 03:59:12 +01:00
066555c312 Update renovate/renovate Docker tag to v39.216.1 2026-03-13 03:59:12 +01:00
d2854403cd renovate improve yaml matching 2026-03-13 03:59:12 +01:00
0a715524fc Update Helm release openbao to v0.10.1 2026-03-13 03:59:12 +01:00
fb819fbd4a Update Helm release k8up to v4.8.4 2026-03-13 03:59:12 +01:00
d9a761c02a Update Helm release cert-manager to v1.17.1 2026-03-13 03:59:12 +01:00
61 changed files with 1474 additions and 103 deletions

1
.gitignore vendored
View File

@@ -10,3 +10,4 @@ devenv.local.yaml
# pre-commit
.pre-commit-config.yaml
.opencode

View File

@@ -2,6 +2,7 @@
"recommendations": [
"jnoortheen.nix-ide",
"detachhead.basedpyright",
"mkhl.direnv"
"mkhl.direnv",
"mermaidchart.vscode-mermaid-chart"
]
}

View File

@@ -1,3 +1,7 @@
SHELL := /usr/bin/env bash
.PHONY: install-router gen-talos-config apply-talos-config get-kubeconfig garm-image-build garm-image-push garm-image-build-push
install-router:
ansible-playbook ansible/playbook.yml -i ansible/hosts
@@ -23,3 +27,19 @@ apply-talos-config:
get-kubeconfig:
talosctl -n anapistula-delrosalae kubeconfig talos/generated/kubeconfig
garm-image-build:
set -euo pipefail; \
source apps/garm/image-source.env; \
docker build \
-f docker/garm/Dockerfile \
--build-arg GARM_COMMIT=$$GARM_COMMIT \
-t $$GARM_IMAGE \
.
garm-image-push:
set -euo pipefail; \
source apps/garm/image-source.env; \
docker push $$GARM_IMAGE
garm-image-build-push: garm-image-build garm-image-push

View File

@@ -0,0 +1,8 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespace.yaml
- postgres-volume.yaml
- postgres-cluster.yaml
- secret.yaml
- release.yaml

View File

@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: authentik

View File

@@ -0,0 +1,23 @@
---
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: authentik-postgresql-cluster-lvmhdd
namespace: authentik
spec:
instances: 1
imageName: ghcr.io/cloudnative-pg/postgresql:17.4
bootstrap:
initdb:
database: authentik
owner: authentik
storage:
pvcTemplate:
storageClassName: hdd-lvmpv
resources:
requests:
storage: 10Gi
volumeName: authentik-postgresql-cluster-lvmhdd-1

View File

@@ -0,0 +1,33 @@
apiVersion: local.openebs.io/v1alpha1
kind: LVMVolume
metadata:
labels:
kubernetes.io/nodename: anapistula-delrosalae
name: authentik-postgresql-cluster-lvmhdd-1
namespace: openebs
spec:
capacity: 10Gi
ownerNodeID: anapistula-delrosalae
shared: "yes"
thinProvision: "no"
vgPattern: ^openebs-hdd$
volGroup: openebs-hdd
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: authentik-postgresql-cluster-lvmhdd-1
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: hdd-lvmpv
volumeMode: Filesystem
csi:
driver: local.csi.openebs.io
fsType: btrfs
volumeHandle: authentik-postgresql-cluster-lvmhdd-1
---
# PVCs are dynamically created by the Postgres operator

View File

@@ -0,0 +1,61 @@
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: authentik
namespace: authentik
spec:
interval: 24h
url: https://charts.goauthentik.io
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: authentik
namespace: authentik
spec:
interval: 30m
chart:
spec:
chart: authentik
version: 2026.2.1
sourceRef:
kind: HelmRepository
name: authentik
namespace: authentik
interval: 12h
values:
authentik:
postgresql:
host: authentik-postgresql-cluster-lvmhdd-rw
name: authentik
user: authentik
global:
env:
- name: AUTHENTIK_SECRET_KEY
valueFrom:
secretKeyRef:
name: authentik-secret
key: secret_key
- name: AUTHENTIK_POSTGRESQL__PASSWORD
valueFrom:
secretKeyRef:
name: authentik-postgresql-cluster-lvmhdd-app
key: password
postgresql:
enabled: false
server:
ingress:
enabled: true
ingressClassName: nginx-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt
hosts:
- authentik.lumpiasty.xyz
tls:
- secretName: authentik-ingress
hosts:
- authentik.lumpiasty.xyz

View File

@@ -0,0 +1,38 @@
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: authentik-secret
namespace: authentik
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuth
metadata:
name: authentik
namespace: authentik
spec:
method: kubernetes
mount: kubernetes
kubernetes:
role: authentik
serviceAccount: authentik-secret
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
name: authentik-secret
namespace: authentik
spec:
type: kv-v2
mount: secret
path: authentik
destination:
create: true
name: authentik-secret
type: Opaque
transformation:
excludeRaw: true
vaultAuthRef: authentik

View File

@@ -0,0 +1,48 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: crawl4ai-proxy
namespace: crawl4ai
spec:
replicas: 1
selector:
matchLabels:
app: crawl4ai-proxy
template:
metadata:
labels:
app: crawl4ai-proxy
spec:
containers:
- name: crawl4ai-proxy
image: gitea.lumpiasty.xyz/lumpiasty/crawl4ai-proxy-fit:latest
imagePullPolicy: Always
env:
- name: LISTEN_PORT
value: "8000"
- name: CRAWL4AI_ENDPOINT
value: http://crawl4ai.crawl4ai.svc.cluster.local:11235/crawl
ports:
- name: http
containerPort: 8000
readinessProbe:
tcpSocket:
port: http
initialDelaySeconds: 3
periodSeconds: 10
timeoutSeconds: 2
failureThreshold: 6
livenessProbe:
tcpSocket:
port: http
initialDelaySeconds: 10
periodSeconds: 15
timeoutSeconds: 2
failureThreshold: 6
resources:
requests:
cpu: 25m
memory: 32Mi
limits:
cpu: 200m
memory: 128Mi

View File

@@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml

View File

@@ -0,0 +1,14 @@
apiVersion: v1
kind: Service
metadata:
name: crawl4ai-proxy
namespace: crawl4ai
spec:
type: ClusterIP
selector:
app: crawl4ai-proxy
ports:
- name: http
port: 8000
targetPort: 8000
protocol: TCP

View File

@@ -0,0 +1,62 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: crawl4ai
namespace: crawl4ai
spec:
replicas: 1
selector:
matchLabels:
app: crawl4ai
template:
metadata:
labels:
app: crawl4ai
spec:
containers:
- name: crawl4ai
image: unclecode/crawl4ai:latest
imagePullPolicy: IfNotPresent
env:
- name: CRAWL4AI_API_TOKEN
valueFrom:
secretKeyRef:
name: crawl4ai-secret
key: api_token
optional: false
- name: MAX_CONCURRENT_TASKS
value: "5"
ports:
- name: http
containerPort: 11235
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 3
failureThreshold: 6
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 30
periodSeconds: 15
timeoutSeconds: 3
failureThreshold: 6
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: "2"
memory: 4Gi
volumeMounts:
- name: dshm
mountPath: /dev/shm
volumes:
- name: dshm
emptyDir:
medium: Memory
sizeLimit: 1Gi

View File

@@ -0,0 +1,7 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespace.yaml
- secret.yaml
- deployment.yaml
- service.yaml

View File

@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: crawl4ai

38
apps/crawl4ai/secret.yaml Normal file
View File

@@ -0,0 +1,38 @@
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: crawl4ai-secret
namespace: crawl4ai
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuth
metadata:
name: crawl4ai
namespace: crawl4ai
spec:
method: kubernetes
mount: kubernetes
kubernetes:
role: crawl4ai
serviceAccount: crawl4ai-secret
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
name: crawl4ai-secret
namespace: crawl4ai
spec:
type: kv-v2
mount: secret
path: crawl4ai
destination:
create: true
name: crawl4ai-secret
type: Opaque
transformation:
excludeRaw: true
vaultAuthRef: crawl4ai

View File

@@ -0,0 +1,14 @@
apiVersion: v1
kind: Service
metadata:
name: crawl4ai
namespace: crawl4ai
spec:
type: ClusterIP
selector:
app: crawl4ai
ports:
- name: http
port: 11235
targetPort: 11235
protocol: TCP

49
apps/garm/README.md Normal file
View File

@@ -0,0 +1,49 @@
# garm
This app deploys `garm` with external `garm-provider-k8s`.
- API/UI ingress: `https://garm.lumpiasty.xyz`
- Internal service DNS: `http://garm.garm.svc.cluster.local:9997`
## Vault secret requirements
`VaultStaticSecret` reads `secret/data/garm` and expects at least:
- `jwt_auth_secret`
- `database_passphrase` (must be 32 characters)
## Connect garm to Gitea
After Flux reconciles this app, initialize garm and add Gitea endpoint/credentials.
```bash
# 1) Initialize garm (from your local devenv shell)
garm-cli init \
--name homelab \
--url https://garm.lumpiasty.xyz \
--username admin \
--email admin@lumpiasty.xyz \
--password '<STRONG_ADMIN_PASSWORD>' \
--metadata-url http://garm.garm.svc.cluster.local:9997/api/v1/metadata \
--callback-url http://garm.garm.svc.cluster.local:9997/api/v1/callbacks \
--webhook-url http://garm.garm.svc.cluster.local:9997/webhooks
# 2) Add Gitea endpoint
garm-cli gitea endpoint create \
--name local-gitea \
--description 'Cluster Gitea' \
--base-url http://gitea-http.gitea.svc.cluster.local:80 \
--api-base-url http://gitea-http.gitea.svc.cluster.local:80/api/v1
# 3) Add Gitea PAT credentials
garm-cli gitea credentials add \
--name gitea-pat \
--description 'PAT for garm' \
--endpoint local-gitea \
--auth-type pat \
--pat-oauth-token '<GITEA_PAT_WITH_write:repository,write:organization>'
```
Then add repositories/orgs and create pools against provider `kubernetes_external`.
If Gitea refuses webhook installation to cluster-local URLs, set `gitea.config.webhook.ALLOWED_HOST_LIST` in `apps/gitea/release.yaml`.

19
apps/garm/configmap.yaml Normal file
View File

@@ -0,0 +1,19 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: garm-provider-k8s-config
namespace: garm
data:
provider-config.yaml: |
kubeConfigPath: ""
runnerNamespace: "garm-runners"
podTemplate:
spec:
restartPolicy: Never
flavors:
default:
requests:
cpu: 100m
memory: 512Mi
limits:
memory: 2Gi

106
apps/garm/deployment.yaml Normal file
View File

@@ -0,0 +1,106 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: garm
namespace: garm
spec:
replicas: 1
selector:
matchLabels:
app: garm
template:
metadata:
labels:
app: garm
spec:
serviceAccountName: garm
initContainers:
- name: render-garm-config
image: alpine:3.23
env:
- name: JWT_AUTH_SECRET
valueFrom:
secretKeyRef:
name: garm-config
key: jwt_auth_secret
- name: DATABASE_PASSPHRASE
valueFrom:
secretKeyRef:
name: garm-config
key: database_passphrase
command:
- /bin/sh
- -ec
- |
cat <<EOF > /etc/garm/config.toml
[default]
enable_webhook_management = true
[logging]
enable_log_streamer = true
log_format = "text"
log_level = "info"
log_source = false
[metrics]
enable = true
disable_auth = false
[jwt_auth]
secret = "${JWT_AUTH_SECRET}"
time_to_live = "8760h"
[apiserver]
bind = "0.0.0.0"
port = 9997
use_tls = false
[apiserver.webui]
enable = true
[database]
backend = "sqlite3"
passphrase = "${DATABASE_PASSPHRASE}"
[database.sqlite3]
db_file = "/data/garm.db"
busy_timeout_seconds = 5
[[provider]]
name = "kubernetes_external"
description = "Kubernetes provider"
provider_type = "external"
[provider.external]
config_file = "/etc/garm/provider-config.yaml"
provider_executable = "/opt/garm/providers.d/garm-provider-k8s"
environment_variables = ["KUBERNETES_"]
EOF
volumeMounts:
- name: config-dir
mountPath: /etc/garm
containers:
- name: garm
image: gitea.lumpiasty.xyz/lumpiasty/garm-k8s:r1380
imagePullPolicy: IfNotPresent
command:
- /bin/garm
- --config
- /etc/garm/config.toml
ports:
- name: http
containerPort: 9997
volumeMounts:
- name: data
mountPath: /data
- name: config-dir
mountPath: /etc/garm
- name: provider-config
mountPath: /etc/garm/provider-config.yaml
subPath: provider-config.yaml
volumes:
- name: data
persistentVolumeClaim:
claimName: garm-lvmhdd
- name: config-dir
emptyDir: {}
- name: provider-config
configMap:
name: garm-provider-k8s-config

View File

@@ -0,0 +1,5 @@
# renovate: datasource=github-refs depName=cloudbase/garm versioning=git
GARM_COMMIT=818a9dddccba5f2843f185e6a846770988f31fc5
GARM_COMMIT_NUMBER=1380
GARM_IMAGE_REPO=gitea.lumpiasty.xyz/lumpiasty/garm-k8s
GARM_IMAGE=gitea.lumpiasty.xyz/lumpiasty/garm-k8s:r1380

24
apps/garm/ingress.yaml Normal file
View File

@@ -0,0 +1,24 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: garm
name: garm
annotations:
cert-manager.io/cluster-issuer: letsencrypt
spec:
ingressClassName: nginx-ingress
rules:
- host: garm.lumpiasty.xyz
http:
paths:
- backend:
service:
name: garm
port:
number: 9997
path: /
pathType: Prefix
tls:
- hosts:
- garm.lumpiasty.xyz
secretName: garm-ingress

View File

@@ -0,0 +1,11 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespace.yaml
- pvc.yaml
- configmap.yaml
- service.yaml
- ingress.yaml
- rbac.yaml
- secret.yaml
- deployment.yaml

9
apps/garm/namespace.yaml Normal file
View File

@@ -0,0 +1,9 @@
apiVersion: v1
kind: Namespace
metadata:
name: garm
---
apiVersion: v1
kind: Namespace
metadata:
name: garm-runners

46
apps/garm/pvc.yaml Normal file
View File

@@ -0,0 +1,46 @@
---
apiVersion: local.openebs.io/v1alpha1
kind: LVMVolume
metadata:
labels:
kubernetes.io/nodename: anapistula-delrosalae
name: garm-lvmhdd
namespace: openebs
spec:
capacity: 5Gi
ownerNodeID: anapistula-delrosalae
shared: "yes"
thinProvision: "no"
vgPattern: ^openebs-hdd$
volGroup: openebs-hdd
---
kind: PersistentVolume
apiVersion: v1
metadata:
name: garm-lvmhdd
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: hdd-lvmpv
volumeMode: Filesystem
csi:
driver: local.csi.openebs.io
fsType: btrfs
volumeHandle: garm-lvmhdd
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: garm-lvmhdd
namespace: garm
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: hdd-lvmpv
volumeName: garm-lvmhdd

51
apps/garm/rbac.yaml Normal file
View File

@@ -0,0 +1,51 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: garm
namespace: garm
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: garm-provider-k8s
namespace: garm-runners
rules:
- apiGroups: [""]
resources: ["pods", "pods/log", "configmaps", "secrets", "events"]
verbs: ["create", "delete", "get", "list", "patch", "update", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: garm-provider-k8s
namespace: garm-runners
subjects:
- kind: ServiceAccount
name: garm
namespace: garm
roleRef:
kind: Role
name: garm-provider-k8s
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: garm-namespace-manager
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: garm-namespace-manager
subjects:
- kind: ServiceAccount
name: garm
namespace: garm
roleRef:
kind: ClusterRole
name: garm-namespace-manager
apiGroup: rbac.authorization.k8s.io

32
apps/garm/secret.yaml Normal file
View File

@@ -0,0 +1,32 @@
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuth
metadata:
name: garm
namespace: garm
spec:
method: kubernetes
mount: kubernetes
kubernetes:
role: garm
serviceAccount: garm
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
name: garm-config
namespace: garm
spec:
type: kv-v2
mount: secret
path: garm
destination:
create: true
name: garm-config
type: Opaque
transformation:
excludeRaw: true
vaultAuthRef: garm

14
apps/garm/service.yaml Normal file
View File

@@ -0,0 +1,14 @@
apiVersion: v1
kind: Service
metadata:
name: garm
namespace: garm
spec:
type: ClusterIP
selector:
app: garm
ports:
- name: http
port: 9997
targetPort: 9997
protocol: TCP

View File

@@ -72,6 +72,8 @@ spec:
indexer:
ISSUE_INDEXER_TYPE: bleve
REPO_INDEXER_ENABLED: true
webhook:
ALLOWED_HOST_LIST: garm.garm.svc.cluster.local
admin:
username: GiteaAdmin
email: gi@tea.com
@@ -88,6 +90,11 @@ spec:
# Requirement for sharing ip with other service
externalTrafficPolicy: Cluster
ipFamilyPolicy: RequireDualStack
http:
type: ClusterIP
# We need the service to be at port 80 specifically
# to work around bug of Actions Runner
port: 80
ingress:
enabled: true
@@ -95,7 +102,7 @@ spec:
annotations:
cert-manager.io/cluster-issuer: letsencrypt
acme.cert-manager.io/http01-edit-in-place: "true"
nginx.ingress.kubernetes.io/proxy-body-size: "100m"
nginx.ingress.kubernetes.io/proxy-body-size: "1g"
hosts:
- host: gitea.lumpiasty.xyz
paths:

View File

@@ -18,7 +18,7 @@ spec:
chart:
spec:
chart: immich
version: 1.1.1
version: 1.2.2
sourceRef:
kind: HelmRepository
name: secustor

View File

@@ -1,6 +1,9 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- crawl4ai
- crawl4ai-proxy
- authentik
- gitea
- renovate
- librechat
@@ -11,3 +14,4 @@ resources:
- searxng
- ispeak3
- openwebui
- garm

View File

@@ -4,12 +4,16 @@ logToStdout: "both" # proxy and upstream
macros:
base_args: "--no-warmup --port ${PORT}"
common_args: "--fit-target 1536 --fit-ctx 65536 --no-warmup --port ${PORT}"
common_args: "--fit-target 1536 --no-warmup --port ${PORT}"
gemma3_ctx_128k: "--ctx-size 131072"
qwen35_ctx_128k: "--ctx-size 131072"
qwen35_ctx_256k: "--ctx-size 262144"
gemma_sampling: "--prio 2 --temp 1.0 --repeat-penalty 1.0 --min-p 0.00 --top-k 64 --top-p 0.95"
qwen35_sampling: "--temp 0.6 --top-p 0.95 --top-k 20 --min-p 0.00 -ctk q4_0 -ctv q4_0"
qwen35_35b_args: "--temp 1.0 --min-p 0.00 --top-p 0.95 --top-k 20 -ctk q4_0 -ctv q4_0"
qwen35_sampling: "--temp 0.6 --top-p 0.95 --top-k 20 --min-p 0.00 -ctk q8_0 -ctv q8_0"
qwen35_35b_args: "--temp 1.0 --min-p 0.00 --top-p 0.95 --top-k 20 -ctk q8_0 -ctv q8_0"
qwen35_35b_heretic_mmproj: "--mmproj-url https://huggingface.co/unsloth/Qwen3.5-35B-A3B-GGUF/resolve/main/mmproj-F16.gguf --mmproj /root/.cache/llama.cpp/unsloth_Qwen3.5-35B-A3B-GGUF_mmproj-F16.gguf"
qwen35_4b_heretic_mmproj: "--mmproj-url https://huggingface.co/unsloth/Qwen3.5-4B-GGUF/resolve/main/mmproj-F16.gguf --mmproj /root/.cache/llama.cpp/unsloth_Qwen3.5-4B-GGUF_mmproj-F16.gguf"
glm47_flash_args: "--temp 0.7 --top-p 1.0 --min-p 0.01 --repeat-penalty 1.0"
thinking_on: "--chat-template-kwargs '{\"enable_thinking\": true}'"
thinking_off: "--chat-template-kwargs '{\"enable_thinking\": false}'"
@@ -38,6 +42,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/gemma-3-12b-it-GGUF:Q4_K_M
${gemma3_ctx_128k}
${gemma_sampling}
${common_args}
@@ -45,6 +50,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/gemma-3-12b-it-GGUF:Q4_K_M
${gemma3_ctx_128k}
${gemma_sampling}
--no-mmproj
${common_args}
@@ -53,6 +59,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/gemma-3-4b-it-GGUF:Q4_K_M
${gemma3_ctx_128k}
${gemma_sampling}
${common_args}
@@ -60,6 +67,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/gemma-3-4b-it-GGUF:Q4_K_M
${gemma3_ctx_128k}
${gemma_sampling}
--no-mmproj
${common_args}
@@ -75,13 +83,14 @@ models:
--top-p 0.95
--top-k 40
--repeat-penalty 1.0
-ctk q4_0 -ctv q4_0
-ctk q8_0 -ctv q8_0
${common_args}
"Qwen3.5-35B-A3B-GGUF:Q4_K_M":
cmd: |
/app/llama-server
-hf unsloth/Qwen3.5-35B-A3B-GGUF:Q4_K_M
${qwen35_ctx_256k}
${qwen35_35b_args}
${common_args}
@@ -89,6 +98,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/Qwen3.5-35B-A3B-GGUF:Q4_K_M
${qwen35_ctx_256k}
${qwen35_35b_args}
${common_args}
${thinking_off}
@@ -100,6 +110,7 @@ models:
/app/llama-server
-hf mradermacher/Qwen3.5-35B-A3B-heretic-GGUF:Q4_K_M
${qwen35_35b_heretic_mmproj}
${qwen35_ctx_256k}
${qwen35_35b_args}
${common_args}
@@ -108,6 +119,7 @@ models:
/app/llama-server
-hf mradermacher/Qwen3.5-35B-A3B-heretic-GGUF:Q4_K_M
${qwen35_35b_heretic_mmproj}
${qwen35_ctx_256k}
${qwen35_35b_args}
${common_args}
${thinking_off}
@@ -116,6 +128,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/Qwen3.5-0.8B-GGUF:Q4_K_XL
${qwen35_ctx_256k}
${qwen35_sampling}
${base_args}
${thinking_on}
@@ -133,6 +146,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/Qwen3.5-2B-GGUF:Q4_K_M
${qwen35_ctx_256k}
${qwen35_sampling}
${common_args}
${thinking_on}
@@ -141,6 +155,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/Qwen3.5-2B-GGUF:Q4_K_M
${qwen35_ctx_256k}
${qwen35_sampling}
${common_args}
${thinking_off}
@@ -149,6 +164,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/Qwen3.5-4B-GGUF:Q4_K_M
${qwen35_ctx_128k}
${qwen35_sampling}
${common_args}
${thinking_on}
@@ -157,6 +173,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/Qwen3.5-4B-GGUF:Q4_K_M
${qwen35_ctx_128k}
${qwen35_sampling}
${common_args}
${thinking_off}
@@ -166,6 +183,7 @@ models:
/app/llama-server
-hf mradermacher/Qwen3.5-4B-heretic-GGUF:Q4_K_M
${qwen35_4b_heretic_mmproj}
${qwen35_ctx_128k}
${qwen35_sampling}
${common_args}
${thinking_on}
@@ -175,6 +193,7 @@ models:
/app/llama-server
-hf mradermacher/Qwen3.5-4B-heretic-GGUF:Q4_K_M
${qwen35_4b_heretic_mmproj}
${qwen35_ctx_128k}
${qwen35_sampling}
${common_args}
${thinking_off}
@@ -183,6 +202,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/Qwen3.5-9B-GGUF:Q4_K_M
${qwen35_ctx_256k}
${qwen35_sampling}
${common_args}
${thinking_on}
@@ -191,6 +211,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/Qwen3.5-9B-GGUF:Q4_K_M
${qwen35_ctx_256k}
${qwen35_sampling}
${common_args}
${thinking_off}
@@ -199,6 +220,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/Qwen3.5-9B-GGUF:Q3_K_M
${qwen35_ctx_256k}
${qwen35_sampling}
${common_args}
${thinking_on}
@@ -207,6 +229,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/Qwen3.5-9B-GGUF:Q3_K_M
${qwen35_ctx_256k}
${qwen35_sampling}
${common_args}
${thinking_off}
@@ -215,6 +238,7 @@ models:
cmd: |
/app/llama-server
-hf unsloth/Qwen3.5-27B-GGUF:Q3_K_M
${qwen35_ctx_256k}
${qwen35_sampling}
${common_args}
${thinking_on}
@@ -223,6 +247,14 @@ models:
cmd: |
/app/llama-server
-hf unsloth/Qwen3.5-27B-GGUF:Q3_K_M
${qwen35_ctx_256k}
${qwen35_sampling}
${common_args}
${thinking_off}
"GLM-4.7-Flash-GGUF:Q4_K_M":
cmd: |
/app/llama-server
-hf unsloth/GLM-4.7-Flash-GGUF:Q4_K_M
${glm47_flash_args}
${common_args}

View File

@@ -18,7 +18,7 @@ spec:
spec:
containers:
- name: llama-swap
image: ghcr.io/mostlygeek/llama-swap:v197-vulkan-b8248
image: ghcr.io/mostlygeek/llama-swap:v199-vulkan-b8576
imagePullPolicy: IfNotPresent
command:
- /app/llama-swap

View File

@@ -4,5 +4,6 @@ resources:
- namespace.yaml
- pvc.yaml
- pvc-pipelines.yaml
- secret.yaml
- release.yaml
- ingress.yaml

View File

@@ -18,7 +18,7 @@ spec:
chart:
spec:
chart: open-webui
version: 12.10.0
version: 12.13.0
sourceRef:
kind: HelmRepository
name: open-webui
@@ -44,3 +44,30 @@ spec:
persistence:
enabled: true
existingClaim: openwebui-pipelines-lvmhdd
# SSO with Authentik
extraEnvVars:
- name: WEBUI_URL
value: "https://openwebui.lumpiasty.xyz"
- name: OAUTH_CLIENT_ID
valueFrom:
secretKeyRef:
name: openwebui-authentik
key: client_id
- name: OAUTH_CLIENT_SECRET
valueFrom:
secretKeyRef:
name: openwebui-authentik
key: client_secret
- name: OAUTH_PROVIDER_NAME
value: "authentik"
- name: OPENID_PROVIDER_URL
value: "https://authentik.lumpiasty.xyz/application/o/open-web-ui/.well-known/openid-configuration"
- name: OPENID_REDIRECT_URI
value: "https://openwebui.lumpiasty.xyz/oauth/oidc/callback"
- name: ENABLE_OAUTH_SIGNUP
value: "true"
- name: ENABLE_LOGIN_FORM
value: "false"
- name: OAUTH_MERGE_ACCOUNTS_BY_EMAIL
value: "true"

View File

@@ -0,0 +1,43 @@
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: openwebui-secret
namespace: openwebui
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultAuth
metadata:
name: openwebui
namespace: openwebui
spec:
method: kubernetes
mount: kubernetes
kubernetes:
role: openwebui
serviceAccount: openwebui-secret
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
name: openwebui-authentik
namespace: openwebui
spec:
type: kv-v2
mount: secret
path: authentik/openwebui
destination:
create: true
name: openwebui-authentik
type: Opaque
transformation:
excludeRaw: true
templates:
client_id:
text: '{{ get .Secrets "client_id" }}'
client_secret:
text: '{{ get .Secrets "client_secret" }}'
vaultAuthRef: openwebui

View File

@@ -9,3 +9,4 @@ data:
RENOVATE_ENDPOINT: https://gitea.lumpiasty.xyz/api/v1
RENOVATE_PLATFORM: gitea
RENOVATE_GIT_AUTHOR: Renovate Bot <renovate@lumpiasty.xyz>
RENOVATE_ALLOWED_COMMANDS: '["^node utils/update-garm-cli-hash\\.mjs$", "^node utils/update-garm-image-pin\\.mjs$"]'

View File

@@ -15,7 +15,7 @@ spec:
- name: renovate
# Update this to the latest available and then enable Renovate on
# the manifest
image: renovate/renovate:43.64.6-full
image: renovate/renovate:43.95.0-full
envFrom:
- secretRef:
name: renovate-gitea-token

View File

@@ -3,10 +3,11 @@
"devenv": {
"locked": {
"dir": "src/modules",
"lastModified": 1769881431,
"lastModified": 1773504385,
"narHash": "sha256-ANaeR+xVHxjGz36VI4qlZUbdhrlSE0xU7O7AUJKw3zU=",
"owner": "cachix",
"repo": "devenv",
"rev": "72d5e66e2dd5112766ef4c9565872b51094b542d",
"rev": "4bce49e6f60c69e99eeb643efbbf74125cefd329",
"type": "github"
},
"original": {
@@ -16,27 +17,13 @@
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
@@ -48,47 +35,6 @@
"type": "github"
}
},
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1769069492,
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "a1ef738813b15cf8ec759bdff5761b027e3e1d23",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1762808025,
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "cb5e3fdca1de58ccbc3ef53de65bd372b48f567c",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"krew2nix": {
"inputs": {
"flake-utils": "flake-utils",
@@ -99,10 +45,11 @@
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1769904483,
"lastModified": 1773451905,
"narHash": "sha256-S/bukFEwbOYQbnR5UpciwYA42aEt1w5LK73GwARhsaA=",
"owner": "a1994sc",
"repo": "krew2nix",
"rev": "17d6ad3375899bd3f7d4d298481536155f3ec13c",
"rev": "bc779a8cf59ebf76ae60556bfe2d781a0a4cdbd9",
"type": "github"
},
"original": {
@@ -113,10 +60,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1769461804,
"lastModified": 1773389992,
"narHash": "sha256-wvfdLLWJ2I9oEpDd9PfMA8osfIZicoQ5MT1jIwNs9Tk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "bfc1b8a4574108ceef22f02bafcf6611380c100d",
"rev": "c06b4ae3d6599a672a6210b7021d699c351eebda",
"type": "github"
},
"original": {
@@ -129,17 +77,14 @@
"root": {
"inputs": {
"devenv": "devenv",
"git-hooks": "git-hooks",
"krew2nix": "krew2nix",
"nixpkgs": "nixpkgs",
"pre-commit-hooks": [
"git-hooks"
]
"nixpkgs": "nixpkgs"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
@@ -154,6 +99,7 @@
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
@@ -173,10 +119,11 @@
]
},
"locked": {
"lastModified": 1769691507,
"lastModified": 1773297127,
"narHash": "sha256-6E/yhXP7Oy/NbXtf1ktzmU8SdVqJQ09HC/48ebEGBpk=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "28b19c5844cc6e2257801d43f2772a4b4c050a1b",
"rev": "71b125cd05fbfd78cab3e070b73544abe24c5016",
"type": "github"
},
"original": {
@@ -188,4 +135,4 @@
},
"root": "root",
"version": 7
}
}

View File

@@ -6,6 +6,8 @@ let
hvac
librouteros
]);
garm-cli = pkgs.callPackage ./nix/garm-cli.nix { };
in
{
# Overlays - apply krew2nix to get kubectl with krew support
@@ -41,6 +43,9 @@ in
openbao
pv-migrate
mermaid-cli
opencode
garm-cli
tea
];
# Scripts

28
docker/garm/Dockerfile Normal file
View File

@@ -0,0 +1,28 @@
FROM golang:1.26-alpine AS build
ARG GARM_COMMIT
ARG GARM_PROVIDER_K8S_VERSION=0.3.2
RUN apk add --no-cache ca-certificates git wget tar build-base util-linux-dev linux-headers
WORKDIR /src
RUN git clone https://github.com/cloudbase/garm.git . && git checkout "${GARM_COMMIT}"
RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 \
go build -trimpath \
-tags osusergo,netgo,sqlite_omit_load_extension \
-ldflags="-linkmode external -extldflags '-static' -s -w" \
-o /out/garm ./cmd/garm
RUN mkdir -p /out/providers.d \
&& wget -qO /tmp/garm-provider-k8s.tar.gz "https://github.com/mercedes-benz/garm-provider-k8s/releases/download/v${GARM_PROVIDER_K8S_VERSION}/garm-provider-k8s_Linux_x86_64.tar.gz" \
&& tar -xzf /tmp/garm-provider-k8s.tar.gz -C /out/providers.d \
&& chmod 0755 /out/providers.d/garm-provider-k8s
FROM busybox
COPY --from=build /out/garm /bin/garm
COPY --from=build /out/providers.d/garm-provider-k8s /opt/garm/providers.d/garm-provider-k8s
COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
ENTRYPOINT ["/bin/garm"]

View File

@@ -18,7 +18,7 @@ spec:
chart:
spec:
chart: cert-manager-webhook-ovh
version: 0.9.4
version: 0.9.5
sourceRef:
kind: HelmRepository
name: cert-manager-webhook-ovh

View File

@@ -23,7 +23,7 @@ spec:
chart:
spec:
chart: cert-manager
version: v1.20.0
version: v1.20.1
sourceRef:
kind: HelmRepository
name: cert-manager

View File

@@ -23,7 +23,7 @@ spec:
chart:
spec:
chart: cilium
version: 1.19.1
version: 1.19.2
sourceRef:
kind: HelmRepository
name: cilium

View File

@@ -23,7 +23,7 @@ spec:
chart:
spec:
chart: cloudnative-pg
version: 0.27.1
version: 0.28.0
sourceRef:
kind: HelmRepository
name: cnpg

View File

@@ -23,7 +23,7 @@ spec:
chart:
spec:
chart: k8up
version: 4.8.6
version: 4.9.0
sourceRef:
kind: HelmRepository
name: k8up-io

View File

@@ -23,7 +23,7 @@ spec:
chart:
spec:
chart: ingress-nginx
version: 4.15.0
version: 4.15.1
sourceRef:
kind: HelmRepository
name: ingress-nginx

View File

@@ -23,7 +23,7 @@ spec:
chart:
spec:
chart: openbao
version: 0.25.7
version: 0.26.2
sourceRef:
kind: HelmRepository
name: openbao

View File

@@ -1,16 +0,0 @@
---
apiVersion: v1
kind: Secret
metadata:
name: tavily
namespace: gpt-researcher
stringData:
TAVILY_API_KEY: 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
---
apiVersion: v1
kind: Secret
metadata:
name: openrouter
namespace: gpt-researcher
stringData:
OPENROUTER_API_KEY: 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

45
nix/garm-cli.nix Normal file
View File

@@ -0,0 +1,45 @@
{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
buildGoModule rec {
pname = "garm-cli";
version = "r1380";
garmCommit = "818a9dddccba5f2843f185e6a846770988f31fc5";
src = fetchFromGitHub {
owner = "cloudbase";
repo = "garm";
rev = garmCommit;
hash = "sha256-CTqqabNYUMSrmnQVCWml1/vkDw+OP1uJo1KFhBSZpYY=";
};
subPackages = [ "cmd/garm-cli" ];
nativeBuildInputs = [ installShellFiles ];
vendorHash = null;
ldflags = [
"-s"
"-w"
"-X main.version=${version}"
];
postInstall = ''
# We need to set a temporary HOME for the completion scripts as workaround
# because garm-cli tries to write config to the home directory
# when generating the completion scripts
export HOME="$(mktemp -d)"
installShellCompletion --cmd garm-cli \
--bash <($out/bin/garm-cli completion bash) \
--fish <($out/bin/garm-cli completion fish) \
--zsh <($out/bin/garm-cli completion zsh)
'';
meta = {
description = "CLI for GitHub Actions Runner Manager";
homepage = "https://github.com/cloudbase/garm";
license = lib.licenses.asl20;
mainProgram = "garm-cli";
};
}

View File

@@ -10,8 +10,57 @@
"gotk-components\\.ya?ml$"
]
},
"customManagers": [
{
"customType": "regex",
"description": "Track garm-cli pinned main commit",
"managerFilePatterns": ["^nix/garm-cli\\.nix$"],
"matchStrings": ["garmCommit = \\\"(?<currentValue>[a-f0-9]{40})\\\";"],
"depNameTemplate": "cloudbase/garm",
"datasourceTemplate": "github-refs",
"versioningTemplate": "git"
},
{
"customType": "regex",
"description": "Track garm-provider-k8s release in garm image Dockerfile",
"managerFilePatterns": ["^docker/garm/Dockerfile$"],
"matchStrings": ["ARG GARM_PROVIDER_K8S_VERSION=(?<currentValue>[0-9]+\\.[0-9]+\\.[0-9]+)"],
"depNameTemplate": "mercedes-benz/garm-provider-k8s",
"datasourceTemplate": "github-releases",
"versioningTemplate": "semver"
},
{
"customType": "regex",
"description": "Track pinned garm main commit",
"managerFilePatterns": ["^apps/garm/image-source\\.env$"],
"matchStrings": ["GARM_COMMIT=(?<currentValue>[a-f0-9]{40})"],
"depNameTemplate": "cloudbase/garm",
"datasourceTemplate": "github-refs",
"versioningTemplate": "git"
}
],
"prHourlyLimit": 9,
"packageRules": [
{
"matchManagers": ["custom.regex"],
"matchDepNames": ["cloudbase/garm"],
"matchFileNames": ["nix/garm-cli.nix"],
"postUpgradeTasks": {
"commands": ["node utils/update-garm-cli-hash.mjs"],
"fileFilters": ["nix/garm-cli.nix"],
"executionMode": "update"
}
},
{
"matchManagers": ["custom.regex"],
"matchDepNames": ["cloudbase/garm"],
"matchFileNames": ["apps/garm/image-source.env"],
"postUpgradeTasks": {
"commands": ["node utils/update-garm-image-pin.mjs"],
"fileFilters": ["apps/garm/image-source.env", "apps/garm/deployment.yaml"],
"executionMode": "update"
}
},
{
"matchDatasources": ["docker"],
"matchPackageNames": ["ghcr.io/mostlygeek/llama-swap"],

View File

@@ -0,0 +1,320 @@
import { createHash } from "node:crypto";
import { Buffer } from "node:buffer";
import fs from "node:fs";
import https from "node:https";
import zlib from "node:zlib";
const nixFile = "nix/garm-cli.nix";
function die(message) {
console.error(message);
process.exit(1);
}
function readText(filePath) {
try {
return fs.readFileSync(filePath, "utf8");
} catch {
die(`Missing ${filePath}`);
}
}
function extractVersion(text) {
const match = text.match(/^\s*version\s*=\s*"([^"]+)";/m);
if (!match) {
die(`Unable to extract version from ${nixFile}`);
}
return match[1];
}
function extractCommit(text) {
const match = text.match(/^\s*garmCommit\s*=\s*"([a-f0-9]{40})";/m);
return match ? match[1] : null;
}
function writeU64LE(hash, value) {
const buf = Buffer.alloc(8);
buf.writeBigUInt64LE(BigInt(value), 0);
hash.update(buf);
}
function writeNarString(hash, data) {
writeU64LE(hash, data.length);
hash.update(data);
const pad = (8 - (data.length % 8)) % 8;
if (pad) {
hash.update(Buffer.alloc(pad));
}
}
function writeNarText(hash, text) {
writeNarString(hash, Buffer.from(text, "utf8"));
}
function parseOctal(field) {
const clean = field.toString("ascii").replace(/\0.*$/, "").trim();
if (!clean) {
return 0;
}
return Number.parseInt(clean, 8);
}
function parseTarHeader(block) {
const name = block.subarray(0, 100).toString("utf8").replace(/\0.*$/, "");
const mode = parseOctal(block.subarray(100, 108));
const size = parseOctal(block.subarray(124, 136));
const typeflagRaw = block[156];
const typeflag = typeflagRaw === 0 ? "0" : String.fromCharCode(typeflagRaw);
const linkname = block.subarray(157, 257).toString("utf8").replace(/\0.*$/, "");
const prefix = block.subarray(345, 500).toString("utf8").replace(/\0.*$/, "");
return {
name: prefix ? `${prefix}/${name}` : name,
mode,
size,
typeflag,
linkname,
};
}
function parsePax(data) {
const out = {};
let i = 0;
while (i < data.length) {
let sp = i;
while (sp < data.length && data[sp] !== 0x20) sp += 1;
if (sp >= data.length) break;
const len = Number.parseInt(data.subarray(i, sp).toString("utf8"), 10);
if (!Number.isFinite(len) || len <= 0) break;
const record = data.subarray(sp + 1, i + len).toString("utf8");
const eq = record.indexOf("=");
if (eq > 0) {
const key = record.slice(0, eq);
const value = record.slice(eq + 1).replace(/\n$/, "");
out[key] = value;
}
i += len;
}
return out;
}
function parseTarEntries(archiveBuffer) {
const gz = zlib.gunzipSync(archiveBuffer);
const entries = [];
let i = 0;
let pendingPax = null;
let longName = null;
let longLink = null;
while (i + 512 <= gz.length) {
const header = gz.subarray(i, i + 512);
i += 512;
if (header.every((b) => b === 0)) {
break;
}
const h = parseTarHeader(header);
const data = gz.subarray(i, i + h.size);
const dataPad = (512 - (h.size % 512)) % 512;
i += h.size + dataPad;
if (h.typeflag === "x") {
pendingPax = parsePax(data);
continue;
}
if (h.typeflag === "g") {
continue;
}
if (h.typeflag === "L") {
longName = data.toString("utf8").replace(/\0.*$/, "");
continue;
}
if (h.typeflag === "K") {
longLink = data.toString("utf8").replace(/\0.*$/, "");
continue;
}
const path = pendingPax?.path ?? longName ?? h.name;
const linkpath = pendingPax?.linkpath ?? longLink ?? h.linkname;
entries.push({
path,
typeflag: h.typeflag,
mode: h.mode,
linkname: linkpath,
data,
});
pendingPax = null;
longName = null;
longLink = null;
}
return entries;
}
function stripTopDir(path) {
const cleaned = path.replace(/^\.?\//, "").replace(/\/$/, "");
const idx = cleaned.indexOf("/");
if (idx === -1) return "";
return cleaned.slice(idx + 1);
}
function ensureDir(root, relPath) {
if (!relPath) return root;
const parts = relPath.split("/").filter(Boolean);
let cur = root;
for (const part of parts) {
let child = cur.children.get(part);
if (!child) {
child = { kind: "directory", children: new Map() };
cur.children.set(part, child);
}
if (child.kind !== "directory") {
die(`Path conflict while building tree at ${relPath}`);
}
cur = child;
}
return cur;
}
function buildTree(entries) {
const root = { kind: "directory", children: new Map() };
for (const entry of entries) {
const rel = stripTopDir(entry.path);
if (!rel) {
continue;
}
const parts = rel.split("/").filter(Boolean);
const name = parts.pop();
const parent = ensureDir(root, parts.join("/"));
if (entry.typeflag === "5") {
const existing = parent.children.get(name);
if (!existing) {
parent.children.set(name, { kind: "directory", children: new Map() });
} else if (existing.kind !== "directory") {
die(`Path conflict at ${rel}`);
}
continue;
}
if (entry.typeflag === "2") {
parent.children.set(name, { kind: "symlink", target: entry.linkname });
continue;
}
if (entry.typeflag === "0") {
parent.children.set(name, {
kind: "regular",
executable: (entry.mode & 0o111) !== 0,
contents: Buffer.from(entry.data),
});
continue;
}
}
return root;
}
function compareUtf8(a, b) {
return Buffer.from(a, "utf8").compare(Buffer.from(b, "utf8"));
}
function narDump(hash, node) {
if (node.kind === "directory") {
writeNarText(hash, "(");
writeNarText(hash, "type");
writeNarText(hash, "directory");
const names = [...node.children.keys()].sort(compareUtf8);
for (const name of names) {
writeNarText(hash, "entry");
writeNarText(hash, "(");
writeNarText(hash, "name");
writeNarString(hash, Buffer.from(name, "utf8"));
writeNarText(hash, "node");
narDump(hash, node.children.get(name));
writeNarText(hash, ")");
}
writeNarText(hash, ")");
return;
}
if (node.kind === "symlink") {
writeNarText(hash, "(");
writeNarText(hash, "type");
writeNarText(hash, "symlink");
writeNarText(hash, "target");
writeNarString(hash, Buffer.from(node.target, "utf8"));
writeNarText(hash, ")");
return;
}
writeNarText(hash, "(");
writeNarText(hash, "type");
writeNarText(hash, "regular");
if (node.executable) {
writeNarText(hash, "executable");
writeNarText(hash, "");
}
writeNarText(hash, "contents");
writeNarString(hash, node.contents);
writeNarText(hash, ")");
}
function fetchBuffer(url) {
return new Promise((resolve, reject) => {
https
.get(url, (res) => {
if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
const redirectUrl = new URL(res.headers.location, url).toString();
res.resume();
fetchBuffer(redirectUrl).then(resolve, reject);
return;
}
if (!res.statusCode || res.statusCode < 200 || res.statusCode >= 300) {
reject(new Error(`Failed to fetch ${url}: ${res.statusCode ?? "unknown"}`));
res.resume();
return;
}
const chunks = [];
res.on("data", (chunk) => chunks.push(chunk));
res.on("end", () => resolve(Buffer.concat(chunks)));
})
.on("error", reject);
});
}
function computeSRIFromGitHubTar(ref) {
const url = `https://github.com/cloudbase/garm/archive/${ref}.tar.gz`;
return fetchBuffer(url).then((archive) => {
const entries = parseTarEntries(archive);
const root = buildTree(entries);
const hash = createHash("sha256");
writeNarText(hash, "nix-archive-1");
narDump(hash, root);
return `sha256-${hash.digest("base64")}`;
});
}
function updateHash(text, sri) {
const pattern = /(^\s*hash\s*=\s*")sha256-[^"]+(";)/m;
if (!pattern.test(text)) {
die(`Unable to update hash in ${nixFile}`);
}
const next = text.replace(pattern, `$1${sri}$2`);
return next;
}
async function main() {
const text = readText(nixFile);
const version = extractVersion(text);
const commit = extractCommit(text);
const ref = commit ?? `v${version}`;
const sri = await computeSRIFromGitHubTar(ref);
const updated = updateHash(text, sri);
fs.writeFileSync(nixFile, updated, "utf8");
console.log(`Updated ${nixFile} hash to ${sri}`);
}
main().catch((err) => die(err.message));

View File

@@ -0,0 +1,91 @@
import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import { execFileSync } from "node:child_process";
const pinFile = "apps/garm/image-source.env";
const deploymentFile = "apps/garm/deployment.yaml";
function fail(message) {
console.error(message);
process.exit(1);
}
function parseEnvFile(content) {
const vars = {};
for (const line of content.split(/\r?\n/)) {
if (!line || line.startsWith("#")) {
continue;
}
const idx = line.indexOf("=");
if (idx === -1) {
continue;
}
const key = line.slice(0, idx).trim();
const value = line.slice(idx + 1).trim();
vars[key] = value;
}
return vars;
}
function updateOrAdd(content, key, value) {
const pattern = new RegExp(`^${key}=.*$`, "m");
if (pattern.test(content)) {
return content.replace(pattern, `${key}=${value}`);
}
return `${content.trimEnd()}\n${key}=${value}\n`;
}
function gitOut(args, options = {}) {
return execFileSync("git", args, {
encoding: "utf8",
...options,
}).trim();
}
function gitRun(args, options = {}) {
execFileSync("git", args, options);
}
const pinContent = fs.readFileSync(pinFile, "utf8");
const vars = parseEnvFile(pinContent);
const commit = vars.GARM_COMMIT;
const imageRepo = vars.GARM_IMAGE_REPO || "gitea.lumpiasty.xyz/lumpiasty/garm-k8s";
if (!commit || !/^[0-9a-f]{40}$/.test(commit)) {
fail(`Invalid or missing GARM_COMMIT in ${pinFile}`);
}
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "garm-main-"));
let commitNumber;
try {
gitRun(["clone", "--filter=blob:none", "https://github.com/cloudbase/garm.git", tmpDir], {
stdio: "ignore",
});
commitNumber = gitOut(["-C", tmpDir, "rev-list", "--count", commit]);
} finally {
fs.rmSync(tmpDir, { recursive: true, force: true });
}
if (!/^\d+$/.test(commitNumber)) {
fail(`Unable to resolve commit number for ${commit}`);
}
const image = `${imageRepo}:r${commitNumber}`;
let nextPin = pinContent;
nextPin = updateOrAdd(nextPin, "GARM_COMMIT_NUMBER", commitNumber);
nextPin = updateOrAdd(nextPin, "GARM_IMAGE_REPO", imageRepo);
nextPin = updateOrAdd(nextPin, "GARM_IMAGE", image);
fs.writeFileSync(pinFile, nextPin, "utf8");
const deployment = fs.readFileSync(deploymentFile, "utf8");
const imagePattern = /image:\s*(?:ghcr\.io\/cloudbase\/garm:[^\s]+|gitea\.lumpiasty\.xyz\/(?:Lumpiasty|lumpiasty)\/garm(?:-k8s)?:[^\s]+)/;
if (!imagePattern.test(deployment)) {
fail(`Unable to update garm image in ${deploymentFile}`);
}
const updatedDeployment = deployment.replace(imagePattern, `image: ${image}`);
fs.writeFileSync(deploymentFile, updatedDeployment, "utf8");
console.log(`Pinned garm image to ${image}`);

View File

@@ -0,0 +1,6 @@
bound_service_account_names:
- authentik-secret
bound_service_account_namespaces:
- authentik
token_policies:
- authentik

View File

@@ -0,0 +1,6 @@
bound_service_account_names:
- crawl4ai-secret
bound_service_account_namespaces:
- crawl4ai
token_policies:
- crawl4ai

View File

@@ -0,0 +1,6 @@
bound_service_account_names:
- garm
bound_service_account_namespaces:
- garm
token_policies:
- garm

View File

@@ -0,0 +1,6 @@
bound_service_account_names:
- openwebui-secret
bound_service_account_namespaces:
- openwebui
token_policies:
- openwebui

View File

@@ -0,0 +1,3 @@
path "secret/data/authentik" {
capabilities = ["read"]
}

View File

@@ -0,0 +1,3 @@
path "secret/data/crawl4ai" {
capabilities = ["read"]
}

7
vault/policy/garm.hcl Normal file
View File

@@ -0,0 +1,7 @@
path "secret/data/garm" {
capabilities = ["read"]
}
path "secret/data/backblaze" {
capabilities = ["read"]
}

View File

@@ -0,0 +1,3 @@
path "secret/data/authentik/openwebui" {
capabilities = ["read"]
}