Compare commits
17
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6140aedcc6 | ||
|
|
2e54387eed | ||
|
|
f35af13ef3 | ||
|
|
b638dc786f | ||
|
|
7abee90f4e | ||
|
|
bb37c6051f | ||
|
|
91c7a90d1b | ||
|
|
d42b5a89f3 | ||
|
|
c1f4298bfe | ||
|
|
14cabaf3f5 | ||
|
|
809e90d12d | ||
|
|
eeb7321819 | ||
|
|
133bdb8715 | ||
|
|
c47e89e02a | ||
|
|
3bf6f22a4a | ||
|
|
10f27fa3c4 | ||
|
|
90ba7ac905 |
@@ -7,7 +7,8 @@ metadata:
|
|||||||
namespace: mcp10x
|
namespace: mcp10x
|
||||||
spec:
|
spec:
|
||||||
encryptedData:
|
encryptedData:
|
||||||
FLOWCASE_TOKEN: AgAjQ0Jm779LiB2/EBKtIl18Iky/tgl7VvEvkJfr82mbe7JIp99+I8WPIMgmlXsxWBDfwJ/DZoDEAKG5o8mvwc7DtaE7LkpPSXKRIviLrm+7amNdEpwb1zKjCmZ3vNOPXLnCTD3W1od8u106MEvrZpt1N1Pzav/QUElAA4lqyf4AZPuio0H/7jF8QciVHIN4BdofodOmWWCTxP1aVMylat3txlkzuqwkXc1fKBPmOKC1qWepAG7dlQ3xJ2C5Cinz5IqOYnQPO6sm/Gp+c8yQSS+0NpKO3dp93yuwRsOLOMNpCeeYOyzn2ypFIdiBuLA5k85l5WyI9BCvRjP+kzRX+u69XL7p2eMEg+vRVfoOWNetysYCdK+96bWNVVleQEuPAFxsbJWK5eV8jTZk+QeFES8kkXQwUoTMqh+JULgONakxrzc1LmA+FtKNwHWCHalh8pLQ9KeI2i9E5CtotjHfEGLE6T0ibwwOg1ZrL3irQVII8VFm4Rk+dSicbeEMAtIaII023NWuZlonrwIIy+GSVzskhhcjV7t51hylqFA3yfb+RQCzdGYA5fySlJBWhli8IotvqnDmWduPBHGb/+yrdXHsaiDqWuUu6JBUg4JqM+AMa8FkaFh8SbctbGBoycpzLVFn9N2qWviojhC9s1NJ4MiCegvE6IsCLaHidY4UXeeGjUK6Mx6h4x3y/q7ZIrBIpUOJ+8I4Mgvi9sTCogeR+vWtpP9ZZ/31MXELuu/ho3Wn9Q==
|
BENKEN_CLIENT_SECRET: AgBjps8BCn20C8upAaAdb1fG4Qh3eKBbTeFuuWhQb8WoIvHmk+v03mw8i39evkQwlUWvLBWV1mtGiKwpCNhmAAdicRFG6u0m30+21K6ZtYqtKEniPKo/kjPd9nDbtxvIwiaqKs+kvFpqbxKaeqF5THYNxHZBg8gGeSbAkSx+BNIY2iLm8NRBzgC5FME5jbX8pet+DN7tbmsQTtG5f1q+h24aKXjvN5SigPft1BetfleHGlus0hFXpJ7zS4rV7rpSKSiLVV/KtS5YqEDj9uunZKyGT8j93z5xQbj0bCPVF3TU5+RCL6eE/GSgJxM4ePZ2gWZRG4eHDlGK2qE+JaNIng8wWycqLVrbs1kWoP2cdRGq6b8GHwoplAM4h4ud2fac6+5V4alhy8uhRTAX7dUG3UkwOQV/hTRb97pctPwQfltkBpDBhhW3Lfy9whSdqBuD9OqhegTqxCuWXr/P4KVOORUr0V0Iex45oLMqivI3FB2rTq9Lkwpf5YKE14d7RbKWF1G28FCNAcV8vnOIslkztLuu3GgQbVIoIiZGnnYEPofjUxbDZ/Sd1LrGeHEPR+/JJnNhNxv2297UuIIEC8kfiKuwjtLOMVQg51UbESx/+d1XmgLPqkz+jAqEPxvu8u5wO0Dov6vliTbtewJf8+fet3xnFNvyuY5ymmiTla6Gm9XPJscLj5iCzT3VhA/QuhhWXinmE/UnpYP0U4YPl5B/dUA9qT95BA6GBpDXPrDJRWNfpAH1wfG70lEBuBQXgdixYlwvx2JO6OI5+ztBKO0qFkgK
|
||||||
|
FLOWCASE_TOKEN: AgBLN1BWnFs3R2K+Wvb37ABucQWvx8mVVDEhZiIOYYLE8SDdbshxluP4J4IISmHwLX7Q0gYWeypfTCfvMa9c5b9AEjTcpodv4CMhjp5Mq7zUCtTI6pH6QZgLhjGheKCY+RciIK1DBsNk7CZa9MuVUdd1w0/m2C7fwikPPvNDHcNLR7zBBPWVlprgRyMrsdykcm7cmWcyqTwa/55DVPPJsG9x1K2YnjzgWHlX7BoLB/Nx7qX4XVadKEXnV0jVO5isalARxvke32pwebaiFSg8EZMhe4lntOqMSP26y/9RbveeEZS8qxzoR2OmsVrHUpMeppzpVkvQ9sKi2B4Vx8XoiRY6hZR+TmZKTvFa6JKx9gwAOVs53LEUaF7+uOQOrIcFyOXm7Ibj/azf7opqfvGajygRzSUaffTIixj+M5eJnm/iua/BWarW2w4c+ZIKvQ9DhcYpnF9Gj0U7+EWfNZyzlMoLRHsOIyKNUhOeEaSLoVQGyqRY72ZGqs83EPfQYlEu74PGyXPjd11KMhAayluGLadeAH2QDyigpf7REdXAGULNDhkJrqeYMmmGCZCyrvNOoXjYC4jQQEYA4Sd4QJA05q/EW8aFE/++nY8RqhbHqDz6wshAW/WFsTsR4JC6fc5qR+YVSmjKOa7lnk7I9vD7uPEZzCc6ImvA/NxTCfDKCREvLA5G0lYsmiTuxYmBesUgCSVVMxflEl1GXvGpFniZKPyvxIdna9j7XEQjUZsGTiyN1w==
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
creationTimestamp: null
|
creationTimestamp: null
|
||||||
|
|||||||
+5
-5
@@ -1,24 +1,24 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.16.0/.schema/devbox.schema.json",
|
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.16.0/.schema/devbox.schema.json",
|
||||||
"packages": [
|
"packages": [
|
||||||
"kubectl@1.33.2",
|
"kubectl@1.36.3",
|
||||||
"kubernetes-helm@3.18.4",
|
"kubernetes-helm@3.18.4",
|
||||||
"k9s@0.50.7",
|
"k9s@0.50.7",
|
||||||
"kubeseal@0.30.0",
|
"kubeseal@0.30.0",
|
||||||
"argocd@2.14.11",
|
"argocd@2.14.11",
|
||||||
"kubecm@0.33.1",
|
"kubecm@0.33.1",
|
||||||
"kubectl-tree@0.4.3",
|
"kubectl-tree@0.6.0",
|
||||||
"kind@0.29.0",
|
"kind@0.29.0",
|
||||||
"kustomize@5.7.0",
|
"kustomize@5.7.0",
|
||||||
"kyverno@1.14.3",
|
"kyverno@1.14.3",
|
||||||
"syft@1.29.0",
|
"syft@1.29.0",
|
||||||
"grype@0.92.2",
|
"grype@0.92.2",
|
||||||
"traefik@3.6.7",
|
"traefik@3.6.7",
|
||||||
"claude-code@latest",
|
"claude-code@0.2.122",
|
||||||
"go@latest",
|
"go@latest",
|
||||||
"dotnet-sdk@latest",
|
"dotnet-sdk@2.1.810",
|
||||||
"opentofu@1.11.6",
|
"opentofu@1.11.6",
|
||||||
"_1password@latest",
|
"_1password@1.12.2",
|
||||||
"github-cli@latest",
|
"github-cli@latest",
|
||||||
"upcloud-cli@3.29.0",
|
"upcloud-cli@3.29.0",
|
||||||
"awscli2@2.34.24"
|
"awscli2@2.34.24"
|
||||||
|
|||||||
@@ -1469,12 +1469,6 @@ ArgoCD will sync the Keycloak config, and the registrar CronJob will pick up the
|
|||||||
| `k8s.secret.client-id-key` | No | `client-id` | Field name for the client ID in the K8s Secret |
|
| `k8s.secret.client-id-key` | No | `client-id` | Field name for the client ID in the K8s Secret |
|
||||||
| `k8s.secret.client-secret-key` | No | `client-secret` | Field name for the client secret in the K8s Secret |
|
| `k8s.secret.client-secret-key` | No | `client-secret` | Field name for the client secret in the K8s Secret |
|
||||||
|
|
||||||
#### Public CLI Client (Device-Code Login)
|
|
||||||
|
|
||||||
`forte-cli` is a shared **public** client (no secret) with the RFC 8628 device-authorization grant enabled (`oauth2.device.authorization.grant.enabled: "true"`, `standardFlowEnabled: false`, `directAccessGrantsEnabled: false`). Downloaded skills and CLI tools that log in through the Auth Sidecar (forte-drop first) use it with `<PREFIX>_CLIENT_ID=forte-cli`; nothing per-tool needs to be registered in Keycloak.
|
|
||||||
|
|
||||||
It must be defined in `forte-realm.json` (this legacy path): the self-service registrar hardcodes `publicClient: false` / `standardFlowEnabled: true` and drops `attributes`, so a `client-config` Secret cannot produce a public device-code client. It carries no `k8s.secret.sync` attribute (the registrar's secret sync skips it) and is listed in the cleanup CronJob's protected clients.
|
|
||||||
|
|
||||||
### Retrieving Secrets for External Deployments
|
### Retrieving Secrets for External Deployments
|
||||||
|
|
||||||
The registrar always writes a **central copy** of every synced secret to the `secrets` namespace, in addition to the target namespace. This allows operators to retrieve client credentials for applications deployed outside this cluster:
|
The registrar always writes a **central copy** of every synced secret to the `secrets` namespace, in addition to the target namespace. This allows operators to retrieve client credentials for applications deployed outside this cluster:
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ spec:
|
|||||||
sources:
|
sources:
|
||||||
- repoURL: https://fluent.github.io/helm-charts
|
- repoURL: https://fluent.github.io/helm-charts
|
||||||
chart: fluent-bit
|
chart: fluent-bit
|
||||||
targetRevision: 0.47.10
|
targetRevision: 0.58.2
|
||||||
helm:
|
helm:
|
||||||
releaseName: fluent-bit
|
releaseName: fluent-bit
|
||||||
valueFiles:
|
valueFiles:
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ spec:
|
|||||||
source:
|
source:
|
||||||
chart: kyverno
|
chart: kyverno
|
||||||
repoURL: https://kyverno.github.io/kyverno/
|
repoURL: https://kyverno.github.io/kyverno/
|
||||||
targetRevision: v3.7.0 # Update to latest stable version
|
targetRevision: 3.9.1
|
||||||
helm:
|
helm:
|
||||||
releaseName: kyverno
|
releaseName: kyverno
|
||||||
valuesObject:
|
valuesObject:
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ spec:
|
|||||||
sources:
|
sources:
|
||||||
- repoURL: https://grafana.github.io/helm-charts
|
- repoURL: https://grafana.github.io/helm-charts
|
||||||
chart: loki
|
chart: loki
|
||||||
targetRevision: "6.0.0"
|
targetRevision: "7.0.0"
|
||||||
helm:
|
helm:
|
||||||
releaseName: loki
|
releaseName: loki
|
||||||
valueFiles:
|
valueFiles:
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ spec:
|
|||||||
sources:
|
sources:
|
||||||
- repoURL: ghcr.io/renovatebot/charts
|
- repoURL: ghcr.io/renovatebot/charts
|
||||||
chart: renovate
|
chart: renovate
|
||||||
targetRevision: "46.109.0"
|
targetRevision: "46.318.0"
|
||||||
helm:
|
helm:
|
||||||
releaseName: renovate
|
releaseName: renovate
|
||||||
valueFiles:
|
valueFiles:
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ spec:
|
|||||||
|
|
||||||
source:
|
source:
|
||||||
chart: sealed-secrets
|
chart: sealed-secrets
|
||||||
repoURL: https://bitnami-labs.github.io/sealed-secrets
|
repoURL: https://bitnami.github.io/sealed-secrets
|
||||||
targetRevision: 2.16.2 # Update to latest stable version
|
targetRevision: 2.20.0
|
||||||
helm:
|
helm:
|
||||||
releaseName: sealed-secrets
|
releaseName: sealed-secrets
|
||||||
parameters:
|
parameters:
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ spec:
|
|||||||
sources:
|
sources:
|
||||||
- repoURL: https://helm.releases.hashicorp.com
|
- repoURL: https://helm.releases.hashicorp.com
|
||||||
chart: vault
|
chart: vault
|
||||||
targetRevision: "0.32.0"
|
targetRevision: "0.34.1"
|
||||||
helm:
|
helm:
|
||||||
releaseName: vault
|
releaseName: vault
|
||||||
valueFiles:
|
valueFiles:
|
||||||
|
|||||||
@@ -186,21 +186,6 @@ keycloakConfigCli:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"clientId": "forte-cli",
|
|
||||||
"name": "Forte CLI",
|
|
||||||
"description": "Shared public client for RFC 8628 device-code login from downloaded skills/CLI tools (forte-drop first) against services behind Auth Sidecar. No client secret.",
|
|
||||||
"enabled": true,
|
|
||||||
"protocol": "openid-connect",
|
|
||||||
"standardFlowEnabled": false,
|
|
||||||
"directAccessGrantsEnabled": false,
|
|
||||||
"publicClient": true,
|
|
||||||
"redirectUris": [],
|
|
||||||
"webOrigins": [],
|
|
||||||
"attributes": {
|
|
||||||
"oauth2.device.authorization.grant.enabled": "true"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"browserFlow": "browser-auto-idp",
|
"browserFlow": "browser-auto-idp",
|
||||||
@@ -305,6 +290,7 @@ extraDeploy:
|
|||||||
namespace: keycloak
|
namespace: keycloak
|
||||||
spec:
|
spec:
|
||||||
schedule: "*/2 * * * *"
|
schedule: "*/2 * * * *"
|
||||||
|
timeZone: "Europe/Oslo"
|
||||||
concurrencyPolicy: Forbid
|
concurrencyPolicy: Forbid
|
||||||
successfulJobsHistoryLimit: 1
|
successfulJobsHistoryLimit: 1
|
||||||
failedJobsHistoryLimit: 3
|
failedJobsHistoryLimit: 3
|
||||||
@@ -317,7 +303,7 @@ extraDeploy:
|
|||||||
restartPolicy: Never
|
restartPolicy: Never
|
||||||
containers:
|
containers:
|
||||||
- name: registrar
|
- name: registrar
|
||||||
image: alpine:3.20
|
image: alpine:3.24
|
||||||
command: [ "/bin/sh", "-c" ]
|
command: [ "/bin/sh", "-c" ]
|
||||||
args:
|
args:
|
||||||
- |
|
- |
|
||||||
@@ -632,7 +618,9 @@ extraDeploy:
|
|||||||
name: keycloak-client-cleanup
|
name: keycloak-client-cleanup
|
||||||
namespace: keycloak
|
namespace: keycloak
|
||||||
spec:
|
spec:
|
||||||
schedule: "0 3 * * 0"
|
schedule: "0 3 1 * *"
|
||||||
|
timeZone: "Europe/Oslo"
|
||||||
|
startingDeadlineSeconds: 3600
|
||||||
concurrencyPolicy: Forbid
|
concurrencyPolicy: Forbid
|
||||||
successfulJobsHistoryLimit: 1
|
successfulJobsHistoryLimit: 1
|
||||||
failedJobsHistoryLimit: 3
|
failedJobsHistoryLimit: 3
|
||||||
@@ -645,7 +633,7 @@ extraDeploy:
|
|||||||
restartPolicy: Never
|
restartPolicy: Never
|
||||||
containers:
|
containers:
|
||||||
- name: cleanup
|
- name: cleanup
|
||||||
image: alpine:3.20
|
image: alpine:3.24
|
||||||
command: [ "/bin/sh", "-c" ]
|
command: [ "/bin/sh", "-c" ]
|
||||||
args:
|
args:
|
||||||
- |
|
- |
|
||||||
@@ -683,22 +671,24 @@ extraDeploy:
|
|||||||
MIN_AGE_SEC=$((MIN_AGE_DAYS * 86400))
|
MIN_AGE_SEC=$((MIN_AGE_DAYS * 86400))
|
||||||
|
|
||||||
# Hardcoded protected clients (never delete these)
|
# Hardcoded protected clients (never delete these)
|
||||||
PROTECTED_JSON='["gitea","grafana","argocd","forte-cli","vaultwarden","account","account-console","admin-cli","broker","realm-management","security-admin-console"]'
|
PROTECTED_JSON='["gitea","grafana","argocd","vaultwarden","account","account-console","admin-cli","broker","realm-management","security-admin-console"]'
|
||||||
|
|
||||||
echo "Fetching clients from realm '${REALM}'..."
|
echo "Fetching clients from realm '${REALM}'..."
|
||||||
CLIENTS=$(curl -sf -H "Authorization: Bearer ${TOKEN}" \
|
CLIENTS=$(curl -sf -H "Authorization: Bearer ${TOKEN}" \
|
||||||
"${KEYCLOAK_URL}/admin/realms/${REALM}/clients")
|
"${KEYCLOAK_URL}/admin/realms/${REALM}/clients")
|
||||||
|
|
||||||
CANDIDATES=$(echo "$CLIENTS" | jq -c --argjson protected "$PROTECTED_JSON" --argjson now "$NOW_SEC" --argjson min_age "$MIN_AGE_SEC" --arg pattern "$CLIENT_ID_PATTERN" '
|
CANDIDATES=$(echo "$CLIENTS" | jq -c --argjson protected "$PROTECTED_JSON" \
|
||||||
|
--argjson now "$NOW_SEC" --argjson min_age "$MIN_AGE_SEC" --arg pattern "$CLIENT_ID_PATTERN" '
|
||||||
[
|
[
|
||||||
.[]
|
.[]
|
||||||
| select(.clientId as $cid | $protected | index($cid) | not)
|
| select(.clientId as $cid | $protected | index($cid) | not)
|
||||||
| select(.attributes["k8s.secret.sync"] != "true")
|
| select(.attributes["k8s.secret.sync"] != "true")
|
||||||
| select(.clientId | test($pattern; "i"))
|
| select(.clientId | test($pattern; "i"))
|
||||||
| select((.createdTimestamp // 0) / 1000 < ($now - $min_age))
|
| select(.attributes["client.secret.creation.time"] != null)
|
||||||
|
| select((.attributes["client.secret.creation.time"] | tonumber) < ($now - $min_age))
|
||||||
]
|
]
|
||||||
')
|
')
|
||||||
|
|
||||||
COUNT=$(echo "$CANDIDATES" | jq 'length')
|
COUNT=$(echo "$CANDIDATES" | jq 'length')
|
||||||
echo "Found ${COUNT} candidate client(s) matching pattern and age threshold"
|
echo "Found ${COUNT} candidate client(s) matching pattern and age threshold"
|
||||||
|
|
||||||
@@ -743,7 +733,7 @@ extraDeploy:
|
|||||||
- name: DRY_RUN
|
- name: DRY_RUN
|
||||||
value: "false"
|
value: "false"
|
||||||
- name: MIN_AGE_DAYS
|
- name: MIN_AGE_DAYS
|
||||||
value: "15"
|
value: "60"
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: keycloak-credentials
|
- name: keycloak-credentials
|
||||||
mountPath: /secrets
|
mountPath: /secrets
|
||||||
|
|||||||
@@ -17,7 +17,14 @@ loki:
|
|||||||
period: 24h
|
period: 24h
|
||||||
object_store: filesystem # we're storing on filesystem so there's no real persistence here.
|
object_store: filesystem # we're storing on filesystem so there's no real persistence here.
|
||||||
schema: v13
|
schema: v13
|
||||||
|
compactor:
|
||||||
|
working_directory: /var/loki/compactor
|
||||||
|
retention_enabled: true
|
||||||
|
delete_request_store: filesystem
|
||||||
|
compaction_interval: 10m
|
||||||
|
retention_delete_delay: 2h
|
||||||
limits_config:
|
limits_config:
|
||||||
|
retention_period: 168h # 7 days
|
||||||
reject_old_samples: true
|
reject_old_samples: true
|
||||||
reject_old_samples_max_age: 168h
|
reject_old_samples_max_age: 168h
|
||||||
ingestion_rate_mb: 15
|
ingestion_rate_mb: 15
|
||||||
@@ -28,6 +35,8 @@ chunksCache:
|
|||||||
resultsCache:
|
resultsCache:
|
||||||
enabled: false
|
enabled: false
|
||||||
singleBinary:
|
singleBinary:
|
||||||
|
persistence:
|
||||||
|
size: 20Gi
|
||||||
replicas: 1
|
replicas: 1
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ renovate:
|
|||||||
"assignees": ["danijel.simeunovic"],
|
"assignees": ["danijel.simeunovic"],
|
||||||
"reviewers": ["danijel.simeunovic"]
|
"reviewers": ["danijel.simeunovic"]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"matchRepositories": ["**/launchpad"],
|
||||||
|
"assignees": ["danijel.simeunovic"],
|
||||||
|
"reviewers": ["danijel.simeunovic"]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"matchRepositories": ["**/forte-helm"],
|
"matchRepositories": ["**/forte-helm"],
|
||||||
"assignees": ["danijel.simeunovic"],
|
"assignees": ["danijel.simeunovic"],
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
|
"extends": [
|
||||||
|
"config:recommended",
|
||||||
|
"group:allNonMajor",
|
||||||
|
":dependencyDashboard",
|
||||||
|
":semanticCommits"
|
||||||
|
],
|
||||||
|
"timezone": "Europe/Oslo",
|
||||||
|
"labels": ["renovate"],
|
||||||
|
"reviewers": ["danijel.simeunovic"],
|
||||||
|
|
||||||
|
"prConcurrentLimit": 10,
|
||||||
|
"prHourlyLimit": 4,
|
||||||
|
"minimumReleaseAge": "3 days",
|
||||||
|
|
||||||
|
"ignorePaths": [
|
||||||
|
"**/*-sealed.yaml",
|
||||||
|
"cluster-resources/policies/**",
|
||||||
|
"private/**",
|
||||||
|
".devbox/**"
|
||||||
|
],
|
||||||
|
|
||||||
|
"argocd": {
|
||||||
|
"description": "ArgoCD Applications live under infra/, apps/ and the root app-of-apps files. The manager skips any file without an argoproj.io apiVersion, so matching broadly is safe.",
|
||||||
|
"managerFilePatterns": [
|
||||||
|
"/^_app-of-apps-.+\\.yaml$/",
|
||||||
|
"/^apps/.+\\.yaml$/",
|
||||||
|
"/^infra/.+\\.yaml$/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"helm-values": {
|
||||||
|
"description": "Values files are named <app>-values.yaml, not the default values.yaml.",
|
||||||
|
"managerFilePatterns": ["/^infra/values/.+\\.ya?ml$/"]
|
||||||
|
},
|
||||||
|
|
||||||
|
"kubernetes": {
|
||||||
|
"description": "Plain manifests with inline image references. Kyverno policies are excluded via ignorePaths - their images are Go templates, not tags.",
|
||||||
|
"managerFilePatterns": [
|
||||||
|
"/^cluster-resources/.+\\.yaml$/",
|
||||||
|
"/^apps/.+/resources/.+\\.yaml$/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"packageRules": [
|
||||||
|
{
|
||||||
|
"description": "Every Application carries a second source pointing at this repo at HEAD for $values. HEAD is not a version.",
|
||||||
|
"matchDatasources": ["git-tags"],
|
||||||
|
"matchDepNames": ["/forteapps\\.net/"],
|
||||||
|
"enabled": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Platform chart majors usually carry values-schema or CRD breaks - flag them for a careful read.",
|
||||||
|
"matchFileNames": ["infra/**"],
|
||||||
|
"matchUpdateTypes": ["major"],
|
||||||
|
"labels": ["renovate", "breaking-change"],
|
||||||
|
"minimumReleaseAge": "7 days"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Patch-level platform bumps are routine - let them through faster.",
|
||||||
|
"matchFileNames": ["infra/**"],
|
||||||
|
"matchUpdateTypes": ["patch"],
|
||||||
|
"minimumReleaseAge": "1 day"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user