feat: extend k3s artifact consumers
This commit is contained in:
@@ -41,7 +41,7 @@ services:
|
||||
K3SCTL_NATIVE_SERVICE_URL_MDTODO: "${K3SCTL_NATIVE_SERVICE_URL_MDTODO:-}"
|
||||
K3SCTL_NATIVE_SERVICE_URL_DECISION_CENTER: "${K3SCTL_NATIVE_SERVICE_URL_DECISION_CENTER:-}"
|
||||
K3SCTL_NATIVE_SERVICE_URL_DEVOPS: "${K3SCTL_NATIVE_SERVICE_URL_DEVOPS:-}"
|
||||
K3SCTL_MANIFEST_PATHS: "${K3SCTL_MANIFEST_PATHS:-k3s/code-queue.k3s.json,k3s/mdtodo.k3s.json,k3s/claudeqq.k3s.json,k3s/decision-center.k3s.json,k3s/dev/unidesk-dev-core.k3s.json,k3s/dev/unidesk-dev-decision-center.k3s.json}"
|
||||
K3SCTL_MANIFEST_PATHS: "${K3SCTL_MANIFEST_PATHS:-k3s/code-queue.k3s.json,k3s/mdtodo.k3s.json,k3s/claudeqq.k3s.json,k3s/decision-center.k3s.json,k3s/dev/unidesk-dev-core.k3s.json,k3s/dev/unidesk-dev-decision-center.k3s.json,k3s/dev/unidesk-dev-mdtodo.k3s.json,k3s/dev/unidesk-dev-claudeqq.k3s.json,k3s/dev/unidesk-dev-code-queue.k3s.json}"
|
||||
K3SCTL_SERVICES_JSON: "${K3SCTL_SERVICES_JSON:-[]}"
|
||||
UNIDESK_LOG_RETENTION_BYTES: "${UNIDESK_LOG_RETENTION_BYTES:-512MiB}"
|
||||
volumes:
|
||||
|
||||
@@ -633,6 +633,14 @@ spec:
|
||||
cp -a "$source_dir/." "$(workspaces.source.path)/user-service-artifact-repo/"
|
||||
cd "$(workspaces.source.path)/user-service-artifact-repo"
|
||||
test -f "$dockerfile"
|
||||
if [ "$service_id" = "claudeqq" ]; then
|
||||
test -f "$(dirname "$dockerfile")/scripts/src/server_ts/package.json"
|
||||
test -d "$(dirname "$dockerfile")/scripts/src/server_ts/src"
|
||||
elif [ "$service_id" = "frontend" ]; then
|
||||
test -d src/components/frontend/src
|
||||
else
|
||||
test -d "$(dirname "$dockerfile")/src"
|
||||
fi
|
||||
printf '%s\n' "$prepared_commit" | tee "$(workspaces.source.path)/user-service-artifact-commit.txt"
|
||||
printf '%s\n' "$service_id" | tee "$(workspaces.source.path)/user-service-artifact-service-id.txt"
|
||||
printf '%s\n' "$dockerfile" | tee "$(workspaces.source.path)/user-service-artifact-dockerfile.txt"
|
||||
@@ -684,6 +692,10 @@ spec:
|
||||
command -v docker
|
||||
docker version >/dev/null
|
||||
docker run --rm --network host rancher/mirrored-library-busybox:1.36.1 wget -q -O- "http://$registry/v2/" >/dev/null
|
||||
build_context=.
|
||||
if [ "$service_id" = "claudeqq" ]; then
|
||||
build_context="$(dirname "$dockerfile")"
|
||||
fi
|
||||
DOCKER_BUILDKIT=0 docker build \
|
||||
--network host \
|
||||
--build-arg HTTP_PROXY=http://127.0.0.1:18789 \
|
||||
@@ -697,7 +709,7 @@ spec:
|
||||
-t "$local_image" \
|
||||
-t "$registry_image" \
|
||||
-f "$dockerfile" \
|
||||
.
|
||||
"$build_context"
|
||||
actual_service="$(docker image inspect "$registry_image" --format '{{ index .Config.Labels "unidesk.ai/service-id" }}')"
|
||||
actual_commit="$(docker image inspect "$registry_image" --format '{{ index .Config.Labels "unidesk.ai/source-commit" }}')"
|
||||
test "$actual_service" = "$service_id"
|
||||
|
||||
@@ -116,6 +116,12 @@ spec:
|
||||
value: "10000"
|
||||
- name: UNIDESK_DEPLOY_SERVICE_ID
|
||||
value: "claudeqq"
|
||||
- name: UNIDESK_DEPLOY_REPO
|
||||
value: "https://gitee.com/lyon1998/agent_skills"
|
||||
- name: UNIDESK_DEPLOY_COMMIT
|
||||
value: "replace-with-deploy-env-commit"
|
||||
- name: UNIDESK_DEPLOY_REQUESTED_COMMIT
|
||||
value: "replace-with-deploy-env-commit"
|
||||
volumeMounts:
|
||||
- name: config-json
|
||||
mountPath: /app/config.json
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"apiVersion": "unidesk.ai/k3s/v1",
|
||||
"kind": "ManagedKubernetesService",
|
||||
"metadata": {
|
||||
"name": "claudeqq-dev",
|
||||
"namespace": "unidesk-dev"
|
||||
},
|
||||
"spec": {
|
||||
"adapterServiceId": "k3sctl-adapter",
|
||||
"controlPlane": {
|
||||
"type": "kubernetes",
|
||||
"cluster": "unidesk-k3s",
|
||||
"context": "unidesk-k3s"
|
||||
},
|
||||
"route": {
|
||||
"kind": "kubernetes-service",
|
||||
"serviceName": "claudeqq-dev",
|
||||
"servicePort": 3290
|
||||
},
|
||||
"activeInstanceId": "D601-dev-claudeqq",
|
||||
"singleWriter": true,
|
||||
"expectedNodeIds": [
|
||||
"D601"
|
||||
],
|
||||
"instances": [
|
||||
{
|
||||
"id": "D601-dev-claudeqq",
|
||||
"nodeId": "D601",
|
||||
"role": "primary",
|
||||
"baseUrl": "kubernetes://unidesk-dev/services/claudeqq-dev:3290",
|
||||
"healthPath": "/health",
|
||||
"healthMode": "service-proxy"
|
||||
}
|
||||
],
|
||||
"requireAllInstancesHealthy": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,235 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: claudeqq-dev
|
||||
namespace: unidesk-dev
|
||||
labels:
|
||||
app.kubernetes.io/name: claudeqq
|
||||
app.kubernetes.io/part-of: unidesk
|
||||
app.kubernetes.io/component: claudeqq
|
||||
unidesk.ai/environment: dev
|
||||
unidesk.ai/deployment-mode: k3sctl-managed
|
||||
unidesk.ai/deploy-service-id: claudeqq
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app.kubernetes.io/name: claudeqq
|
||||
app.kubernetes.io/part-of: unidesk
|
||||
app.kubernetes.io/component: claudeqq
|
||||
unidesk.ai/environment: dev
|
||||
ports:
|
||||
- name: http
|
||||
port: 3290
|
||||
targetPort: http
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: claudeqq-dev
|
||||
namespace: unidesk-dev
|
||||
labels:
|
||||
app.kubernetes.io/name: claudeqq
|
||||
app.kubernetes.io/part-of: unidesk
|
||||
app.kubernetes.io/component: claudeqq
|
||||
unidesk.ai/environment: dev
|
||||
unidesk.ai/deployment-mode: k3sctl-managed
|
||||
unidesk.ai/deploy-service-id: claudeqq
|
||||
annotations:
|
||||
unidesk.ai/deploy-ref: deploy.json#environments.dev.services.claudeqq
|
||||
unidesk.ai/deploy-service-id: claudeqq
|
||||
unidesk.ai/image-source: deploy-env-commit
|
||||
spec:
|
||||
replicas: 1
|
||||
strategy:
|
||||
type: Recreate
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: claudeqq
|
||||
app.kubernetes.io/part-of: unidesk
|
||||
app.kubernetes.io/component: claudeqq
|
||||
unidesk.ai/environment: dev
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: claudeqq
|
||||
app.kubernetes.io/part-of: unidesk
|
||||
app.kubernetes.io/component: claudeqq
|
||||
unidesk.ai/environment: dev
|
||||
unidesk.ai/node-id: D601
|
||||
unidesk.ai/deploy-service-id: claudeqq
|
||||
spec:
|
||||
nodeSelector:
|
||||
unidesk.ai/node-id: D601
|
||||
terminationGracePeriodSeconds: 30
|
||||
containers:
|
||||
- name: napcat
|
||||
image: mlikiowa/napcat-docker:latest
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- name: napcat-http
|
||||
containerPort: 3000
|
||||
- name: napcat-ws
|
||||
containerPort: 3001
|
||||
- name: napcat-webui
|
||||
containerPort: 6099
|
||||
env:
|
||||
- name: WEBUI_PREFIX
|
||||
value: "/webui"
|
||||
- name: WEBUI_TOKEN
|
||||
value: "unidesk-napcat-dev"
|
||||
- name: NAPCAT_UID
|
||||
value: "1000"
|
||||
- name: NAPCAT_GID
|
||||
value: "1000"
|
||||
- name: ACCOUNT
|
||||
value: "763382329"
|
||||
volumeMounts:
|
||||
- name: napcat-qq
|
||||
mountPath: /app/.config/QQ
|
||||
- name: napcat-config
|
||||
mountPath: /app/napcat/config
|
||||
- name: napcat-cache
|
||||
mountPath: /app/napcat/cache
|
||||
readinessProbe:
|
||||
tcpSocket:
|
||||
port: napcat-http
|
||||
periodSeconds: 5
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 12
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: napcat-http
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 12
|
||||
- name: claudeqq
|
||||
image: unidesk-claudeqq:dev-placeholder
|
||||
imagePullPolicy: IfNotPresent
|
||||
workingDir: /app/scripts/src/server_ts
|
||||
command:
|
||||
- node
|
||||
- unidesk-adapter.cjs
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 3290
|
||||
env:
|
||||
- name: CLAUDEQQ_HOST
|
||||
value: "0.0.0.0"
|
||||
- name: CLAUDEQQ_PORT
|
||||
value: "3290"
|
||||
- name: CLAUDEQQ_ADAPTER_PORT
|
||||
value: "3290"
|
||||
- name: CLAUDEQQ_UPSTREAM_HOST
|
||||
value: "127.0.0.1"
|
||||
- name: CLAUDEQQ_UPSTREAM_PORT
|
||||
value: "9082"
|
||||
- name: CLAUDEQQ_WORKSPACE_DIR
|
||||
value: "/bot_workspace"
|
||||
- name: CLAUDEQQ_AUTO_REPLY
|
||||
value: "false"
|
||||
- name: CLAUDEQQ_NAPCAT_HTTP_HOST
|
||||
value: "127.0.0.1"
|
||||
- name: CLAUDEQQ_NAPCAT_HTTP_PORT
|
||||
value: "3000"
|
||||
- name: CLAUDEQQ_NAPCAT_WS_HOST
|
||||
value: "127.0.0.1"
|
||||
- name: CLAUDEQQ_NAPCAT_WS_PORT
|
||||
value: "3001"
|
||||
- name: CLAUDEQQ_NAPCAT_ACCOUNT
|
||||
value: "763382329"
|
||||
- name: CLAUDEQQ_NAPCAT_DATA_DIR
|
||||
value: "/napcat"
|
||||
- name: CLAUDEQQ_NAPCAT_WEBUI_URL
|
||||
value: "http://127.0.0.1:6099/webui"
|
||||
- name: CLAUDEQQ_ONLINE_NOTICE_ENABLED
|
||||
value: "false"
|
||||
- name: CLAUDEQQ_LOGIN_MONITOR_INTERVAL_MS
|
||||
value: "10000"
|
||||
- name: UNIDESK_DEPLOY_SERVICE_ID
|
||||
value: claudeqq
|
||||
- name: UNIDESK_DEPLOY_REPO
|
||||
value: https://gitee.com/lyon1998/agent_skills
|
||||
- name: UNIDESK_DEPLOY_COMMIT
|
||||
value: replace-with-deploy-env-commit
|
||||
- name: UNIDESK_DEPLOY_REQUESTED_COMMIT
|
||||
value: replace-with-deploy-env-commit
|
||||
volumeMounts:
|
||||
- name: config-json
|
||||
mountPath: /app/config.json
|
||||
readOnly: true
|
||||
- name: bot-workspace
|
||||
mountPath: /bot_workspace
|
||||
- name: logs
|
||||
mountPath: /app/logs
|
||||
- name: state
|
||||
mountPath: /app/.state
|
||||
- name: napcat-root
|
||||
mountPath: /napcat
|
||||
readOnly: true
|
||||
- name: napcat-shell
|
||||
mountPath: /app/NapCat.Shell.Windows.OneKey
|
||||
readOnly: true
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: http
|
||||
periodSeconds: 5
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 20
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: http
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 12
|
||||
startupProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: http
|
||||
periodSeconds: 5
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 60
|
||||
resources:
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 256Mi
|
||||
limits:
|
||||
memory: 1Gi
|
||||
volumes:
|
||||
- name: config-json
|
||||
hostPath:
|
||||
path: /home/ubuntu/.agents/skills/claudeqq/config.json
|
||||
type: File
|
||||
- name: bot-workspace
|
||||
hostPath:
|
||||
path: /home/ubuntu/.agents/skills/claudeqq-dev/bot_workspace
|
||||
type: DirectoryOrCreate
|
||||
- name: logs
|
||||
hostPath:
|
||||
path: /home/ubuntu/.agents/skills/claudeqq-dev/logs
|
||||
type: DirectoryOrCreate
|
||||
- name: state
|
||||
hostPath:
|
||||
path: /home/ubuntu/.agents/skills/claudeqq-dev/.state
|
||||
type: DirectoryOrCreate
|
||||
- name: napcat-root
|
||||
hostPath:
|
||||
path: /home/ubuntu/.agents/skills/claudeqq-dev/napcat
|
||||
type: DirectoryOrCreate
|
||||
- name: napcat-qq
|
||||
hostPath:
|
||||
path: /home/ubuntu/.agents/skills/claudeqq-dev/napcat/qq
|
||||
type: DirectoryOrCreate
|
||||
- name: napcat-config
|
||||
hostPath:
|
||||
path: /home/ubuntu/.agents/skills/claudeqq-dev/napcat/config
|
||||
type: DirectoryOrCreate
|
||||
- name: napcat-cache
|
||||
hostPath:
|
||||
path: /home/ubuntu/.agents/skills/claudeqq-dev/napcat/cache
|
||||
type: DirectoryOrCreate
|
||||
- name: napcat-shell
|
||||
hostPath:
|
||||
path: /home/ubuntu/.agents/skills/claudeqq/NapCat.Shell.Windows.OneKey
|
||||
type: DirectoryOrCreate
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"apiVersion": "unidesk.ai/k3s/v1",
|
||||
"kind": "ManagedKubernetesService",
|
||||
"metadata": {
|
||||
"name": "code-queue-dev",
|
||||
"namespace": "unidesk-dev"
|
||||
},
|
||||
"spec": {
|
||||
"adapterServiceId": "k3sctl-adapter",
|
||||
"controlPlane": {
|
||||
"type": "kubernetes",
|
||||
"cluster": "unidesk-k3s",
|
||||
"context": "unidesk-k3s"
|
||||
},
|
||||
"route": {
|
||||
"kind": "kubernetes-service",
|
||||
"serviceName": "code-queue-scheduler-dev",
|
||||
"servicePort": 4222
|
||||
},
|
||||
"activeInstanceId": "D601-dev-code-queue",
|
||||
"singleWriter": true,
|
||||
"expectedNodeIds": [
|
||||
"D601"
|
||||
],
|
||||
"instances": [
|
||||
{
|
||||
"id": "D601-dev-code-queue",
|
||||
"nodeId": "D601",
|
||||
"role": "primary",
|
||||
"baseUrl": "kubernetes://unidesk-dev/services/code-queue-scheduler-dev:4222",
|
||||
"healthPath": "/health",
|
||||
"healthMode": "service-proxy"
|
||||
}
|
||||
],
|
||||
"requireAllInstancesHealthy": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"apiVersion": "unidesk.ai/k3s/v1",
|
||||
"kind": "ManagedKubernetesService",
|
||||
"metadata": {
|
||||
"name": "mdtodo-dev",
|
||||
"namespace": "unidesk-dev"
|
||||
},
|
||||
"spec": {
|
||||
"adapterServiceId": "k3sctl-adapter",
|
||||
"controlPlane": {
|
||||
"type": "kubernetes",
|
||||
"cluster": "unidesk-k3s",
|
||||
"context": "unidesk-k3s"
|
||||
},
|
||||
"route": {
|
||||
"kind": "kubernetes-service",
|
||||
"serviceName": "mdtodo-dev",
|
||||
"servicePort": 4267
|
||||
},
|
||||
"activeInstanceId": "D601-dev-mdtodo",
|
||||
"singleWriter": true,
|
||||
"expectedNodeIds": [
|
||||
"D601"
|
||||
],
|
||||
"instances": [
|
||||
{
|
||||
"id": "D601-dev-mdtodo",
|
||||
"nodeId": "D601",
|
||||
"role": "primary",
|
||||
"baseUrl": "kubernetes://unidesk-dev/services/mdtodo-dev:4267",
|
||||
"healthPath": "/health",
|
||||
"healthMode": "service-proxy"
|
||||
}
|
||||
],
|
||||
"requireAllInstancesHealthy": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: mdtodo-dev
|
||||
namespace: unidesk-dev
|
||||
labels:
|
||||
app.kubernetes.io/name: mdtodo
|
||||
app.kubernetes.io/part-of: unidesk
|
||||
app.kubernetes.io/component: mdtodo
|
||||
unidesk.ai/environment: dev
|
||||
unidesk.ai/deployment-mode: k3sctl-managed
|
||||
unidesk.ai/deploy-service-id: mdtodo
|
||||
spec:
|
||||
type: ClusterIP
|
||||
selector:
|
||||
app.kubernetes.io/name: mdtodo
|
||||
app.kubernetes.io/part-of: unidesk
|
||||
app.kubernetes.io/component: mdtodo
|
||||
unidesk.ai/environment: dev
|
||||
ports:
|
||||
- name: http
|
||||
port: 4267
|
||||
targetPort: http
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: mdtodo-dev
|
||||
namespace: unidesk-dev
|
||||
labels:
|
||||
app.kubernetes.io/name: mdtodo
|
||||
app.kubernetes.io/part-of: unidesk
|
||||
app.kubernetes.io/component: mdtodo
|
||||
unidesk.ai/environment: dev
|
||||
unidesk.ai/deployment-mode: k3sctl-managed
|
||||
unidesk.ai/deploy-service-id: mdtodo
|
||||
annotations:
|
||||
unidesk.ai/deploy-ref: deploy.json#environments.dev.services.mdtodo
|
||||
unidesk.ai/deploy-service-id: mdtodo
|
||||
unidesk.ai/image-source: deploy-env-commit
|
||||
spec:
|
||||
replicas: 1
|
||||
strategy:
|
||||
type: Recreate
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: mdtodo
|
||||
app.kubernetes.io/part-of: unidesk
|
||||
app.kubernetes.io/component: mdtodo
|
||||
unidesk.ai/environment: dev
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: mdtodo
|
||||
app.kubernetes.io/part-of: unidesk
|
||||
app.kubernetes.io/component: mdtodo
|
||||
unidesk.ai/environment: dev
|
||||
unidesk.ai/node-id: D601
|
||||
unidesk.ai/deploy-service-id: mdtodo
|
||||
spec:
|
||||
nodeSelector:
|
||||
unidesk.ai/node-id: D601
|
||||
terminationGracePeriodSeconds: 15
|
||||
initContainers:
|
||||
- name: seed-workspace
|
||||
image: rancher/mirrored-library-busybox:1.36.1
|
||||
imagePullPolicy: IfNotPresent
|
||||
command:
|
||||
- sh
|
||||
- -c
|
||||
- |
|
||||
set -eu
|
||||
mkdir -p /workspace
|
||||
if [ ! -f /workspace/dev-mdtodo.md ]; then
|
||||
cat > /workspace/dev-mdtodo.md <<'EOF'
|
||||
# Dev MDTODO
|
||||
|
||||
## R1 Dev health seed
|
||||
|
||||
This seeded TODO file makes the dev health check prove readable hostPath storage.
|
||||
EOF
|
||||
fi
|
||||
volumeMounts:
|
||||
- name: workspace
|
||||
mountPath: /workspace
|
||||
containers:
|
||||
- name: mdtodo
|
||||
image: unidesk-mdtodo:dev-placeholder
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 4267
|
||||
env:
|
||||
- name: HOST
|
||||
value: "0.0.0.0"
|
||||
- name: PORT
|
||||
value: "4267"
|
||||
- name: MDTODO_ROOT_DIR
|
||||
value: "/workspace"
|
||||
- name: LOG_FILE
|
||||
value: /var/log/unidesk-dev/mdtodo-dev.jsonl
|
||||
- name: UNIDESK_DEPLOY_SERVICE_ID
|
||||
value: mdtodo
|
||||
- name: UNIDESK_DEPLOY_REPO
|
||||
value: https://github.com/pikasTech/unidesk
|
||||
- name: UNIDESK_DEPLOY_COMMIT
|
||||
value: replace-with-deploy-env-commit
|
||||
- name: UNIDESK_DEPLOY_REQUESTED_COMMIT
|
||||
value: replace-with-deploy-env-commit
|
||||
volumeMounts:
|
||||
- name: workspace
|
||||
mountPath: /workspace
|
||||
- name: logs
|
||||
mountPath: /var/log/unidesk-dev
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /health
|
||||
port: http
|
||||
periodSeconds: 5
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 18
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /live
|
||||
port: http
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 6
|
||||
startupProbe:
|
||||
httpGet:
|
||||
path: /live
|
||||
port: http
|
||||
periodSeconds: 5
|
||||
timeoutSeconds: 3
|
||||
failureThreshold: 30
|
||||
resources:
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 96Mi
|
||||
limits:
|
||||
memory: 512Mi
|
||||
volumes:
|
||||
- name: workspace
|
||||
hostPath:
|
||||
path: /home/ubuntu/unidesk-dev-mdtodo-workspace
|
||||
type: DirectoryOrCreate
|
||||
- name: logs
|
||||
hostPath:
|
||||
path: /home/ubuntu/cq-deploy/.state/mdtodo-dev/logs
|
||||
type: DirectoryOrCreate
|
||||
@@ -42,6 +42,14 @@ spec:
|
||||
value: "/workspace"
|
||||
- name: LOG_FILE
|
||||
value: "/var/log/unidesk/mdtodo.jsonl"
|
||||
- name: UNIDESK_DEPLOY_SERVICE_ID
|
||||
value: "mdtodo"
|
||||
- name: UNIDESK_DEPLOY_REPO
|
||||
value: "https://github.com/pikasTech/unidesk"
|
||||
- name: UNIDESK_DEPLOY_COMMIT
|
||||
value: "replace-with-deploy-env-commit"
|
||||
- name: UNIDESK_DEPLOY_REQUESTED_COMMIT
|
||||
value: "replace-with-deploy-env-commit"
|
||||
- name: UNIDESK_LOG_RETENTION_BYTES
|
||||
value: "512MiB"
|
||||
volumeMounts:
|
||||
|
||||
@@ -291,7 +291,7 @@ function mergeServices(services: ManagedService[]): ManagedService[] {
|
||||
}
|
||||
|
||||
function readConfig(): RuntimeConfig {
|
||||
const paths = manifestPaths(envString("K3SCTL_MANIFEST_PATHS", "k3s/code-queue.k3s.json,k3s/mdtodo.k3s.json,k3s/claudeqq.k3s.json,k3s/decision-center.k3s.json,k3s/dev/unidesk-dev-core.k3s.json,k3s/dev/unidesk-dev-decision-center.k3s.json"));
|
||||
const paths = manifestPaths(envString("K3SCTL_MANIFEST_PATHS", "k3s/code-queue.k3s.json,k3s/mdtodo.k3s.json,k3s/claudeqq.k3s.json,k3s/decision-center.k3s.json,k3s/dev/unidesk-dev-core.k3s.json,k3s/dev/unidesk-dev-decision-center.k3s.json,k3s/dev/unidesk-dev-mdtodo.k3s.json,k3s/dev/unidesk-dev-claudeqq.k3s.json,k3s/dev/unidesk-dev-code-queue.k3s.json"));
|
||||
const inlineServices = parseServices(envString("K3SCTL_SERVICES_JSON", "[]"));
|
||||
const manifestServices = readManifestServices(paths);
|
||||
return {
|
||||
|
||||
@@ -89,6 +89,10 @@ const rootRealPath = resolveRealWorkspaceRoot(workspaceRoot);
|
||||
const maxFiles = envNumber("MDTODO_MAX_FILES", 250);
|
||||
const recentLogs: JsonRecord[] = [];
|
||||
const logFile = envString("LOG_FILE", envString("MDTODO_LOG_FILE", "/var/log/unidesk/mdtodo.jsonl"));
|
||||
const deployServiceId = envString("UNIDESK_DEPLOY_SERVICE_ID", "mdtodo");
|
||||
const deployRepo = envString("UNIDESK_DEPLOY_REPO", "");
|
||||
const deployCommit = envString("UNIDESK_DEPLOY_COMMIT", "");
|
||||
const deployRequestedCommit = envString("UNIDESK_DEPLOY_REQUESTED_COMMIT", deployCommit);
|
||||
const logWriter = logFile
|
||||
? createHourlyJsonlWriter({
|
||||
baseLogFile: logFile,
|
||||
@@ -592,6 +596,12 @@ function healthSnapshot(): { body: JsonRecord; status: number } {
|
||||
ok: healthy,
|
||||
service: "mdtodo",
|
||||
startedAt,
|
||||
deploy: {
|
||||
serviceId: deployServiceId,
|
||||
repo: deployRepo,
|
||||
commit: deployCommit,
|
||||
requestedCommit: deployRequestedCommit,
|
||||
},
|
||||
rootDir: workspaceRoot,
|
||||
rootExists,
|
||||
writable,
|
||||
@@ -622,7 +632,17 @@ async function route(req: Request): Promise<Response> {
|
||||
const health = healthSnapshot();
|
||||
return jsonResponse(health.body, health.status);
|
||||
}
|
||||
if (url.pathname === "/live") return jsonResponse({ ok: true, service: "mdtodo", startedAt });
|
||||
if (url.pathname === "/live") return jsonResponse({
|
||||
ok: true,
|
||||
service: "mdtodo",
|
||||
startedAt,
|
||||
deploy: {
|
||||
serviceId: deployServiceId,
|
||||
repo: deployRepo,
|
||||
commit: deployCommit,
|
||||
requestedCommit: deployRequestedCommit,
|
||||
},
|
||||
});
|
||||
if (url.pathname === "/logs" && req.method === "GET") return jsonResponse({ ok: true, logs: recentLogs.slice(-100) });
|
||||
if (url.pathname === "/api/files" && req.method === "GET") return jsonResponse({ ok: true, rootDir: workspaceRoot, files: listTodoFiles() });
|
||||
if (url.pathname === "/api/content" && req.method === "GET") {
|
||||
|
||||
Reference in New Issue
Block a user