Author SHA1 Message Date
Renovate cc6cc98b73 Update Helm release open-webui to v15 2026-06-30 02:04:53 +00:00
37 changed files with 1501 additions and 529 deletions
@@ -2,12 +2,11 @@ when:
- event: push - event: push
path: path:
include: include:
- docker/** - mikrotik/coredns/**
- .woodpecker/build-images.yaml
steps: steps:
- name: Get registry creds from OpenBao - name: Get registry creds from OpenBao
image: quay.io/openbao/openbao:2.6.2 image: quay.io/openbao/openbao:2.5.5
environment: environment:
VAULT_ADDR: https://openbao.lumpiasty.xyz:8200 VAULT_ADDR: https://openbao.lumpiasty.xyz:8200
ROLE_ID: ROLE_ID:
@@ -22,8 +21,8 @@ steps:
- 'printf "PLUGIN_USERNAME=%s\n" "$(bao kv get -mount secret -field REGISTRY_USERNAME container-registry)" > /woodpecker/registry.env' - 'printf "PLUGIN_USERNAME=%s\n" "$(bao kv get -mount secret -field REGISTRY_USERNAME container-registry)" > /woodpecker/registry.env'
- 'printf "PLUGIN_PASSWORD=%s\n" "$(bao kv get -mount secret -field REGISTRY_PASSWORD container-registry)" >> /woodpecker/registry.env' - 'printf "PLUGIN_PASSWORD=%s\n" "$(bao kv get -mount secret -field REGISTRY_PASSWORD container-registry)" >> /woodpecker/registry.env'
- name: Build and push mikrotik coredns - name: Build and push
image: woodpeckerci/plugin-docker-buildx:6.1.1 image: woodpeckerci/plugin-docker-buildx:6.1.0
privileged: true privileged: true
settings: settings:
registry: gitea.lumpiasty.xyz registry: gitea.lumpiasty.xyz
@@ -32,32 +31,12 @@ steps:
tags: tags:
- latest - latest
- ${CI_COMMIT_SHA:0:8} - ${CI_COMMIT_SHA:0:8}
dockerfile: docker/coredns/Dockerfile dockerfile: mikrotik/coredns/Dockerfile
context: docker/coredns/ context: mikrotik/coredns/
env_file: /woodpecker/registry.env env_file: /woodpecker/registry.env
cache_images:
- gitea.lumpiasty.xyz/lumpiasty/coredns-mikrotik:buildcache
depends_on: ["Get registry creds from OpenBao"]
- name: Build and push supervisord
image: woodpeckerci/plugin-docker-buildx:6.1.1
privileged: true
settings:
registry: gitea.lumpiasty.xyz
repo: gitea.lumpiasty.xyz/lumpiasty/supervisord
platforms: linux/amd64
tags:
- latest
- ${CI_COMMIT_SHA:0:8}
dockerfile: docker/supervisord/Dockerfile
context: docker/supervisord/
env_file: /woodpecker/registry.env
cache_images:
- gitea.lumpiasty.xyz/lumpiasty/supervisord:buildcache
depends_on: ["Get registry creds from OpenBao"]
- name: Invalidate OpenBao token - name: Invalidate OpenBao token
image: quay.io/openbao/openbao:2.6.2 image: quay.io/openbao/openbao:2.5.5
environment: environment:
VAULT_ADDR: https://openbao.lumpiasty.xyz:8200 VAULT_ADDR: https://openbao.lumpiasty.xyz:8200
commands: commands:
@@ -65,6 +44,3 @@ steps:
- bao write -f auth/token/revoke-self - bao write -f auth/token/revoke-self
when: when:
- status: [success, failure] - status: [success, failure]
depends_on:
- Build and push mikrotik coredns
- Build and push supervisord
+3 -3
View File
@@ -6,7 +6,7 @@ skip_clone: true
steps: steps:
- name: Get kubernetes access from OpenBao - name: Get kubernetes access from OpenBao
image: quay.io/openbao/openbao:2.6.2 image: quay.io/openbao/openbao:2.5.5
environment: environment:
VAULT_ADDR: https://openbao.lumpiasty.xyz:8200 VAULT_ADDR: https://openbao.lumpiasty.xyz:8200
ROLE_ID: ROLE_ID:
@@ -35,13 +35,13 @@ steps:
--namespace flux-system --namespace flux-system
- kubectl config use-context cluster - kubectl config use-context cluster
- name: Reconcile git source - name: Reconcile git source
image: ghcr.io/fluxcd/flux-cli:v2.9.5 image: ghcr.io/fluxcd/flux-cli:v2.8.8
environment: environment:
KUBECONFIG: /woodpecker/kubeconfig KUBECONFIG: /woodpecker/kubeconfig
commands: commands:
- flux reconcile source git flux-system - flux reconcile source git flux-system
- name: Invalidate OpenBao token - name: Invalidate OpenBao token
image: quay.io/openbao/openbao:2.6.2 image: quay.io/openbao/openbao:2.5.5
environment: environment:
VAULT_ADDR: https://openbao.lumpiasty.xyz:8200 VAULT_ADDR: https://openbao.lumpiasty.xyz:8200
commands: commands:
+3 -4
View File
@@ -6,7 +6,7 @@ skip_clone: true
steps: steps:
- name: Get renovate token from OpenBao - name: Get renovate token from OpenBao
image: quay.io/openbao/openbao:2.6.2 image: quay.io/openbao/openbao:2.5.5
environment: environment:
VAULT_ADDR: https://openbao.lumpiasty.xyz:8200 VAULT_ADDR: https://openbao.lumpiasty.xyz:8200
ROLE_ID: ROLE_ID:
@@ -21,8 +21,7 @@ steps:
- bao kv get -mount secret -field RENOVATE_TOKEN renovate > /woodpecker/renovate_token - bao kv get -mount secret -field RENOVATE_TOKEN renovate > /woodpecker/renovate_token
- bao kv get -mount secret -field GITHUB_COM_TOKEN renovate > /woodpecker/github_com_token - bao kv get -mount secret -field GITHUB_COM_TOKEN renovate > /woodpecker/github_com_token
- name: Run Renovate - name: Run Renovate
image: renovate/renovate:44 image: renovate/renovate:43.222.1
pull: true
environment: environment:
RENOVATE_AUTODISCOVER: "true" RENOVATE_AUTODISCOVER: "true"
RENOVATE_ENDPOINT: https://gitea.lumpiasty.xyz/api/v1 RENOVATE_ENDPOINT: https://gitea.lumpiasty.xyz/api/v1
@@ -35,7 +34,7 @@ steps:
- export GITHUB_COM_TOKEN=$(cat /woodpecker/github_com_token) - export GITHUB_COM_TOKEN=$(cat /woodpecker/github_com_token)
- /usr/local/sbin/renovate-entrypoint.sh renovate - /usr/local/sbin/renovate-entrypoint.sh renovate
- name: Invalidate OpenBao token - name: Invalidate OpenBao token
image: quay.io/openbao/openbao:2.6.2 image: quay.io/openbao/openbao:2.5.5
environment: environment:
VAULT_ADDR: https://openbao.lumpiasty.xyz:8200 VAULT_ADDR: https://openbao.lumpiasty.xyz:8200
commands: commands:
+1 -1
View File
@@ -18,7 +18,7 @@ spec:
chart: chart:
spec: spec:
chart: authentik chart: authentik
version: 2026.8.1 version: 2026.5.3
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: authentik name: authentik
+1 -3
View File
@@ -17,15 +17,13 @@ spec:
chart: chart:
spec: spec:
chart: gitea chart: gitea
version: 12.7.0 version: 12.6.0
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: gitea-charts name: gitea-charts
namespace: gitea namespace: gitea
interval: 12h interval: 12h
values: values:
image:
tag: 1.27.2 # REMOVE ME after new helm chart version includes this update
postgresql-ha: postgresql-ha:
enabled: false enabled: false
+3 -3
View File
@@ -7,7 +7,7 @@ metadata:
name: gitea-valkey-primary-lvmhdd-0 name: gitea-valkey-primary-lvmhdd-0
namespace: openebs namespace: openebs
spec: spec:
capacity: "4294967296" capacity: 1Gi
ownerNodeID: anapistula-delrosalae ownerNodeID: anapistula-delrosalae
shared: "yes" shared: "yes"
thinProvision: "no" thinProvision: "no"
@@ -20,7 +20,7 @@ metadata:
name: gitea-valkey-primary-lvmhdd-0 name: gitea-valkey-primary-lvmhdd-0
spec: spec:
capacity: capacity:
storage: 4Gi storage: 1Gi
accessModes: accessModes:
- ReadWriteOnce - ReadWriteOnce
persistentVolumeReclaimPolicy: Retain persistentVolumeReclaimPolicy: Retain
@@ -41,6 +41,6 @@ spec:
- ReadWriteOnce - ReadWriteOnce
resources: resources:
requests: requests:
storage: 4Gi storage: 1Gi
storageClassName: hdd-lvmpv storageClassName: hdd-lvmpv
volumeName: gitea-valkey-primary-lvmhdd-0 volumeName: gitea-valkey-primary-lvmhdd-0
+1 -1
View File
@@ -18,7 +18,7 @@ spec:
chart: chart:
spec: spec:
chart: valkey chart: valkey
version: 0.11.0 version: 0.9.4
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: valkey name: valkey
+1 -1
View File
@@ -18,7 +18,7 @@ spec:
chart: chart:
spec: spec:
chart: immich chart: immich
version: 2.0.3 version: 1.2.6
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: secustor name: secustor
-23
View File
@@ -1,23 +0,0 @@
---
apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
name: kaneo-app-secret
namespace: kaneo
spec:
type: kv-v2
mount: secret
path: kaneo
destination:
create: true
name: kaneo-app-secret
type: Opaque
transformation:
excludeRaw: true
templates:
auth_secret:
text: '{{ get .Secrets "auth_secret" }}'
vaultAuthRef: kaneo
-1
View File
@@ -2,7 +2,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization kind: Kustomization
resources: resources:
- namespace.yaml - namespace.yaml
- app-secret.yaml
- oauth-secret.yaml - oauth-secret.yaml
- postgres-volume.yaml - postgres-volume.yaml
- postgres-cluster.yaml - postgres-cluster.yaml
+3 -5
View File
@@ -8,7 +8,7 @@ spec:
interval: 24h interval: 24h
url: https://github.com/usekaneo/kaneo.git url: https://github.com/usekaneo/kaneo.git
ref: ref:
tag: v2.22.0 tag: v2.7.7
ignore: | ignore: |
# exclude all # exclude all
/* /*
@@ -53,13 +53,11 @@ spec:
enabled: false enabled: false
kaneo: kaneo:
image:
tag: "2.7.3" # renovate: depName=ghcr.io/usekaneo/kaneo registryUrl=https://ghcr.io
env: env:
clientUrl: "https://kaneo.lumpiasty.xyz" clientUrl: "https://kaneo.lumpiasty.xyz"
disablePasswordRegistration: true disablePasswordRegistration: true
existingSecret:
enabled: true
name: kaneo-app-secret
key: auth_secret
database: database:
external: external:
enabled: true enabled: true
+444
View File
@@ -0,0 +1,444 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/mostlygeek/llama-swap/refs/heads/main/config-schema.json
healthCheckTimeout: 600
logToStdout: "both" # proxy and upstream
macros:
base_args: "--no-warmup --port ${PORT} --mlock --no-mmap"
common_args: "--fit-target 256 --no-warmup --port ${PORT} --no-mmap -tb 12 -t 6"
cpu_args: "--no-warmup --port ${PORT} -ngl 0"
ctx_64k: "--ctx-size 65536"
ctx_128k: "--ctx-size 131072"
ctx_256k: "--ctx-size 131072"
qwen35_think_args: "--temp 1.0 --top-p 0.95 --top-k 20 --min-p 0.00 -ctk q4_0 -ctv q4_0 --presence_penalty 1.5 --reasoning on"
qwen35_nothink_args: "--temp 0.7 --top-p 0.80 --top-k 20 --min-p 0.00 -ctk q4_0 -ctv q4_0 --presence_penalty 1.5 --reasoning off"
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"
gemma4_sampling: "--temp 1.0 --top-p 0.95 --top-k 64 -ctk q4_0 -ctv q4_0"
gemma4_nothink_sampling: "--temp 1.0 --top-p 0.95 --top-k 64 -ctk q4_0 -ctv q4_0 --reasoning off"
hooks:
on_startup:
preload:
- "Qwen3.5-0.8B-GGUF-nothink:Q4_K_XL"
- "parakeet-tdt_ctc-1.1b"
# matrix replaces groups (they are mutually exclusive).
# The small 0.8B model runs alongside any LLM.
# FLUX runs alone — it needs all available VRAM and will evict the 0.8B first.
matrix:
vars:
q8: "Qwen3.5-0.8B-GGUF-nothink:Q4_K_XL"
stt: "parakeet-tdt_ctc-1.1b"
flux: "flux2-klein-4b:Q4_K_M"
coder: "Qwen3-Coder-Next-GGUF:Q4_K_M"
q35t: "Qwen3.5-35B-A3B-GGUF:Q4_K_M"
q35nt: "Qwen3.5-35B-A3B-GGUF-nothink:Q4_K_M"
q35ht: "Qwen3.5-35B-A3B-heretic-GGUF:Q4_K_M"
q35hnt: "Qwen3.5-35B-A3B-heretic-GGUF-nothink:Q4_K_M"
q4t: "Qwen3.5-4B-GGUF:Q4_K_M"
q4nt: "Qwen3.5-4B-GGUF-nothink:Q4_K_M"
q4ht: "Qwen3.5-4B-heretic-GGUF:Q4_K_M"
q4hnt: "Qwen3.5-4B-heretic-GGUF-nothink:Q4_K_M"
g26xl: "gemma-4-26B-A4B-it-qat:UD-Q4_K_XL"
g26xlnt: "gemma-4-26B-A4B-it-qat-nothink:UD-Q4_K_XL"
g26mtp: "gemma-4-26B-A4B-it-qat-mtp:UD-Q4_K_XL"
g26mtpnt: "gemma-4-26B-A4B-it-qat-mtp-nothink:UD-Q4_K_XL"
g26ht: "SC117/gemma-4-26B-A4B-it-qat-heretic-GGUF:UD-Q4_K_XL"
g26hnt: "SC117/gemma-4-26B-A4B-it-qat-heretic-GGUF-nothink:UD-Q4_K_XL"
g26hmtp: "SC117/gemma-4-26B-A4B-it-qat-heretic-GGUF-mtp:UD-Q4_K_XL"
g26hmnt: "SC117/gemma-4-26B-A4B-it-qat-heretic-GGUF-mtp-nothink:UD-Q4_K_XL"
ge4qat: "unsloth/gemma-4-E4B-it-qat-GGUF:UD-Q4_K_XL"
ge4qatnt: "unsloth/gemma-4-E4B-it-qat-GGUF-nothink:UD-Q4_K_XL"
ge2qat: "unsloth/gemma-4-E2B-it-qat-GGUF:UD-Q4_K_XL"
ge2qatnt: "unsloth/gemma-4-E2B-it-qat-GGUF-nothink:UD-Q4_K_XL"
ge4mtp: "unsloth/gemma-4-E4B-it-qat-GGUF-mtp:UD-Q4_K_XL"
ge4mtpnt: "unsloth/gemma-4-E4B-it-qat-GGUF-mtp-nothink:UD-Q4_K_XL"
ge4ht: "llmfan46/gemma-4-E4B-it-ultra-uncensored-heretic-GGUF:Q4_K_M"
ge4hnt: "llmfan46/gemma-4-E4B-it-ultra-uncensored-heretic-GGUF-nothink:Q4_K_M"
ge4hmtp: "llmfan46/gemma-4-E4B-it-ultra-uncensored-heretic-GGUF-mtp:Q4_K_M"
ge4hmnt: "llmfan46/gemma-4-E4B-it-ultra-uncensored-heretic-GGUF-mtp-nothink:Q4_K_M"
q36t: "unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_XL"
q36nt: "unsloth/Qwen3.6-35B-A3B-GGUF-nothink:UD-Q4_K_XL"
haut: "HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive:Q4_K_M"
haunt: "HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-nothink:Q4_K_M"
mtpt: "unsloth/Qwen3.6-35B-A3B-MTP-GGUF:Q4_K_M"
mtpnt: "unsloth/Qwen3.6-35B-A3B-MTP-GGUF-nothink:Q4_K_M"
evict_costs:
flux: 10 # large files, slow to reload
sets:
# any LLM can run alongside the small always-on model + STT + TTS (all CPU, no VRAM cost)
with_q8: "(coder | q35t | q35nt | q35ht | q35hnt | q4t | q4nt | q4ht | q4hnt | g26xl | g26xlnt | g26mtp | g26mtpnt | g26ht | g26hnt | g26hmtp | g26hmnt | ge4qat | ge4qatnt | ge2qat | ge2qatnt | ge4mtp | ge4mtpnt | ge4ht | ge4hnt | ge4hmtp | ge4hmnt | q36t | q36nt | haut | haunt | mtpt | mtpnt) & q8 & stt"
# FLUX runs alone — evicts everything including q8, but keeps STT for voice during image gen
image_gen: "flux & stt"
models:
"Qwen3-Coder-Next-GGUF:Q4_K_M":
cmd: |
llama-server
-hf unsloth/Qwen3-Coder-Next-GGUF:Q4_K_M
--ctx-size 65536
--predict 8192
--temp 1.0
--min-p 0.01
--top-p 0.95
--top-k 40
--repeat-penalty 1.0
-ctk q4_0 -ctv q4_0
${common_args}
"Qwen3.5-35B-A3B-GGUF:Q4_K_M":
cmd: |
llama-server
-hf unsloth/Qwen3.5-35B-A3B-GGUF:Q4_K_M
${ctx_256k}
${qwen35_think_args}
${common_args}
"Qwen3.5-35B-A3B-GGUF-nothink:Q4_K_M":
cmd: |
llama-server
-hf unsloth/Qwen3.5-35B-A3B-GGUF:Q4_K_M
${ctx_256k}
${qwen35_nothink_args}
${common_args}
# The "heretic" version does not provide the mmproj
# so providing url to the one from the non-heretic version.
"Qwen3.5-35B-A3B-heretic-GGUF:Q4_K_M":
cmd: |
llama-server
-hf mradermacher/Qwen3.5-35B-A3B-heretic-GGUF:Q4_K_M
${qwen35_35b_heretic_mmproj}
${ctx_256k}
${qwen35_think_args}
${common_args}
"Qwen3.5-35B-A3B-heretic-GGUF-nothink:Q4_K_M":
cmd: |
llama-server
-hf mradermacher/Qwen3.5-35B-A3B-heretic-GGUF:Q4_K_M
${qwen35_35b_heretic_mmproj}
${ctx_256k}
${qwen35_nothink_args}
${common_args}
"Qwen3.5-0.8B-GGUF-nothink:Q4_K_XL":
cmd: |
llama-server
-hf unsloth/Qwen3.5-0.8B-GGUF:Q4_K_XL
--ctx-size 4096
${qwen35_nothink_args}
${base_args}
"Qwen3.5-4B-GGUF:Q4_K_M":
cmd: |
llama-server
-hf unsloth/Qwen3.5-4B-GGUF:Q4_K_M
${ctx_128k}
${qwen35_think_args}
${common_args}
"Qwen3.5-4B-GGUF-nothink:Q4_K_M":
cmd: |
llama-server
-hf unsloth/Qwen3.5-4B-GGUF:Q4_K_M
${ctx_128k}
${qwen35_nothink_args}
${common_args}
"Qwen3.5-4B-heretic-GGUF:Q4_K_M":
cmd: |
llama-server
-hf mradermacher/Qwen3.5-4B-heretic-GGUF:Q4_K_M
${qwen35_4b_heretic_mmproj}
${ctx_128k}
${qwen35_think_args}
${common_args}
"Qwen3.5-4B-heretic-GGUF-nothink:Q4_K_M":
cmd: |
llama-server
-hf mradermacher/Qwen3.5-4B-heretic-GGUF:Q4_K_M
${qwen35_4b_heretic_mmproj}
${ctx_128k}
${qwen35_nothink_args}
${common_args}
"gemma-4-26B-A4B-it-qat:UD-Q4_K_XL":
cmd: |
llama-server
-hf unsloth/gemma-4-26B-A4B-it-qat-GGUF:UD-Q4_K_XL \
${ctx_256k}
${gemma4_sampling}
${common_args}
"gemma-4-26B-A4B-it-qat-nothink:UD-Q4_K_XL":
cmd: |
llama-server
-hf unsloth/gemma-4-26B-A4B-it-qat-GGUF:UD-Q4_K_XL \
${ctx_256k}
${gemma4_nothink_sampling}
${common_args}
"gemma-4-26B-A4B-it-qat-mtp:UD-Q4_K_XL":
cmd: |
llama-server
-hf unsloth/gemma-4-26B-A4B-it-qat-GGUF:UD-Q4_K_XL \
--spec-draft-hf unsloth/gemma-4-26B-A4B-it-qat-GGUF:Q8_0-MTP \
--spec-type draft-mtp
--spec-draft-n-max 1
--swa-full
--kv-unified
--parallel 1
${ctx_256k}
${gemma4_sampling}
${common_args}
"gemma-4-26B-A4B-it-qat-mtp-nothink:UD-Q4_K_XL":
cmd: |
llama-server
-hf unsloth/gemma-4-26B-A4B-it-qat-GGUF:UD-Q4_K_XL \
--spec-draft-hf unsloth/gemma-4-26B-A4B-it-qat-GGUF:Q8_0-MTP \
--spec-type draft-mtp
--spec-draft-n-max 1
--swa-full
--kv-unified
--parallel 1
${ctx_256k}
${gemma4_nothink_sampling}
${common_args}
"SC117/gemma-4-26B-A4B-it-qat-heretic-GGUF:UD-Q4_K_XL":
cmd: |
llama-server
-hf SC117/gemma-4-26B-A4B-it-qat-heretic-GGUF:UD-Q4_K_XL \
${ctx_256k}
${gemma4_sampling}
${common_args}
"SC117/gemma-4-26B-A4B-it-qat-heretic-GGUF-nothink:UD-Q4_K_XL":
cmd: |
llama-server
-hf SC117/gemma-4-26B-A4B-it-qat-heretic-GGUF:UD-Q4_K_XL \
${ctx_256k}
${gemma4_nothink_sampling}
${common_args}
# The heretic QAT repo does not ship an MTP drafter,
# so borrow the one from the non-heretic unsloth QAT repo.
"SC117/gemma-4-26B-A4B-it-qat-heretic-GGUF-mtp:UD-Q4_K_XL":
cmd: |
llama-server
-hf SC117/gemma-4-26B-A4B-it-qat-heretic-GGUF:UD-Q4_K_XL \
--spec-draft-hf unsloth/gemma-4-26B-A4B-it-qat-GGUF:Q8_0-MTP \
--spec-type draft-mtp
--spec-draft-n-max 1
--swa-full
--kv-unified
--parallel 1
${ctx_256k}
${gemma4_sampling}
${common_args}
"SC117/gemma-4-26B-A4B-it-qat-heretic-GGUF-mtp-nothink:UD-Q4_K_XL":
cmd: |
llama-server
-hf SC117/gemma-4-26B-A4B-it-qat-heretic-GGUF:UD-Q4_K_XL \
--spec-draft-hf unsloth/gemma-4-26B-A4B-it-qat-GGUF:Q8_0-MTP \
--spec-type draft-mtp
--spec-draft-n-max 1
--swa-full
--kv-unified
--parallel 1
${ctx_256k}
${gemma4_nothink_sampling}
${common_args}
"unsloth/gemma-4-E4B-it-qat-GGUF:UD-Q4_K_XL":
cmd: |
llama-server
-hf unsloth/gemma-4-E4B-it-qat-GGUF:UD-Q4_K_XL \
${ctx_128k}
${gemma4_sampling}
${common_args}
"unsloth/gemma-4-E4B-it-qat-GGUF-nothink:UD-Q4_K_XL":
cmd: |
llama-server
-hf unsloth/gemma-4-E4B-it-qat-GGUF:UD-Q4_K_XL \
${ctx_128k}
${gemma4_nothink_sampling}
${common_args}
"unsloth/gemma-4-E2B-it-qat-GGUF:UD-Q4_K_XL":
cmd: |
llama-server
-hf unsloth/gemma-4-E2B-it-qat-GGUF:UD-Q4_K_XL \
${ctx_128k}
${gemma4_sampling}
${common_args}
"unsloth/gemma-4-E2B-it-qat-GGUF-nothink:UD-Q4_K_XL":
cmd: |
llama-server
-hf unsloth/gemma-4-E2B-it-qat-GGUF:UD-Q4_K_XL \
${ctx_128k}
${gemma4_nothink_sampling}
${common_args}
"unsloth/gemma-4-E4B-it-qat-GGUF-mtp:UD-Q4_K_XL":
cmd: |
llama-server
-hf unsloth/gemma-4-E4B-it-qat-GGUF:UD-Q4_K_XL \
--spec-draft-hf unsloth/gemma-4-E4B-it-qat-GGUF:Q8_0-MTP \
--spec-type draft-mtp
--spec-draft-n-max 1
--swa-full
--kv-unified
--parallel 1
${ctx_128k}
${gemma4_sampling}
${common_args}
"unsloth/gemma-4-E4B-it-qat-GGUF-mtp-nothink:UD-Q4_K_XL":
cmd: |
llama-server
-hf unsloth/gemma-4-E4B-it-qat-GGUF:UD-Q4_K_XL \
--spec-draft-hf unsloth/gemma-4-E4B-it-qat-GGUF:Q8_0-MTP \
--spec-type draft-mtp
--spec-draft-n-max 1
--swa-full
--kv-unified
--parallel 1
${ctx_128k}
${gemma4_nothink_sampling}
${common_args}
"llmfan46/gemma-4-E4B-it-ultra-uncensored-heretic-GGUF:Q4_K_M":
cmd: |
llama-server
-hf llmfan46/gemma-4-E4B-it-ultra-uncensored-heretic-GGUF:Q4_K_M \
${ctx_128k}
${gemma4_sampling}
${common_args}
"llmfan46/gemma-4-E4B-it-ultra-uncensored-heretic-GGUF-nothink:Q4_K_M":
cmd: |
llama-server
-hf llmfan46/gemma-4-E4B-it-ultra-uncensored-heretic-GGUF:Q4_K_M \
${ctx_128k}
${gemma4_nothink_sampling}
${common_args}
"llmfan46/gemma-4-E4B-it-ultra-uncensored-heretic-GGUF-mtp:Q4_K_M":
cmd: |
llama-server
-hf llmfan46/gemma-4-E4B-it-ultra-uncensored-heretic-GGUF:Q4_K_M \
--spec-draft-hf unsloth/gemma-4-E4B-it-qat-GGUF:Q8_0-MTP \
--spec-type draft-mtp
--spec-draft-n-max 1
--swa-full
--kv-unified
--parallel 1
${ctx_128k}
${gemma4_sampling}
${common_args}
"llmfan46/gemma-4-E4B-it-ultra-uncensored-heretic-GGUF-mtp-nothink:Q4_K_M":
cmd: |
llama-server
-hf llmfan46/gemma-4-E4B-it-ultra-uncensored-heretic-GGUF:Q4_K_M \
--spec-draft-hf unsloth/gemma-4-E4B-it-qat-GGUF:Q8_0-MTP \
--spec-type draft-mtp
--spec-draft-n-max 1
--swa-full
--kv-unified
--parallel 1
${ctx_128k}
${gemma4_nothink_sampling}
${common_args}
"unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_XL":
cmd: |
llama-server
-hf unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_XL
${ctx_256k}
${qwen35_think_args}
${common_args}
"unsloth/Qwen3.6-35B-A3B-GGUF-nothink:UD-Q4_K_XL":
cmd: |
llama-server
-hf unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_XL
${ctx_256k}
${qwen35_nothink_args}
${common_args}
"HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive:Q4_K_M":
cmd: |
llama-server
-hf HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive:Q4_K_M
${ctx_256k}
${qwen35_think_args}
${common_args}
"HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-nothink:Q4_K_M":
cmd: |
llama-server
-hf HauhauCS/Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive:Q4_K_M
${ctx_256k}
${qwen35_nothink_args}
${common_args}
"unsloth/Qwen3.6-35B-A3B-MTP-GGUF:Q4_K_M":
cmd: |
llama-server
-hf unsloth/Qwen3.6-35B-A3B-MTP-GGUF:Q4_K_M
${ctx_256k}
${qwen35_think_args}
--spec-type draft-mtp --spec-draft-n-max 1
--parallel 1
${common_args}
"unsloth/Qwen3.6-35B-A3B-MTP-GGUF-nothink:Q4_K_M":
cmd: |
llama-server
-hf unsloth/Qwen3.6-35B-A3B-MTP-GGUF:Q4_K_M
${ctx_256k}
${qwen35_nothink_args}
--spec-type draft-mtp --spec-draft-n-max 1
--parallel 1
${common_args}
# STT via parakeet-server (parakeet.cpp OpenAI-compatible server, CPU, always loaded)
# Model downloaded on first start and cached under /root/.cache/parakeet.cpp/models
# parakeet-proxy.py sits in front to convert any audio format to WAV via ffmpeg,
# since parakeet-server only accepts real WAV but browsers send Ogg/Opus.
"parakeet-tdt_ctc-1.1b":
checkEndpoint: none
cmd: |
env PROXY_PORT=${PORT} FFMPEG_BIN=/root/.cache/ffmpeg/ffmpeg python3 /config/parakeet-proxy.py
# Image generation via stable-diffusion.cpp (sd-server)
# Models must be pre-downloaded to /root/.cache/sd/
# FLUX.2-klein-4B: fast unified text-to-image and image editing model (Apache 2.0)
# Download: uv run --with huggingface_hub hf download unsloth/FLUX.2-klein-4B-GGUF flux-2-klein-4b-Q4_K_M.gguf --local-dir /root/.cache/sd
# Download VAE: uv run --with huggingface_hub hf download Comfy-Org/flux2-klein-4B split_files/vae/flux2-vae.safetensors --local-dir /root/.cache/sd/flux2-klein && cp /root/.cache/sd/flux2-klein/split_files/vae/flux2-vae.safetensors /root/.cache/sd/
# Download LLM: uv run --with huggingface_hub hf download ponpoke/flux2-klein-4b-uncensored-text-encoder flux2-klein-4b-uncensored-q4_k_m.gguf --local-dir /root/.cache/sd
"flux2-klein-4b:Q4_K_M":
checkEndpoint: "/"
cmd: |
sd-server
--listen-port ${PORT}
--diffusion-model /root/.cache/sd/flux-2-klein-4b-Q4_K_M.gguf
--vae /root/.cache/sd/flux2-vae.safetensors
--llm /root/.cache/sd/flux2-klein-4b-uncensored-q4_k_m.gguf
--cfg-scale 1.0
--sampling-method euler
--steps 4
--diffusion-fa
--offload-to-cpu
+227
View File
@@ -0,0 +1,227 @@
#!/usr/bin/env python3
"""
Thin reverse proxy for parakeet-server.
Accepts POST /v1/audio/transcriptions with any audio format,
converts the audio to 16 kHz mono WAV via ffmpeg, then forwards
the converted file to the real parakeet-server running on PARAKEET_PORT.
Also proxies GET /health straight through.
Usage:
PROXY_PORT=<port> PARAKEET_PORT=<upstream> python3 parakeet-proxy.py
"""
import http.server
import io
import os
import subprocess
import sys
import tempfile
import urllib.request
import urllib.error
PROXY_PORT = int(os.environ.get("PROXY_PORT", "8080"))
PARAKEET_PORT = PROXY_PORT + 1
FFMPEG = os.environ.get("FFMPEG_BIN", "ffmpeg")
MODEL = os.environ.get("PARAKEET_MODEL", "tdt_ctc-1.1b-q4_k.gguf")
CACHE_DIR = os.environ.get("PARAKEET_CACHE_DIR", "/root/.cache/parakeet.cpp/models")
def convert_to_wav(data: bytes) -> bytes:
"""Convert any audio bytes to 16 kHz mono PCM WAV via ffmpeg."""
with tempfile.NamedTemporaryFile(suffix=".input", delete=False) as inf:
inf.write(data)
inf_path = inf.name
out_path = inf_path + ".wav"
try:
subprocess.run(
[
FFMPEG, "-y",
"-i", inf_path,
"-ar", "16000",
"-ac", "1",
"-f", "wav",
out_path,
],
check=True,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
with open(out_path, "rb") as f:
return f.read()
finally:
os.unlink(inf_path)
if os.path.exists(out_path):
os.unlink(out_path)
def parse_multipart(content_type: str, body: bytes):
"""
Parse a multipart/form-data body.
Returns a dict of field_name -> (filename_or_None, content_type, data).
"""
import email
from email import policy as email_policy
# email.parser needs the full MIME headers to parse multipart
raw = b"Content-Type: " + content_type.encode() + b"\r\n\r\n" + body
msg = email.message_from_bytes(raw, policy=email_policy.compat32)
parts = {}
for part in msg.get_payload():
cd = part.get("Content-Disposition", "")
name = None
filename = None
for item in cd.split(";"):
item = item.strip()
if item.startswith('name='):
name = item[5:].strip('"')
elif item.startswith('filename='):
filename = item[9:].strip('"')
if name is not None:
parts[name] = (filename, part.get_content_type(), part.get_payload(decode=True))
return parts
def build_multipart(fields: dict) -> tuple[bytes, str]:
"""
Build a multipart/form-data body from fields dict:
field_name -> (filename_or_None, content_type, data_bytes)
Returns (body_bytes, content_type_header_value).
"""
boundary = b"----ParakeetProxyBoundary0xDEADBEEF"
body = b""
for name, (filename, ct, data) in fields.items():
body += b"--" + boundary + b"\r\n"
if filename:
body += (
f'Content-Disposition: form-data; name="{name}"; filename="{filename}"\r\n'
).encode()
else:
body += f'Content-Disposition: form-data; name="{name}"\r\n'.encode()
body += f"Content-Type: {ct}\r\n\r\n".encode()
body += data + b"\r\n"
body += b"--" + boundary + b"--\r\n"
return body, f"multipart/form-data; boundary={boundary.decode()}"
class ProxyHandler(http.server.BaseHTTPRequestHandler):
def log_message(self, fmt, *args):
print(f"[parakeet-proxy] {self.address_string()} - {fmt % args}", flush=True)
def do_GET(self):
if self.path == "/health":
self._forward_get("/health")
else:
self.send_response(404)
self.end_headers()
def do_POST(self):
if self.path.rstrip("/") == "/v1/audio/transcriptions":
self._handle_transcription()
else:
self.send_response(404)
self.end_headers()
def _forward_get(self, path):
try:
url = f"http://127.0.0.1:{PARAKEET_PORT}{path}"
with urllib.request.urlopen(url, timeout=5) as resp:
body = resp.read()
self.send_response(resp.status)
self.send_header("Content-Type", resp.headers.get("Content-Type", "application/json"))
self.end_headers()
self.wfile.write(body)
except Exception as e:
self.send_response(502)
self.end_headers()
self.wfile.write(str(e).encode())
def _handle_transcription(self):
length = int(self.headers.get("Content-Length", 0))
body = self.rfile.read(length)
ct = self.headers.get("Content-Type", "")
try:
fields = parse_multipart(ct, body)
except Exception as e:
self._error(400, f"failed to parse multipart: {e}")
return
if "file" not in fields:
self._error(400, "missing required field 'file'")
return
filename, file_ct, audio_data = fields["file"]
# Convert to WAV regardless of what we received
try:
wav_data = convert_to_wav(audio_data)
except subprocess.CalledProcessError:
self._error(400, "ffmpeg could not decode audio")
return
except Exception as e:
self._error(500, f"conversion error: {e}")
return
# Rebuild multipart with converted WAV, preserve other fields
new_fields = {}
for name, (fn, fct, data) in fields.items():
if name == "file":
new_fields[name] = ("recording.wav", "audio/wav", wav_data)
else:
new_fields[name] = (fn, fct, data)
new_body, new_ct = build_multipart(new_fields)
# Forward to parakeet-server
try:
url = f"http://127.0.0.1:{PARAKEET_PORT}/v1/audio/transcriptions"
req = urllib.request.Request(
url,
data=new_body,
headers={"Content-Type": new_ct},
method="POST",
)
with urllib.request.urlopen(req, timeout=300) as resp:
resp_body = resp.read()
self.send_response(resp.status)
self.send_header("Content-Type", resp.headers.get("Content-Type", "application/json"))
self.end_headers()
self.wfile.write(resp_body)
except urllib.error.HTTPError as e:
resp_body = e.read()
self.send_response(e.code)
self.send_header("Content-Type", e.headers.get("Content-Type", "application/json"))
self.end_headers()
self.wfile.write(resp_body)
except Exception as e:
self._error(502, f"upstream error: {e}")
def _error(self, code: int, msg: str):
body = f'{{"error":{{"message":"{msg}","type":"proxy_error"}}}}'.encode()
self.send_response(code)
self.send_header("Content-Type", "application/json")
self.end_headers()
self.wfile.write(body)
if __name__ == "__main__":
proc = subprocess.Popen([
"parakeet-server",
"--host", "127.0.0.1",
"--port", str(PARAKEET_PORT),
"--model", MODEL,
"--cache-dir", CACHE_DIR,
])
print(f"[parakeet-proxy] started parakeet-server pid={proc.pid} on :{PARAKEET_PORT}", flush=True)
server = http.server.HTTPServer(("0.0.0.0", PROXY_PORT), ProxyHandler)
print(f"[parakeet-proxy] listening on :{PROXY_PORT}", flush=True)
try:
server.serve_forever()
except KeyboardInterrupt:
pass
finally:
proc.terminate()
proc.wait()
+50 -7
View File
@@ -2,7 +2,7 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: supervisord name: llama-swap
namespace: llama namespace: llama
spec: spec:
replicas: 1 replicas: 1
@@ -16,24 +16,64 @@ spec:
labels: labels:
app: llama-swap app: llama-swap
spec: spec:
initContainers:
- name: download-whisper
image: gitea.lumpiasty.xyz/lumpiasty/llama-swap:unified-vulkan-parakeet-2026-06-12
command:
- sh
- -c
- |
mkdir -p /root/.cache/whisper
if [ ! -f /root/.cache/whisper/ggml-small.bin ]; then
echo "Downloading whisper-small model..."
curl -L -o /root/.cache/whisper/ggml-small.bin \
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.bin
else
echo "whisper-small model already present, skipping download"
fi
if [ ! -f /root/.cache/ffmpeg/ffmpeg ]; then
echo "Downloading static ffmpeg..."
mkdir -p /root/.cache/ffmpeg
apt-get update -qq && apt-get install -y --no-install-recommends xz-utils
curl -L -o /root/.cache/ffmpeg/ffmpeg.tar.xz \
https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-linux64-gpl.tar.xz
tar -xJf /root/.cache/ffmpeg/ffmpeg.tar.xz -C /root/.cache/ffmpeg --wildcards '*/ffmpeg' --strip-components=2
rm /root/.cache/ffmpeg/ffmpeg.tar.xz
chmod +x /root/.cache/ffmpeg/ffmpeg
else
echo "ffmpeg already present, skipping download"
fi
volumeMounts:
- name: models
mountPath: /root/.cache
containers: containers:
- name: supervisord - name: llama-swap
image: gitea.lumpiasty.xyz/lumpiasty/supervisord:latest@sha256:2676d13df2a0833b27ab8ec441da78c6c43d3f7bf75837d35723eefb40a82ce1 image: gitea.lumpiasty.xyz/lumpiasty/llama-swap:unified-vulkan-parakeet-2026-06-12
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
command:
- llama-swap
args:
- --config=/config/config.yaml
- --watch-config
env:
- name: RADV_EXPERIMENTAL
value: transfer_queue
ports: ports:
- containerPort: 8080 - containerPort: 8080
name: http name: http
protocol: TCP protocol: TCP
env:
- name: WORKSPACE
value: /root
volumeMounts: volumeMounts:
- name: models - name: models
mountPath: /root mountPath: /root/.cache
- name: models
mountPath: /usr/local/bin/ffmpeg
subPath: ffmpeg/ffmpeg
- mountPath: /dev/kfd - mountPath: /dev/kfd
name: kfd name: kfd
- mountPath: /dev/dri - mountPath: /dev/dri
name: dri name: dri
- mountPath: /config
name: config
securityContext: securityContext:
privileged: true privileged: true
volumes: volumes:
@@ -48,6 +88,9 @@ spec:
hostPath: hostPath:
path: /dev/dri path: /dev/dri
type: Directory type: Directory
- name: config
configMap:
name: llama-swap
--- ---
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
+1 -1
View File
@@ -21,7 +21,7 @@ spec:
# OpenAI-compatible Kokoro-FastAPI TTS server, CPU PyTorch backend. # OpenAI-compatible Kokoro-FastAPI TTS server, CPU PyTorch backend.
# Models baked into the image (no PVC needed). # Models baked into the image (no PVC needed).
# v0.3.0 includes fix for per-request voice tensor memory leak (#459). # v0.3.0 includes fix for per-request voice tensor memory leak (#459).
image: ghcr.io/remsky/kokoro-fastapi-cpu:v0.8.2 image: ghcr.io/remsky/kokoro-fastapi-cpu:v0.5.0
ports: ports:
- containerPort: 8880 - containerPort: 8880
name: http name: http
+6
View File
@@ -8,3 +8,9 @@ resources:
- pvc-ssd.yaml - pvc-ssd.yaml
- deployment.yaml - deployment.yaml
- kokoro.yaml - kokoro.yaml
configMapGenerator:
- name: llama-swap
namespace: llama
files:
- config.yaml=configs/config.yaml
- parakeet-proxy.py=configs/parakeet-proxy.py
+1 -1
View File
@@ -18,7 +18,7 @@ spec:
chart: chart:
spec: spec:
chart: open-webui chart: open-webui
version: 16.5.0 version: 15.1.0
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: open-webui name: open-webui
+1 -1
View File
@@ -18,7 +18,7 @@ spec:
chart: chart:
spec: spec:
chart: woodpecker chart: woodpecker
version: 3.7.3 version: 3.6.5
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: woodpecker name: woodpecker
File diff suppressed because it is too large Load Diff
-15
View File
@@ -1,15 +0,0 @@
FROM debian:13.6
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update && apt install -y --no-install-recommends\
curl wget vim \
ca-certificates \
build-essential cmake libvulkan-dev glslc spirv-headers libssl-dev git \
mesa-utils mesa-vulkan-drivers \
supervisor \
&& rm -rf /var/lib/apt/lists/*
ADD --chmod=755 entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]
-8
View File
@@ -1,8 +0,0 @@
#!/usr/bin/env bash
WORKSPACE="${WORKSPACE:-/workspace}"
CONF=$WORKSPACE/supervisord.conf
[[ -f "$CONF" ]] || (echo_supervisord_conf > $CONF )
exec supervisord -n -c $CONF "$@"
@@ -18,7 +18,7 @@ spec:
chart: chart:
spec: spec:
chart: cert-manager-webhook-ovh chart: cert-manager-webhook-ovh
version: 0.9.16 version: 0.9.13
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: cert-manager-webhook-ovh name: cert-manager-webhook-ovh
+1 -1
View File
@@ -23,7 +23,7 @@ spec:
chart: chart:
spec: spec:
chart: cert-manager chart: cert-manager
version: v1.21.1 version: v1.20.3
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: cert-manager name: cert-manager
+1 -1
View File
@@ -23,7 +23,7 @@ spec:
chart: chart:
spec: spec:
chart: cilium chart: cilium
version: 1.20.1 version: 1.19.5
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: cilium name: cilium
+1 -1
View File
@@ -23,7 +23,7 @@ spec:
chart: chart:
spec: spec:
chart: cloudnative-pg chart: cloudnative-pg
version: 0.29.0 version: 0.28.3
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: cnpg name: cnpg
+1 -1
View File
@@ -110,7 +110,7 @@ spec:
kubernetes.io/os: linux kubernetes.io/os: linux
containers: containers:
- name: coredns - name: coredns
image: registry.k8s.io/coredns/coredns:v1.14.7 image: registry.k8s.io/coredns/coredns:v1.14.4
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
args: ["-conf", "/etc/coredns/Corefile"] args: ["-conf", "/etc/coredns/Corefile"]
ports: ports:
+1 -1
View File
@@ -97,7 +97,7 @@ spec:
env: env:
- name: GOMEMLIMIT - name: GOMEMLIMIT
value: 161MiB value: 161MiB
image: registry.k8s.io/coredns/coredns:v1.14.7 image: registry.k8s.io/coredns/coredns:v1.14.4
imagePullPolicy: IfNotPresent imagePullPolicy: IfNotPresent
livenessProbe: livenessProbe:
failureThreshold: 5 failureThreshold: 5
+1 -1
View File
@@ -23,7 +23,7 @@ spec:
chart: chart:
spec: spec:
chart: k8up chart: k8up
version: 4.10.0 version: 4.9.0
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: k8up-io name: k8up-io
+1 -1
View File
@@ -23,7 +23,7 @@ spec:
chart: chart:
spec: spec:
chart: openbao chart: openbao
version: 0.29.4 version: 0.28.4
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: openbao name: openbao
+1 -1
View File
@@ -23,7 +23,7 @@ spec:
chart: chart:
spec: spec:
chart: openebs chart: openebs
version: 4.6.1 version: 4.5.1
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: openebs name: openebs
@@ -23,7 +23,7 @@ spec:
chart: chart:
spec: spec:
chart: vault-secrets-operator chart: vault-secrets-operator
version: 1.5.1 version: 1.4.0
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: hashicorp name: hashicorp
@@ -1,5 +1,5 @@
# Stage 1: build CoreDNS with minimal plugin set # Stage 1: build CoreDNS with minimal plugin set
FROM golang:1.27-alpine AS build FROM golang:1.26-alpine AS build
RUN apk add --no-cache git make bash RUN apk add --no-cache git make bash
+1 -13
View File
@@ -11,18 +11,6 @@
] ]
}, },
"prHourlyLimit": 9, "prHourlyLimit": 9,
"customManagers": [
{
"customType": "regex",
"fileMatch": [
"apps/.+\\.yaml$"
],
"matchStrings": [
"tag:\\s*[\"']?(?<currentValue>[^\"' \\n]+)[\"']?\\s*#\\s*renovate:\\s*(?:datasource=(?<datasource>[^\\s]+)\\s+)?depName=(?<depName>[^\\s]+)(?:\\s+registryUrl=(?<registryUrl>[^\\s]+))?"
],
"datasourceTemplate": "{{#if datasource}}{{{datasource}}}{{else}}docker{{/if}}"
}
],
"packageRules": [ "packageRules": [
{ {
"matchPackageNames": ["usekaneo/kaneo", "ghcr.io/usekaneo/kaneo"], "matchPackageNames": ["usekaneo/kaneo", "ghcr.io/usekaneo/kaneo"],
@@ -37,7 +25,7 @@
"platformAutomerge": true "platformAutomerge": true
}, },
{ {
"matchUpdateTypes": ["patch", "digest"], "matchUpdateTypes": ["patch"],
"automerge": true, "automerge": true,
"automergeType": "pr", "automergeType": "pr",
"platformAutomerge": true "platformAutomerge": true
@@ -28,4 +28,3 @@ machine:
# arrives too late. Work around using kernel args: # arrives too late. Work around using kernel args:
extraKernelArgs: extraKernelArgs:
- amdgpu.runpm=1 - amdgpu.runpm=1
- amdgpu.lockup_timeout=0,120000,0,0
-4
View File
@@ -1,7 +1,3 @@
path "secret/data/authentik/kaneo" { path "secret/data/authentik/kaneo" {
capabilities = ["read"] capabilities = ["read"]
} }
path "secret/data/kaneo" {
capabilities = ["read"]
}