From d802ad6d5b390fd915d7c0726dd0720b4f59c84f Mon Sep 17 00:00:00 2001 From: HWLAB node GitOps Bot Date: Tue, 21 Jul 2026 20:43:45 +0000 Subject: [PATCH] chore: promote node GitOps source ed0c4a7 --- deploy/artifact-catalog.nc01-v03.json | 1182 ++- .../node/nc01/runtime-v03/configmaps.yaml | 12 +- .../node/nc01/runtime-v03/deepseek-proxy.yaml | 741 +- .../nc01/runtime-v03/external-postgres.yaml | 229 +- .../nc01/runtime-v03/health-contract.yaml | 62 +- .../node/nc01/runtime-v03/kustomization.yaml | 34 +- .../node/nc01/runtime-v03/namespace.yaml | 2 +- .../node/nc01/runtime-v03/node-frpc.yaml | 200 +- .../node/nc01/runtime-v03/observability.yaml | 28 + .../node/nc01/runtime-v03/opencode.yaml | 76 +- .../gitops/node/nc01/runtime-v03/openfga.yaml | 138 +- .../node/nc01/runtime-v03/services.yaml | 881 +- .../nc01/runtime-v03/workbench-redis.yaml | 10 +- .../node/nc01/runtime-v03/workloads.yaml | 8471 +++++++++++++---- 14 files changed, 9134 insertions(+), 2932 deletions(-) create mode 100644 deploy/gitops/node/nc01/runtime-v03/observability.yaml diff --git a/deploy/artifact-catalog.nc01-v03.json b/deploy/artifact-catalog.nc01-v03.json index fae41b1f..9d3b4431 100644 --- a/deploy/artifact-catalog.nc01-v03.json +++ b/deploy/artifact-catalog.nc01-v03.json @@ -4,13 +4,13 @@ "environment": "v03", "profile": "v03", "namespace": "hwlab-v03", - "endpoint": "https://hwlab.pikapython.com", - "commitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "endpoint": "https://lab-dev.hwpod.com", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", "artifactState": "published", "publish": { "ciPublished": true, "registryVerified": true, - "provenance": "node-ci-artifact:hwlab-nc01-v03-ci-poll-3a87d3513a2f-rmreottcv-collect", + "provenance": "node-ci-artifact:hwlab-nc01-v03-ci-poll-ed0c4a7e27270434708a189ba6403097b42fqh9f-collect", "note": "Digest fields were copied from a successful DEV artifact publish report for this source commit." }, "healthContract": { @@ -33,12 +33,12 @@ "services": [ { "serviceId": "hwlab-cloud-api", - "commitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "sourceCommitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "imageTag": "env-6ef8ca3abf22", - "digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "publishState": "reused", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "publishState": "published", "profile": "v03", "namespace": "hwlab-v03", "healthPath": "/health/live", @@ -47,62 +47,59 @@ "artifactRequired": true, "artifactScope": "required", "notPublishedReason": null, - "buildCreatedAt": "2026-07-08T01:39:47.076Z", - "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:5294e425c43f3d7905d4bdcf469944168afae18305dc487a9b913cc4a858fa88", - "buildBackend": "reused-env-catalog", - "componentCommitId": "8ad5976a07711de1529c673f1be566c4cf4dc3f1", - "componentInputHash": "5e165b008aa4eeff02fd6f60542425ca4ba3cf151e3519cef42637a30adfd8d5", - "runtimeMode": "env-reuse-git-mirror-checkout", + "buildCreatedAt": "2026-07-21T20:42:38.489Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "738b2a8042fe3aefc18e568e7de342fc1a6a91c2", + "componentInputHash": "15477a6a9fb3081f95e3572ddb4a85e09335129c697ab562c87d42e733d956ef", + "runtimeMode": "env-reuse-gitea-checkout", "envReuse": true, - "envChanged": false, + "envChanged": true, "codeChanged": true, - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "environmentDigest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "environmentInputHash": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93", - "codeInputHash": "42ccfe73401c8afec008ddfbeab5ae5b568d0a2dbedbe92b35bdb9ff1d034916", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentInputHash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "codeInputHash": "022052df829862fde013af1c8c36e6c502d637e9efeacc78b1af9f867b4bf66d", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-cloud-api.sh", "bootEnvEvidence": { - "runtimeMode": "env-reuse-git-mirror-checkout", - "environmentDigest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-cloud-api.sh", "env": { "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", - "HWLAB_BOOT_COMMIT": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-cloud-api.sh", - "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "HWLAB_ENVIRONMENT_DIGEST": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" } }, - "dockerfileHash": "78a9d92bd6ecea408f22e0d6eabf79fab66008b56429446d4621837f1150904d", + "dockerfileHash": "ddc6aab7778eda49f101b8dc69b180ba42b683e6a5938e888c8a92ace22b3537", "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", "baseImageDigest": null, "buildArgsHash": "445d32282d642d5089290ffe5f621ccea3206cf1d9f11b24091f82a4434cbcd5", "ciAffected": true, "ciReason": [ - "runtime-config-changed", - "code-input-changed", - "component-path-changed" + "environment-input-mismatch", + "code-input-changed" ], "reuse": { - "status": "ready", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "reusedFrom": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93" + "status": "not-reused", + "reason": "environment-affected" }, "reusedFrom": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93" }, { "serviceId": "hwlab-workbench-runtime", - "commitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "sourceCommitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "image": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-6d50571be334", - "imageTag": "env-6d50571be334", - "digest": "sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-934129c3af54", + "imageTag": "env-934129c3af54", + "digest": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f", "publishState": "reused", "profile": "v03", "namespace": "hwlab-v03", @@ -112,62 +109,59 @@ "artifactRequired": true, "artifactScope": "required", "notPublishedReason": null, - "buildCreatedAt": "2026-07-08T01:39:47.948Z", - "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:27a14c62fd157951c710c784863072e3cd75995c278004a5524e4a262c8bff32", - "buildBackend": "reused-env-catalog", - "componentCommitId": "ce83ffdf49462ad18b80d75679ad8f449cdbee4e", - "componentInputHash": "d2af9d3614bd47effa90433391800d84af43d214c36ad3e4fa94eb780f0c8390", - "runtimeMode": "env-reuse-git-mirror-checkout", + "buildCreatedAt": "2026-07-21T20:42:42.588Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:934129c3af54712455d60e482164908d4c1578a20efad966d26757a136a73b85", + "buildBackend": "shared-env-artifact", + "componentCommitId": "fac860fca96a147e22ad1e3573b8ebf5261f9f02", + "componentInputHash": "1884623f910b9bbc50c7f64ecde077915ca5e7b753b5a39058e747b94ac93a79", + "runtimeMode": "env-reuse-gitea-checkout", "envReuse": true, - "envChanged": false, + "envChanged": true, "codeChanged": true, - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-6d50571be334", - "environmentDigest": "sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243", - "environmentInputHash": "6d50571be334e4558b2a2e229b36d932d57443bb806d409242e5335660c8f445", - "codeInputHash": "3d7b7a1528c474cec931bbab71ee70bd08dab59ea744effc9adfa171c06c5a7d", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-934129c3af54", + "environmentDigest": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f", + "environmentInputHash": "13bdc18b089e043c5eaaaa79e50f9858fba53506d35e5e2d73dca1ead8608d1b", + "codeInputHash": "396d8eb6ed0800ea9fad0b4c7340fe4b826e67efaeee108e1e042c58f002ac4b", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-workbench-runtime.sh", "bootEnvEvidence": { - "runtimeMode": "env-reuse-git-mirror-checkout", - "environmentDigest": "sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243", - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-6d50571be334", + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-934129c3af54", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-workbench-runtime.sh", "env": { "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", - "HWLAB_BOOT_COMMIT": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-workbench-runtime.sh", - "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-6d50571be334", - "HWLAB_ENVIRONMENT_DIGEST": "sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243" + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-934129c3af54", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f" } }, - "dockerfileHash": "78a9d92bd6ecea408f22e0d6eabf79fab66008b56429446d4621837f1150904d", + "dockerfileHash": "e47bb707830ee44b42d7d103db7e8ee2779212ddbb9e73bd39dc662a8c682268", "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", "baseImageDigest": null, "buildArgsHash": "4269b9316d150facffb495f7c4900ee56af391c071b86063ae850defa7e64e99", "ciAffected": true, "ciReason": [ - "code-input-changed", - "component-path-changed" + "shared-env-artifact-consumer" ], "reuse": { - "status": "ready", - "image": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-6d50571be334", - "digest": "sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243", - "reusedFrom": "6d50571be334e4558b2a2e229b36d932d57443bb806d409242e5335660c8f445" + "status": "not-reused", + "reason": "environment-affected" }, - "reusedFrom": "6d50571be334e4558b2a2e229b36d932d57443bb806d409242e5335660c8f445" + "reusedFrom": "hwlab-user-billing" }, { "serviceId": "hwlab-user-billing", - "commitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "sourceCommitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "image": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-6d50571be334", - "imageTag": "env-6d50571be334", - "digest": "sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243", - "publishState": "reused", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-934129c3af54", + "imageTag": "env-934129c3af54", + "digest": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f", + "publishState": "published", "profile": "v03", "namespace": "hwlab-v03", "healthPath": "/health/live", @@ -176,60 +170,59 @@ "artifactRequired": true, "artifactScope": "required", "notPublishedReason": null, - "buildCreatedAt": "2026-07-08T01:39:47.948Z", - "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:27a14c62fd157951c710c784863072e3cd75995c278004a5524e4a262c8bff32", - "buildBackend": "reused-env-catalog", - "componentCommitId": "4043855bffebc01696a2461ce0479bfac0f470c6", - "componentInputHash": "0a765cf5eb4695599a0e5960bd81890023d124d683c5def7ccc0067872bd3453", - "runtimeMode": "env-reuse-git-mirror-checkout", + "buildCreatedAt": "2026-07-21T20:42:42.588Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:934129c3af54712455d60e482164908d4c1578a20efad966d26757a136a73b85", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "fac860fca96a147e22ad1e3573b8ebf5261f9f02", + "componentInputHash": "d8337e50fd175feaf0f33db3c37ccb85c4e948a66d9ae21d8fce9c7163408ef1", + "runtimeMode": "env-reuse-gitea-checkout", "envReuse": true, - "envChanged": false, - "codeChanged": false, - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-6d50571be334", - "environmentDigest": "sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243", - "environmentInputHash": "6d50571be334e4558b2a2e229b36d932d57443bb806d409242e5335660c8f445", - "codeInputHash": "09a0983dcc5525d93de6ab636a9de686739625d5549f108f366c44cae7835d69", + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-934129c3af54", + "environmentDigest": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f", + "environmentInputHash": "934129c3af54712455d60e482164908d4c1578a20efad966d26757a136a73b85", + "codeInputHash": "686039eef616c0850f74f2a31618dfdb2fd91b0ef15a1805f487cbded3b021ce", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-user-billing.sh", "bootEnvEvidence": { - "runtimeMode": "env-reuse-git-mirror-checkout", - "environmentDigest": "sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243", - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-6d50571be334", + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-934129c3af54", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-user-billing.sh", "env": { "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", - "HWLAB_BOOT_COMMIT": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-user-billing.sh", - "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-6d50571be334", - "HWLAB_ENVIRONMENT_DIGEST": "sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243" + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-934129c3af54", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f" } }, - "dockerfileHash": "78a9d92bd6ecea408f22e0d6eabf79fab66008b56429446d4621837f1150904d", + "dockerfileHash": "e47bb707830ee44b42d7d103db7e8ee2779212ddbb9e73bd39dc662a8c682268", "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", "baseImageDigest": null, "buildArgsHash": "490a070de1a6975b4935670478f0e64345d20e1aa9b80096b1318106b25d9310", - "ciAffected": false, + "ciAffected": true, "ciReason": [ - "component-inputs-unchanged" + "environment-input-mismatch", + "code-input-changed" ], "reuse": { - "status": "ready", - "image": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-6d50571be334", - "digest": "sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243", - "reusedFrom": "6d50571be334e4558b2a2e229b36d932d57443bb806d409242e5335660c8f445" + "status": "not-reused", + "reason": "environment-affected" }, "reusedFrom": "6d50571be334e4558b2a2e229b36d932d57443bb806d409242e5335660c8f445" }, { "serviceId": "hwlab-project-management", - "commitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "sourceCommitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "imageTag": "env-6ef8ca3abf22", - "digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", "publishState": "reused", "profile": "v03", "namespace": "hwlab-v03", @@ -239,60 +232,58 @@ "artifactRequired": true, "artifactScope": "required", "notPublishedReason": null, - "buildCreatedAt": "2026-07-08T01:39:47.076Z", - "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:5294e425c43f3d7905d4bdcf469944168afae18305dc487a9b913cc4a858fa88", - "buildBackend": "reused-env-catalog", - "componentCommitId": "f4169505565f315b66600fafa13a089bdf2e8a5f", - "componentInputHash": "640f977edfb6d73f4a33662c2297bfdaba6a476359d55bcb5de52ca41ec49e97", - "runtimeMode": "env-reuse-git-mirror-checkout", + "buildCreatedAt": "2026-07-21T20:42:38.489Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "shared-env-artifact", + "componentCommitId": "fac860fca96a147e22ad1e3573b8ebf5261f9f02", + "componentInputHash": "ed7cc4b990982f7c9ef55c87ebf459ad3c5d37555a499ca09dc10301df4fa3aa", + "runtimeMode": "env-reuse-gitea-checkout", "envReuse": true, - "envChanged": false, - "codeChanged": false, - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "environmentDigest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "environmentInputHash": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93", - "codeInputHash": "40ae36e390964621faedf740a038ba84d4933171ad1f17dd6681fd82e69a9a9f", + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentInputHash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "codeInputHash": "ad7954f7bf2a2d97cb260e9ce2b0a6d11cc30952407a60c7d313a469d21614f7", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-project-management.sh", "bootEnvEvidence": { - "runtimeMode": "env-reuse-git-mirror-checkout", - "environmentDigest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-project-management.sh", "env": { "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", - "HWLAB_BOOT_COMMIT": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-project-management.sh", - "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "HWLAB_ENVIRONMENT_DIGEST": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" } }, - "dockerfileHash": "78a9d92bd6ecea408f22e0d6eabf79fab66008b56429446d4621837f1150904d", + "dockerfileHash": "e47bb707830ee44b42d7d103db7e8ee2779212ddbb9e73bd39dc662a8c682268", "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", "baseImageDigest": null, "buildArgsHash": "30d9f35c4d70555725db1ef7a591b9af9cb158e82d924d3c6dc82326fbeffbd4", - "ciAffected": false, + "ciAffected": true, "ciReason": [ - "component-inputs-unchanged" + "shared-env-artifact-consumer" ], "reuse": { - "status": "ready", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "reusedFrom": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93" + "status": "not-reused", + "reason": "environment-affected" }, - "reusedFrom": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93" + "reusedFrom": "hwlab-cloud-api" }, { - "serviceId": "hwlab-cloud-web", - "commitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "sourceCommitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "imageTag": "env-6ef8ca3abf22", - "digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", + "serviceId": "hwlab-tasktree-api", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", "publishState": "reused", "profile": "v03", "namespace": "hwlab-v03", @@ -302,61 +293,614 @@ "artifactRequired": true, "artifactScope": "required", "notPublishedReason": null, - "buildCreatedAt": "2026-07-08T01:39:47.076Z", - "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:5294e425c43f3d7905d4bdcf469944168afae18305dc487a9b913cc4a858fa88", - "buildBackend": "reused-env-catalog", - "componentCommitId": "8ad5976a07711de1529c673f1be566c4cf4dc3f1", - "componentInputHash": "a2e366049f4f379a86cf66de688324c376a4497f111d4e3e2164ee885b5b288e", - "runtimeMode": "env-reuse-git-mirror-checkout", + "buildCreatedAt": "2026-07-21T20:42:38.489Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "shared-env-artifact", + "componentCommitId": "787752bacdb85daf75a79ee2b85eafb6d130a817", + "componentInputHash": "4f59d07a376e8301e5cf4b18d4a1333a11a2bc8e6c830cadcfb28f0fe635973c", + "runtimeMode": "env-reuse-gitea-checkout", "envReuse": true, - "envChanged": false, + "envChanged": true, "codeChanged": true, - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "environmentDigest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "environmentInputHash": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93", - "codeInputHash": "d6142983ba6f3786afc3dbff243e1215bdf7bb5e4c44fb6064a8caf467a7f396", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentInputHash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "codeInputHash": "16e35cab0d3ba2f60ac09266a2830155477dd2dd9a3c0a0c5be3482b57cd16e1", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-tasktree-api.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-tasktree-api.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-tasktree-api.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + } + }, + "dockerfileHash": "e47bb707830ee44b42d7d103db7e8ee2779212ddbb9e73bd39dc662a8c682268", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "c8476d2be51e0aad9ed5a6d402d4ddbb12682116a4c201d85cbad85a7732ef39", + "ciAffected": true, + "ciReason": [ + "shared-env-artifact-consumer" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": "hwlab-cloud-api" + }, + { + "serviceId": "hwlab-tasktree-worker", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "publishState": "reused", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-07-21T20:42:38.489Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "shared-env-artifact", + "componentCommitId": "787752bacdb85daf75a79ee2b85eafb6d130a817", + "componentInputHash": "1d522ebf4a30e776a31048693ee90fbb68d11bcf5cf8f4138deec11c547008e1", + "runtimeMode": "env-reuse-gitea-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentInputHash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "codeInputHash": "aa2d956ed3fa16752b8d1679a8ebcdcfa2f496982af1f8d75200a14ee7c191ff", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-tasktree-worker.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-tasktree-worker.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-tasktree-worker.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + } + }, + "dockerfileHash": "e47bb707830ee44b42d7d103db7e8ee2779212ddbb9e73bd39dc662a8c682268", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "b78d2a1abd7ed2eab4265bb8fff4e50f3b1e55aadd043b7e82b4672fb2f514e1", + "ciAffected": true, + "ciReason": [ + "shared-env-artifact-consumer" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": "hwlab-cloud-api" + }, + { + "serviceId": "hwlab-harnessrl-api", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-harnessrl-api-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:be9e19679ceb9957d254a219b6896e145fdde9716b331fa796fdfd22ec61550f", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-07-21T20:42:50.481Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "7d2c66bebd4f6ec5b85159007254918f134465e0", + "componentInputHash": "3cc2b71a272f784a73940a49de5cd8a17d7a560f1bb871b0ef8ba911d3450ca4", + "runtimeMode": "env-reuse-gitea-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-harnessrl-api-env:env-1342b35c683d", + "environmentDigest": "sha256:be9e19679ceb9957d254a219b6896e145fdde9716b331fa796fdfd22ec61550f", + "environmentInputHash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "codeInputHash": "a48f28e72d6e952f36114052f395408bb062f076e2c0c7f864f028f0b6783412", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-harnessrl-api.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:be9e19679ceb9957d254a219b6896e145fdde9716b331fa796fdfd22ec61550f", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-harnessrl-api-env:env-1342b35c683d", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-harnessrl-api.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-harnessrl-api.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-harnessrl-api-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:be9e19679ceb9957d254a219b6896e145fdde9716b331fa796fdfd22ec61550f" + } + }, + "dockerfileHash": "ddc6aab7778eda49f101b8dc69b180ba42b683e6a5938e888c8a92ace22b3537", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "11a98a5a817e5a29d9ef665bc4b1d81a90c4ffdc437f9f991adbb8eb347cbf5c", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-harnessrl-worker", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-harnessrl-worker-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:ed738e7f3e4fe9ffb835f9df49f4ea9454ea250f7e79072497711960ad3935e3", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-07-21T20:42:50.482Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "7d2c66bebd4f6ec5b85159007254918f134465e0", + "componentInputHash": "b8f9a5a4c700ee88ecaad8f42c182b307275b03f5095e94d28c3f6ad768a7fc6", + "runtimeMode": "env-reuse-gitea-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-harnessrl-worker-env:env-1342b35c683d", + "environmentDigest": "sha256:ed738e7f3e4fe9ffb835f9df49f4ea9454ea250f7e79072497711960ad3935e3", + "environmentInputHash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "codeInputHash": "e5cfa8df59198459e82bbf99b19508a420f6f030c41c81c1b3df808a81d8c89a", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-harnessrl-worker.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:ed738e7f3e4fe9ffb835f9df49f4ea9454ea250f7e79072497711960ad3935e3", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-harnessrl-worker-env:env-1342b35c683d", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-harnessrl-worker.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-harnessrl-worker.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-harnessrl-worker-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:ed738e7f3e4fe9ffb835f9df49f4ea9454ea250f7e79072497711960ad3935e3" + } + }, + "dockerfileHash": "ddc6aab7778eda49f101b8dc69b180ba42b683e6a5938e888c8a92ace22b3537", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "4f2fa0c95400c45b38219e8942d38983660248244b7c9a504d49f15583f90927", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-workbench-api", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-workbench-api-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:65cbd71dc7eb8557d0999bc42e25ad88b9988b121288f8adddd9ff1b7efb395b", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-07-21T20:42:57.670Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "7d2c66bebd4f6ec5b85159007254918f134465e0", + "componentInputHash": "c45a0318fafed26e3578e26074663349380dff366e5322d78112f8f4932bab5c", + "runtimeMode": "env-reuse-gitea-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-workbench-api-env:env-1342b35c683d", + "environmentDigest": "sha256:65cbd71dc7eb8557d0999bc42e25ad88b9988b121288f8adddd9ff1b7efb395b", + "environmentInputHash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "codeInputHash": "b7f8a357499f67e6914a20be4d8782fe8a6adf941e0c6e1981dfd085c52df8d4", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-workbench-api.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:65cbd71dc7eb8557d0999bc42e25ad88b9988b121288f8adddd9ff1b7efb395b", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-workbench-api-env:env-1342b35c683d", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-workbench-api.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-workbench-api.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-workbench-api-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:65cbd71dc7eb8557d0999bc42e25ad88b9988b121288f8adddd9ff1b7efb395b" + } + }, + "dockerfileHash": "ddc6aab7778eda49f101b8dc69b180ba42b683e6a5938e888c8a92ace22b3537", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "8ee5f7862b50fa0cc6a6431a2167a6b3ff3587c306449e5eb463dd5bf5e3df07", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-workbench-worker", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-workbench-worker-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:cc5e6934b1283b2ef7bb9ae74c28b279430983cbaf8e0258d8bd25ab9c60fd0d", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-07-21T20:42:57.778Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "7d2c66bebd4f6ec5b85159007254918f134465e0", + "componentInputHash": "0370477aaca6c8813ff87fad898d0ce11ba79a768aa63557530dbffe9f13a0c9", + "runtimeMode": "env-reuse-gitea-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-workbench-worker-env:env-1342b35c683d", + "environmentDigest": "sha256:cc5e6934b1283b2ef7bb9ae74c28b279430983cbaf8e0258d8bd25ab9c60fd0d", + "environmentInputHash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "codeInputHash": "371b6fc7c79a82060b5363e2811cffd89ece991fb448c064f465bfc022c66bc5", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-workbench-worker.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:cc5e6934b1283b2ef7bb9ae74c28b279430983cbaf8e0258d8bd25ab9c60fd0d", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-workbench-worker-env:env-1342b35c683d", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-workbench-worker.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-workbench-worker.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-workbench-worker-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:cc5e6934b1283b2ef7bb9ae74c28b279430983cbaf8e0258d8bd25ab9c60fd0d" + } + }, + "dockerfileHash": "ddc6aab7778eda49f101b8dc69b180ba42b683e6a5938e888c8a92ace22b3537", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "43235f1c5f5119b1fce83781b7b1354ee43062467523753098e22980044f8972", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-hwpod-api", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-hwpod-api-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:70d4420bd5c17a8448d13b02bef54dfe7cdb2037e8b393884719edf1f073e761", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-07-21T20:43:05.289Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "b1d20178db1db8202c67c98b4b99a76ac16e3dcb", + "componentInputHash": "7f88d2336e10dadbe4bb46472e00886d73268123ce3860ad39980b799c77d0d8", + "runtimeMode": "env-reuse-gitea-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-hwpod-api-env:env-1342b35c683d", + "environmentDigest": "sha256:70d4420bd5c17a8448d13b02bef54dfe7cdb2037e8b393884719edf1f073e761", + "environmentInputHash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "codeInputHash": "5793ea5cd471c95b507c549fba90b13aa687c22990c83df91568fe7d9aaaad88", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-hwpod-api.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:70d4420bd5c17a8448d13b02bef54dfe7cdb2037e8b393884719edf1f073e761", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-hwpod-api-env:env-1342b35c683d", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-hwpod-api.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-hwpod-api.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-hwpod-api-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:70d4420bd5c17a8448d13b02bef54dfe7cdb2037e8b393884719edf1f073e761" + } + }, + "dockerfileHash": "ddc6aab7778eda49f101b8dc69b180ba42b683e6a5938e888c8a92ace22b3537", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "4903b3405e54def392918546542518783e76671ba7deac9e95ba8cb0aaa6473c", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-hwpod-worker", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-hwpod-worker-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:bdb5fe5c2cb467f3eb81141e2617af8188b7e1a4221de1afcb1141b2fbd527f3", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-07-21T20:43:04.985Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "b1d20178db1db8202c67c98b4b99a76ac16e3dcb", + "componentInputHash": "135e30e894a2aadceb44ff33ef2a571108a21cdd47689223535215b1d6e65763", + "runtimeMode": "env-reuse-gitea-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-hwpod-worker-env:env-1342b35c683d", + "environmentDigest": "sha256:bdb5fe5c2cb467f3eb81141e2617af8188b7e1a4221de1afcb1141b2fbd527f3", + "environmentInputHash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "codeInputHash": "c4baf75f15c8e46b7a40774e9c6a7c5f1853cc1766c6f6ca710824ac2398b71b", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-hwpod-worker.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:bdb5fe5c2cb467f3eb81141e2617af8188b7e1a4221de1afcb1141b2fbd527f3", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-hwpod-worker-env:env-1342b35c683d", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-hwpod-worker.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-hwpod-worker.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-hwpod-worker-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:bdb5fe5c2cb467f3eb81141e2617af8188b7e1a4221de1afcb1141b2fbd527f3" + } + }, + "dockerfileHash": "ddc6aab7778eda49f101b8dc69b180ba42b683e6a5938e888c8a92ace22b3537", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "2e74b05d52e0ac311741c5b7d0fa695a1497456ce1db03511cbafb0681cd572a", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-hwpod-web", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-hwpod-web-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:d5a43274fdef3802351e013c91e027f6bbb4a2bd72da1258bd56a052b87cf48f", + "publishState": "published", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-07-21T20:43:09.875Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "buildkit-env-reuse", + "componentCommitId": "b1d20178db1db8202c67c98b4b99a76ac16e3dcb", + "componentInputHash": "c32f31cf07078a5756ca0dcdcf14f0aeabfa2ceb2655d483e1082e1965e34c9e", + "runtimeMode": "env-reuse-gitea-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-hwpod-web-env:env-1342b35c683d", + "environmentDigest": "sha256:d5a43274fdef3802351e013c91e027f6bbb4a2bd72da1258bd56a052b87cf48f", + "environmentInputHash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "codeInputHash": "5530dc0c9147bd193332c8ca08e0bef0f4e3eb01c48284c4642f5dbe2abf2443", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-hwpod-web.sh", + "bootEnvEvidence": { + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:d5a43274fdef3802351e013c91e027f6bbb4a2bd72da1258bd56a052b87cf48f", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-hwpod-web-env:env-1342b35c683d", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "bootSh": "deploy/runtime/boot/hwlab-hwpod-web.sh", + "env": { + "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-hwpod-web.sh", + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-hwpod-web-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:d5a43274fdef3802351e013c91e027f6bbb4a2bd72da1258bd56a052b87cf48f" + } + }, + "dockerfileHash": "ddc6aab7778eda49f101b8dc69b180ba42b683e6a5938e888c8a92ace22b3537", + "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", + "baseImageDigest": null, + "buildArgsHash": "e1988a5081fa92e0694b410a46e9375dcec08c7903f6f43fdf0c4ad189c59562", + "ciAffected": true, + "ciReason": [ + "environment-input-mismatch", + "code-input-changed" + ], + "reuse": { + "status": "not-reused", + "reason": "environment-affected" + }, + "reusedFrom": null + }, + { + "serviceId": "hwlab-cloud-web", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "publishState": "reused", + "profile": "v03", + "namespace": "hwlab-v03", + "healthPath": "/health/live", + "sourceState": "source-present", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "notPublishedReason": null, + "buildCreatedAt": "2026-07-21T20:42:38.489Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "shared-env-artifact", + "componentCommitId": "738b2a8042fe3aefc18e568e7de342fc1a6a91c2", + "componentInputHash": "0928e4e7363ffcec92c15bf1e4bef430f2b5e6bedba6b79ae8bac8d951e5f450", + "runtimeMode": "env-reuse-gitea-checkout", + "envReuse": true, + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentInputHash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "codeInputHash": "dcba5a0e5833061aea5158f6a31f41373f9ee80a9960a1e347fa3316571132cf", + "bootRepo": "git@github.com:pikasTech/HWLAB.git", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-cloud-web.sh", "bootEnvEvidence": { - "runtimeMode": "env-reuse-git-mirror-checkout", - "environmentDigest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-cloud-web.sh", "env": { "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", - "HWLAB_BOOT_COMMIT": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-cloud-web.sh", - "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "HWLAB_ENVIRONMENT_DIGEST": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" } }, - "dockerfileHash": "78a9d92bd6ecea408f22e0d6eabf79fab66008b56429446d4621837f1150904d", + "dockerfileHash": "e47bb707830ee44b42d7d103db7e8ee2779212ddbb9e73bd39dc662a8c682268", "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", "baseImageDigest": null, "buildArgsHash": "39effb18af665e5e286cca9f84ef2a30f577ad11c9acca098589b7ee37f6950c", "ciAffected": true, "ciReason": [ - "code-input-changed", - "component-path-changed" + "shared-env-artifact-consumer" ], "reuse": { - "status": "ready", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "reusedFrom": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93" + "status": "not-reused", + "reason": "environment-affected" }, - "reusedFrom": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93" + "reusedFrom": "hwlab-cloud-api" }, { "serviceId": "hwlab-gateway", - "commitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "sourceCommitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "imageTag": "env-6ef8ca3abf22", - "digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", "publishState": "reused", "profile": "v03", "namespace": "hwlab-v03", @@ -366,60 +910,58 @@ "artifactRequired": true, "artifactScope": "required", "notPublishedReason": null, - "buildCreatedAt": "2026-07-08T01:39:47.076Z", - "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:5294e425c43f3d7905d4bdcf469944168afae18305dc487a9b913cc4a858fa88", - "buildBackend": "reused-env-catalog", - "componentCommitId": "d4b56a7f7577905a8333c4a353281231814f6356", - "componentInputHash": "a51e672d7340b359752eb9529d318904b4e195032dd64e670461dcc102cd7ce4", - "runtimeMode": "env-reuse-git-mirror-checkout", + "buildCreatedAt": "2026-07-21T20:42:38.489Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "shared-env-artifact", + "componentCommitId": "7d2c66bebd4f6ec5b85159007254918f134465e0", + "componentInputHash": "ba479ad780b6643e95e8b235521e0dd804b993686d0931afcdfd5f7715f5b37d", + "runtimeMode": "env-reuse-gitea-checkout", "envReuse": true, - "envChanged": false, - "codeChanged": false, - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "environmentDigest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "environmentInputHash": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93", - "codeInputHash": "25f753b252593891ed7b03b53a69d266e7a324728cf83fea8654bab4196fa399", + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentInputHash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "codeInputHash": "33a6ee768a1b5271e20f25bcb47f2f0f54160284c9c1308f0f031932f1356108", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-gateway.sh", "bootEnvEvidence": { - "runtimeMode": "env-reuse-git-mirror-checkout", - "environmentDigest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-gateway.sh", "env": { "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", - "HWLAB_BOOT_COMMIT": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-gateway.sh", - "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "HWLAB_ENVIRONMENT_DIGEST": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" } }, - "dockerfileHash": "78a9d92bd6ecea408f22e0d6eabf79fab66008b56429446d4621837f1150904d", + "dockerfileHash": "e47bb707830ee44b42d7d103db7e8ee2779212ddbb9e73bd39dc662a8c682268", "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", "baseImageDigest": null, "buildArgsHash": "3fed509f00ba3448138a999f51dad3d38b822bb4a5c152011e3e57526972fd41", - "ciAffected": false, + "ciAffected": true, "ciReason": [ - "component-inputs-unchanged" + "shared-env-artifact-consumer" ], "reuse": { - "status": "ready", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "reusedFrom": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93" + "status": "not-reused", + "reason": "environment-affected" }, - "reusedFrom": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93" + "reusedFrom": "hwlab-cloud-api" }, { "serviceId": "hwlab-edge-proxy", - "commitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "sourceCommitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "imageTag": "env-6ef8ca3abf22", - "digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", "publishState": "reused", "profile": "v03", "namespace": "hwlab-v03", @@ -429,60 +971,58 @@ "artifactRequired": true, "artifactScope": "required", "notPublishedReason": null, - "buildCreatedAt": "2026-07-08T01:39:47.076Z", - "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:5294e425c43f3d7905d4bdcf469944168afae18305dc487a9b913cc4a858fa88", - "buildBackend": "reused-env-catalog", - "componentCommitId": "d4b56a7f7577905a8333c4a353281231814f6356", - "componentInputHash": "9eaa4ccbd907b483e1a7fcd879ff0c5117ed711701e0dab98168d34cd4e11aad", - "runtimeMode": "env-reuse-git-mirror-checkout", + "buildCreatedAt": "2026-07-21T20:42:38.489Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "shared-env-artifact", + "componentCommitId": "7d2c66bebd4f6ec5b85159007254918f134465e0", + "componentInputHash": "d113cb9e8ae69fc0da684ebcd7596118e20c58b0c48cea3fff521f85b3d9985a", + "runtimeMode": "env-reuse-gitea-checkout", "envReuse": true, - "envChanged": false, - "codeChanged": false, - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "environmentDigest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "environmentInputHash": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93", - "codeInputHash": "c97d19939c872e128a6931bdf73f28a75a684948a76a2b1af37508dd47481544", + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentInputHash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "codeInputHash": "6b7f2c6afbfc76b3ad02e1a4fea96582c58a205633b91d37c46716220a716f5d", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-edge-proxy.sh", "bootEnvEvidence": { - "runtimeMode": "env-reuse-git-mirror-checkout", - "environmentDigest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-edge-proxy.sh", "env": { "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", - "HWLAB_BOOT_COMMIT": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-edge-proxy.sh", - "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "HWLAB_ENVIRONMENT_DIGEST": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" } }, - "dockerfileHash": "78a9d92bd6ecea408f22e0d6eabf79fab66008b56429446d4621837f1150904d", + "dockerfileHash": "e47bb707830ee44b42d7d103db7e8ee2779212ddbb9e73bd39dc662a8c682268", "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", "baseImageDigest": null, "buildArgsHash": "68746696603227763e5768f8daf45d31331f4c8425e6d756b21482ad104e6183", - "ciAffected": false, + "ciAffected": true, "ciReason": [ - "component-inputs-unchanged" + "shared-env-artifact-consumer" ], "reuse": { - "status": "ready", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "reusedFrom": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93" + "status": "not-reused", + "reason": "environment-affected" }, - "reusedFrom": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93" + "reusedFrom": "hwlab-cloud-api" }, { "serviceId": "hwlab-agent-skills", - "commitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "sourceCommitId": "3a87d3513a2f5ec629e394de3376165cb41ee913", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "imageTag": "env-6ef8ca3abf22", - "digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", + "commitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "sourceCommitId": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "imageTag": "env-1342b35c683d", + "digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", "publishState": "reused", "profile": "v03", "namespace": "hwlab-v03", @@ -492,64 +1032,71 @@ "artifactRequired": true, "artifactScope": "required", "notPublishedReason": null, - "buildCreatedAt": "2026-07-08T01:39:47.076Z", - "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:5294e425c43f3d7905d4bdcf469944168afae18305dc487a9b913cc4a858fa88", - "buildBackend": "reused-env-catalog", - "componentCommitId": "479c0f0937d5247ea4d41c1a811d0c9864c7ed00", - "componentInputHash": "2f84cc831733a57d4b7509dfb31699b1d79e9ed807bb4864014dd5fc768bbc46", - "runtimeMode": "env-reuse-git-mirror-checkout", + "buildCreatedAt": "2026-07-21T20:42:38.489Z", + "buildSource": "gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB@env:1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "buildBackend": "shared-env-artifact", + "componentCommitId": "7d2c66bebd4f6ec5b85159007254918f134465e0", + "componentInputHash": "cd01851ba096c827d42c1df05cca7bfe2d25bd030a33ef55a54d8b03d84e6e2f", + "runtimeMode": "env-reuse-gitea-checkout", "envReuse": true, - "envChanged": false, - "codeChanged": false, - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "environmentDigest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "environmentInputHash": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93", - "codeInputHash": "a89d6a198655f21ec6868a7698a54cccf4488017494a86a186e72916d74d5fc8", + "envChanged": true, + "codeChanged": true, + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentInputHash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "codeInputHash": "b274823f7b33a772fb75b57973cfe739d7385412291af146ce7001d7798af0eb", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-agent-skills.sh", "bootEnvEvidence": { - "runtimeMode": "env-reuse-git-mirror-checkout", - "environmentDigest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", + "runtimeMode": "env-reuse-gitea-checkout", + "environmentDigest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "environmentImage": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", "bootRepo": "git@github.com:pikasTech/HWLAB.git", - "bootCommit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "bootCommit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "bootSh": "deploy/runtime/boot/hwlab-agent-skills.sh", "env": { "HWLAB_BOOT_REPO": "git@github.com:pikasTech/HWLAB.git", - "HWLAB_BOOT_COMMIT": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "HWLAB_BOOT_COMMIT": "ed0c4a7e27270434708a189ba6403097b4270ac7", "HWLAB_BOOT_SH": "deploy/runtime/boot/hwlab-agent-skills.sh", - "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "HWLAB_ENVIRONMENT_DIGEST": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "HWLAB_ENVIRONMENT_IMAGE": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d", + "HWLAB_ENVIRONMENT_DIGEST": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" } }, - "dockerfileHash": "78a9d92bd6ecea408f22e0d6eabf79fab66008b56429446d4621837f1150904d", + "dockerfileHash": "e47bb707830ee44b42d7d103db7e8ee2779212ddbb9e73bd39dc662a8c682268", "baseImageReference": "127.0.0.1:5000/hwlab/hwlab-node20-base:20-bookworm-slim", "baseImageDigest": null, "buildArgsHash": "d5e50a18e70c6a8b4896e527fa07b5dd2c85458ed9ef512c1d46775ef4e40a10", - "ciAffected": false, + "ciAffected": true, "ciReason": [ - "component-inputs-unchanged" + "shared-env-artifact-consumer" ], "reuse": { - "status": "ready", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22", - "digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", - "reusedFrom": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93" + "status": "not-reused", + "reason": "environment-affected" }, - "reusedFrom": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93" + "reusedFrom": "hwlab-cloud-api" } ], "serviceInventory": { "version": "v2", - "serviceCount": 8, - "requiredServiceCount": 8, + "serviceCount": 17, + "requiredServiceCount": 17, "disabledServiceCount": 0, "requiredServiceIds": [ "hwlab-cloud-api", "hwlab-workbench-runtime", "hwlab-user-billing", "hwlab-project-management", + "hwlab-tasktree-api", + "hwlab-tasktree-worker", + "hwlab-harnessrl-api", + "hwlab-harnessrl-worker", + "hwlab-workbench-api", + "hwlab-workbench-worker", + "hwlab-hwpod-api", + "hwlab-hwpod-worker", + "hwlab-hwpod-web", "hwlab-cloud-web", "hwlab-gateway", "hwlab-edge-proxy", @@ -601,6 +1148,105 @@ "entrypoint": "cmd/hwlab-project-management/main.ts", "disabledReason": null }, + { + "serviceId": "hwlab-tasktree-api", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "bun-command", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-tasktree-api/main.ts", + "disabledReason": null + }, + { + "serviceId": "hwlab-tasktree-worker", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "bun-command", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-tasktree-worker/main.ts", + "disabledReason": null + }, + { + "serviceId": "hwlab-harnessrl-api", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "bun-command", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-harnessrl-api/main.ts", + "disabledReason": null + }, + { + "serviceId": "hwlab-harnessrl-worker", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "bun-command", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-harnessrl-worker/main.ts", + "disabledReason": null + }, + { + "serviceId": "hwlab-workbench-api", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "bun-command", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-workbench-api/main.ts", + "disabledReason": null + }, + { + "serviceId": "hwlab-workbench-worker", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "bun-command", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-workbench-worker/main.ts", + "disabledReason": null + }, + { + "serviceId": "hwlab-hwpod-api", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "bun-command", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-hwpod-api/main.ts", + "disabledReason": null + }, + { + "serviceId": "hwlab-hwpod-worker", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "bun-command", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-hwpod-worker/main.ts", + "disabledReason": null + }, + { + "serviceId": "hwlab-hwpod-web", + "publishEnabled": true, + "artifactRequired": true, + "artifactScope": "required", + "runtimeKind": "bun-command", + "implementationState": "repo-entrypoint", + "sourceState": "source-present", + "entrypoint": "cmd/hwlab-hwpod-web/main.ts", + "disabledReason": null + }, { "serviceId": "hwlab-cloud-web", "publishEnabled": true, diff --git a/deploy/gitops/node/nc01/runtime-v03/configmaps.yaml b/deploy/gitops/node/nc01/runtime-v03/configmaps.yaml index c0be1fcc..3a4d253f 100644 --- a/deploy/gitops/node/nc01/runtime-v03/configmaps.yaml +++ b/deploy/gitops/node/nc01/runtime-v03/configmaps.yaml @@ -10,7 +10,7 @@ "namespace": "hwlab-v03", "labels": { "hwlab.pikastech.local/gitops-target": "v03", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "hwlab.pikastech.local/environment": "v03", "hwlab.pikastech.local/profile": "v03", "hwlab.pikastech.local/config-kind": "hwpod-preinstalled-specs" @@ -22,8 +22,8 @@ } }, "data": { - "constart-71freq-c.yaml": "apiVersion: hwlab.dev/v0alpha1\nkind: Hwpod\nmetadata:\n uid: CONSTART-71FREQ-C\n name: constart-71freq-c\nspec:\n targetDevice:\n board: ConStart 71-FREQ Controller\n mcu: STM32H723ZGTx\n flashBase: \"0x08000000\"\n workspace:\n path: \"F:\\\\Work\\\\ConStart\"\n toolchain: keil-mdk\n projectRoot: projects/71-00075-11\n keilProject: projects/71-00075-11/FirmWare/MDK-ARM/FREQ_Controller_FW.uvprojx\n keilTarget: FREQ_Controller_FW\n hexPath: projects/71-00075-11/FirmWare/MDK-ARM/FREQ_Controller_FW/FREQ_Controller_FW.hex\n mapPath: projects/71-00075-11/FirmWare/MDK-ARM/FREQ_Controller_FW/FREQ_Controller_FW.map\n keilCliPath: \"C:\\\\Users\\\\liang\\\\.agents\\\\skills\\\\keil\\\\keil-cli.py\"\n debugProbe:\n type: cmsis-dap\n adapter: keil\n probeUid: 3FD750C63E342E24\n probeName: MicroLink CMSIS-DAP\n programBackend: keil-headless\n autoBindUvoptx: true\n ioProbe:\n uart:\n id: uart/1\n port: COM4\n baudrate: 921600\n nodeBinding:\n nodeId: node-d601-f103-v2\n nodeType: pc-host", - "constart-71freq-c.meta.json": "{\n \"contractVersion\": \"hwpod-spec-registry-v1\",\n \"source\": {\n \"kind\": \"preinstalled-yaml-first-spec\",\n \"workspaceRoot\": \"F:\\\\Work\\\\ConStart\",\n \"projectRoot\": \"projects/71-00075-11\",\n \"verificationIssue\": \"pikasTech/HWLAB#2183\",\n \"verifiedAt\": \"2026-06-26\"\n }\n}" + "constart-71freq-c.yaml": "apiVersion: hwlab.dev/v0alpha1\nkind: Hwpod\nmetadata:\n uid: CONSTART-71FREQ-C\n name: constart-71freq-c\nspec:\n targetDevice:\n board: ConStart 71-FREQ Controller\n mcu: STM32H723ZGTx\n flashBase: \"0x08000000\"\n workspace:\n path: \"F:\\\\Work\\\\ConStart\"\n toolchain: keil-mdk\n projectRoot: projects/71-00075-11-FREQ\n keilProject: projects/71-00075-11-FREQ/FirmWare/MDK-ARM/FREQ_Controller_FW.uvprojx\n keilTarget: FREQ_Controller_FW\n hexPath: projects/71-00075-11-FREQ/FirmWare/MDK-ARM/FREQ_Controller_FW/FREQ_Controller_FW.hex\n mapPath: projects/71-00075-11-FREQ/FirmWare/MDK-ARM/FREQ_Controller_FW/FREQ_Controller_FW.map\n keilCliPath: \"C:\\\\Users\\\\liang\\\\.agents\\\\skills\\\\keil\\\\keil-cli.py\"\n debugProbe:\n type: cmsis-dap\n adapter: keil\n probeUid: 3FD750C63E342E24\n probeName: MicroLink CMSIS-DAP\n programBackend: keil-headless\n autoBindUvoptx: true\n boardComm:\n endpoints:\n hwpod-node-ops:\n kind: hwpod-node-ops\n endpointRef: config/hwlab-gateway/constart-71freq.yaml#gateway.profile.nodeOps.publicUrl\n freq71:\n kind: jsonrpc-tcp\n host: 192.168.0.154\n port: 8000\n role: frequency-controller\n main41:\n kind: jsonrpc-tcp\n host: 192.168.0.151\n port: 8000\n role: main-controller\n ioProbe:\n uart:\n id: uart/1\n port: COM4\n baudrate: 921600\n probes:\n main41.ai0.current:\n endpointRef: main41\n quantity: current\n unit: mA\n path: hardware/ai/0\n valuePath: ai_current_mA\n nodeBinding:\n nodeId: node-d601-f103-v2\n nodeType: pc-host", + "constart-71freq-c.meta.json": "{\n \"contractVersion\": \"hwpod-spec-registry-v1\",\n \"source\": {\n \"kind\": \"preinstalled-yaml-first-spec\",\n \"workspaceRoot\": \"F:\\\\Work\\\\ConStart\",\n \"projectRoot\": \"projects/71-00075-11-FREQ\",\n \"verificationIssue\": \"pikasTech/HWLAB#2183\",\n \"verifiedAt\": \"2026-06-26\"\n }\n}" } }, { @@ -34,19 +34,19 @@ "namespace": "hwlab-v03", "labels": { "hwlab.pikastech.local/gitops-target": "v03", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "hwlab.pikastech.local/environment": "v03", "hwlab.pikastech.local/profile": "v03", "hwlab.pikastech.local/config-kind": "project-management-bootstrap-sources" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", - "hwlab.pikastech.local/source-ref": "config/hwlab-project-management/constart-71freq-mdtodo.yaml#projectManagement.sources[0]", + "hwlab.pikastech.local/source-ref": "config/hwlab-project-management/constart-71freq-mdtodo.yaml#projectManagement.sources[0],config/hwlab-project-management/constar-workspace-mdtodo.yaml#projectManagement.sources[0]", "hwlab.pikastech.local/verification-issue": "pikasTech/HWLAB#2183" } }, "data": { - "sources.json": "[\n {\n \"sourceId\": \"constart-71freq-mdtodo\",\n \"sourceKind\": \"hwpod-workspace\",\n \"displayName\": \"71-FREQ MDTODO\",\n \"projectId\": \"project_constart_71freq\",\n \"hwpodId\": \"constart-71freq-c\",\n \"nodeId\": \"node-d601-f103-v2\",\n \"workspaceRootRef\": \"F:\\\\Work\\\\ConStart\",\n \"mdtodoRootRef\": \"docs/MDTODO\",\n \"maxFiles\": 300,\n \"capabilities\": [\"probe\", \"list\", \"read\", \"write\", \"reindex\"]\n }\n]" + "sources.json": "[\n {\n \"sourceId\": \"constart-71freq-mdtodo\",\n \"sourceKind\": \"hwpod-workspace\",\n \"displayName\": \"71-FREQ MDTODO\",\n \"projectId\": \"project_constart_71freq\",\n \"hwpodId\": \"constart-71freq-c\",\n \"nodeId\": \"node-d601-f103-v2\",\n \"workspaceRootRef\": \"F:\\\\Work\\\\ConStart\",\n \"mdtodoRootRef\": \"docs/MDTODO\",\n \"maxFiles\": 300,\n \"capabilities\": [\"probe\", \"list\", \"read\", \"write\", \"reindex\"]\n },\n {\n \"sourceId\": \"constar-workspace-mdtodo\",\n \"sourceKind\": \"hwpod-workspace\",\n \"displayName\": \"控之星工作区 MDTODO\",\n \"projectId\": \"project_constar_workspace\",\n \"hwpodId\": \"constar-workspace\",\n \"nodeId\": \"node-g14-wsl-constar\",\n \"workspaceRootRef\": \"D:\\\\Work\\\\CONSTAR_workspace\",\n \"mdtodoRootRef\": \"docs/MDTODO\",\n \"maxFiles\": 300,\n \"capabilities\": [\"probe\", \"list\", \"read\", \"reindex\", \"launchWorkbench\"]\n }\n]" } } ] diff --git a/deploy/gitops/node/nc01/runtime-v03/deepseek-proxy.yaml b/deploy/gitops/node/nc01/runtime-v03/deepseek-proxy.yaml index 8fdcb0b1..b7b14aef 100644 --- a/deploy/gitops/node/nc01/runtime-v03/deepseek-proxy.yaml +++ b/deploy/gitops/node/nc01/runtime-v03/deepseek-proxy.yaml @@ -1,327 +1,414 @@ -apiVersion: v1 -kind: List -items: - - apiVersion: v1 - kind: ConfigMap - metadata: - name: hwlab-deepseek-proxy-config - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-deepseek-proxy - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/service-id: hwlab-deepseek-proxy - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/monitoring: disabled - data: - render-config.sh: > - #!/bin/sh - - if [ -z "${DEEPSEEK_API_KEY:-}" ] && [ -z "${OPENCODE_API_KEY:-}" ]; - then - echo "at least one of DEEPSEEK_API_KEY or OPENCODE_API_KEY is required" >&2 - exit 1 - fi - - cat > /config/config.yml <&2\n exit 1\nfi\ncat > /config/config.yml < /^\\d+_.*\\.sql$/u.test(name)).sort();\nconst rawConnectionString = process.env.DATABASE_URL;\nif (!rawConnectionString) throw new Error(\"DATABASE_URL is required\");\nconst connectionUrl = new URL(rawConnectionString);\nif (connectionUrl.searchParams.get(\"sslmode\") === \"require\" && !connectionUrl.searchParams.has(\"uselibpqcompat\")) connectionUrl.searchParams.set(\"uselibpqcompat\", \"true\");\nconst connectionString = connectionUrl.toString();\nconsole.error(JSON.stringify({ event: \"hwlab-runtime-migration-started\", fileCount: files.length, valuesPrinted: false }));\nconst pool = new Pool({ connectionString, max: 1 });\ntry {\n for (const file of files) {\n await pool.query(await readFile(`${root}/${file}`, \"utf8\"));\n console.error(JSON.stringify({ event: \"hwlab-runtime-migration-applied\", file, valuesPrinted: false }));\n }\n} finally {\n await pool.end();\n}\n", + "0001_cloud_core_skeleton.sql": "-- SPEC: PJ2026-0104010803 Workbench唯一投影 draft-2026-06-24-p0-aggregate-event-stream.\n-- HWLAB L1 Cloud Core schema skeleton.\n-- This file is source schema only; applying it to DEV/PROD is a separate\n-- operator action and is not performed by source tests or smokes.\n\nCREATE TABLE IF NOT EXISTS projects (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL DEFAULT '',\n status TEXT NOT NULL DEFAULT 'pending',\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS users (\n id TEXT PRIMARY KEY,\n username TEXT NOT NULL UNIQUE,\n display_name TEXT NOT NULL DEFAULT '',\n role TEXT NOT NULL CHECK (role IN ('admin', 'user')),\n status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'disabled')),\n password_hash TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS user_sessions (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL REFERENCES users(id),\n session_token_hash TEXT NOT NULL UNIQUE,\n created_at TEXT NOT NULL,\n last_seen_at TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n revoked_at TEXT\n);\n\nCREATE TABLE IF NOT EXISTS gateway_sessions (\n id TEXT PRIMARY KEY,\n project_id TEXT,\n gateway_service_id TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n started_at TEXT,\n ended_at TEXT,\n gateway_session_json TEXT NOT NULL DEFAULT '{}'\n);\n\nCREATE TABLE IF NOT EXISTS box_resources (\n id TEXT PRIMARY KEY,\n project_id TEXT,\n gateway_session_id TEXT,\n resource_state TEXT NOT NULL DEFAULT 'available',\n labels_json TEXT NOT NULL DEFAULT '{}',\n resource_json TEXT NOT NULL DEFAULT '{}',\n updated_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS box_capabilities (\n id TEXT PRIMARY KEY,\n box_resource_id TEXT NOT NULL,\n capability_type TEXT NOT NULL,\n capability_json TEXT NOT NULL DEFAULT '{}',\n updated_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS wiring_configs (\n id TEXT PRIMARY KEY,\n project_id TEXT,\n wiring_json TEXT NOT NULL DEFAULT '{}',\n status TEXT NOT NULL DEFAULT 'pending',\n updated_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS patch_panel_status (\n id TEXT PRIMARY KEY,\n gateway_session_id TEXT,\n wiring_config_id TEXT,\n status_json TEXT NOT NULL DEFAULT '{}',\n updated_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS hardware_operations (\n id TEXT PRIMARY KEY,\n project_id TEXT,\n requested_by TEXT,\n operation_type TEXT NOT NULL,\n operation_json TEXT NOT NULL DEFAULT '{}',\n status TEXT NOT NULL DEFAULT 'requested',\n requested_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS audit_events (\n id TEXT PRIMARY KEY,\n request_id TEXT NOT NULL,\n actor TEXT NOT NULL,\n source TEXT NOT NULL,\n operation TEXT NOT NULL,\n target TEXT NOT NULL,\n result TEXT NOT NULL,\n timestamp TEXT NOT NULL,\n event_json TEXT NOT NULL DEFAULT '{}'\n);\n\nCREATE TABLE IF NOT EXISTS agent_sessions (\n id TEXT PRIMARY KEY,\n project_id TEXT,\n agent_id TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n started_at TEXT,\n ended_at TEXT,\n owner_user_id TEXT REFERENCES users(id),\n conversation_id TEXT,\n thread_id TEXT,\n last_trace_id TEXT,\n session_json TEXT NOT NULL DEFAULT '{}',\n updated_at TEXT\n);\n\nALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS owner_user_id TEXT REFERENCES users(id);\nALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS conversation_id TEXT;\nALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS thread_id TEXT;\nALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS last_trace_id TEXT;\nALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS session_json TEXT NOT NULL DEFAULT '{}';\nALTER TABLE agent_sessions ADD COLUMN IF NOT EXISTS updated_at TEXT;\nCREATE INDEX IF NOT EXISTS idx_agent_sessions_owner ON agent_sessions(owner_user_id);\nCREATE INDEX IF NOT EXISTS idx_agent_sessions_conversation ON agent_sessions(conversation_id);\nCREATE INDEX IF NOT EXISTS idx_agent_sessions_active_updated ON agent_sessions(updated_at DESC, id DESC) WHERE status <> 'archived';\nCREATE INDEX IF NOT EXISTS idx_agent_sessions_owner_active_updated ON agent_sessions(owner_user_id, updated_at DESC, id DESC) WHERE status <> 'archived';\n\nCREATE TABLE IF NOT EXISTS account_workspaces (\n id TEXT PRIMARY KEY,\n owner_user_id TEXT NOT NULL REFERENCES users(id),\n project_id TEXT NOT NULL,\n name TEXT NOT NULL DEFAULT 'Default Workbench',\n status TEXT NOT NULL DEFAULT 'active' CHECK (status IN ('active', 'archived')),\n is_default BOOLEAN NOT NULL DEFAULT true,\n selected_conversation_id TEXT,\n selected_agent_session_id TEXT,\n active_trace_id TEXT,\n provider_profile TEXT,\n workspace_json TEXT NOT NULL DEFAULT '{}',\n revision INTEGER NOT NULL DEFAULT 1,\n updated_by_session_id TEXT,\n updated_by_client TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_account_workspaces_default ON account_workspaces(owner_user_id, project_id) WHERE is_default = TRUE AND status = 'active';\nCREATE INDEX IF NOT EXISTS idx_account_workspaces_owner ON account_workspaces(owner_user_id, project_id, updated_at DESC);\n\nCREATE TABLE IF NOT EXISTS worker_sessions (\n id TEXT PRIMARY KEY,\n agent_session_id TEXT,\n worker_id TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'pending',\n started_at TEXT,\n ended_at TEXT\n);\n\nCREATE TABLE IF NOT EXISTS agent_trace_events (\n id TEXT PRIMARY KEY,\n trace_id TEXT NOT NULL,\n agent_session_id TEXT,\n worker_session_id TEXT,\n level TEXT NOT NULL DEFAULT 'info',\n message TEXT NOT NULL DEFAULT '',\n event_json TEXT NOT NULL DEFAULT '{}',\n occurred_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_agent_trace_events_trace_order ON agent_trace_events(trace_id, occurred_at, id);\nCREATE INDEX IF NOT EXISTS idx_agent_trace_events_session_order ON agent_trace_events(agent_session_id, occurred_at, id);\nCREATE INDEX IF NOT EXISTS idx_agent_trace_events_worker_order ON agent_trace_events(worker_session_id, occurred_at, id);\n\nCREATE TABLE IF NOT EXISTS workbench_projection_state (\n trace_id TEXT PRIMARY KEY,\n session_id TEXT,\n conversation_id TEXT,\n thread_id TEXT,\n run_id TEXT NOT NULL,\n command_id TEXT NOT NULL,\n last_agentrun_seq INTEGER NOT NULL DEFAULT 0,\n last_projected_seq INTEGER NOT NULL DEFAULT 0,\n upstream_latest_seq INTEGER,\n projection_status TEXT NOT NULL DEFAULT 'projecting',\n projection_health TEXT NOT NULL DEFAULT 'healthy',\n result_sync_state TEXT NOT NULL DEFAULT 'not_started',\n last_projected_at TEXT,\n last_result_sync_at TEXT,\n last_error_code TEXT,\n last_error_message TEXT,\n failure_count INTEGER NOT NULL DEFAULT 0,\n next_retry_at TEXT,\n projection_json TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_workbench_projection_state_status_retry_updated ON workbench_projection_state(projection_status, next_retry_at, updated_at);\nCREATE INDEX IF NOT EXISTS idx_workbench_projection_state_run_command ON workbench_projection_state(run_id, command_id);\nCREATE INDEX IF NOT EXISTS idx_workbench_projection_state_session_updated ON workbench_projection_state(session_id, updated_at DESC);\n\nCREATE TABLE IF NOT EXISTS workbench_sessions (\n session_id TEXT PRIMARY KEY,\n owner_user_id TEXT REFERENCES users(id),\n project_id TEXT,\n conversation_id TEXT,\n thread_id TEXT,\n status TEXT NOT NULL DEFAULT 'unknown',\n last_trace_id TEXT,\n projected_seq INTEGER NOT NULL DEFAULT 0,\n source_seq INTEGER NOT NULL DEFAULT 0,\n source_event_id TEXT,\n terminal BOOLEAN NOT NULL DEFAULT false,\n sealed BOOLEAN NOT NULL DEFAULT false,\n session_json TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_workbench_sessions_owner_updated ON workbench_sessions(owner_user_id, updated_at DESC, session_id);\nCREATE INDEX IF NOT EXISTS idx_workbench_sessions_status_updated ON workbench_sessions(status, updated_at DESC, session_id);\n\nCREATE TABLE IF NOT EXISTS workbench_messages (\n message_id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n turn_id TEXT,\n trace_id TEXT,\n role TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'unknown',\n projected_seq INTEGER NOT NULL DEFAULT 0,\n source_seq INTEGER NOT NULL DEFAULT 0,\n source_event_id TEXT,\n terminal BOOLEAN NOT NULL DEFAULT false,\n sealed BOOLEAN NOT NULL DEFAULT false,\n message_json TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_workbench_messages_session_updated ON workbench_messages(session_id, updated_at ASC, message_id);\nCREATE INDEX IF NOT EXISTS idx_workbench_messages_trace ON workbench_messages(trace_id, message_id);\nCREATE INDEX IF NOT EXISTS idx_workbench_messages_turn ON workbench_messages(turn_id, message_id);\n\nCREATE TABLE IF NOT EXISTS workbench_parts (\n part_id TEXT PRIMARY KEY,\n message_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n turn_id TEXT,\n trace_id TEXT,\n part_index INTEGER NOT NULL DEFAULT 0,\n part_type TEXT NOT NULL DEFAULT 'text',\n status TEXT NOT NULL DEFAULT 'unknown',\n projected_seq INTEGER NOT NULL DEFAULT 0,\n source_seq INTEGER NOT NULL DEFAULT 0,\n source_event_id TEXT,\n terminal BOOLEAN NOT NULL DEFAULT false,\n sealed BOOLEAN NOT NULL DEFAULT false,\n part_json TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_workbench_parts_message_index ON workbench_parts(message_id, part_index, part_id);\nCREATE INDEX IF NOT EXISTS idx_workbench_parts_session_trace ON workbench_parts(session_id, trace_id, part_index);\n\nCREATE TABLE IF NOT EXISTS workbench_turns (\n turn_id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n trace_id TEXT,\n message_id TEXT,\n status TEXT NOT NULL DEFAULT 'unknown',\n projected_seq INTEGER NOT NULL DEFAULT 0,\n source_seq INTEGER NOT NULL DEFAULT 0,\n source_event_id TEXT,\n terminal BOOLEAN NOT NULL DEFAULT false,\n sealed BOOLEAN NOT NULL DEFAULT false,\n final_response_json TEXT NOT NULL DEFAULT 'null',\n diagnostic_json TEXT NOT NULL DEFAULT '{}',\n turn_json TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_workbench_turns_session_updated ON workbench_turns(session_id, updated_at DESC, turn_id);\nCREATE INDEX IF NOT EXISTS idx_workbench_turns_trace ON workbench_turns(trace_id, turn_id);\n\nCREATE TABLE IF NOT EXISTS workbench_trace_events (\n id TEXT PRIMARY KEY,\n trace_id TEXT NOT NULL,\n session_id TEXT,\n turn_id TEXT,\n message_id TEXT,\n source_seq INTEGER NOT NULL DEFAULT 0,\n source_event_id TEXT,\n projected_seq INTEGER NOT NULL DEFAULT 0,\n event_type TEXT NOT NULL DEFAULT 'event',\n terminal BOOLEAN NOT NULL DEFAULT false,\n sealed BOOLEAN NOT NULL DEFAULT false,\n event_json TEXT NOT NULL DEFAULT '{}',\n occurred_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_workbench_trace_events_trace_seq ON workbench_trace_events(trace_id, source_seq, projected_seq, id);\nCREATE INDEX IF NOT EXISTS idx_workbench_trace_events_session_seq ON workbench_trace_events(session_id, source_seq, projected_seq, id);\n\nWITH duplicate_trace_source_events AS (\n SELECT\n id,\n ROW_NUMBER() OVER (\n PARTITION BY trace_id, source_event_id\n ORDER BY occurred_at, id\n ) AS duplicate_rank\n FROM workbench_trace_events\n WHERE trace_id IS NOT NULL AND source_event_id IS NOT NULL\n), trace_source_event_rewrites AS (\n SELECT\n id,\n 'workbench_trace_events:' || id AS stable_source_event_id\n FROM duplicate_trace_source_events\n WHERE duplicate_rank > 1\n)\nUPDATE workbench_trace_events AS target\nSET\n source_event_id = trace_source_event_rewrites.stable_source_event_id,\n updated_at = COALESCE(NULLIF(target.updated_at, ''), target.occurred_at, CURRENT_TIMESTAMP::text)\nFROM trace_source_event_rewrites\nWHERE target.id = trace_source_event_rewrites.id\n AND target.source_event_id IS DISTINCT FROM trace_source_event_rewrites.stable_source_event_id;\n\nWITH trace_event_projected_seq_conflicts AS (\n SELECT trace_id\n FROM workbench_trace_events\n WHERE trace_id IS NOT NULL\n GROUP BY trace_id\n HAVING COUNT(*) <> COUNT(DISTINCT projected_seq)\n), trace_event_resequence AS (\n SELECT\n workbench_trace_events.id,\n (ROW_NUMBER() OVER (\n PARTITION BY workbench_trace_events.trace_id\n ORDER BY\n CASE WHEN workbench_trace_events.projected_seq > 0 THEN 0 ELSE 1 END,\n workbench_trace_events.projected_seq,\n workbench_trace_events.occurred_at,\n workbench_trace_events.id\n ))::integer AS durable_projected_seq\n FROM workbench_trace_events\n INNER JOIN trace_event_projected_seq_conflicts\n ON trace_event_projected_seq_conflicts.trace_id = workbench_trace_events.trace_id\n)\nUPDATE workbench_trace_events AS target\nSET\n projected_seq = trace_event_resequence.durable_projected_seq,\n source_seq = CASE\n WHEN target.source_seq > 0 THEN target.source_seq\n ELSE trace_event_resequence.durable_projected_seq\n END,\n updated_at = COALESCE(NULLIF(target.updated_at, ''), target.occurred_at, CURRENT_TIMESTAMP::text)\nFROM trace_event_resequence\nWHERE target.id = trace_event_resequence.id\n AND (\n target.projected_seq IS DISTINCT FROM trace_event_resequence.durable_projected_seq\n OR target.source_seq <= 0\n );\n\nDROP INDEX IF EXISTS idx_workbench_trace_events_trace_source_event;\nCREATE UNIQUE INDEX idx_workbench_trace_events_trace_source_event ON workbench_trace_events(trace_id, source_event_id) WHERE source_event_id IS NOT NULL;\nDROP INDEX IF EXISTS idx_workbench_trace_events_trace_projected_seq;\nCREATE UNIQUE INDEX idx_workbench_trace_events_trace_projected_seq ON workbench_trace_events(trace_id, projected_seq);\n\nCREATE TABLE IF NOT EXISTS workbench_event_sequences (\n aggregate_id TEXT PRIMARY KEY,\n aggregate_type TEXT NOT NULL DEFAULT 'trace',\n session_id TEXT,\n turn_id TEXT,\n trace_id TEXT,\n last_seq INTEGER NOT NULL DEFAULT 0,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_workbench_event_sequences_session ON workbench_event_sequences(session_id, updated_at DESC, aggregate_id);\nCREATE INDEX IF NOT EXISTS idx_workbench_event_sequences_trace ON workbench_event_sequences(trace_id, updated_at DESC, aggregate_id);\n\nCREATE TABLE IF NOT EXISTS workbench_events (\n event_seq BIGSERIAL PRIMARY KEY,\n event_id TEXT NOT NULL UNIQUE,\n aggregate_id TEXT NOT NULL,\n aggregate_type TEXT NOT NULL DEFAULT 'trace',\n aggregate_seq INTEGER NOT NULL,\n session_id TEXT,\n turn_id TEXT,\n trace_id TEXT,\n message_id TEXT,\n source_run_id TEXT,\n source_command_id TEXT,\n source_seq INTEGER NOT NULL DEFAULT 0,\n source_event_id TEXT,\n event_type TEXT NOT NULL DEFAULT 'event',\n projection_revision INTEGER NOT NULL DEFAULT 0,\n terminal BOOLEAN NOT NULL DEFAULT false,\n sealed BOOLEAN NOT NULL DEFAULT false,\n payload_json TEXT NOT NULL DEFAULT '{}',\n occurred_at TEXT NOT NULL,\n committed_at TEXT NOT NULL\n);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_workbench_events_aggregate_seq ON workbench_events(aggregate_id, aggregate_seq);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_workbench_events_aggregate_source_event ON workbench_events(aggregate_id, source_event_id) WHERE source_event_id IS NOT NULL;\nCREATE INDEX IF NOT EXISTS idx_workbench_events_trace_seq ON workbench_events(trace_id, event_seq);\nCREATE INDEX IF NOT EXISTS idx_workbench_events_session_seq ON workbench_events(session_id, event_seq);\nCREATE INDEX IF NOT EXISTS idx_workbench_events_type_seq ON workbench_events(event_type, event_seq);\n\nCREATE TABLE IF NOT EXISTS workbench_session_inputs (\n input_id TEXT PRIMARY KEY,\n session_id TEXT NOT NULL,\n turn_id TEXT,\n trace_id TEXT,\n message_id TEXT,\n command_id TEXT,\n delivery TEXT NOT NULL DEFAULT 'queue',\n admitted_seq INTEGER NOT NULL DEFAULT 0,\n promoted_seq INTEGER,\n status TEXT NOT NULL DEFAULT 'admitted',\n error_code TEXT,\n source_event_id TEXT,\n input_json TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_workbench_session_inputs_session_seq ON workbench_session_inputs(session_id, admitted_seq, input_id);\nCREATE INDEX IF NOT EXISTS idx_workbench_session_inputs_trace ON workbench_session_inputs(trace_id, input_id);\nCREATE INDEX IF NOT EXISTS idx_workbench_session_inputs_command ON workbench_session_inputs(command_id, input_id) WHERE command_id IS NOT NULL;\nCREATE UNIQUE INDEX IF NOT EXISTS idx_workbench_session_inputs_source_event ON workbench_session_inputs(session_id, source_event_id) WHERE source_event_id IS NOT NULL;\n\nCREATE TABLE IF NOT EXISTS workbench_projection_checkpoints (\n trace_id TEXT PRIMARY KEY,\n session_id TEXT,\n turn_id TEXT,\n run_id TEXT,\n command_id TEXT,\n projected_seq INTEGER NOT NULL DEFAULT 0,\n source_seq INTEGER NOT NULL DEFAULT 0,\n source_event_id TEXT,\n projection_status TEXT NOT NULL DEFAULT 'projecting',\n projection_health TEXT NOT NULL DEFAULT 'healthy',\n terminal BOOLEAN NOT NULL DEFAULT false,\n sealed BOOLEAN NOT NULL DEFAULT false,\n diagnostic_json TEXT NOT NULL DEFAULT '{}',\n checkpoint_json TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_workbench_projection_checkpoints_status_updated ON workbench_projection_checkpoints(projection_status, updated_at DESC, trace_id);\nCREATE INDEX IF NOT EXISTS idx_workbench_projection_checkpoints_session_updated ON workbench_projection_checkpoints(session_id, updated_at DESC, trace_id);\n\nCREATE TABLE IF NOT EXISTS workbench_projection_outbox (\n outbox_seq BIGSERIAL PRIMARY KEY,\n event_seq BIGINT,\n aggregate_id TEXT,\n aggregate_seq INTEGER NOT NULL DEFAULT 0,\n projection_revision INTEGER NOT NULL DEFAULT 0,\n trace_id TEXT NOT NULL,\n session_id TEXT,\n turn_id TEXT,\n message_id TEXT,\n projected_seq INTEGER NOT NULL DEFAULT 0,\n source_seq INTEGER NOT NULL DEFAULT 0,\n source_event_id TEXT,\n commit_type TEXT NOT NULL DEFAULT 'event',\n terminal BOOLEAN NOT NULL DEFAULT false,\n sealed BOOLEAN NOT NULL DEFAULT false,\n payload_json TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL\n);\nALTER TABLE workbench_projection_outbox ADD COLUMN IF NOT EXISTS event_seq BIGINT;\nALTER TABLE workbench_projection_outbox ADD COLUMN IF NOT EXISTS aggregate_id TEXT;\nALTER TABLE workbench_projection_outbox ADD COLUMN IF NOT EXISTS aggregate_seq INTEGER NOT NULL DEFAULT 0;\nALTER TABLE workbench_projection_outbox ADD COLUMN IF NOT EXISTS projection_revision INTEGER NOT NULL DEFAULT 0;\nCREATE INDEX IF NOT EXISTS idx_workbench_projection_outbox_trace_seq ON workbench_projection_outbox(trace_id, outbox_seq);\nCREATE INDEX IF NOT EXISTS idx_workbench_projection_outbox_session_seq ON workbench_projection_outbox(session_id, outbox_seq);\nCREATE INDEX IF NOT EXISTS idx_workbench_projection_outbox_after_seq ON workbench_projection_outbox(outbox_seq);\nCREATE INDEX IF NOT EXISTS idx_workbench_projection_outbox_event_seq ON workbench_projection_outbox(event_seq) WHERE event_seq IS NOT NULL;\n\nINSERT INTO workbench_sessions (\n session_id,\n owner_user_id,\n project_id,\n conversation_id,\n thread_id,\n status,\n last_trace_id,\n projected_seq,\n source_seq,\n source_event_id,\n terminal,\n sealed,\n session_json,\n created_at,\n updated_at\n)\nSELECT\n id,\n owner_user_id,\n project_id,\n conversation_id,\n thread_id,\n status,\n last_trace_id,\n 0,\n 0,\n id,\n status IN ('completed', 'failed', 'canceled', 'cancelled', 'archived'),\n status IN ('completed', 'failed', 'canceled', 'cancelled', 'archived') AND ended_at IS NOT NULL,\n COALESCE(NULLIF(session_json, ''), '{}'),\n COALESCE(started_at, updated_at, CURRENT_TIMESTAMP::text),\n COALESCE(updated_at, ended_at, started_at, CURRENT_TIMESTAMP::text)\nFROM agent_sessions\nWHERE id IS NOT NULL\nON CONFLICT (session_id) DO NOTHING;\n\nINSERT INTO workbench_trace_events (\n id,\n trace_id,\n session_id,\n turn_id,\n message_id,\n source_seq,\n source_event_id,\n projected_seq,\n event_type,\n terminal,\n sealed,\n event_json,\n occurred_at,\n updated_at\n)\nSELECT\n source_trace_events.id,\n source_trace_events.trace_id,\n source_trace_events.agent_session_id,\n source_trace_events.trace_id,\n NULL,\n source_trace_events.durable_projection_seq,\n source_trace_events.id,\n source_trace_events.durable_projection_seq,\n 'agent_trace_event',\n false,\n false,\n COALESCE(NULLIF(source_trace_events.event_json, ''), '{}'),\n source_trace_events.occurred_at,\n source_trace_events.occurred_at\nFROM (\n SELECT\n agent_trace_events.*,\n (ROW_NUMBER() OVER (PARTITION BY trace_id ORDER BY occurred_at, id))::integer AS durable_projection_seq\n FROM agent_trace_events\n WHERE id IS NOT NULL AND trace_id IS NOT NULL\n) AS source_trace_events\nON CONFLICT DO NOTHING;\n\nINSERT INTO workbench_turns (\n turn_id,\n session_id,\n trace_id,\n message_id,\n status,\n projected_seq,\n source_seq,\n source_event_id,\n terminal,\n sealed,\n final_response_json,\n diagnostic_json,\n turn_json,\n created_at,\n updated_at\n)\nSELECT\n trace_id,\n COALESCE(session_id, trace_id),\n trace_id,\n NULL,\n projection_status,\n last_projected_seq,\n last_agentrun_seq,\n trace_id || ':' || last_agentrun_seq::text,\n projection_status IN ('caught_up', 'terminal'),\n projection_status = 'terminal',\n 'null',\n COALESCE(NULLIF(projection_json, ''), '{}'),\n COALESCE(NULLIF(projection_json, ''), '{}'),\n COALESCE(created_at, updated_at, CURRENT_TIMESTAMP::text),\n COALESCE(updated_at, created_at, CURRENT_TIMESTAMP::text)\nFROM workbench_projection_state\nWHERE trace_id IS NOT NULL\nON CONFLICT (turn_id) DO NOTHING;\n\nINSERT INTO workbench_projection_checkpoints (\n trace_id,\n session_id,\n turn_id,\n run_id,\n command_id,\n projected_seq,\n source_seq,\n source_event_id,\n projection_status,\n projection_health,\n terminal,\n sealed,\n diagnostic_json,\n checkpoint_json,\n created_at,\n updated_at\n)\nSELECT\n trace_id,\n session_id,\n trace_id,\n run_id,\n command_id,\n last_projected_seq,\n last_agentrun_seq,\n trace_id || ':' || last_agentrun_seq::text,\n projection_status,\n projection_health,\n projection_status IN ('caught_up', 'terminal'),\n projection_status = 'terminal',\n COALESCE(NULLIF(projection_json, ''), '{}'),\n COALESCE(NULLIF(projection_json, ''), '{}'),\n COALESCE(created_at, updated_at, CURRENT_TIMESTAMP::text),\n COALESCE(updated_at, created_at, CURRENT_TIMESTAMP::text)\nFROM workbench_projection_state\nWHERE trace_id IS NOT NULL\nON CONFLICT (trace_id) DO NOTHING;\n\nCREATE TABLE IF NOT EXISTS evidence_records (\n id TEXT PRIMARY KEY,\n project_id TEXT,\n operation_id TEXT,\n evidence_type TEXT NOT NULL,\n uri TEXT NOT NULL DEFAULT '',\n metadata_json TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS hwlab_schema_migrations (\n id TEXT PRIMARY KEY,\n schema_version TEXT NOT NULL,\n applied_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,\n migration_json TEXT NOT NULL DEFAULT '{}'\n);\n\nINSERT INTO hwlab_schema_migrations (id, schema_version, applied_at, migration_json)\nVALUES (\n '0001_cloud_core_skeleton',\n 'runtime-durable-postgres-v7',\n CURRENT_TIMESTAMP,\n '{\"path\":\"internal/db/migrations/0001_cloud_core_skeleton.sql\",\"runtime\":\"cloud-api\"}'\n)\nON CONFLICT (id) DO UPDATE SET\n schema_version = EXCLUDED.schema_version,\n migration_json = EXCLUDED.migration_json;\n", + "0008_workbench_kafka_realtime.sql": "-- Versioned v8 upgrade for immutable Workbench replay and the AgentRun Kafka projector.\n\nALTER TABLE workbench_projection_outbox ADD COLUMN IF NOT EXISTS outbox_event_id TEXT;\nALTER TABLE workbench_projection_outbox ADD COLUMN IF NOT EXISTS entity_family TEXT;\nALTER TABLE workbench_projection_outbox ADD COLUMN IF NOT EXISTS entity_id TEXT;\n\n-- Pre-v8 rows did not store immutable fact payloads. Mark them as cutover rows so\n-- recovery advances its cursor without fabricating message/turn/trace entities.\nUPDATE workbench_projection_outbox\nSET outbox_event_id = COALESCE(outbox_event_id, 'legacy:' || outbox_seq::text),\n entity_family = COALESCE(entity_family, 'legacy'),\n entity_id = COALESCE(entity_id, 'legacy:' || outbox_seq::text)\nWHERE outbox_event_id IS NULL OR entity_family IS NULL OR entity_id IS NULL;\n\nALTER TABLE workbench_projection_outbox ALTER COLUMN outbox_event_id SET NOT NULL;\nALTER TABLE workbench_projection_outbox ALTER COLUMN entity_family SET NOT NULL;\nALTER TABLE workbench_projection_outbox ALTER COLUMN entity_id SET NOT NULL;\nDROP INDEX IF EXISTS idx_workbench_projection_outbox_event_id;\nCREATE UNIQUE INDEX idx_workbench_projection_outbox_event_id ON workbench_projection_outbox(outbox_event_id);\n\nCREATE TABLE IF NOT EXISTS workbench_kafka_inbox (\n source_topic TEXT NOT NULL,\n source_partition INTEGER NOT NULL,\n source_offset BIGINT NOT NULL,\n source_key TEXT,\n source_event_id TEXT,\n input_sha256 TEXT NOT NULL,\n trace_id TEXT,\n session_id TEXT,\n run_id TEXT,\n command_id TEXT,\n source_seq INTEGER NOT NULL DEFAULT 0,\n status TEXT NOT NULL DEFAULT 'processing',\n projected_seq INTEGER,\n envelope_json TEXT NOT NULL DEFAULT '{}',\n error_json TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n projected_at TEXT,\n PRIMARY KEY (source_topic, source_partition, source_offset)\n);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_workbench_kafka_inbox_source_event ON workbench_kafka_inbox(source_topic, source_event_id) WHERE source_event_id IS NOT NULL;\nCREATE INDEX IF NOT EXISTS idx_workbench_kafka_inbox_status_updated ON workbench_kafka_inbox(status, updated_at, source_topic, source_partition, source_offset);\nCREATE INDEX IF NOT EXISTS idx_workbench_kafka_inbox_trace ON workbench_kafka_inbox(trace_id, source_seq);\n\nCREATE TABLE IF NOT EXISTS workbench_kafka_dlq (\n dlq_seq BIGSERIAL PRIMARY KEY,\n source_topic TEXT NOT NULL,\n source_partition INTEGER NOT NULL,\n source_offset BIGINT NOT NULL,\n source_event_id TEXT,\n input_sha256 TEXT NOT NULL,\n error_code TEXT NOT NULL,\n error_message TEXT NOT NULL,\n envelope_json TEXT NOT NULL DEFAULT '{}',\n created_at TEXT NOT NULL\n);\nCREATE UNIQUE INDEX IF NOT EXISTS idx_workbench_kafka_dlq_transport ON workbench_kafka_dlq(source_topic, source_partition, source_offset);\n\nCREATE TABLE IF NOT EXISTS hwlab_kafka_outbox (\n outbox_seq BIGSERIAL PRIMARY KEY,\n event_id TEXT NOT NULL UNIQUE,\n topic TEXT NOT NULL,\n partition_key TEXT NOT NULL,\n payload_json TEXT NOT NULL,\n headers_json TEXT NOT NULL DEFAULT '{}',\n attempt_count INTEGER NOT NULL DEFAULT 0,\n next_attempt_at TEXT NOT NULL,\n lease_owner TEXT,\n lease_expires_at TEXT,\n published_at TEXT,\n last_error TEXT,\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\nCREATE INDEX IF NOT EXISTS idx_hwlab_kafka_outbox_due ON hwlab_kafka_outbox(published_at, next_attempt_at, lease_expires_at, outbox_seq);\n\nCREATE OR REPLACE FUNCTION notify_hwlab_workbench_projection() RETURNS trigger AS $$\nBEGIN\n PERFORM pg_notify(\n 'hwlab_workbench_projection',\n json_build_object(\n 'sessionId', NEW.session_id,\n 'traceId', NEW.trace_id,\n 'outboxSeq', NEW.outbox_seq\n )::text\n );\n RETURN NEW;\nEND;\n$$ LANGUAGE plpgsql;\n\nDROP TRIGGER IF EXISTS trg_notify_hwlab_workbench_projection ON workbench_projection_outbox;\nCREATE TRIGGER trg_notify_hwlab_workbench_projection\nAFTER INSERT ON workbench_projection_outbox\nFOR EACH ROW EXECUTE FUNCTION notify_hwlab_workbench_projection();\n\nINSERT INTO hwlab_schema_migrations (id, schema_version, applied_at, migration_json)\nVALUES (\n '0008_workbench_kafka_realtime',\n 'runtime-durable-postgres-v8',\n CURRENT_TIMESTAMP,\n '{\"path\":\"internal/db/migrations/0008_workbench_kafka_realtime.sql\",\"runtime\":\"cloud-api\"}'\n)\nON CONFLICT (id) DO UPDATE SET\n schema_version = EXCLUDED.schema_version,\n migration_json = EXCLUDED.migration_json;\n" + } + }, + { + "apiVersion": "batch/v1", + "kind": "Job", + "metadata": { + "name": "hwlab-v03-external-postgres-migrate-b76f803a88fe", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "nc01-host-postgres", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/component": "platform-db-bridge", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "argocd.argoproj.io/sync-wave": "-1", + "hwlab.pikastech.local/migration-sha256": "7644f9c5fa2ed7d1fdff61a17de5799af9362a9dcdac3f58978ab9fca55de7ca" + } + }, + "spec": { + "backoffLimit": 2, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-v03-external-postgres-migrate-b76f803a88fe", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/component": "platform-db-bridge", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "restartPolicy": "Never", + "containers": [ + { + "name": "migrate", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/opt/hwlab-migrations/run.mjs" + ], + "env": [ + { + "name": "DATABASE_URL", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-cloud-api-v03-db", + "key": "database-url" + } + } + } + ], + "volumeMounts": [ + { + "name": "migrations", + "mountPath": "/opt/hwlab-migrations", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "migrations", + "configMap": { + "name": "hwlab-v03-external-postgres-migrate-b76f803a88fe" + } + } + ] + } + } + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "nc01-host-postgres", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "nc01-host-postgres", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/component": "platform-db-bridge", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "ports": [ + { + "name": "postgres", + "port": 5432, + "targetPort": 5432, + "protocol": "TCP" + } + ] + } + }, + { + "apiVersion": "discovery.k8s.io/v1", + "kind": "EndpointSlice", + "metadata": { + "name": "nc01-host-postgres-host", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "nc01-host-postgres", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/component": "platform-db-bridge", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "kubernetes.io/service-name": "nc01-host-postgres" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "addressType": "IPv4", + "ports": [ + { + "name": "postgres", + "port": 5432, + "protocol": "TCP" + } + ], + "endpoints": [ + { + "addresses": [ + "10.42.0.1" + ], + "conditions": { + "ready": true + } + } + ] + } + ] +} diff --git a/deploy/gitops/node/nc01/runtime-v03/health-contract.yaml b/deploy/gitops/node/nc01/runtime-v03/health-contract.yaml index 0a3540f4..520cc1e8 100644 --- a/deploy/gitops/node/nc01/runtime-v03/health-contract.yaml +++ b/deploy/gitops/node/nc01/runtime-v03/health-contract.yaml @@ -1,35 +1,27 @@ -apiVersion: v1 -kind: List -items: - - apiVersion: v1 - kind: ConfigMap - metadata: - name: hwlab-v03-health-contract - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-v03-health-contract - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/environment: v03 - annotations: - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - data: - endpoint: https://hwlab.pikapython.com - cloud-api: GET /health/live through https://hwlab.pikapython.com - cloud-api-db: DEV DB config gate requires HWLAB_CLOUD_DB_URL from Secret - hwlab-cloud-api-dev-db/database-url and HWLAB_CLOUD_DB_SSL_MODE=require. - Runtime readiness dials the redacted host parsed from the Secret URL and - reports endpointSource=secret-url-host. cloud-api-db is an optional - desired alias only until this repo owns Service plus Endpoint or - EndpointSlice manifests and rollout/apply contract; health reports env - presence, env injection, redacted connection attempt/result, and - liveConnected without exposing secret values - cloud-web: GET /health/live on https://hwlab.pikapython.com; consumes cloud-api only - agent: hwlab-cloud-api authorizes Code Agent sessions and dispatches execution - to AgentRun v0.1; no HWLAB-owned agent manager/worker service is - deployed - edge-proxy: hwlab-edge-proxy:6667 exposes /health/live and proxies DEV endpoint - traffic to hwlab-cloud-api - runtime-substitute-policy: Do not replace HWLAB runtime with UniDesk backend, - provider-gateway, or microservice proxy +{ + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "hwlab-v03-health-contract", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-v03-health-contract", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "data": { + "endpoint": "https://lab-dev.hwpod.com", + "cloud-api": "GET /health/live through https://lab-dev.hwpod.com", + "cloud-api-db": "DEV DB config gate requires HWLAB_CLOUD_DB_URL from Secret hwlab-cloud-api-dev-db/database-url and HWLAB_CLOUD_DB_SSL_MODE=disable. Runtime readiness dials the redacted host parsed from the Secret URL and reports endpointSource=secret-url-host. cloud-api-db is an optional desired alias only until this repo owns Service plus Endpoint or EndpointSlice manifests and rollout/apply contract; health reports env presence, env injection, redacted connection attempt/result, and liveConnected without exposing secret values", + "cloud-web": "GET /health/live on https://lab-dev.hwpod.com; consumes cloud-api only", + "agent": "hwlab-cloud-api authorizes Code Agent sessions and dispatches execution to AgentRun v0.1; no HWLAB-owned agent manager/worker service is deployed", + "edge-proxy": "hwlab-edge-proxy:6667 exposes /health/live and proxies DEV endpoint traffic to hwlab-cloud-api", + "runtime-substitute-policy": "Do not replace HWLAB runtime with UniDesk backend, provider-gateway, or microservice proxy" + } +} diff --git a/deploy/gitops/node/nc01/runtime-v03/kustomization.yaml b/deploy/gitops/node/nc01/runtime-v03/kustomization.yaml index 218889f2..4a3dd289 100644 --- a/deploy/gitops/node/nc01/runtime-v03/kustomization.yaml +++ b/deploy/gitops/node/nc01/runtime-v03/kustomization.yaml @@ -1,15 +1,19 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -namespace: hwlab-v03 -resources: - - namespace.yaml - - services.yaml - - health-contract.yaml - - configmaps.yaml - - workloads.yaml - - deepseek-proxy.yaml - - external-postgres.yaml - - workbench-redis.yaml - - openfga.yaml - - opencode.yaml - - node-frpc.yaml +{ + "apiVersion": "kustomize.config.k8s.io/v1beta1", + "kind": "Kustomization", + "namespace": "hwlab-v03", + "resources": [ + "namespace.yaml", + "services.yaml", + "health-contract.yaml", + "configmaps.yaml", + "workloads.yaml", + "deepseek-proxy.yaml", + "external-postgres.yaml", + "workbench-redis.yaml", + "openfga.yaml", + "observability.yaml", + "opencode.yaml", + "node-frpc.yaml" + ] +} diff --git a/deploy/gitops/node/nc01/runtime-v03/namespace.yaml b/deploy/gitops/node/nc01/runtime-v03/namespace.yaml index f5b8fd12..8f01b848 100644 --- a/deploy/gitops/node/nc01/runtime-v03/namespace.yaml +++ b/deploy/gitops/node/nc01/runtime-v03/namespace.yaml @@ -7,7 +7,7 @@ "app.kubernetes.io/part-of": "hwlab", "hwlab.pikastech.local/profile": "v03", "hwlab.pikastech.local/gitops-target": "v03", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "hwlab.pikastech.local/environment": "v03" }, "annotations": { diff --git a/deploy/gitops/node/nc01/runtime-v03/node-frpc.yaml b/deploy/gitops/node/nc01/runtime-v03/node-frpc.yaml index 28fc5a1d..6294284a 100644 --- a/deploy/gitops/node/nc01/runtime-v03/node-frpc.yaml +++ b/deploy/gitops/node/nc01/runtime-v03/node-frpc.yaml @@ -1,95 +1,105 @@ -apiVersion: v1 -kind: List -items: - - apiVersion: v1 - kind: ConfigMap - metadata: - name: hwlab-v03-frpc-config - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-v03-frpc - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - data: - frpc.toml: | - serverAddr = "82.156.23.220" - serverPort = 22000 - loginFailExit = true - auth.token = "{{ .Envs.HWLAB_FRP_TOKEN }}" - - [[proxies]] - name = "hwlab-nc01-v03-cloud-web" - type = "tcp" - localIP = "hwlab-cloud-web.hwlab-v03.svc.cluster.local" - localPort = 8080 - remotePort = 22082 - - [[proxies]] - name = "hwlab-nc01-v03-edge-proxy" - type = "tcp" - localIP = "hwlab-edge-proxy.hwlab-v03.svc.cluster.local" - localPort = 6667 - remotePort = 22083 - - apiVersion: apps/v1 - kind: Deployment - metadata: - name: hwlab-v03-frpc - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-v03-frpc - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: hwlab-v03-frpc - template: - metadata: - labels: - app.kubernetes.io/name: hwlab-v03-frpc - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/config-sha256: aba14645c55d02c0 - annotations: - hwlab.pikastech.local/config-sha256: aba14645c55d02c009d792a8a5bae51ad401b957dfc50b5d583e4589de3d5288 - unidesk.ai/frpc-config-sha256: b7456fcabaed4d5e73858c8819681060fabb50b66766d9795ff97509c24e7deb - spec: - hostNetwork: true - dnsPolicy: ClusterFirstWithHostNet - containers: - - name: frpc - image: 127.0.0.1:5000/hwlab/frpc:v0.68.1 - imagePullPolicy: IfNotPresent - env: - - name: FRPC_AUTH_TOKEN - valueFrom: - secretKeyRef: - name: hwlab-v03-frpc-secrets - key: token - - name: HWLAB_FRP_TOKEN - valueFrom: - secretKeyRef: - name: hwlab-v03-frpc-secrets - key: token - args: - - -c - - /etc/frp/frpc.toml - volumeMounts: - - name: config - mountPath: /etc/frp - readOnly: true - volumes: - - name: config - configMap: - name: hwlab-v03-frpc-config - strategy: - type: Recreate +{ + "apiVersion": "v1", + "kind": "List", + "items": [ + { + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "hwlab-v03-frpc-config", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-v03-frpc", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "data": { + "frpc.toml": "serverAddr = \"82.156.23.220\"\nserverPort = 22000\nloginFailExit = true\nauth.token = \"{{ .Envs.FRPC_AUTH_TOKEN }}\"\n\n\n[[proxies]]\nname = \"hwlab-nc01-v03-cloud-web\"\ntype = \"tcp\"\nlocalIP = \"hwlab-cloud-web.hwlab-v03.svc.cluster.local\"\nlocalPort = 8080\nremotePort = 22082\n\n[[proxies]]\nname = \"hwlab-nc01-v03-edge-proxy\"\ntype = \"tcp\"\nlocalIP = \"hwlab-edge-proxy.hwlab-v03.svc.cluster.local\"\nlocalPort = 6667\nremotePort = 22083\n" + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-v03-frpc", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-v03-frpc", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-v03-frpc" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-v03-frpc", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/config-sha256": "aba14645c55d02c0" + }, + "annotations": { + "hwlab.pikastech.local/config-sha256": "aba14645c55d02c009d792a8a5bae51ad401b957dfc50b5d583e4589de3d5288" + } + }, + "spec": { + "hostNetwork": true, + "dnsPolicy": "ClusterFirstWithHostNet", + "containers": [ + { + "name": "frpc", + "image": "fatedier/frpc:v0.68.1", + "imagePullPolicy": "IfNotPresent", + "env": [ + { + "name": "FRPC_AUTH_TOKEN", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-frpc-secrets", + "key": "token" + } + } + } + ], + "args": [ + "-c", + "/etc/frp/frpc.toml" + ], + "volumeMounts": [ + { + "name": "config", + "mountPath": "/etc/frp", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "config", + "configMap": { + "name": "hwlab-v03-frpc-config" + } + } + ] + } + } + } + } + ] +} diff --git a/deploy/gitops/node/nc01/runtime-v03/observability.yaml b/deploy/gitops/node/nc01/runtime-v03/observability.yaml new file mode 100644 index 00000000..f2a635e7 --- /dev/null +++ b/deploy/gitops/node/nc01/runtime-v03/observability.yaml @@ -0,0 +1,28 @@ +{ + "apiVersion": "v1", + "kind": "List", + "items": [ + { + "apiVersion": "v1", + "kind": "ConfigMap", + "metadata": { + "name": "hwlab-v03-metrics-sidecar", + "namespace": "hwlab-v03", + "labels": { + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "data": { + "metrics-sidecar.mjs": "import { createServer, request as httpRequest } from \"node:http\";\nimport { request as httpsRequest } from \"node:https\";\nimport { realpathSync } from \"node:fs\";\nimport { pathToFileURL } from \"node:url\";\n\nconst DEFAULT_PORT = 9100;\nconst DEFAULT_TARGET_TIMEOUT_MS = 2000;\nconst DEFAULT_EXTRA_METRICS_MAX_BYTES = 64 * 1024;\nconst startedAtMs = Date.now();\n\nexport function sanitizeLabelValue(value, fallback = \"unknown\") {\n const text = String(value ?? \"\").trim();\n const sanitized = text.replace(/[^A-Za-z0-9_.:-]/gu, \"_\").slice(0, 120);\n return sanitized || fallback;\n}\n\nexport function escapeLabelValue(value) {\n return String(value ?? \"\").replace(/\\\\/gu, \"\\\\\\\\\").replace(/\\n/gu, \"\\\\n\").replace(/\"/gu, \"\\\\\\\"\");\n}\n\nfunction metricLabels(env) {\n const service = sanitizeLabelValue(env.HWLAB_METRICS_SERVICE_ID || env.HWLAB_SERVICE_ID);\n const namespace = sanitizeLabelValue(env.HWLAB_METRICS_NAMESPACE || env.POD_NAMESPACE || \"hwlab-v02\");\n const gitopsTarget = sanitizeLabelValue(env.HWLAB_METRICS_GITOPS_TARGET || env.HWLAB_GITOPS_TARGET || \"v02\");\n return `service=\"${escapeLabelValue(service)}\",namespace=\"${escapeLabelValue(namespace)}\",gitops_target=\"${escapeLabelValue(gitopsTarget)}\"`;\n}\n\nexport function requestTarget({ targetUrl, timeoutMs = DEFAULT_TARGET_TIMEOUT_MS, collectBody = false, maxBodyBytes = DEFAULT_EXTRA_METRICS_MAX_BYTES } = {}) {\n const configured = typeof targetUrl === \"string\" && targetUrl.trim().length > 0;\n if (!configured) return Promise.resolve({ configured: false, success: false, statusCode: 0, durationSeconds: 0 });\n\n let url;\n try {\n url = new URL(targetUrl);\n } catch {\n return Promise.resolve({ configured: true, success: false, statusCode: 0, durationSeconds: 0 });\n }\n\n const requestImpl = url.protocol === \"https:\" ? httpsRequest : url.protocol === \"http:\" ? httpRequest : null;\n if (!requestImpl) return Promise.resolve({ configured: true, success: false, statusCode: 0, durationSeconds: 0 });\n\n const started = Date.now();\n return new Promise((resolve) => {\n const finish = (result) => resolve({\n configured: true,\n success: false,\n statusCode: 0,\n durationSeconds: (Date.now() - started) / 1000,\n ...result\n });\n const request = requestImpl(url, { method: \"GET\", timeout: timeoutMs }, (response) => {\n const chunks = [];\n let bytes = 0;\n if (collectBody) {\n response.on(\"data\", (chunk) => {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n bytes += buffer.length;\n if (bytes <= maxBodyBytes) chunks.push(buffer);\n });\n } else {\n response.resume();\n }\n response.on(\"end\", () => finish({\n success: Boolean(response.statusCode && response.statusCode >= 200 && response.statusCode < 300),\n statusCode: response.statusCode || 0,\n body: collectBody ? Buffer.concat(chunks).toString(\"utf8\") : undefined,\n bodyBytes: collectBody ? Math.min(bytes, maxBodyBytes) : 0,\n truncated: collectBody ? bytes > maxBodyBytes : false\n }));\n });\n request.on(\"timeout\", () => request.destroy());\n request.on(\"error\", () => finish({}));\n request.end();\n });\n}\n\nexport async function probeExtraMetrics({ targetUrl, timeoutMs = DEFAULT_TARGET_TIMEOUT_MS, maxBodyBytes = DEFAULT_EXTRA_METRICS_MAX_BYTES, probeImpl = requestTarget } = {}) {\n const configured = typeof targetUrl === \"string\" && targetUrl.trim().length > 0;\n if (!configured || typeof probeImpl !== \"function\") {\n return { configured: false, success: false, statusCode: 0, durationSeconds: 0, text: \"\" };\n }\n try {\n const result = await probeImpl({ targetUrl, timeoutMs, collectBody: true, maxBodyBytes });\n return {\n configured: true,\n success: Boolean(result.success),\n statusCode: result.statusCode || 0,\n durationSeconds: result.durationSeconds || 0,\n text: result.success ? sanitizeExtraMetricsText(result.body || \"\") : \"\"\n };\n } catch {\n return { configured: true, success: false, statusCode: 0, durationSeconds: 0, text: \"\" };\n }\n}\n\nexport function sanitizeExtraMetricsText(text) {\n const lines = String(text ?? \"\").split(/\\r?\\n/gu);\n return lines.filter((line) => {\n if (!line) return true;\n if (/^#\\s+(?:HELP|TYPE)\\s+hwlab_[A-Za-z_:][A-Za-z0-9_:]*\\b/u.test(line)) return true;\n return /^hwlab_[A-Za-z_:][A-Za-z0-9_:]*(?:\\{[^\\n{}]*\\})?\\s+[-+0-9.eE]+$/u.test(line);\n }).join(\"\\n\");\n}\n\nexport async function probeTarget({ targetUrl, timeoutMs = DEFAULT_TARGET_TIMEOUT_MS, probeImpl = requestTarget } = {}) {\n const configured = typeof targetUrl === \"string\" && targetUrl.trim().length > 0;\n if (!configured || typeof probeImpl !== \"function\") {\n return { configured: false, success: false, statusCode: 0, durationSeconds: 0 };\n }\n try {\n return await probeImpl({ targetUrl, timeoutMs });\n } catch {\n const started = Date.now();\n return { configured: true, success: false, statusCode: 0, durationSeconds: (Date.now() - started) / 1000 };\n }\n}\n\nexport function buildMetricsText({ env = process.env, probe = null, extraMetrics = null, now = Date.now() } = {}) {\n const labels = metricLabels(env);\n const uptimeSeconds = Math.max(0, (now - startedAtMs) / 1000);\n const healthProbe = probe ?? { configured: false, success: false, statusCode: 0, durationSeconds: 0 };\n const extraProbe = extraMetrics ?? { configured: false, success: false, statusCode: 0, durationSeconds: 0, text: \"\" };\n const lines = [\n \"# HELP hwlab_service_up HWLAB metrics sidecar availability.\",\n \"# TYPE hwlab_service_up gauge\",\n `hwlab_service_up{${labels}} 1`,\n \"# HELP hwlab_service_info Static HWLAB service metrics identity without high-cardinality request identifiers.\",\n \"# TYPE hwlab_service_info gauge\",\n `hwlab_service_info{${labels}} 1`,\n \"# HELP hwlab_service_process_uptime_seconds Metrics sidecar process uptime in seconds.\",\n \"# TYPE hwlab_service_process_uptime_seconds gauge\",\n `hwlab_service_process_uptime_seconds{${labels}} ${uptimeSeconds.toFixed(3)}`,\n \"# HELP hwlab_service_health_probe_configured Whether the sidecar has a cluster-local health probe target.\",\n \"# TYPE hwlab_service_health_probe_configured gauge\",\n `hwlab_service_health_probe_configured{${labels}} ${healthProbe.configured ? 1 : 0}`,\n \"# HELP hwlab_service_health_probe_success Whether the most recent cluster-local health probe succeeded.\",\n \"# TYPE hwlab_service_health_probe_success gauge\",\n `hwlab_service_health_probe_success{${labels}} ${healthProbe.success ? 1 : 0}`,\n \"# HELP hwlab_service_health_probe_status_code Most recent cluster-local health probe HTTP status code, or 0 when unavailable.\",\n \"# TYPE hwlab_service_health_probe_status_code gauge\",\n `hwlab_service_health_probe_status_code{${labels}} ${Number.isInteger(healthProbe.statusCode) ? healthProbe.statusCode : 0}`,\n \"# HELP hwlab_service_health_probe_duration_seconds Most recent cluster-local health probe duration in seconds.\",\n \"# TYPE hwlab_service_health_probe_duration_seconds gauge\",\n `hwlab_service_health_probe_duration_seconds{${labels}} ${Number(healthProbe.durationSeconds || 0).toFixed(3)}`,\n \"# HELP hwlab_service_extra_metrics_configured Whether the sidecar has an additional cluster-local metrics target.\",\n \"# TYPE hwlab_service_extra_metrics_configured gauge\",\n `hwlab_service_extra_metrics_configured{${labels}} ${extraProbe.configured ? 1 : 0}`,\n \"# HELP hwlab_service_extra_metrics_success Whether the most recent additional metrics fetch succeeded.\",\n \"# TYPE hwlab_service_extra_metrics_success gauge\",\n `hwlab_service_extra_metrics_success{${labels}} ${extraProbe.success ? 1 : 0}`,\n \"# HELP hwlab_service_extra_metrics_status_code Most recent additional metrics HTTP status code, or 0 when unavailable.\",\n \"# TYPE hwlab_service_extra_metrics_status_code gauge\",\n `hwlab_service_extra_metrics_status_code{${labels}} ${Number.isInteger(extraProbe.statusCode) ? extraProbe.statusCode : 0}`,\n \"# HELP hwlab_service_extra_metrics_duration_seconds Most recent additional metrics fetch duration in seconds.\",\n \"# TYPE hwlab_service_extra_metrics_duration_seconds gauge\",\n `hwlab_service_extra_metrics_duration_seconds{${labels}} ${Number(extraProbe.durationSeconds || 0).toFixed(3)}`,\n \"\"\n ];\n if (extraProbe.text) {\n lines.push(extraProbe.text.trimEnd(), \"\");\n }\n return lines.join(\"\\n\");\n}\n\nfunction sendJson(response, statusCode, body) {\n const payload = JSON.stringify(body) + \"\\n\";\n response.writeHead(statusCode, {\n \"content-type\": \"application/json; charset=utf-8\",\n \"content-length\": Buffer.byteLength(payload)\n });\n response.end(payload);\n}\n\nexport function createMetricsSidecarServer({ env = process.env, probeImpl = requestTarget } = {}) {\n return createServer(async (request, response) => {\n const url = new URL(request.url || \"/\", \"http://hwlab-metrics.local\");\n if (request.method === \"GET\" && (url.pathname === \"/health\" || url.pathname === \"/health/live\")) {\n sendJson(response, 200, {\n serviceId: sanitizeLabelValue(env.HWLAB_METRICS_SERVICE_ID || env.HWLAB_SERVICE_ID),\n status: \"ok\",\n metricsPath: \"/metrics\"\n });\n return;\n }\n if (request.method === \"GET\" && url.pathname === \"/metrics\") {\n const timeoutMs = Number.parseInt(env.HWLAB_METRICS_TARGET_TIMEOUT_MS || \"\", 10) || DEFAULT_TARGET_TIMEOUT_MS;\n const probe = await probeTarget({ targetUrl: env.HWLAB_METRICS_TARGET_URL, timeoutMs, probeImpl });\n const extraTimeoutMs = Number.parseInt(env.HWLAB_METRICS_EXTRA_TIMEOUT_MS || \"\", 10) || DEFAULT_TARGET_TIMEOUT_MS;\n const extraMetrics = await probeExtraMetrics({ targetUrl: env.HWLAB_METRICS_EXTRA_URL, timeoutMs: extraTimeoutMs, probeImpl });\n const payload = buildMetricsText({ env, probe, extraMetrics });\n response.writeHead(200, {\n \"content-type\": \"text/plain; version=0.0.4; charset=utf-8\",\n \"content-length\": Buffer.byteLength(payload)\n });\n response.end(payload);\n return;\n }\n sendJson(response, 404, { error: \"not_found\", path: url.pathname });\n });\n}\n\nexport function startMetricsSidecar({ env = process.env } = {}) {\n const port = Number.parseInt(env.HWLAB_METRICS_PORT || env.PORT || \"\", 10) || DEFAULT_PORT;\n const server = createMetricsSidecarServer({ env });\n server.listen(port, \"0.0.0.0\", () => {\n process.stdout.write(JSON.stringify({ serviceId: env.HWLAB_METRICS_SERVICE_ID || \"hwlab-unknown\", status: \"metrics-listening\", port }) + \"\\n\");\n });\n return server;\n}\n\nexport function isMainModule({ moduleUrl = import.meta.url, argvPath = process.argv[1], realpath = realpathSync } = {}) {\n if (!argvPath) return false;\n if (moduleUrl === pathToFileURL(argvPath).href) return true;\n try {\n return moduleUrl === pathToFileURL(realpath(argvPath)).href;\n } catch {\n return false;\n }\n}\n\nif (isMainModule()) {\n startMetricsSidecar();\n}\n" + } + } + ] +} diff --git a/deploy/gitops/node/nc01/runtime-v03/opencode.yaml b/deploy/gitops/node/nc01/runtime-v03/opencode.yaml index f62db390..0211d713 100644 --- a/deploy/gitops/node/nc01/runtime-v03/opencode.yaml +++ b/deploy/gitops/node/nc01/runtime-v03/opencode.yaml @@ -16,7 +16,7 @@ "hwlab.pikastech.local/component": "opencode", "hwlab.pikastech.local/gitops-target": "v03", "hwlab.pikastech.local/service-id": "opencode-server", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", @@ -31,11 +31,11 @@ "hwlab.pikastech.local/agentrun-provider-secret-ref": "agentrun-v02/agentrun-v01-provider-gpt-pika", "hwlab.pikastech.local/agentrun-provider-secret-keys": "auth.json,config.toml,model-catalog.json", "hwlab.pikastech.local/values-printed": "false", - "hwlab.pikastech.local/opencode-provider-proxy-runtime-mode": "env-reuse-git-mirror-checkout", + "hwlab.pikastech.local/opencode-provider-proxy-runtime-mode": "env-reuse-gitea-checkout", "hwlab.pikastech.local/opencode-provider-proxy-boot-repo": "git@github.com:pikasTech/HWLAB.git", - "hwlab.pikastech.local/opencode-provider-proxy-boot-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "hwlab.pikastech.local/opencode-provider-proxy-boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "hwlab.pikastech.local/opencode-provider-proxy-boot-sh": "deploy/runtime/boot/opencode-provider-proxy.sh", - "hwlab.pikastech.local/opencode-provider-proxy-environment-digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "hwlab.pikastech.local/opencode-provider-proxy-environment-digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" } } }, @@ -53,7 +53,7 @@ "hwlab.pikastech.local/component": "opencode", "hwlab.pikastech.local/gitops-target": "v03", "hwlab.pikastech.local/service-id": "opencode-server", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", @@ -68,11 +68,11 @@ "hwlab.pikastech.local/agentrun-provider-secret-ref": "agentrun-v02/agentrun-v01-provider-gpt-pika", "hwlab.pikastech.local/agentrun-provider-secret-keys": "auth.json,config.toml,model-catalog.json", "hwlab.pikastech.local/values-printed": "false", - "hwlab.pikastech.local/opencode-provider-proxy-runtime-mode": "env-reuse-git-mirror-checkout", + "hwlab.pikastech.local/opencode-provider-proxy-runtime-mode": "env-reuse-gitea-checkout", "hwlab.pikastech.local/opencode-provider-proxy-boot-repo": "git@github.com:pikasTech/HWLAB.git", - "hwlab.pikastech.local/opencode-provider-proxy-boot-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "hwlab.pikastech.local/opencode-provider-proxy-boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "hwlab.pikastech.local/opencode-provider-proxy-boot-sh": "deploy/runtime/boot/opencode-provider-proxy.sh", - "hwlab.pikastech.local/opencode-provider-proxy-environment-digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "hwlab.pikastech.local/opencode-provider-proxy-environment-digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" } }, "spec": { @@ -100,7 +100,7 @@ "hwlab.pikastech.local/component": "opencode", "hwlab.pikastech.local/gitops-target": "v03", "hwlab.pikastech.local/service-id": "opencode-server", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", @@ -115,11 +115,11 @@ "hwlab.pikastech.local/agentrun-provider-secret-ref": "agentrun-v02/agentrun-v01-provider-gpt-pika", "hwlab.pikastech.local/agentrun-provider-secret-keys": "auth.json,config.toml,model-catalog.json", "hwlab.pikastech.local/values-printed": "false", - "hwlab.pikastech.local/opencode-provider-proxy-runtime-mode": "env-reuse-git-mirror-checkout", + "hwlab.pikastech.local/opencode-provider-proxy-runtime-mode": "env-reuse-gitea-checkout", "hwlab.pikastech.local/opencode-provider-proxy-boot-repo": "git@github.com:pikasTech/HWLAB.git", - "hwlab.pikastech.local/opencode-provider-proxy-boot-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "hwlab.pikastech.local/opencode-provider-proxy-boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "hwlab.pikastech.local/opencode-provider-proxy-boot-sh": "deploy/runtime/boot/opencode-provider-proxy.sh", - "hwlab.pikastech.local/opencode-provider-proxy-environment-digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "hwlab.pikastech.local/opencode-provider-proxy-environment-digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" } }, "spec": { @@ -153,7 +153,7 @@ "hwlab.pikastech.local/component": "opencode", "hwlab.pikastech.local/gitops-target": "v03", "hwlab.pikastech.local/service-id": "opencode-server", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", @@ -168,11 +168,11 @@ "hwlab.pikastech.local/agentrun-provider-secret-ref": "agentrun-v02/agentrun-v01-provider-gpt-pika", "hwlab.pikastech.local/agentrun-provider-secret-keys": "auth.json,config.toml,model-catalog.json", "hwlab.pikastech.local/values-printed": "false", - "hwlab.pikastech.local/opencode-provider-proxy-runtime-mode": "env-reuse-git-mirror-checkout", + "hwlab.pikastech.local/opencode-provider-proxy-runtime-mode": "env-reuse-gitea-checkout", "hwlab.pikastech.local/opencode-provider-proxy-boot-repo": "git@github.com:pikasTech/HWLAB.git", - "hwlab.pikastech.local/opencode-provider-proxy-boot-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "hwlab.pikastech.local/opencode-provider-proxy-boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "hwlab.pikastech.local/opencode-provider-proxy-boot-sh": "deploy/runtime/boot/opencode-provider-proxy.sh", - "hwlab.pikastech.local/opencode-provider-proxy-environment-digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "hwlab.pikastech.local/opencode-provider-proxy-environment-digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" } }, "spec": { @@ -198,7 +198,7 @@ "hwlab.pikastech.local/component": "opencode", "hwlab.pikastech.local/gitops-target": "v03", "hwlab.pikastech.local/service-id": "opencode-server", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", @@ -213,11 +213,11 @@ "hwlab.pikastech.local/agentrun-provider-secret-ref": "agentrun-v02/agentrun-v01-provider-gpt-pika", "hwlab.pikastech.local/agentrun-provider-secret-keys": "auth.json,config.toml,model-catalog.json", "hwlab.pikastech.local/values-printed": "false", - "hwlab.pikastech.local/opencode-provider-proxy-runtime-mode": "env-reuse-git-mirror-checkout", + "hwlab.pikastech.local/opencode-provider-proxy-runtime-mode": "env-reuse-gitea-checkout", "hwlab.pikastech.local/opencode-provider-proxy-boot-repo": "git@github.com:pikasTech/HWLAB.git", - "hwlab.pikastech.local/opencode-provider-proxy-boot-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913", + "hwlab.pikastech.local/opencode-provider-proxy-boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", "hwlab.pikastech.local/opencode-provider-proxy-boot-sh": "deploy/runtime/boot/opencode-provider-proxy.sh", - "hwlab.pikastech.local/opencode-provider-proxy-environment-digest": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "hwlab.pikastech.local/opencode-provider-proxy-environment-digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" } }, "spec": { @@ -229,7 +229,7 @@ "initContainers": [ { "name": "opencode-workspace-git-init", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", "imagePullPolicy": "IfNotPresent", "command": [ "/bin/sh", @@ -284,27 +284,27 @@ }, { "name": "HTTP_PROXY", - "value": "http://10.42.0.1:10808" + "value": "http://sub2api-egress-proxy.platform-infra.svc.cluster.local:10808" }, { "name": "HTTPS_PROXY", - "value": "http://10.42.0.1:10808" + "value": "http://sub2api-egress-proxy.platform-infra.svc.cluster.local:10808" }, { "name": "http_proxy", - "value": "http://10.42.0.1:10808" + "value": "http://sub2api-egress-proxy.platform-infra.svc.cluster.local:10808" }, { "name": "https_proxy", - "value": "http://10.42.0.1:10808" + "value": "http://sub2api-egress-proxy.platform-infra.svc.cluster.local:10808" }, { "name": "NO_PROXY", - "value": "localhost,127.0.0.1,::1,127.0.0.1:5000,localhost:5000,.svc,.svc.cluster.local,.cluster.local,kubernetes,kubernetes.default,kubernetes.default.svc,argocd-repo-server,argocd-repo-server.argocd,argocd-redis,argocd-redis.argocd,git-mirror-http,git-mirror-http.devops-infra,git-mirror-write,git-mirror-write.devops-infra,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,172.16.0.0/12,192.168.0.0/16,152.53.229.148,152.53.229.148,hyueapi.com,.hyueapi.com" + "value": "localhost,127.0.0.1,::1,.svc,.svc.cluster.local,.cluster.local,hyueapi.com,.hyueapi.com" }, { "name": "no_proxy", - "value": "localhost,127.0.0.1,::1,127.0.0.1:5000,localhost:5000,.svc,.svc.cluster.local,.cluster.local,kubernetes,kubernetes.default,kubernetes.default.svc,argocd-repo-server,argocd-repo-server.argocd,argocd-redis,argocd-redis.argocd,git-mirror-http,git-mirror-http.devops-infra,git-mirror-write,git-mirror-write.devops-infra,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,172.16.0.0/12,192.168.0.0/16,152.53.229.148,152.53.229.148,hyueapi.com,.hyueapi.com" + "value": "localhost,127.0.0.1,::1,.svc,.svc.cluster.local,.cluster.local,hyueapi.com,.hyueapi.com" }, { "name": "OPENCODE_CONFIG_CONTENT", @@ -385,7 +385,7 @@ }, { "name": "opencode-provider-proxy", - "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", "imagePullPolicy": "IfNotPresent", "env": [ { @@ -398,15 +398,15 @@ }, { "name": "HWLAB_COMMIT_ID", - "value": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, { "name": "HWLAB_IMAGE", - "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" }, { "name": "HWLAB_IMAGE_TAG", - "value": "env-6ef8ca3abf22" + "value": "env-1342b35c683d" }, { "name": "PORT", @@ -434,7 +434,7 @@ }, { "name": "HWLAB_RUNTIME_MODE", - "value": "env-reuse-git-mirror-checkout" + "value": "env-reuse-gitea-checkout" }, { "name": "HWLAB_BOOT_REPO", @@ -442,7 +442,7 @@ }, { "name": "HWLAB_BOOT_COMMIT", - "value": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, { "name": "HWLAB_BOOT_REF", @@ -458,23 +458,23 @@ }, { "name": "HWLAB_ENVIRONMENT_IMAGE", - "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22" + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d" }, { "name": "HWLAB_ENVIRONMENT_DIGEST", - "value": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" }, { "name": "HWLAB_ENVIRONMENT_INPUT_HASH", - "value": "6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93" + "value": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba" }, { "name": "HWLAB_CODE_INPUT_HASH", - "value": "d6142983ba6f3786afc3dbff243e1215bdf7bb5e4c44fb6064a8caf467a7f396" + "value": "dcba5a0e5833061aea5158f6a31f41373f9ee80a9960a1e347fa3316571132cf" }, { "name": "HWLAB_IMAGE_DIGEST", - "value": "sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967" + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" } ], "ports": [ diff --git a/deploy/gitops/node/nc01/runtime-v03/openfga.yaml b/deploy/gitops/node/nc01/runtime-v03/openfga.yaml index 1c55ad1e..2f184d7c 100644 --- a/deploy/gitops/node/nc01/runtime-v03/openfga.yaml +++ b/deploy/gitops/node/nc01/runtime-v03/openfga.yaml @@ -2,103 +2,6 @@ "apiVersion": "v1", "kind": "List", "items": [ - { - "apiVersion": "batch/v1", - "kind": "Job", - "metadata": { - "name": "hwlab-openfga-migrate", - "namespace": "hwlab-v03", - "labels": { - "app.kubernetes.io/name": "hwlab-openfga", - "app.kubernetes.io/part-of": "hwlab", - "hwlab.pikastech.local/component": "authorization", - "hwlab.pikastech.local/environment": "v03", - "hwlab.pikastech.local/gitops-target": "v03", - "hwlab.pikastech.local/profile": "v03", - "hwlab.pikastech.local/service-id": "hwlab-openfga", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" - }, - "annotations": { - "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", - "argocd.argoproj.io/hook": "Sync", - "argocd.argoproj.io/sync-wave": "1", - "argocd.argoproj.io/hook-delete-policy": "BeforeHookCreation,HookSucceeded" - } - }, - "spec": { - "backoffLimit": 3, - "template": { - "metadata": { - "labels": { - "app.kubernetes.io/name": "hwlab-openfga", - "app.kubernetes.io/part-of": "hwlab", - "hwlab.pikastech.local/component": "authorization", - "hwlab.pikastech.local/environment": "v03", - "hwlab.pikastech.local/gitops-target": "v03", - "hwlab.pikastech.local/profile": "v03", - "hwlab.pikastech.local/service-id": "hwlab-openfga", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" - }, - "annotations": { - "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" - } - }, - "spec": { - "restartPolicy": "OnFailure", - "containers": [ - { - "name": "openfga-migrate", - "image": "127.0.0.1:5000/hwlab/openfga:v1.17.0", - "imagePullPolicy": "IfNotPresent", - "args": [ - "migrate" - ], - "env": [ - { - "name": "OPENFGA_DATASTORE_ENGINE", - "value": "postgres" - }, - { - "name": "OPENFGA_DATASTORE_URI", - "valueFrom": { - "secretKeyRef": { - "name": "hwlab-v03-openfga", - "key": "datastore-uri" - } - } - }, - { - "name": "OPENFGA_AUTHN_METHOD", - "value": "preshared" - }, - { - "name": "OPENFGA_AUTHN_PRESHARED_KEYS", - "valueFrom": { - "secretKeyRef": { - "name": "hwlab-v03-openfga", - "key": "authn-preshared-key" - } - } - }, - { - "name": "OPENFGA_PLAYGROUND_ENABLED", - "value": "false" - }, - { - "name": "OPENFGA_HTTP_ADDR", - "value": "0.0.0.0:8080" - }, - { - "name": "OPENFGA_GRPC_ADDR", - "value": "0.0.0.0:8081" - } - ] - } - ] - } - } - } - }, { "apiVersion": "apps/v1", "kind": "Deployment", @@ -113,7 +16,7 @@ "hwlab.pikastech.local/gitops-target": "v03", "hwlab.pikastech.local/profile": "v03", "hwlab.pikastech.local/service-id": "hwlab-openfga", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", @@ -137,13 +40,48 @@ "hwlab.pikastech.local/gitops-target": "v03", "hwlab.pikastech.local/profile": "v03", "hwlab.pikastech.local/service-id": "hwlab-openfga", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" } }, "spec": { + "initContainers": [ + { + "name": "openfga-migrate", + "image": "127.0.0.1:5000/hwlab/openfga:v1.17.0", + "imagePullPolicy": "IfNotPresent", + "args": [ + "migrate" + ], + "env": [ + { + "name": "OPENFGA_DATASTORE_ENGINE", + "value": "postgres" + }, + { + "name": "OPENFGA_DATASTORE_URI", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-openfga", + "key": "datastore-uri" + } + } + } + ], + "resources": { + "requests": { + "cpu": "50m", + "memory": "64Mi" + }, + "limits": { + "cpu": "500m", + "memory": "256Mi" + } + } + } + ], "containers": [ { "name": "openfga", @@ -248,7 +186,7 @@ "hwlab.pikastech.local/gitops-target": "v03", "hwlab.pikastech.local/profile": "v03", "hwlab.pikastech.local/service-id": "hwlab-openfga", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", diff --git a/deploy/gitops/node/nc01/runtime-v03/services.yaml b/deploy/gitops/node/nc01/runtime-v03/services.yaml index 7e67ea0b..5ee0c303 100644 --- a/deploy/gitops/node/nc01/runtime-v03/services.yaml +++ b/deploy/gitops/node/nc01/runtime-v03/services.yaml @@ -1,208 +1,673 @@ -apiVersion: v1 -kind: List -items: - - apiVersion: v1 - kind: Service - metadata: - name: hwlab-cloud-api - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-cloud-api - hwlab.pikastech.local/service-id: hwlab-cloud-api - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - spec: - type: ClusterIP - selector: - app.kubernetes.io/name: hwlab-cloud-api - ports: - - name: http - port: 6667 - targetPort: http - - name: metrics - port: 9100 - targetPort: metrics - - apiVersion: v1 - kind: Service - metadata: - name: hwlab-project-management - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-project-management - hwlab.pikastech.local/service-id: hwlab-project-management - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - spec: - type: ClusterIP - selector: - app.kubernetes.io/name: hwlab-project-management - ports: - - name: http - port: 6672 - targetPort: http - - name: metrics - port: 9100 - targetPort: metrics - - apiVersion: v1 - kind: Service - metadata: - name: hwlab-workbench-runtime - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-workbench-runtime - hwlab.pikastech.local/service-id: hwlab-workbench-runtime - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - spec: - type: ClusterIP - selector: - app.kubernetes.io/name: hwlab-workbench-runtime - ports: - - name: http - port: 6671 - targetPort: http - - name: metrics - port: 9100 - targetPort: metrics - - apiVersion: v1 - kind: Service - metadata: - name: hwlab-user-billing - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-user-billing - hwlab.pikastech.local/service-id: hwlab-user-billing - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - spec: - type: ClusterIP - selector: - app.kubernetes.io/name: hwlab-user-billing - ports: - - name: http - port: 6670 - targetPort: http - - name: metrics - port: 9100 - targetPort: metrics - - apiVersion: v1 - kind: Service - metadata: - name: hwlab-cloud-web - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-cloud-web - hwlab.pikastech.local/service-id: hwlab-cloud-web - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - spec: - type: ClusterIP - selector: - app.kubernetes.io/name: hwlab-cloud-web - ports: - - name: http - port: 8080 - targetPort: http - - name: metrics - port: 9100 - targetPort: metrics - - apiVersion: v1 - kind: Service - metadata: - name: hwlab-gateway - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-gateway - hwlab.pikastech.local/service-id: hwlab-gateway - hwlab.pikastech.local/activation: manual - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - annotations: - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - spec: - type: ClusterIP - selector: - app.kubernetes.io/name: hwlab-gateway - ports: - - name: http - port: 7001 - targetPort: http - - apiVersion: v1 - kind: Service - metadata: - name: hwlab-agent-skills - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-agent-skills - hwlab.pikastech.local/service-id: hwlab-agent-skills - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - spec: - type: ClusterIP - selector: - app.kubernetes.io/name: hwlab-agent-skills - ports: - - name: http - port: 7430 - targetPort: http - - name: metrics - port: 9100 - targetPort: metrics - - apiVersion: v1 - kind: Service - metadata: - name: hwlab-edge-proxy - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-edge-proxy - hwlab.pikastech.local/service-id: hwlab-edge-proxy - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - spec: - type: ClusterIP - selector: - app.kubernetes.io/name: hwlab-edge-proxy - ports: - - name: http - port: 6667 - targetPort: http - - name: metrics - port: 9100 - targetPort: metrics +{ + "apiVersion": "v1", + "kind": "List", + "items": [ + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-hwpod-api", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-hwpod-api", + "hwlab.pikastech.local/service-id": "hwlab-hwpod-api", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-hwpod-api" + }, + "ports": [ + { + "name": "http", + "port": 6681, + "targetPort": "http" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-hwpod-worker", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-hwpod-worker", + "hwlab.pikastech.local/service-id": "hwlab-hwpod-worker", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-hwpod-worker" + }, + "ports": [ + { + "name": "health", + "port": 6682, + "targetPort": "health" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-hwpod-web", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-hwpod-web", + "hwlab.pikastech.local/service-id": "hwlab-hwpod-web", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-hwpod-web" + }, + "ports": [ + { + "name": "http", + "port": 8080, + "targetPort": "http" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-tasktree-api", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-tasktree-api", + "hwlab.pikastech.local/service-id": "hwlab-tasktree-api", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-tasktree-api" + }, + "ports": [ + { + "name": "http", + "port": 6673, + "targetPort": "http" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-tasktree-worker", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-tasktree-worker", + "hwlab.pikastech.local/service-id": "hwlab-tasktree-worker", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-tasktree-worker" + }, + "ports": [ + { + "name": "http", + "port": 6674, + "targetPort": "http" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-harnessrl-api", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-harnessrl-api", + "hwlab.pikastech.local/service-id": "hwlab-harnessrl-api", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-harnessrl-api" + }, + "ports": [ + { + "name": "http", + "port": 6675, + "targetPort": "http" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-harnessrl-worker", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-harnessrl-worker", + "hwlab.pikastech.local/service-id": "hwlab-harnessrl-worker", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-harnessrl-worker" + }, + "ports": [ + { + "name": "health", + "port": 6676, + "targetPort": "health" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-workbench-api", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-workbench-api", + "hwlab.pikastech.local/service-id": "hwlab-workbench-api", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-workbench-api" + }, + "ports": [ + { + "name": "http", + "port": 6677, + "targetPort": "http" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-cloud-api", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-cloud-api", + "hwlab.pikastech.local/service-id": "hwlab-cloud-api", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-cloud-api" + }, + "ports": [ + { + "name": "http", + "port": 6667, + "targetPort": "http" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-project-management", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-project-management", + "hwlab.pikastech.local/service-id": "hwlab-project-management", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-project-management" + }, + "ports": [ + { + "name": "http", + "port": 6672, + "targetPort": "http" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-workbench-runtime", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-workbench-runtime", + "hwlab.pikastech.local/service-id": "hwlab-workbench-runtime", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-workbench-runtime" + }, + "ports": [ + { + "name": "http", + "port": 6671, + "targetPort": "http" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-user-billing", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-user-billing", + "hwlab.pikastech.local/service-id": "hwlab-user-billing", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-user-billing" + }, + "ports": [ + { + "name": "http", + "port": 6670, + "targetPort": "http" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-cloud-web", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-cloud-web", + "hwlab.pikastech.local/service-id": "hwlab-cloud-web", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-cloud-web" + }, + "ports": [ + { + "name": "http", + "port": 8080, + "targetPort": "http" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-gateway", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-gateway", + "hwlab.pikastech.local/service-id": "hwlab-gateway", + "hwlab.pikastech.local/activation": "manual", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-gateway" + }, + "ports": [ + { + "name": "http", + "port": 7001, + "targetPort": "http" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-agent-skills", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-agent-skills", + "hwlab.pikastech.local/service-id": "hwlab-agent-skills", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-agent-skills" + }, + "ports": [ + { + "name": "http", + "port": 7430, + "targetPort": "http" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-edge-proxy", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-edge-proxy", + "hwlab.pikastech.local/service-id": "hwlab-edge-proxy", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "ClusterIP", + "selector": { + "app.kubernetes.io/name": "hwlab-edge-proxy" + }, + "ports": [ + { + "name": "http", + "port": 6667, + "targetPort": "http" + }, + { + "name": "metrics", + "port": 9100, + "targetPort": "metrics" + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-cloud-web-public", + "namespace": "hwlab-v03", + "labels": { + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "app.kubernetes.io/name": "hwlab-cloud-web-public" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "NodePort", + "selector": { + "app.kubernetes.io/name": "hwlab-cloud-web" + }, + "ports": [ + { + "name": "http", + "port": 80, + "targetPort": 8080, + "nodePort": 32009 + } + ] + } + }, + { + "apiVersion": "v1", + "kind": "Service", + "metadata": { + "name": "hwlab-hwpod-web-public", + "namespace": "hwlab-v03", + "labels": { + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "app.kubernetes.io/name": "hwlab-hwpod-web-public" + }, + "annotations": { + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs" + } + }, + "spec": { + "type": "NodePort", + "selector": { + "app.kubernetes.io/name": "hwlab-hwpod-web" + }, + "ports": [ + { + "name": "http", + "port": 80, + "targetPort": 8080, + "nodePort": 32012 + } + ] + } + } + ] +} diff --git a/deploy/gitops/node/nc01/runtime-v03/workbench-redis.yaml b/deploy/gitops/node/nc01/runtime-v03/workbench-redis.yaml index 398489d6..1f049617 100644 --- a/deploy/gitops/node/nc01/runtime-v03/workbench-redis.yaml +++ b/deploy/gitops/node/nc01/runtime-v03/workbench-redis.yaml @@ -17,7 +17,7 @@ "hwlab.pikastech.local/gitops-target": "v03", "hwlab.pikastech.local/profile": "v03", "hwlab.pikastech.local/service-id": "hwlab-workbench-redis", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", @@ -43,7 +43,7 @@ "hwlab.pikastech.local/gitops-target": "v03", "hwlab.pikastech.local/profile": "v03", "hwlab.pikastech.local/service-id": "hwlab-workbench-redis", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", @@ -68,7 +68,7 @@ "hwlab.pikastech.local/gitops-target": "v03", "hwlab.pikastech.local/profile": "v03", "hwlab.pikastech.local/service-id": "hwlab-workbench-redis", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", @@ -165,7 +165,7 @@ "hwlab.pikastech.local/gitops-target": "v03", "hwlab.pikastech.local/profile": "v03", "hwlab.pikastech.local/service-id": "hwlab-workbench-redis", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", @@ -202,7 +202,7 @@ "hwlab.pikastech.local/gitops-target": "v03", "hwlab.pikastech.local/profile": "v03", "hwlab.pikastech.local/service-id": "hwlab-workbench-redis", - "hwlab.pikastech.local/source-commit": "3a87d3513a2f5ec629e394de3376165cb41ee913" + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" }, "annotations": { "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", diff --git a/deploy/gitops/node/nc01/runtime-v03/workloads.yaml b/deploy/gitops/node/nc01/runtime-v03/workloads.yaml index cdfbc499..1531000a 100644 --- a/deploy/gitops/node/nc01/runtime-v03/workloads.yaml +++ b/deploy/gitops/node/nc01/runtime-v03/workloads.yaml @@ -1,1786 +1,6685 @@ -apiVersion: v1 -kind: List -items: - - apiVersion: v1 - kind: PersistentVolumeClaim - metadata: - labels: - app.kubernetes.io/name: hwlab-user-skills - hwlab.pikastech.local/service-id: hwlab-user-skills - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - unidesk.ai/node-staging: "false" - name: hwlab-user-skills - namespace: hwlab-v03 - annotations: - hwlab.pikastech.local/gitops-note: node DEV GitOps target. - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 2Gi - - apiVersion: apps/v1 - kind: Deployment - metadata: - name: hwlab-project-management - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-project-management - hwlab.pikastech.local/service-id: hwlab-project-management - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - unidesk.ai/node-staging: "false" - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/gitops-note: node DEV GitOps target. - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: hwlab-project-management - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - template: - metadata: - labels: - app.kubernetes.io/name: hwlab-project-management - hwlab.pikastech.local/service-id: hwlab-project-management - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/monitoring: disabled - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - annotations: - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-project-management.sh - hwlab.pikastech.local/environment-digest: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - hwlab.pikastech.local/environment-input-hash: 6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93 - hwlab.pikastech.local/code-input-hash: 40ae36e390964621faedf740a038ba84d4933171ad1f17dd6681fd82e69a9a9f - spec: - containers: - - name: hwlab-project-management - image: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - ports: - - name: http - containerPort: 6672 - env: - - name: HWLAB_PROJECT_MANAGEMENT_PORT - value: "6672" - - name: TZ - value: Asia/Shanghai - - name: HWLAB_PROJECT_MANAGEMENT_DB_URL - valueFrom: - secretKeyRef: - name: hwlab-cloud-api-v03-db - key: database-url - optional: true - - name: HWLAB_PROJECT_MANAGEMENT_DB_CONNECT_TIMEOUT_MS - value: "5000" - - name: HWLAB_PROJECT_MANAGEMENT_SOURCE_ROOT - value: /workspace/hwlab-boot/repo - - name: HWLAB_PROJECT_MANAGEMENT_SOURCE_ID - value: hwlab-v03-mdtodo - - name: HWLAB_PROJECT_MANAGEMENT_SOURCE_NAME - value: HWLAB v0.3 MDTODO - - name: HWLAB_PROJECT_MANAGEMENT_PROJECT_ID - value: project_hwlab_v03 - - name: HWLAB_PROJECT_MANAGEMENT_MDTODO_TASK_DEFAULT_LIMIT - value: "200" - - name: HWLAB_PROJECT_MANAGEMENT_MDTODO_TASK_MAX_LIMIT - value: "500" - - name: HWLAB_PROJECT_MANAGEMENT_HWPOD_NODE_OPS_URL - value: http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667/v1/hwpod-node-ops - - name: HWLAB_PROJECT_MANAGEMENT_HWPOD_NODE_OPS_API_KEY - valueFrom: - secretKeyRef: - name: hwlab-v03-master-server-admin-api-key - key: api-key - optional: true - - name: HWLAB_PROJECT_MANAGEMENT_BOOTSTRAP_SOURCES_PATH - value: /etc/hwlab/project-management/sources.json - - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT - value: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces - - name: OTEL_SERVICE_NAME - value: hwlab-project-management - - name: HWLAB_ENVIRONMENT - value: v03 - - name: HWLAB_COMMIT_ID - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_IMAGE_TAG - value: env-6ef8ca3abf22 - - name: HWLAB_GITOPS_TARGET - value: v03 - - name: HWLAB_GITOPS_PROFILE - value: v03 - - name: HWLAB_GITOPS_SOURCE_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_RUNTIME_MODE - value: env-reuse-git-mirror-checkout - - name: HWLAB_BOOT_REPO - value: git@github.com:pikasTech/HWLAB.git - - name: HWLAB_BOOT_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_BOOT_REF - value: v0.3 - - name: HWLAB_BOOT_SH - value: deploy/runtime/boot/hwlab-project-management.sh - - name: HWLAB_BOOT_READ_URL - value: http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git - - name: HWLAB_ENVIRONMENT_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22 - - name: HWLAB_ENVIRONMENT_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_ENVIRONMENT_INPUT_HASH - value: 6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93 - - name: HWLAB_CODE_INPUT_HASH - value: 40ae36e390964621faedf740a038ba84d4933171ad1f17dd6681fd82e69a9a9f - - name: HWLAB_IMAGE_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - readinessProbe: - httpGet: - path: /health/ready - port: http - timeoutSeconds: 10 - failureThreshold: 5 - livenessProbe: - httpGet: - path: /health/live - port: http - timeoutSeconds: 5 - failureThreshold: 6 - imagePullPolicy: IfNotPresent - volumeMounts: - - name: project-management-bootstrap - mountPath: /etc/hwlab/project-management - readOnly: true - startupProbe: - httpGet: - path: /health/ready - port: http - periodSeconds: 10 - timeoutSeconds: 10 - failureThreshold: 30 - successThreshold: 1 - volumes: - - name: project-management-bootstrap - configMap: - name: hwlab-v03-project-management-bootstrap - - apiVersion: apps/v1 - kind: Deployment - metadata: - name: hwlab-workbench-runtime - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-workbench-runtime - hwlab.pikastech.local/service-id: hwlab-workbench-runtime - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - unidesk.ai/node-staging: "false" - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/gitops-note: node DEV GitOps target. - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: hwlab-workbench-runtime - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - template: - metadata: - labels: - app.kubernetes.io/name: hwlab-workbench-runtime - hwlab.pikastech.local/service-id: hwlab-workbench-runtime - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/monitoring: disabled - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - annotations: - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-workbench-runtime.sh - hwlab.pikastech.local/environment-digest: sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243 - hwlab.pikastech.local/environment-input-hash: 6d50571be334e4558b2a2e229b36d932d57443bb806d409242e5335660c8f445 - hwlab.pikastech.local/code-input-hash: 3d7b7a1528c474cec931bbab71ee70bd08dab59ea744effc9adfa171c06c5a7d - spec: - containers: - - name: hwlab-workbench-runtime - image: 127.0.0.1:5000/hwlab/hwlab-go-runtime-env@sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243 - ports: - - name: http - containerPort: 6671 - env: - - name: HWLAB_WORKBENCH_RUNTIME_PORT - value: "6671" - - name: TZ - value: Asia/Shanghai - - name: HWLAB_WORKBENCH_SESSIONS_SUMMARY_QUERY_MAX_ATTEMPTS - value: "1" - - name: HWLAB_WORKBENCH_SESSIONS_SUMMARY_QUERY_ATTEMPT_TIMEOUT_MS - value: "10000" - - name: HWLAB_WORKBENCH_SESSIONS_SUMMARY_QUERY_BACKOFF_MS - value: "0" - - name: HWLAB_WORKBENCH_RUNTIME_DB_POOL_MAX - value: "16" - - name: HWLAB_WORKBENCH_RUNTIME_QUERY_TIMEOUT_MS - value: "10000" - - name: HWLAB_WORKBENCH_RUNTIME_READY_TIMEOUT_MS - value: "10000" - - name: HWLAB_WORKBENCH_CACHE_REDIS_ENABLED - value: "1" - - name: HWLAB_WORKBENCH_CACHE_REDIS_NAMESPACE - value: hwlab-v03 - - name: HWLAB_WORKBENCH_CACHE_REDIS_SERVICE_NAME - value: hwlab-workbench-redis - - name: HWLAB_WORKBENCH_CACHE_REDIS_PORT - value: "6379" - - name: HWLAB_WORKBENCH_CACHE_REDIS_URL - value: redis://hwlab-workbench-redis.hwlab-v03.svc.cluster.local:6379/0 - - name: HWLAB_WORKBENCH_CACHE_REDIS_TTL_SESSIONS_SUMMARY_MS - value: "30000" - - name: HWLAB_WORKBENCH_CACHE_REDIS_TTL_TERMINAL_TURN_MS - value: "300000" - - name: HWLAB_WORKBENCH_CACHE_REDIS_TTL_TERMINAL_TRACE_PAGE_MS - value: "300000" - - name: HWLAB_WORKBENCH_CACHE_REDIS_TTL_RUNNING_PAGE_MS - value: "5000" - - name: HWLAB_WORKBENCH_CACHE_REDIS_MAX_KEY_BYTES - value: "512" - - name: HWLAB_WORKBENCH_CACHE_REDIS_MAX_PAYLOAD_BYTES - value: "262144" - - name: HWLAB_WORKBENCH_CACHE_REDIS_CONNECT_TIMEOUT_MS - value: "200" - - name: HWLAB_WORKBENCH_CACHE_REDIS_OPERATION_TIMEOUT_MS - value: "100" - - name: HWLAB_WORKBENCH_CACHE_REDIS_METRICS_LABELS - value: '{"lane":"v03","service":"hwlab-workbench-runtime","cacheKeyClass":"workbench-derived-read"}' - - name: HWLAB_WORKBENCH_CACHE_REDIS_UNAVAILABLE_LIVENESS_FAILURE - value: "0" - - name: HWLAB_WORKBENCH_CACHE_REDIS_UNAVAILABLE_READ_MODE - value: db-or-degraded - - name: HWLAB_WORKBENCH_CACHE_REDIS_UNAVAILABLE_FALLBACK_STATE_SOURCE - value: "0" - - name: HWLAB_WORKBENCH_RUNTIME_DB_URL - valueFrom: - secretKeyRef: - name: hwlab-cloud-api-v03-db - key: database-url - optional: true - - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT - value: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces - - name: OTEL_SERVICE_NAME - value: hwlab-workbench-runtime - - name: HWLAB_ENVIRONMENT - value: v03 - - name: HWLAB_COMMIT_ID - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-go-runtime-env@sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243 - - name: HWLAB_IMAGE_TAG - value: env-6d50571be334 - - name: HWLAB_GITOPS_TARGET - value: v03 - - name: HWLAB_GITOPS_PROFILE - value: v03 - - name: HWLAB_GITOPS_SOURCE_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_RUNTIME_MODE - value: env-reuse-git-mirror-checkout - - name: HWLAB_BOOT_REPO - value: git@github.com:pikasTech/HWLAB.git - - name: HWLAB_BOOT_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_BOOT_REF - value: v0.3 - - name: HWLAB_BOOT_SH - value: deploy/runtime/boot/hwlab-workbench-runtime.sh - - name: HWLAB_BOOT_READ_URL - value: http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git - - name: HWLAB_ENVIRONMENT_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-6d50571be334 - - name: HWLAB_ENVIRONMENT_DIGEST - value: sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243 - - name: HWLAB_ENVIRONMENT_INPUT_HASH - value: 6d50571be334e4558b2a2e229b36d932d57443bb806d409242e5335660c8f445 - - name: HWLAB_CODE_INPUT_HASH - value: 3d7b7a1528c474cec931bbab71ee70bd08dab59ea744effc9adfa171c06c5a7d - - name: HWLAB_IMAGE_DIGEST - value: sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243 - readinessProbe: - httpGet: - path: /health/ready - port: http - timeoutSeconds: 10 - failureThreshold: 5 - livenessProbe: - httpGet: - path: /health/live - port: http - timeoutSeconds: 5 - failureThreshold: 6 - imagePullPolicy: IfNotPresent - startupProbe: - httpGet: - path: /health/ready - port: http - periodSeconds: 10 - timeoutSeconds: 10 - failureThreshold: 30 - successThreshold: 1 - volumes: [] - - apiVersion: apps/v1 - kind: Deployment - metadata: - name: hwlab-cloud-api - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-cloud-api - hwlab.pikastech.local/service-id: hwlab-cloud-api - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - unidesk.ai/node-staging: "false" - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/gitops-note: node DEV GitOps target. - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: hwlab-cloud-api - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - template: - metadata: - labels: - app.kubernetes.io/name: hwlab-cloud-api - hwlab.pikastech.local/service-id: hwlab-cloud-api - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/monitoring: disabled - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - annotations: - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-cloud-api.sh - hwlab.pikastech.local/environment-digest: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - hwlab.pikastech.local/environment-input-hash: 6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93 - hwlab.pikastech.local/code-input-hash: 42ccfe73401c8afec008ddfbeab5ae5b568d0a2dbedbe92b35bdb9ff1d034916 - spec: - initContainers: [] - containers: - - name: hwlab-cloud-api - image: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - ports: - - name: http - containerPort: 6667 - env: - - name: HWLAB_ENVIRONMENT - value: v03 - - name: HWLAB_PUBLIC_ENDPOINT - value: https://hwlab.pikapython.com - - name: HWLAB_CLOUD_API_PORT - value: "6667" - - name: HWLAB_COMMIT_ID - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_IMAGE_TAG - value: env-6ef8ca3abf22 - - name: HWLAB_RUNTIME_SUBSTITUTE_FORBIDDEN - value: unidesk-backend,provider-gateway,microservice-proxy - - name: HWLAB_CLOUD_DB_URL - valueFrom: - secretKeyRef: - name: hwlab-cloud-api-v03-db - key: database-url - optional: true - - name: HWLAB_CLOUD_DB_SSL_MODE - value: require - - name: HWLAB_CLOUD_DB_CONTRACT - value: v03-redacted-presence-only - - name: HWLAB_CLOUD_RUNTIME_ADAPTER - value: postgres - - name: HWLAB_CLOUD_RUNTIME_DURABLE - value: "true" - - name: HWLAB_M3_IO_CONTROL_ENABLED - value: "false" - - name: HWLAB_CODE_AGENT_TIMEOUT_MS - value: "1200000" - - name: NO_PROXY - value: hwlab-v03.svc.cluster.local,.svc,.cluster.local,hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,api.minimaxi.com,.minimaxi.com - - name: no_proxy - value: hwlab-v03.svc.cluster.local,.svc,.cluster.local,hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,api.minimaxi.com,.minimaxi.com - - name: HWLAB_CODE_AGENT_SKILLS_DIRS - value: /app/skills:/data/user-skills - - name: HWLAB_PREINSTALLED_SKILLS_DIR - value: /app/skills - - name: HWLAB_USER_SKILLS_DIR - value: /data/user-skills - - name: HWLAB_CODE_AGENT_DEFAULT_PROVIDER_PROFILE - value: gpt.pika - - name: HWLAB_CODE_AGENT_DEEPSEEK_MODEL - value: deepseek-chat - - name: HWLAB_CODE_AGENT_DEEPSEEK_BASE_URL - value: http://hwlab-deepseek-proxy.hwlab-v03.svc.cluster.local:4000/v1/responses - - name: HWLAB_CODE_AGENT_CODEX_API_MODEL - value: gpt-5.5 - - name: HWLAB_CODE_AGENT_CODEX_API_BASE_URL - value: http://127.0.0.1:49280/responses - - name: HWLAB_CODE_AGENT_CODEX_API_UPSTREAM_BASE_URL - value: https://hyueapi.com - - name: HWLAB_CODE_AGENT_CODEX_API_FORWARDER_PORT - value: "49280" - - name: TZ - value: Asia/Shanghai - - name: HWLAB_METRICS_NAMESPACE - value: hwlab-v03 - - name: HWLAB_OBSERVABILITY_CONFIG_REVISION - value: PJ2026-01060505-20260619-long-trace-timeout-mitigation - - name: HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX - value: "5" - - name: HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_BASE_MS - value: "1000" - - name: HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX_DELAY_MS - value: "30000" - - name: HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH - valueFrom: - secretKeyRef: - name: hwlab-v03-bootstrap-admin - key: password-hash - optional: true - - name: HWLAB_PRESET_USER_HUIGGAO_PASSWORD_HASH - valueFrom: - secretKeyRef: - name: hwlab-v03-preset-users - key: huiggao-password-hash - optional: true - - name: HWLAB_ACCESS_CONTROL_USERS_JSON - value: '[{"id":"usr_v03_admin","username":"admin","displayName":"HWLAB v0.3 - Admin","email":null,"role":"admin","status":"active","navProfile":"admin-full","passwordHashEnv":"HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH"},{"id":"usr_v03_huiggao","username":"huiggao@163.com","displayName":"huiggao@163.com","email":"huiggao@163.com","role":"user","status":"active","navProfile":"code-mdtodo-only","passwordHashEnv":"HWLAB_PRESET_USER_HUIGGAO_PASSWORD_HASH"}]' - - name: HWLAB_ACCESS_CONTROL_NAV_PROFILES_JSON - value: '[{"id":"admin-full","displayName":"Admin full - access","allowedIds":["*"]},{"id":"code-mdtodo-only","displayName":"Code - and MDTODO - only","allowedIds":["workbench.code","project.mdtodo"]}]' - - name: HWLAB_CLOUD_DB_POOL_MAX - value: "16" - - name: HWLAB_WORKBENCH_RUNTIME_TIMEOUT_MS - value: "3000" - - name: HWLAB_WORKBENCH_FACTS_QUERY_MAX_ATTEMPTS - value: "1" - - name: HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_BASE_MS - value: "0" - - name: HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_MAX_MS - value: "1" - - name: HWLAB_ACCESS_CONTROL_REQUIRED - value: "1" - - name: HWLAB_SESSION_COOKIE_DOMAIN - value: .pikapython.com - - name: HWLAB_SESSION_COOKIE_SAMESITE - value: None - - name: HWLAB_BOOTSTRAP_ADMIN_ID - value: usr_v03_admin - - name: HWLAB_BOOTSTRAP_ADMIN_USERNAME - value: admin - - name: HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME - value: HWLAB v0.3 Admin - - name: HWLAB_BOOTSTRAP_ADMIN_API_KEY_ID - value: key_master_server_admin - - name: HWLAB_BOOTSTRAP_ADMIN_API_KEY - valueFrom: - secretKeyRef: - name: hwlab-v03-master-server-admin-api-key - key: api-key - optional: true - - name: HWLAB_USER_BILLING_URL - value: http://hwlab-user-billing.hwlab-v03.svc.cluster.local:6670 - - name: HWLAB_WORKBENCH_RUNTIME_URL - value: http://hwlab-workbench-runtime.hwlab-v03.svc.cluster.local:6671 - - name: HWLAB_PROJECT_MANAGEMENT_URL - value: http://hwlab-project-management.hwlab-v03.svc.cluster.local:6672 - - name: HWLAB_HWPOD_SPEC_REGISTRY_DIRS - value: /etc/hwlab/hwpod-specs - - name: HWLAB_USER_BILLING_LOGIN_RETRY_ATTEMPTS - value: "2" - - name: HWLAB_USER_BILLING_LOGIN_RETRY_DELAY_MS - value: "250" - - name: HWLAB_USER_BILLING_CODE_AGENT_ENABLED - value: "1" - - name: HWLAB_USER_BILLING_CODE_AGENT_ESTIMATED_CREDITS - value: "1" - - name: HWLAB_USER_BILLING_CODE_AGENT_USED_CREDITS - value: "1" - - name: HWLAB_KEYCLOAK_ISSUER - value: https://auth.74-48-78-17.nip.io/realms/hwlab - - name: HWLAB_KEYCLOAK_CLIENT_ID - value: hwlab-cloud-web - - name: HWLAB_KEYCLOAK_CLIENT_SECRET - valueFrom: - secretKeyRef: - name: hwlab-cloud-web-client - key: client-secret - optional: true - - name: HWLAB_CODE_AGENT_ADAPTER - value: agentrun-v02 - - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT - value: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces - - name: OTEL_SERVICE_NAME - value: hwlab-cloud-api - - name: AGENTRUN_MGR_URL - value: http://agentrun-mgr.agentrun-v02.svc.cluster.local:8080 - - name: AGENTRUN_API_KEY - valueFrom: - secretKeyRef: - name: hwlab-v03-master-server-admin-api-key - key: api-key - - name: HWLAB_CODE_AGENT_AGENTRUN_RUNNER_NAMESPACE - value: agentrun-v02 - - name: HWLAB_CODE_AGENT_AGENTRUN_SECRET_NAMESPACE - value: agentrun-v02 - - name: HWLAB_CODE_AGENT_AGENTRUN_REPO_URL - value: http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git - - name: HWLAB_KAFKA_ENABLED - value: "true" - - name: HWLAB_KAFKA_AGENTRUN_EVENT_CONSUME_ENABLED - value: "true" - - name: HWLAB_KAFKA_BOOTSTRAP_SERVERS - value: platform-infra-kafka-kafka-bootstrap.platform-infra.svc.cluster.local:9092 - - name: HWLAB_KAFKA_AGENTRUN_EVENT_TOPIC - value: agentrun.event.v1 - - name: HWLAB_KAFKA_EVENT_TOPIC - value: hwlab.event.v1 - - name: HWLAB_KAFKA_CLIENT_ID - value: hwlab-v03-cloud-api - - name: HWLAB_KAFKA_AGENTRUN_EVENT_GROUP_ID - value: hwlab-v03-agentrun-event-direct-publish - - name: HWLAB_KAFKA_PROJECTOR_HEARTBEAT_INTERVAL_MS - value: "2000" - - name: HWLAB_KAFKA_OUTBOX_RELAY_INTERVAL_MS - value: "250" - - name: HWLAB_KAFKA_OUTBOX_RELAY_BATCH_SIZE - value: "100" - - name: HWLAB_KAFKA_OUTBOX_RELAY_LEASE_MS - value: "30000" - - name: HWLAB_KAFKA_OUTBOX_RELAY_SEND_TIMEOUT_MS - value: "10000" - - name: HWLAB_KAFKA_OUTBOX_RELAY_RETRY_BACKOFF_MS - value: "1000" - - name: HWLAB_WORKBENCH_OUTBOX_TAIL_BATCH_SIZE - value: "100" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_ENABLED - value: "1" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_TTL_MS - value: "600000" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_INTERVAL_MS - value: "60000" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_INITIAL_DELAY_MS - value: "5000" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_BATCH_SIZE - value: "100" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_JITTER_MS - value: "15000" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_FAILURE_BACKOFF_MS - value: "120000" - - name: HWLAB_SECRET_PLANE_SMOKE - valueFrom: - secretKeyRef: - name: hwlab-secret-plane-smoke - key: password - optional: true - - name: HWLAB_GITOPS_TARGET - value: v03 - - name: HWLAB_GITOPS_PROFILE - value: v03 - - name: HWLAB_GITOPS_SOURCE_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_CODE_AGENT_AGENTRUN_SOURCE_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_RUNTIME_MODE - value: env-reuse-git-mirror-checkout - - name: HWLAB_BOOT_REPO - value: git@github.com:pikasTech/HWLAB.git - - name: HWLAB_BOOT_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_BOOT_REF - value: v0.3 - - name: HWLAB_BOOT_SH - value: deploy/runtime/boot/hwlab-cloud-api.sh - - name: HWLAB_BOOT_READ_URL - value: http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git - - name: HWLAB_ENVIRONMENT_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22 - - name: HWLAB_ENVIRONMENT_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_ENVIRONMENT_INPUT_HASH - value: 6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93 - - name: HWLAB_CODE_INPUT_HASH - value: 42ccfe73401c8afec008ddfbeab5ae5b568d0a2dbedbe92b35bdb9ff1d034916 - - name: HWLAB_IMAGE_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_WORKBENCH_SSE_DRAIN_TIMEOUT_MS - value: "2500" - - name: HWLAB_CODE_AGENT_AGENTRUN_PROVIDER_ID - value: NC01 - - name: HWLAB_OPENFGA_MODE - value: enforce - - name: HWLAB_OPENFGA_API_URL - value: http://hwlab-openfga.hwlab-v03.svc.cluster.local:8080 - - name: HWLAB_OPENFGA_AUTHN_TOKEN - valueFrom: - secretKeyRef: - name: hwlab-v03-openfga - key: authn-preshared-key - optional: true - - name: UNIDESK_MAIN_SERVER_IP - value: http://74.48.78.17:18081 - - name: HWLAB_CODE_AGENT_CODEX_STDIO_SUPERVISOR - value: repo-owned - - name: HWLAB_KAFKA_PROJECTOR_GROUP_ID - value: hwlab-v03-agentrun-event-projector - - name: HWLAB_KAFKA_HWLAB_EVENT_GROUP_ID - value: hwlab-v03-workbench-live-sse - - name: HWLAB_KAFKA_DIRECT_PUBLISH_ENABLED - value: "true" - - name: HWLAB_WORKBENCH_LIVE_KAFKA_SSE_ENABLED - value: "true" - - name: HWLAB_KAFKA_TRANSACTIONAL_PROJECTOR_ENABLED - value: "false" - - name: HWLAB_KAFKA_PROJECTION_OUTBOX_RELAY_ENABLED - value: "false" - - name: HWLAB_WORKBENCH_PROJECTION_REALTIME_ENABLED - value: "false" - readinessProbe: - httpGet: - path: /health/live - port: http - timeoutSeconds: 3 - failureThreshold: 5 - livenessProbe: - httpGet: - path: /health/live - port: http - periodSeconds: 20 - timeoutSeconds: 5 - failureThreshold: 6 - volumeMounts: - - name: hwlab-user-skills - mountPath: /data/user-skills - - name: hwpod-preinstalled-specs - mountPath: /etc/hwlab/hwpod-specs - readOnly: true - imagePullPolicy: IfNotPresent - startupProbe: - httpGet: - path: /health/live - port: http - periodSeconds: 10 - timeoutSeconds: 3 - failureThreshold: 30 - successThreshold: 1 - lifecycle: - preStop: - exec: - command: - - sh - - -c - - "port=\"${PORT:-${HWLAB_PORT:-${HWLAB_CLOUD_API_PORT:-6\ - 667}}}\"; - url=\"http://127.0.0.1:${port}/v1/internal/workbench/dr\ - ain\"; /usr/local/bin/bun -e 'const [url, hostname] = - process.argv.slice(2); await fetch(url, { method: - \"POST\", headers: { \"x-hwlab-drain-hostname\": - hostname || \"\" } }).catch(() => {});' \"$url\" - \"${HOSTNAME:-}\" >/dev/null 2>&1 || true; sleep 3" - - name: hwlab-codex-api-forwarder - image: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - ports: - - name: codex-api - containerPort: 49280 - env: - - name: HWLAB_CODE_AGENT_CODEX_API_FORWARDER_HOST - value: 127.0.0.1 - - name: HWLAB_CODE_AGENT_CODEX_API_FORWARDER_PORT - value: "49280" - - name: HWLAB_CODE_AGENT_CODEX_API_UPSTREAM_BASE_URL - value: https://hyueapi.com - - name: NO_PROXY - value: hwlab-v03.svc.cluster.local,.svc,.cluster.local,hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,api.minimaxi.com,.minimaxi.com - - name: no_proxy - value: hwlab-v03.svc.cluster.local,.svc,.cluster.local,hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,api.minimaxi.com,.minimaxi.com - - name: HWLAB_M3_IO_CONTROL_ENABLED - value: "false" - - name: HWLAB_ENVIRONMENT - value: v03 - - name: HWLAB_PUBLIC_ENDPOINT - value: https://hwlab.pikapython.com - - name: HWLAB_CLOUD_API_PORT - value: "6667" - - name: HWLAB_RUNTIME_SUBSTITUTE_FORBIDDEN - value: unidesk-backend,provider-gateway,microservice-proxy - - name: HWLAB_CLOUD_DB_URL - valueFrom: - secretKeyRef: - name: hwlab-cloud-api-v03-db - key: database-url - optional: true - - name: HWLAB_CLOUD_DB_SSL_MODE - value: require - - name: HWLAB_CLOUD_DB_CONTRACT - value: v03-redacted-presence-only - - name: HWLAB_CLOUD_RUNTIME_ADAPTER - value: postgres - - name: HWLAB_CLOUD_RUNTIME_DURABLE - value: "true" - - name: HWLAB_CODE_AGENT_TIMEOUT_MS - value: "1200000" - - name: HWLAB_CODE_AGENT_SKILLS_DIRS - value: /app/skills:/data/user-skills - - name: HWLAB_PREINSTALLED_SKILLS_DIR - value: /app/skills - - name: HWLAB_USER_SKILLS_DIR - value: /data/user-skills - - name: HWLAB_CODE_AGENT_DEFAULT_PROVIDER_PROFILE - value: gpt.pika - - name: HWLAB_CODE_AGENT_DEEPSEEK_MODEL - value: deepseek-chat - - name: HWLAB_CODE_AGENT_DEEPSEEK_BASE_URL - value: http://hwlab-deepseek-proxy.hwlab-v03.svc.cluster.local:4000/v1/responses - - name: HWLAB_CODE_AGENT_CODEX_API_MODEL - value: gpt-5.5 - - name: HWLAB_CODE_AGENT_CODEX_API_BASE_URL - value: http://127.0.0.1:49280/responses - - name: TZ - value: Asia/Shanghai - - name: HWLAB_METRICS_NAMESPACE - value: hwlab-v03 - - name: HWLAB_OBSERVABILITY_CONFIG_REVISION - value: PJ2026-01060505-20260619-long-trace-timeout-mitigation - - name: HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX - value: "5" - - name: HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_BASE_MS - value: "1000" - - name: HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX_DELAY_MS - value: "30000" - - name: HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH - valueFrom: - secretKeyRef: - name: hwlab-v03-bootstrap-admin - key: password-hash - optional: true - - name: HWLAB_PRESET_USER_HUIGGAO_PASSWORD_HASH - valueFrom: - secretKeyRef: - name: hwlab-v03-preset-users - key: huiggao-password-hash - optional: true - - name: HWLAB_ACCESS_CONTROL_USERS_JSON - value: '[{"id":"usr_v03_admin","username":"admin","displayName":"HWLAB v0.3 - Admin","email":null,"role":"admin","status":"active","navProfile":"admin-full","passwordHashEnv":"HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH"},{"id":"usr_v03_huiggao","username":"huiggao@163.com","displayName":"huiggao@163.com","email":"huiggao@163.com","role":"user","status":"active","navProfile":"code-mdtodo-only","passwordHashEnv":"HWLAB_PRESET_USER_HUIGGAO_PASSWORD_HASH"}]' - - name: HWLAB_ACCESS_CONTROL_NAV_PROFILES_JSON - value: '[{"id":"admin-full","displayName":"Admin full - access","allowedIds":["*"]},{"id":"code-mdtodo-only","displayName":"Code - and MDTODO - only","allowedIds":["workbench.code","project.mdtodo"]}]' - - name: HWLAB_CLOUD_DB_POOL_MAX - value: "16" - - name: HWLAB_WORKBENCH_RUNTIME_TIMEOUT_MS - value: "3000" - - name: HWLAB_WORKBENCH_FACTS_QUERY_MAX_ATTEMPTS - value: "1" - - name: HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_BASE_MS - value: "0" - - name: HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_MAX_MS - value: "1" - - name: HWLAB_ACCESS_CONTROL_REQUIRED - value: "1" - - name: HWLAB_SESSION_COOKIE_DOMAIN - value: .pikapython.com - - name: HWLAB_SESSION_COOKIE_SAMESITE - value: None - - name: HWLAB_BOOTSTRAP_ADMIN_ID - value: usr_v03_admin - - name: HWLAB_BOOTSTRAP_ADMIN_USERNAME - value: admin - - name: HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME - value: HWLAB v0.3 Admin - - name: HWLAB_BOOTSTRAP_ADMIN_API_KEY_ID - value: key_master_server_admin - - name: HWLAB_BOOTSTRAP_ADMIN_API_KEY - valueFrom: - secretKeyRef: - name: hwlab-v03-master-server-admin-api-key - key: api-key - optional: true - - name: HWLAB_USER_BILLING_URL - value: http://hwlab-user-billing.hwlab-v03.svc.cluster.local:6670 - - name: HWLAB_WORKBENCH_RUNTIME_URL - value: http://hwlab-workbench-runtime.hwlab-v03.svc.cluster.local:6671 - - name: HWLAB_PROJECT_MANAGEMENT_URL - value: http://hwlab-project-management.hwlab-v03.svc.cluster.local:6672 - - name: HWLAB_HWPOD_SPEC_REGISTRY_DIRS - value: /etc/hwlab/hwpod-specs - - name: HWLAB_USER_BILLING_LOGIN_RETRY_ATTEMPTS - value: "2" - - name: HWLAB_USER_BILLING_LOGIN_RETRY_DELAY_MS - value: "250" - - name: HWLAB_USER_BILLING_CODE_AGENT_ENABLED - value: "1" - - name: HWLAB_USER_BILLING_CODE_AGENT_ESTIMATED_CREDITS - value: "1" - - name: HWLAB_USER_BILLING_CODE_AGENT_USED_CREDITS - value: "1" - - name: HWLAB_KEYCLOAK_ISSUER - value: https://auth.74-48-78-17.nip.io/realms/hwlab - - name: HWLAB_KEYCLOAK_CLIENT_ID - value: hwlab-cloud-web - - name: HWLAB_KEYCLOAK_CLIENT_SECRET - valueFrom: - secretKeyRef: - name: hwlab-cloud-web-client - key: client-secret - optional: true - - name: HWLAB_CODE_AGENT_ADAPTER - value: agentrun-v02 - - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT - value: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces - - name: OTEL_SERVICE_NAME - value: hwlab-cloud-api - - name: AGENTRUN_MGR_URL - value: http://agentrun-mgr.agentrun-v02.svc.cluster.local:8080 - - name: AGENTRUN_API_KEY - valueFrom: - secretKeyRef: - name: hwlab-v03-master-server-admin-api-key - key: api-key - optional: true - - name: HWLAB_CODE_AGENT_AGENTRUN_RUNNER_NAMESPACE - value: agentrun-v02 - - name: HWLAB_CODE_AGENT_AGENTRUN_SECRET_NAMESPACE - value: agentrun-v02 - - name: HWLAB_CODE_AGENT_AGENTRUN_REPO_URL - value: http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git - - name: HWLAB_KAFKA_ENABLED - value: "true" - - name: HWLAB_KAFKA_AGENTRUN_EVENT_CONSUME_ENABLED - value: "true" - - name: HWLAB_KAFKA_BOOTSTRAP_SERVERS - value: platform-infra-kafka-kafka-bootstrap.platform-infra.svc.cluster.local:9092 - - name: HWLAB_KAFKA_AGENTRUN_EVENT_TOPIC - value: agentrun.event.v1 - - name: HWLAB_KAFKA_EVENT_TOPIC - value: hwlab.event.v1 - - name: HWLAB_KAFKA_CLIENT_ID - value: hwlab-v03-cloud-api - - name: HWLAB_KAFKA_AGENTRUN_EVENT_GROUP_ID - value: hwlab-v03-agentrun-event-bridge - - name: HWLAB_KAFKA_PROJECTOR_HEARTBEAT_INTERVAL_MS - value: "2000" - - name: HWLAB_KAFKA_OUTBOX_RELAY_INTERVAL_MS - value: "250" - - name: HWLAB_KAFKA_OUTBOX_RELAY_BATCH_SIZE - value: "100" - - name: HWLAB_KAFKA_OUTBOX_RELAY_LEASE_MS - value: "30000" - - name: HWLAB_KAFKA_OUTBOX_RELAY_SEND_TIMEOUT_MS - value: "10000" - - name: HWLAB_KAFKA_OUTBOX_RELAY_RETRY_BACKOFF_MS - value: "1000" - - name: HWLAB_WORKBENCH_OUTBOX_TAIL_BATCH_SIZE - value: "100" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_ENABLED - value: "1" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_TTL_MS - value: "600000" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_INTERVAL_MS - value: "60000" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_INITIAL_DELAY_MS - value: "5000" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_BATCH_SIZE - value: "100" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_JITTER_MS - value: "15000" - - name: HWLAB_WORKBENCH_EMPTY_SESSION_GC_FAILURE_BACKOFF_MS - value: "120000" - - name: HWLAB_SECRET_PLANE_SMOKE - valueFrom: - secretKeyRef: - name: hwlab-secret-plane-smoke - key: password - optional: true - - name: HWLAB_COMMIT_ID - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_IMAGE_TAG - value: env-6ef8ca3abf22 - - name: HWLAB_GITOPS_TARGET - value: v03 - - name: HWLAB_GITOPS_PROFILE - value: v03 - - name: HWLAB_GITOPS_SOURCE_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_CODE_AGENT_AGENTRUN_SOURCE_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_RUNTIME_MODE - value: env-reuse-git-mirror-checkout - - name: HWLAB_BOOT_REPO - value: git@github.com:pikasTech/HWLAB.git - - name: HWLAB_BOOT_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_BOOT_REF - value: v0.3 - - name: HWLAB_BOOT_SH - value: deploy/runtime/boot/hwlab-codex-api-responses-forwarder.sh - - name: HWLAB_BOOT_READ_URL - value: http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git - - name: HWLAB_ENVIRONMENT_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22 - - name: HWLAB_ENVIRONMENT_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_ENVIRONMENT_INPUT_HASH - value: 6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93 - - name: HWLAB_CODE_INPUT_HASH - value: 42ccfe73401c8afec008ddfbeab5ae5b568d0a2dbedbe92b35bdb9ff1d034916 - - name: HWLAB_IMAGE_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_WORKBENCH_SSE_DRAIN_TIMEOUT_MS - value: "2500" - - name: HWLAB_CODE_AGENT_AGENTRUN_PROVIDER_ID - value: NC01 - - name: HWLAB_OPENFGA_MODE - value: enforce - - name: HWLAB_OPENFGA_API_URL - value: http://hwlab-openfga.hwlab-v03.svc.cluster.local:8080 - - name: HWLAB_OPENFGA_AUTHN_TOKEN - valueFrom: - secretKeyRef: - name: hwlab-v03-openfga - key: authn-preshared-key - optional: true - - name: UNIDESK_MAIN_SERVER_IP - value: http://74.48.78.17:18081 - - name: HWLAB_CODE_AGENT_CODEX_STDIO_SUPERVISOR - value: repo-owned - readinessProbe: - exec: - command: - - node - - -e - - "fetch('http://127.0.0.1:49280/health/readiness').then((r\ - esponse) => process.exit(response.ok ? 0 : 1)).catch(() => - process.exit(1))" - timeoutSeconds: 2 - livenessProbe: - exec: - command: - - node - - -e - - "fetch('http://127.0.0.1:49280/health/live').then((respon\ - se) => process.exit(response.ok ? 0 : 1)).catch(() => - process.exit(1))" - timeoutSeconds: 2 - volumeMounts: - - name: hwpod-preinstalled-specs - mountPath: /etc/hwlab/hwpod-specs - readOnly: true - imagePullPolicy: IfNotPresent - startupProbe: - exec: - command: - - node - - -e - - "fetch('http://127.0.0.1:49280/health/readiness').then((r\ - esponse) => process.exit(response.ok ? 0 : 1)).catch(() => - process.exit(1))" - timeoutSeconds: 2 - periodSeconds: 10 - failureThreshold: 30 - successThreshold: 1 - lifecycle: - preStop: - exec: - command: - - sh - - -c - - "port=\"${PORT:-${HWLAB_PORT:-${HWLAB_CLOUD_API_PORT:-6\ - 667}}}\"; - url=\"http://127.0.0.1:${port}/v1/internal/workbench/dr\ - ain\"; /usr/local/bin/bun -e 'const [url, hostname] = - process.argv.slice(2); await fetch(url, { method: - \"POST\", headers: { \"x-hwlab-drain-hostname\": - hostname || \"\" } }).catch(() => {});' \"$url\" - \"${HOSTNAME:-}\" >/dev/null 2>&1 || true; sleep 3" - volumes: - - name: hwlab-user-skills - persistentVolumeClaim: - claimName: hwlab-user-skills - - name: hwpod-preinstalled-specs - configMap: - name: hwlab-v03-hwpod-preinstalled-specs - - apiVersion: apps/v1 - kind: Deployment - metadata: - name: hwlab-user-billing - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-user-billing - hwlab.pikastech.local/service-id: hwlab-user-billing - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - unidesk.ai/node-staging: "false" - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/gitops-note: node DEV GitOps target. - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: hwlab-user-billing - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - template: - metadata: - labels: - app.kubernetes.io/name: hwlab-user-billing - hwlab.pikastech.local/service-id: hwlab-user-billing - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/monitoring: disabled - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - annotations: - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-user-billing.sh - hwlab.pikastech.local/environment-digest: sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243 - hwlab.pikastech.local/environment-input-hash: 6d50571be334e4558b2a2e229b36d932d57443bb806d409242e5335660c8f445 - hwlab.pikastech.local/code-input-hash: 09a0983dcc5525d93de6ab636a9de686739625d5549f108f366c44cae7835d69 - spec: - containers: - - name: hwlab-user-billing - image: 127.0.0.1:5000/hwlab/hwlab-go-runtime-env@sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243 - ports: - - name: http - containerPort: 6670 - env: - - name: HWLAB_USER_BILLING_PORT - value: "6670" - - name: HWLAB_USER_BILLING_STATE_AUTHORITY - value: pk01-postgres - - name: HWLAB_USER_BILLING_STATELESS - value: "true" - - name: TZ - value: Asia/Shanghai - - name: HWLAB_USER_BILLING_DB_URL - valueFrom: - secretKeyRef: - name: hwlab-cloud-api-v03-db - key: database-url - optional: true - - name: HWLAB_USER_BILLING_DB_POOL_MAX - value: "2" - - name: HWLAB_USER_BILLING_MIGRATION_TIMEOUT_SECONDS - value: "180" - - name: HWLAB_USER_BILLING_BOOTSTRAP_TIMEOUT_SECONDS - value: "60" - - name: HWLAB_BOOTSTRAP_ADMIN_ID - value: usr_v03_admin - - name: HWLAB_BOOTSTRAP_ADMIN_USERNAME - value: admin - - name: HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME - value: HWLAB v0.3 Admin - - name: HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH - valueFrom: - secretKeyRef: - name: hwlab-v03-bootstrap-admin - key: password-hash - optional: true - - name: HWLAB_USER_BILLING_EXTERNAL_DB_LABEL - value: pk01-external-postgres - - name: HWLAB_USER_BILLING_REGISTRATION_ENABLED - value: "1" - - name: HWLAB_USER_BILLING_INITIAL_CREDITS - value: "0" - - name: HWLAB_USER_BILLING_CREDIT_PER_1K_TOKENS - value: "1" - - name: HWLAB_USER_BILLING_MIGRATE_ON_START - value: "1" - - name: HWLAB_USER_BILLING_REDIS_URL - value: redis://hwlab-user-billing-redis.hwlab-v03.svc.cluster.local:6379/0 - - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT - value: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces - - name: OTEL_SERVICE_NAME - value: hwlab-user-billing - - name: HWLAB_ENVIRONMENT - value: v03 - - name: HWLAB_COMMIT_ID - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-go-runtime-env@sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243 - - name: HWLAB_IMAGE_TAG - value: env-6d50571be334 - - name: HWLAB_GITOPS_TARGET - value: v03 - - name: HWLAB_GITOPS_PROFILE - value: v03 - - name: HWLAB_GITOPS_SOURCE_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_RUNTIME_MODE - value: env-reuse-git-mirror-checkout - - name: HWLAB_BOOT_REPO - value: git@github.com:pikasTech/HWLAB.git - - name: HWLAB_BOOT_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_BOOT_REF - value: v0.3 - - name: HWLAB_BOOT_SH - value: deploy/runtime/boot/hwlab-user-billing.sh - - name: HWLAB_BOOT_READ_URL - value: http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git - - name: HWLAB_ENVIRONMENT_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-6d50571be334 - - name: HWLAB_ENVIRONMENT_DIGEST - value: sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243 - - name: HWLAB_ENVIRONMENT_INPUT_HASH - value: 6d50571be334e4558b2a2e229b36d932d57443bb806d409242e5335660c8f445 - - name: HWLAB_CODE_INPUT_HASH - value: 09a0983dcc5525d93de6ab636a9de686739625d5549f108f366c44cae7835d69 - - name: HWLAB_IMAGE_DIGEST - value: sha256:5d263251da45c0c4d4d4e998febe6b61e7a5602b0e8d0e26d270c019d30b5243 - readinessProbe: - httpGet: - path: /health/ready - port: http - timeoutSeconds: 10 - failureThreshold: 5 - livenessProbe: - httpGet: - path: /health/live - port: http - timeoutSeconds: 5 - failureThreshold: 6 - imagePullPolicy: IfNotPresent - startupProbe: - httpGet: - path: /health/ready - port: http - periodSeconds: 10 - timeoutSeconds: 10 - failureThreshold: 30 - successThreshold: 1 - volumes: [] - - apiVersion: apps/v1 - kind: Deployment - metadata: - name: hwlab-cloud-web - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-cloud-web - hwlab.pikastech.local/service-id: hwlab-cloud-web - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - unidesk.ai/node-staging: "false" - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/gitops-note: node DEV GitOps target. - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: hwlab-cloud-web - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - template: - metadata: - labels: - app.kubernetes.io/name: hwlab-cloud-web - hwlab.pikastech.local/service-id: hwlab-cloud-web - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/monitoring: disabled - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - annotations: - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-cloud-web.sh - hwlab.pikastech.local/environment-digest: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - hwlab.pikastech.local/environment-input-hash: 6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93 - hwlab.pikastech.local/code-input-hash: d6142983ba6f3786afc3dbff243e1215bdf7bb5e4c44fb6064a8caf467a7f396 - spec: - containers: - - name: hwlab-cloud-web - image: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - ports: - - name: http - containerPort: 8080 - env: - - name: HWLAB_API_BASE_URL - value: http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667 - - name: HWLAB_CLOUD_WEB_PROXY_TIMEOUT_MS - value: "1260000" - - name: HWLAB_COMMIT_ID - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_IMAGE_TAG - value: env-6ef8ca3abf22 - - name: HWLAB_ENVIRONMENT - value: v03 - - name: HWLAB_CLOUD_WEB_DISPLAY_TIME_ZONE - value: Asia/Shanghai - - name: HWLAB_CLOUD_WEB_DISPLAY_TIME_LOCALE - value: zh-CN - - name: HWLAB_CLOUD_WEB_DISPLAY_TIME_LABEL - value: 北京时间 - - name: HWLAB_CLOUD_WEB_OPENCODE_UPSTREAM_URL - value: http://opencode-server.hwlab-v03.svc.cluster.local:4096 - - name: HWLAB_CLOUD_WEB_OPENCODE_USERNAME - valueFrom: - secretKeyRef: - name: hwlab-v03-opencode-server-auth - key: username - optional: true - - name: HWLAB_CLOUD_WEB_OPENCODE_PASSWORD - valueFrom: - secretKeyRef: - name: hwlab-v03-opencode-server-auth - key: password - optional: true - - name: HWLAB_CLOUD_WEB_OPENCODE_DEFAULT_PROJECT - value: /workspace - - name: HWLAB_CLOUD_WEB_OPENCODE_EVENT_DIRECTORY_FROM - value: /workspace - - name: HWLAB_CLOUD_WEB_OPENCODE_EVENT_DIRECTORY_TO - value: / - - name: OTEL_EXPORTER_OTLP_TRACES_ENDPOINT - value: http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces - - name: OTEL_SERVICE_NAME - value: hwlab-cloud-web - - name: HWLAB_GITOPS_TARGET - value: v03 - - name: HWLAB_GITOPS_PROFILE - value: v03 - - name: HWLAB_GITOPS_SOURCE_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_RUNTIME_MODE - value: env-reuse-git-mirror-checkout - - name: HWLAB_BOOT_REPO - value: git@github.com:pikasTech/HWLAB.git - - name: HWLAB_BOOT_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_BOOT_REF - value: v0.3 - - name: HWLAB_BOOT_SH - value: deploy/runtime/boot/hwlab-cloud-web.sh - - name: HWLAB_BOOT_READ_URL - value: http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git - - name: HWLAB_ENVIRONMENT_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22 - - name: HWLAB_ENVIRONMENT_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_ENVIRONMENT_INPUT_HASH - value: 6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93 - - name: HWLAB_CODE_INPUT_HASH - value: d6142983ba6f3786afc3dbff243e1215bdf7bb5e4c44fb6064a8caf467a7f396 - - name: HWLAB_IMAGE_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_PUBLIC_ENDPOINT - value: https://hwlab.pikapython.com - - name: HWLAB_WORKBENCH_TRACE_AUTO_EXPAND_RUNNING - value: "0" - - name: HWLAB_WORKBENCH_TRACE_AUTO_COLLAPSE_TERMINAL - value: "0" - - name: HWLAB_WORKBENCH_LIVE_KAFKA_SSE_ENABLED - value: "true" - - name: HWLAB_WORKBENCH_PROJECTION_REALTIME_ENABLED - value: "false" - readinessProbe: - httpGet: - path: /health/live - port: http - livenessProbe: - httpGet: - path: /health/live - port: http - imagePullPolicy: IfNotPresent - startupProbe: - httpGet: - path: /health/live - port: http - periodSeconds: 10 - timeoutSeconds: 2 - failureThreshold: 30 - successThreshold: 1 - volumes: [] - - apiVersion: apps/v1 - kind: Deployment - metadata: - name: hwlab-gateway - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-gateway - hwlab.pikastech.local/service-id: hwlab-gateway - hwlab.pikastech.local/activation: manual - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - unidesk.ai/node-staging: "false" - annotations: - hwlab.pikastech.local/gitops-note: node DEV GitOps target. - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - spec: - replicas: 0 - selector: - matchLabels: - app.kubernetes.io/name: hwlab-gateway - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - template: - metadata: - labels: - app.kubernetes.io/name: hwlab-gateway - hwlab.pikastech.local/service-id: hwlab-gateway - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - annotations: - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-gateway.sh - hwlab.pikastech.local/environment-digest: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - hwlab.pikastech.local/environment-input-hash: 6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93 - hwlab.pikastech.local/code-input-hash: 25f753b252593891ed7b03b53a69d266e7a324728cf83fea8654bab4196fa399 - spec: - containers: - - name: hwlab-gateway - image: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - ports: - - name: http - containerPort: 7001 - env: - - name: HWLAB_GATEWAY_MODE - value: hardware-boundary - - name: HWLAB_ENVIRONMENT - value: v03 - - name: TZ - value: Asia/Shanghai - - name: HWLAB_COMMIT_ID - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_IMAGE_TAG - value: env-6ef8ca3abf22 - - name: HWLAB_GITOPS_TARGET - value: v03 - - name: HWLAB_GITOPS_PROFILE - value: v03 - - name: HWLAB_GITOPS_SOURCE_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_RUNTIME_MODE - value: env-reuse-git-mirror-checkout - - name: HWLAB_BOOT_REPO - value: git@github.com:pikasTech/HWLAB.git - - name: HWLAB_BOOT_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_BOOT_REF - value: v0.3 - - name: HWLAB_BOOT_SH - value: deploy/runtime/boot/hwlab-gateway.sh - - name: HWLAB_BOOT_READ_URL - value: http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git - - name: HWLAB_ENVIRONMENT_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22 - - name: HWLAB_ENVIRONMENT_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_ENVIRONMENT_INPUT_HASH - value: 6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93 - - name: HWLAB_CODE_INPUT_HASH - value: 25f753b252593891ed7b03b53a69d266e7a324728cf83fea8654bab4196fa399 - - name: HWLAB_IMAGE_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - readinessProbe: - httpGet: - path: /health/live - port: http - livenessProbe: - httpGet: - path: /health/live - port: http - imagePullPolicy: IfNotPresent - startupProbe: - httpGet: - path: /health/live - port: http - periodSeconds: 10 - timeoutSeconds: 2 - failureThreshold: 30 - successThreshold: 1 - - apiVersion: apps/v1 - kind: Deployment - metadata: - name: hwlab-edge-proxy - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-edge-proxy - hwlab.pikastech.local/service-id: hwlab-edge-proxy - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - unidesk.ai/node-staging: "false" - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/gitops-note: node DEV GitOps target. - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: hwlab-edge-proxy - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - template: - metadata: - labels: - app.kubernetes.io/name: hwlab-edge-proxy - hwlab.pikastech.local/service-id: hwlab-edge-proxy - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/monitoring: disabled - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - annotations: - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-edge-proxy.sh - hwlab.pikastech.local/environment-digest: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - hwlab.pikastech.local/environment-input-hash: 6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93 - hwlab.pikastech.local/code-input-hash: c97d19939c872e128a6931bdf73f28a75a684948a76a2b1af37508dd47481544 - spec: - containers: - - name: hwlab-edge-proxy - image: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - ports: - - name: http - containerPort: 6667 - env: - - name: HWLAB_EDGE_LISTEN - value: 0.0.0.0:6667 - - name: HWLAB_EDGE_UPSTREAM - value: http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667 - - name: HWLAB_EDGE_PROXY_TIMEOUT_MS - value: "1260000" - - name: HWLAB_EDGE_IDLE_TIMEOUT_SECONDS - value: "120" - - name: TZ - value: Asia/Shanghai - - name: HWLAB_ENVIRONMENT - value: v03 - - name: HWLAB_COMMIT_ID - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_IMAGE_TAG - value: env-6ef8ca3abf22 - - name: HWLAB_GITOPS_TARGET - value: v03 - - name: HWLAB_GITOPS_PROFILE - value: v03 - - name: HWLAB_GITOPS_SOURCE_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_RUNTIME_MODE - value: env-reuse-git-mirror-checkout - - name: HWLAB_BOOT_REPO - value: git@github.com:pikasTech/HWLAB.git - - name: HWLAB_BOOT_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_BOOT_REF - value: v0.3 - - name: HWLAB_BOOT_SH - value: deploy/runtime/boot/hwlab-edge-proxy.sh - - name: HWLAB_BOOT_READ_URL - value: http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git - - name: HWLAB_ENVIRONMENT_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22 - - name: HWLAB_ENVIRONMENT_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_ENVIRONMENT_INPUT_HASH - value: 6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93 - - name: HWLAB_CODE_INPUT_HASH - value: c97d19939c872e128a6931bdf73f28a75a684948a76a2b1af37508dd47481544 - - name: HWLAB_IMAGE_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_PUBLIC_ENDPOINT - value: https://hwlab.pikapython.com - readinessProbe: - httpGet: - path: /health - port: http - timeoutSeconds: 3 - failureThreshold: 5 - livenessProbe: - httpGet: - path: /health - port: http - periodSeconds: 20 - timeoutSeconds: 5 - failureThreshold: 6 - imagePullPolicy: IfNotPresent - startupProbe: - httpGet: - path: /health/live - port: http - periodSeconds: 10 - timeoutSeconds: 3 - failureThreshold: 30 - successThreshold: 1 - volumes: [] - - apiVersion: apps/v1 - kind: Deployment - metadata: - name: hwlab-agent-skills - namespace: hwlab-v03 - labels: - app.kubernetes.io/name: hwlab-agent-skills - hwlab.pikastech.local/service-id: hwlab-agent-skills - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - unidesk.ai/node-staging: "false" - hwlab.pikastech.local/monitoring: disabled - annotations: - hwlab.pikastech.local/gitops-note: node DEV GitOps target. - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: hwlab-agent-skills - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - template: - metadata: - labels: - app.kubernetes.io/name: hwlab-agent-skills - hwlab.pikastech.local/service-id: hwlab-agent-skills - app.kubernetes.io/part-of: hwlab - hwlab.pikastech.local/environment: v03 - hwlab.pikastech.local/profile: v03 - hwlab.pikastech.local/gitops-target: v03 - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/monitoring: disabled - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - annotations: - hwlab.pikastech.local/gitops-render-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/artifact-source-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/rendered-by: scripts/gitops-render.mjs - hwlab.pikastech.local/runtime-mode: env-reuse-git-mirror-checkout - hwlab.pikastech.local/boot-repo: git@github.com:pikasTech/HWLAB.git - hwlab.pikastech.local/boot-commit: 3a87d3513a2f5ec629e394de3376165cb41ee913 - hwlab.pikastech.local/boot-sh: deploy/runtime/boot/hwlab-agent-skills.sh - hwlab.pikastech.local/environment-digest: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - hwlab.pikastech.local/environment-input-hash: 6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93 - hwlab.pikastech.local/code-input-hash: a89d6a198655f21ec6868a7698a54cccf4488017494a86a186e72916d74d5fc8 - spec: - containers: - - name: hwlab-agent-skills - image: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - ports: - - name: http - containerPort: 7430 - env: - - name: HWLAB_SKILLS_COMMIT_ID - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: TZ - value: Asia/Shanghai - - name: HWLAB_ENVIRONMENT - value: v03 - - name: HWLAB_COMMIT_ID - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_IMAGE_TAG - value: env-6ef8ca3abf22 - - name: HWLAB_GITOPS_TARGET - value: v03 - - name: HWLAB_GITOPS_PROFILE - value: v03 - - name: HWLAB_GITOPS_SOURCE_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_RUNTIME_MODE - value: env-reuse-git-mirror-checkout - - name: HWLAB_BOOT_REPO - value: git@github.com:pikasTech/HWLAB.git - - name: HWLAB_BOOT_COMMIT - value: 3a87d3513a2f5ec629e394de3376165cb41ee913 - - name: HWLAB_BOOT_REF - value: v0.3 - - name: HWLAB_BOOT_SH - value: deploy/runtime/boot/hwlab-agent-skills.sh - - name: HWLAB_BOOT_READ_URL - value: http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git - - name: HWLAB_ENVIRONMENT_IMAGE - value: 127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-6ef8ca3abf22 - - name: HWLAB_ENVIRONMENT_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - - name: HWLAB_ENVIRONMENT_INPUT_HASH - value: 6ef8ca3abf22d871599b06333d285bd64f105a7a799b2937bb9c8f037fc0fd93 - - name: HWLAB_CODE_INPUT_HASH - value: a89d6a198655f21ec6868a7698a54cccf4488017494a86a186e72916d74d5fc8 - - name: HWLAB_IMAGE_DIGEST - value: sha256:212f1da818f32500f25c495a6a4708a4113f44f4f2718387398dd5d7cfeb2967 - readinessProbe: - httpGet: - path: /health/live - port: http - livenessProbe: - httpGet: - path: /health/live - port: http - imagePullPolicy: IfNotPresent - startupProbe: - httpGet: - path: /health/live - port: http - periodSeconds: 10 - timeoutSeconds: 2 - failureThreshold: 30 - successThreshold: 1 - volumes: [] +{ + "apiVersion": "v1", + "kind": "List", + "items": [ + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-hwpod-api", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-hwpod-api", + "hwlab.pikastech.local/service-id": "hwlab-hwpod-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-hwpod-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-hwpod-api", + "hwlab.pikastech.local/service-id": "hwlab-hwpod-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-hwpod-api.sh", + "hwlab.pikastech.local/environment-digest": "sha256:70d4420bd5c17a8448d13b02bef54dfe7cdb2037e8b393884719edf1f073e761", + "hwlab.pikastech.local/environment-input-hash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "hwlab.pikastech.local/code-input-hash": "5793ea5cd471c95b507c549fba90b13aa687c22990c83df91568fe7d9aaaad88" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-hwpod-api", + "image": "127.0.0.1:5000/hwlab/hwlab-hwpod-api-env@sha256:70d4420bd5c17a8448d13b02bef54dfe7cdb2037e8b393884719edf1f073e761", + "ports": [ + { + "name": "http", + "containerPort": 6681 + } + ], + "env": [ + { + "name": "HWPOD_API_PORT", + "value": "6681" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "HWPOD_API_HOST", + "value": "0.0.0.0" + }, + { + "name": "HWPOD_TEMPORAL_ADDRESS", + "value": "temporal-frontend.temporal.svc.cluster.local:7233" + }, + { + "name": "HWPOD_TEMPORAL_NAMESPACE", + "value": "unidesk" + }, + { + "name": "HWPOD_TEMPORAL_TASK_QUEUE", + "value": "hwlab-v03-hwpod" + }, + { + "name": "HWPOD_RUNTIME_API_URL", + "value": "http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667" + }, + { + "name": "HWPOD_RUNTIME_API_AUTHORIZATION", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-master-server-admin-api-key", + "key": "api-key", + "optional": true + } + } + }, + { + "name": "HWPOD_RUNTIME_API_AUTHORIZATION_PREFIX", + "value": "Bearer" + }, + { + "name": "HWPOD_SPEC_DATABASE_URL", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-cloud-api-v03-db", + "key": "database-url", + "optional": true + } + } + }, + { + "name": "HWPOD_SPEC_DATABASE_SCHEMA", + "value": "hwpod" + }, + { + "name": "HWPOD_SPEC_DATABASE_TABLE", + "value": "runtime_specs" + }, + { + "name": "HWPOD_SPEC_DATABASE_CONNECTION_TIMEOUT_MS", + "value": "5000" + }, + { + "name": "HWPOD_BUILTIN_SPEC_CONFIG_DIRECTORY", + "value": "/etc/hwlab/hwpod-specs" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-hwpod-api" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-hwpod-api-env@sha256:70d4420bd5c17a8448d13b02bef54dfe7cdb2037e8b393884719edf1f073e761" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-hwpod-api.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-hwpod-api-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:70d4420bd5c17a8448d13b02bef54dfe7cdb2037e8b393884719edf1f073e761" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "5793ea5cd471c95b507c549fba90b13aa687c22990c83df91568fe7d9aaaad88" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:70d4420bd5c17a8448d13b02bef54dfe7cdb2037e8b393884719edf1f073e761" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + } + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + } + }, + "imagePullPolicy": "IfNotPresent", + "volumeMounts": [ + { + "name": "hwpod-preinstalled-specs", + "mountPath": "/etc/hwlab/hwpod-specs", + "readOnly": true + } + ], + "startupProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2, + "failureThreshold": 30, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-hwpod-api" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:6681/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + }, + { + "name": "hwpod-preinstalled-specs", + "configMap": { + "name": "hwlab-v03-hwpod-preinstalled-specs" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-hwpod-worker", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-hwpod-worker", + "hwlab.pikastech.local/service-id": "hwlab-hwpod-worker", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-hwpod-worker", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-hwpod-worker", + "hwlab.pikastech.local/service-id": "hwlab-hwpod-worker", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-hwpod-worker.sh", + "hwlab.pikastech.local/environment-digest": "sha256:bdb5fe5c2cb467f3eb81141e2617af8188b7e1a4221de1afcb1141b2fbd527f3", + "hwlab.pikastech.local/environment-input-hash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "hwlab.pikastech.local/code-input-hash": "c4baf75f15c8e46b7a40774e9c6a7c5f1853cc1766c6f6ca710824ac2398b71b" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-hwpod-worker", + "image": "127.0.0.1:5000/hwlab/hwlab-hwpod-worker-env@sha256:bdb5fe5c2cb467f3eb81141e2617af8188b7e1a4221de1afcb1141b2fbd527f3", + "ports": [ + { + "name": "health", + "containerPort": 6682 + } + ], + "env": [ + { + "name": "HWPOD_WORKER_HEALTH_PORT", + "value": "6682" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "HWPOD_WORKER_HEALTH_HOST", + "value": "0.0.0.0" + }, + { + "name": "HWPOD_TEMPORAL_ADDRESS", + "value": "temporal-frontend.temporal.svc.cluster.local:7233" + }, + { + "name": "HWPOD_TEMPORAL_NAMESPACE", + "value": "unidesk" + }, + { + "name": "HWPOD_TEMPORAL_TASK_QUEUE", + "value": "hwlab-v03-hwpod" + }, + { + "name": "HWPOD_RUNTIME_API_URL", + "value": "http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667" + }, + { + "name": "HWPOD_RUNTIME_API_AUTHORIZATION", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-master-server-admin-api-key", + "key": "api-key", + "optional": true + } + } + }, + { + "name": "HWPOD_RUNTIME_API_AUTHORIZATION_PREFIX", + "value": "Bearer" + }, + { + "name": "HWPOD_SPEC_DATABASE_URL", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-cloud-api-v03-db", + "key": "database-url", + "optional": true + } + } + }, + { + "name": "HWPOD_SPEC_DATABASE_SCHEMA", + "value": "hwpod" + }, + { + "name": "HWPOD_SPEC_DATABASE_TABLE", + "value": "runtime_specs" + }, + { + "name": "HWPOD_SPEC_DATABASE_CONNECTION_TIMEOUT_MS", + "value": "5000" + }, + { + "name": "HWPOD_BUILTIN_SPEC_CONFIG_DIRECTORY", + "value": "/etc/hwlab/hwpod-specs" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-hwpod-worker" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-hwpod-worker-env@sha256:bdb5fe5c2cb467f3eb81141e2617af8188b7e1a4221de1afcb1141b2fbd527f3" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-hwpod-worker.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-hwpod-worker-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:bdb5fe5c2cb467f3eb81141e2617af8188b7e1a4221de1afcb1141b2fbd527f3" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "c4baf75f15c8e46b7a40774e9c6a7c5f1853cc1766c6f6ca710824ac2398b71b" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:bdb5fe5c2cb467f3eb81141e2617af8188b7e1a4221de1afcb1141b2fbd527f3" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/ready", + "port": "health" + } + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "health" + } + }, + "imagePullPolicy": "IfNotPresent", + "volumeMounts": [ + { + "name": "hwpod-preinstalled-specs", + "mountPath": "/etc/hwlab/hwpod-specs", + "readOnly": true + } + ], + "startupProbe": { + "httpGet": { + "path": "/health/ready", + "port": "health" + }, + "periodSeconds": 10, + "timeoutSeconds": 2, + "failureThreshold": 30, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-hwpod-worker" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:6682/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + }, + { + "name": "hwpod-preinstalled-specs", + "configMap": { + "name": "hwlab-v03-hwpod-preinstalled-specs" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-hwpod-web", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-hwpod-web", + "hwlab.pikastech.local/service-id": "hwlab-hwpod-web", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-hwpod-web", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-hwpod-web", + "hwlab.pikastech.local/service-id": "hwlab-hwpod-web", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-hwpod-web.sh", + "hwlab.pikastech.local/environment-digest": "sha256:d5a43274fdef3802351e013c91e027f6bbb4a2bd72da1258bd56a052b87cf48f", + "hwlab.pikastech.local/environment-input-hash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "hwlab.pikastech.local/code-input-hash": "5530dc0c9147bd193332c8ca08e0bef0f4e3eb01c48284c4642f5dbe2abf2443" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-hwpod-web", + "image": "127.0.0.1:5000/hwlab/hwlab-hwpod-web-env@sha256:d5a43274fdef3802351e013c91e027f6bbb4a2bd72da1258bd56a052b87cf48f", + "ports": [ + { + "name": "http", + "containerPort": 8080 + } + ], + "env": [ + { + "name": "HWPOD_WEB_PORT", + "value": "8080" + }, + { + "name": "BUN_CONFIG_REGISTRY", + "value": "https://registry.npmjs.org/" + }, + { + "name": "npm_config_registry", + "value": "https://registry.npmjs.org/" + }, + { + "name": "HWPOD_WEB_HOST", + "value": "0.0.0.0" + }, + { + "name": "HWPOD_API_URL", + "value": "http://hwlab-hwpod-api.hwlab-v03.svc.cluster.local:6681" + }, + { + "name": "HWPOD_WEB_ROOT", + "value": "web/hwlab-cloud-web/hwpod/dist" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-hwpod-web" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-hwpod-web-env@sha256:d5a43274fdef3802351e013c91e027f6bbb4a2bd72da1258bd56a052b87cf48f" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-hwpod-web.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-hwpod-web-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:d5a43274fdef3802351e013c91e027f6bbb4a2bd72da1258bd56a052b87cf48f" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "5530dc0c9147bd193332c8ca08e0bef0f4e3eb01c48284c4642f5dbe2abf2443" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:d5a43274fdef3802351e013c91e027f6bbb4a2bd72da1258bd56a052b87cf48f" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + } + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + } + }, + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + }, + "periodSeconds": 5, + "timeoutSeconds": 3, + "failureThreshold": 60, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-hwpod-web" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:8080/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-tasktree-api", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-tasktree-api", + "hwlab.pikastech.local/service-id": "hwlab-tasktree-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-tasktree-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-tasktree-api", + "hwlab.pikastech.local/service-id": "hwlab-tasktree-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-tasktree-api.sh", + "hwlab.pikastech.local/environment-digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "hwlab.pikastech.local/environment-input-hash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "hwlab.pikastech.local/code-input-hash": "16e35cab0d3ba2f60ac09266a2830155477dd2dd9a3c0a0c5be3482b57cd16e1" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-tasktree-api", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "ports": [ + { + "name": "http", + "containerPort": 6673 + } + ], + "env": [ + { + "name": "TASKTREE_API_PORT", + "value": "6673" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "TASKTREE_DATABASE_URL", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-tasktree-db", + "key": "database-url", + "optional": true + } + } + }, + { + "name": "TASKTREE_TEMPORAL_ADDRESS", + "value": "temporal-frontend.temporal.svc.cluster.local:7233" + }, + { + "name": "TASKTREE_TEMPORAL_NAMESPACE", + "value": "unidesk" + }, + { + "name": "TASKTREE_TEMPORAL_TASK_QUEUE", + "value": "hwlab-v03-tasktree" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-tasktree-api" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-tasktree-api.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "16e35cab0d3ba2f60ac09266a2830155477dd2dd9a3c0a0c5be3482b57cd16e1" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + } + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + } + }, + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2, + "failureThreshold": 30, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-tasktree-api" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:6673/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-tasktree-worker", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-tasktree-worker", + "hwlab.pikastech.local/service-id": "hwlab-tasktree-worker", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-tasktree-worker", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-tasktree-worker", + "hwlab.pikastech.local/service-id": "hwlab-tasktree-worker", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-tasktree-worker.sh", + "hwlab.pikastech.local/environment-digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "hwlab.pikastech.local/environment-input-hash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "hwlab.pikastech.local/code-input-hash": "aa2d956ed3fa16752b8d1679a8ebcdcfa2f496982af1f8d75200a14ee7c191ff" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-tasktree-worker", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "ports": [ + { + "name": "http", + "containerPort": 6674 + } + ], + "env": [ + { + "name": "TASKTREE_WORKER_HEALTH_PORT", + "value": "6674" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "TASKTREE_DATABASE_URL", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-tasktree-db", + "key": "database-url", + "optional": true + } + } + }, + { + "name": "TASKTREE_TEMPORAL_ADDRESS", + "value": "temporal-frontend.temporal.svc.cluster.local:7233" + }, + { + "name": "TASKTREE_TEMPORAL_NAMESPACE", + "value": "unidesk" + }, + { + "name": "TASKTREE_TEMPORAL_TASK_QUEUE", + "value": "hwlab-v03-tasktree" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-tasktree-worker" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-tasktree-worker.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "aa2d956ed3fa16752b8d1679a8ebcdcfa2f496982af1f8d75200a14ee7c191ff" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + } + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + } + }, + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2, + "failureThreshold": 30, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-tasktree-worker" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:6674/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-harnessrl-api", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-harnessrl-api", + "hwlab.pikastech.local/service-id": "hwlab-harnessrl-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-harnessrl-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-harnessrl-api", + "hwlab.pikastech.local/service-id": "hwlab-harnessrl-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-harnessrl-api.sh", + "hwlab.pikastech.local/environment-digest": "sha256:be9e19679ceb9957d254a219b6896e145fdde9716b331fa796fdfd22ec61550f", + "hwlab.pikastech.local/environment-input-hash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "hwlab.pikastech.local/code-input-hash": "a48f28e72d6e952f36114052f395408bb062f076e2c0c7f864f028f0b6783412" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-harnessrl-api", + "image": "127.0.0.1:5000/hwlab/hwlab-harnessrl-api-env@sha256:be9e19679ceb9957d254a219b6896e145fdde9716b331fa796fdfd22ec61550f", + "ports": [ + { + "name": "http", + "containerPort": 6675 + } + ], + "env": [ + { + "name": "HARNESSRL_API_PORT", + "value": "6675" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "HARNESSRL_DATABASE_URL", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-cloud-api-v03-db", + "key": "database-url", + "optional": true + } + } + }, + { + "name": "HARNESSRL_TEMPORAL_ADDRESS", + "value": "temporal-frontend.temporal.svc.cluster.local:7233" + }, + { + "name": "HARNESSRL_TEMPORAL_NAMESPACE", + "value": "unidesk" + }, + { + "name": "HARNESSRL_TEMPORAL_TASK_QUEUE", + "value": "hwlab-v03-harnessrl" + }, + { + "name": "HARNESSRL_ACTIVITY_START_TO_CLOSE_TIMEOUT_MS", + "value": "1800000" + }, + { + "name": "HARNESSRL_ACTIVITY_HEARTBEAT_TIMEOUT_MS", + "value": "30000" + }, + { + "name": "HARNESSRL_ACTIVITY_RETRY_INITIAL_INTERVAL_MS", + "value": "1000" + }, + { + "name": "HARNESSRL_ACTIVITY_RETRY_MAXIMUM_INTERVAL_MS", + "value": "30000" + }, + { + "name": "HARNESSRL_ACTIVITY_RETRY_MAXIMUM_ATTEMPTS", + "value": "5" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-harnessrl-api" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-harnessrl-api-env@sha256:be9e19679ceb9957d254a219b6896e145fdde9716b331fa796fdfd22ec61550f" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-harnessrl-api.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-harnessrl-api-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:be9e19679ceb9957d254a219b6896e145fdde9716b331fa796fdfd22ec61550f" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "a48f28e72d6e952f36114052f395408bb062f076e2c0c7f864f028f0b6783412" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:be9e19679ceb9957d254a219b6896e145fdde9716b331fa796fdfd22ec61550f" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + } + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + } + }, + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2, + "failureThreshold": 30, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-harnessrl-api" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:6675/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-harnessrl-worker", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-harnessrl-worker", + "hwlab.pikastech.local/service-id": "hwlab-harnessrl-worker", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-harnessrl-worker", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-harnessrl-worker", + "hwlab.pikastech.local/service-id": "hwlab-harnessrl-worker", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-harnessrl-worker.sh", + "hwlab.pikastech.local/environment-digest": "sha256:ed738e7f3e4fe9ffb835f9df49f4ea9454ea250f7e79072497711960ad3935e3", + "hwlab.pikastech.local/environment-input-hash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "hwlab.pikastech.local/code-input-hash": "e5cfa8df59198459e82bbf99b19508a420f6f030c41c81c1b3df808a81d8c89a" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-harnessrl-worker", + "image": "127.0.0.1:5000/hwlab/hwlab-harnessrl-worker-env@sha256:ed738e7f3e4fe9ffb835f9df49f4ea9454ea250f7e79072497711960ad3935e3", + "ports": [ + { + "name": "health", + "containerPort": 6676 + } + ], + "env": [ + { + "name": "HARNESSRL_WORKER_HEALTH_PORT", + "value": "6676" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "HWLAB_CASERUN_INTERNAL_API_URL", + "value": "http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667" + }, + { + "name": "HARNESSRL_DATABASE_URL", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-cloud-api-v03-db", + "key": "database-url", + "optional": true + } + } + }, + { + "name": "HARNESSRL_TEMPORAL_ADDRESS", + "value": "temporal-frontend.temporal.svc.cluster.local:7233" + }, + { + "name": "HARNESSRL_TEMPORAL_NAMESPACE", + "value": "unidesk" + }, + { + "name": "HARNESSRL_TEMPORAL_TASK_QUEUE", + "value": "hwlab-v03-harnessrl" + }, + { + "name": "HARNESSRL_ACTIVITY_START_TO_CLOSE_TIMEOUT_MS", + "value": "1800000" + }, + { + "name": "HARNESSRL_ACTIVITY_HEARTBEAT_TIMEOUT_MS", + "value": "30000" + }, + { + "name": "HARNESSRL_ACTIVITY_RETRY_INITIAL_INTERVAL_MS", + "value": "1000" + }, + { + "name": "HARNESSRL_ACTIVITY_RETRY_MAXIMUM_INTERVAL_MS", + "value": "30000" + }, + { + "name": "HARNESSRL_ACTIVITY_RETRY_MAXIMUM_ATTEMPTS", + "value": "5" + }, + { + "name": "HWLAB_RUNTIME_INTERNAL_API_URL", + "value": "http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-harnessrl-worker" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-harnessrl-worker-env@sha256:ed738e7f3e4fe9ffb835f9df49f4ea9454ea250f7e79072497711960ad3935e3" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-harnessrl-worker.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-harnessrl-worker-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:ed738e7f3e4fe9ffb835f9df49f4ea9454ea250f7e79072497711960ad3935e3" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "e5cfa8df59198459e82bbf99b19508a420f6f030c41c81c1b3df808a81d8c89a" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:ed738e7f3e4fe9ffb835f9df49f4ea9454ea250f7e79072497711960ad3935e3" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/ready", + "port": "health" + } + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "health" + } + }, + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/ready", + "port": "health" + }, + "periodSeconds": 10, + "timeoutSeconds": 2, + "failureThreshold": 30, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-harnessrl-worker" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:6676/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-workbench-api", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-workbench-api", + "hwlab.pikastech.local/service-id": "hwlab-workbench-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-workbench-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-workbench-api", + "hwlab.pikastech.local/service-id": "hwlab-workbench-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-workbench-api.sh", + "hwlab.pikastech.local/environment-digest": "sha256:65cbd71dc7eb8557d0999bc42e25ad88b9988b121288f8adddd9ff1b7efb395b", + "hwlab.pikastech.local/environment-input-hash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "hwlab.pikastech.local/code-input-hash": "b7f8a357499f67e6914a20be4d8782fe8a6adf941e0c6e1981dfd085c52df8d4" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-workbench-api", + "image": "127.0.0.1:5000/hwlab/hwlab-workbench-api-env@sha256:65cbd71dc7eb8557d0999bc42e25ad88b9988b121288f8adddd9ff1b7efb395b", + "ports": [ + { + "name": "http", + "containerPort": 6677 + } + ], + "env": [ + { + "name": "WORKBENCH_API_PORT", + "value": "6677" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "WORKBENCH_MODE", + "value": "temporal" + }, + { + "name": "WORKBENCH_API_IDLE_TIMEOUT_SECONDS", + "value": "60" + }, + { + "name": "WORKBENCH_CLOUD_API_URL", + "value": "http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667" + }, + { + "name": "WORKBENCH_CLOUD_API_AUTHORIZATION", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-master-server-admin-api-key", + "key": "api-key", + "optional": true + } + } + }, + { + "name": "WORKBENCH_API_AUTHORIZATION", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-master-server-admin-api-key", + "key": "api-key", + "optional": true + } + } + }, + { + "name": "WORKBENCH_TEMPORAL_ADDRESS", + "value": "temporal-frontend.temporal.svc.cluster.local:7233" + }, + { + "name": "WORKBENCH_TEMPORAL_NAMESPACE", + "value": "unidesk" + }, + { + "name": "WORKBENCH_TEMPORAL_TASK_QUEUE", + "value": "hwlab-v03-workbench" + }, + { + "name": "WORKBENCH_ACTIVITY_START_TO_CLOSE_TIMEOUT_MS", + "value": "30000" + }, + { + "name": "WORKBENCH_ACTIVITY_RETRY_INITIAL_INTERVAL_MS", + "value": "1000" + }, + { + "name": "WORKBENCH_ACTIVITY_RETRY_MAXIMUM_INTERVAL_MS", + "value": "30000" + }, + { + "name": "WORKBENCH_ACTIVITY_RETRY_MAXIMUM_ATTEMPTS", + "value": "5" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-workbench-api" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-workbench-api-env@sha256:65cbd71dc7eb8557d0999bc42e25ad88b9988b121288f8adddd9ff1b7efb395b" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-workbench-api.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-workbench-api-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:65cbd71dc7eb8557d0999bc42e25ad88b9988b121288f8adddd9ff1b7efb395b" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "b7f8a357499f67e6914a20be4d8782fe8a6adf941e0c6e1981dfd085c52df8d4" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:65cbd71dc7eb8557d0999bc42e25ad88b9988b121288f8adddd9ff1b7efb395b" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + } + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + } + }, + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2, + "failureThreshold": 30, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-workbench-api" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:6677/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-workbench-worker", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-workbench-worker", + "hwlab.pikastech.local/service-id": "hwlab-workbench-worker", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-workbench-worker", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-workbench-worker", + "hwlab.pikastech.local/service-id": "hwlab-workbench-worker", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-workbench-worker.sh", + "hwlab.pikastech.local/environment-digest": "sha256:cc5e6934b1283b2ef7bb9ae74c28b279430983cbaf8e0258d8bd25ab9c60fd0d", + "hwlab.pikastech.local/environment-input-hash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "hwlab.pikastech.local/code-input-hash": "371b6fc7c79a82060b5363e2811cffd89ece991fb448c064f465bfc022c66bc5" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-workbench-worker", + "image": "127.0.0.1:5000/hwlab/hwlab-workbench-worker-env@sha256:cc5e6934b1283b2ef7bb9ae74c28b279430983cbaf8e0258d8bd25ab9c60fd0d", + "ports": [ + { + "name": "health", + "containerPort": 6678 + } + ], + "env": [ + { + "name": "WORKBENCH_WORKER_HEALTH_PORT", + "value": "6678" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "WORKBENCH_MODE", + "value": "temporal" + }, + { + "name": "WORKBENCH_CLOUD_API_URL", + "value": "http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667" + }, + { + "name": "WORKBENCH_CLOUD_API_AUTHORIZATION", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-master-server-admin-api-key", + "key": "api-key", + "optional": true + } + } + }, + { + "name": "WORKBENCH_TEMPORAL_ADDRESS", + "value": "temporal-frontend.temporal.svc.cluster.local:7233" + }, + { + "name": "WORKBENCH_TEMPORAL_NAMESPACE", + "value": "unidesk" + }, + { + "name": "WORKBENCH_TEMPORAL_TASK_QUEUE", + "value": "hwlab-v03-workbench" + }, + { + "name": "WORKBENCH_ACTIVITY_START_TO_CLOSE_TIMEOUT_MS", + "value": "30000" + }, + { + "name": "WORKBENCH_ACTIVITY_RETRY_INITIAL_INTERVAL_MS", + "value": "1000" + }, + { + "name": "WORKBENCH_ACTIVITY_RETRY_MAXIMUM_INTERVAL_MS", + "value": "30000" + }, + { + "name": "WORKBENCH_ACTIVITY_RETRY_MAXIMUM_ATTEMPTS", + "value": "5" + }, + { + "name": "HWLAB_KAFKA_BOOTSTRAP_SERVERS", + "value": "platform-infra-kafka-kafka-bootstrap.platform-infra.svc.cluster.local:9092" + }, + { + "name": "HWLAB_KAFKA_EVENT_TOPIC", + "value": "hwlab.event.v1" + }, + { + "name": "HWLAB_KAFKA_CLIENT_ID", + "value": "hwlab-v03-workbench-worker" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-workbench-worker" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-workbench-worker-env@sha256:cc5e6934b1283b2ef7bb9ae74c28b279430983cbaf8e0258d8bd25ab9c60fd0d" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-workbench-worker.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-workbench-worker-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:cc5e6934b1283b2ef7bb9ae74c28b279430983cbaf8e0258d8bd25ab9c60fd0d" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "371b6fc7c79a82060b5363e2811cffd89ece991fb448c064f465bfc022c66bc5" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:cc5e6934b1283b2ef7bb9ae74c28b279430983cbaf8e0258d8bd25ab9c60fd0d" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/ready", + "port": "health" + } + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "health" + } + }, + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/ready", + "port": "health" + }, + "periodSeconds": 10, + "timeoutSeconds": 2, + "failureThreshold": 30, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-workbench-worker" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:6678/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + } + ] + } + } + } + }, + { + "apiVersion": "v1", + "kind": "PersistentVolumeClaim", + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-user-skills", + "hwlab.pikastech.local/service-id": "hwlab-user-skills", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false" + }, + "name": "hwlab-user-skills", + "namespace": "hwlab-v03", + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "2Gi" + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-project-management", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-project-management", + "hwlab.pikastech.local/service-id": "hwlab-project-management", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-project-management", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-project-management", + "hwlab.pikastech.local/service-id": "hwlab-project-management", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-project-management.sh", + "hwlab.pikastech.local/environment-digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "hwlab.pikastech.local/environment-input-hash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "hwlab.pikastech.local/code-input-hash": "ad7954f7bf2a2d97cb260e9ce2b0a6d11cc30952407a60c7d313a469d21614f7" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-project-management", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "ports": [ + { + "name": "http", + "containerPort": 6672 + } + ], + "env": [ + { + "name": "HWLAB_PROJECT_MANAGEMENT_PORT", + "value": "6672" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "HWLAB_PROJECT_MANAGEMENT_DB_URL", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-cloud-api-v03-db", + "key": "database-url", + "optional": true + } + } + }, + { + "name": "HWLAB_PROJECT_MANAGEMENT_DB_CONNECT_TIMEOUT_MS", + "value": "5000" + }, + { + "name": "HWLAB_PROJECT_MANAGEMENT_SOURCE_ROOT", + "value": "/workspace/hwlab-boot/repo" + }, + { + "name": "HWLAB_PROJECT_MANAGEMENT_SOURCE_ID", + "value": "hwlab-v03-mdtodo" + }, + { + "name": "HWLAB_PROJECT_MANAGEMENT_SOURCE_NAME", + "value": "HWLAB v0.3 MDTODO" + }, + { + "name": "HWLAB_PROJECT_MANAGEMENT_PROJECT_ID", + "value": "project_hwlab_v03" + }, + { + "name": "HWLAB_PROJECT_MANAGEMENT_MDTODO_TASK_DEFAULT_LIMIT", + "value": "200" + }, + { + "name": "HWLAB_PROJECT_MANAGEMENT_MDTODO_TASK_MAX_LIMIT", + "value": "500" + }, + { + "name": "HWLAB_PROJECT_MANAGEMENT_HWPOD_NODE_OPS_URL", + "value": "http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667/v1/hwpod-node-ops" + }, + { + "name": "HWLAB_PROJECT_MANAGEMENT_HWPOD_NODE_OPS_API_KEY", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-master-server-admin-api-key", + "key": "api-key", + "optional": true + } + } + }, + { + "name": "HWLAB_PROJECT_MANAGEMENT_BOOTSTRAP_SOURCES_PATH", + "value": "/etc/hwlab/project-management/sources.json" + }, + { + "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", + "value": "http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-project-management" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-project-management.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "ad7954f7bf2a2d97cb260e9ce2b0a6d11cc30952407a60c7d313a469d21614f7" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + }, + "timeoutSeconds": 10, + "failureThreshold": 5 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + }, + "timeoutSeconds": 5, + "failureThreshold": 6 + }, + "imagePullPolicy": "IfNotPresent", + "volumeMounts": [ + { + "name": "project-management-bootstrap", + "mountPath": "/etc/hwlab/project-management", + "readOnly": true + } + ], + "startupProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 10, + "failureThreshold": 30, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-project-management" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:6672/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + }, + { + "name": "project-management-bootstrap", + "configMap": { + "name": "hwlab-v03-project-management-bootstrap" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-workbench-runtime", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-workbench-runtime", + "hwlab.pikastech.local/service-id": "hwlab-workbench-runtime", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-workbench-runtime", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-workbench-runtime", + "hwlab.pikastech.local/service-id": "hwlab-workbench-runtime", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-workbench-runtime.sh", + "hwlab.pikastech.local/environment-digest": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f", + "hwlab.pikastech.local/environment-input-hash": "13bdc18b089e043c5eaaaa79e50f9858fba53506d35e5e2d73dca1ead8608d1b", + "hwlab.pikastech.local/code-input-hash": "396d8eb6ed0800ea9fad0b4c7340fe4b826e67efaeee108e1e042c58f002ac4b" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-workbench-runtime", + "image": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env@sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f", + "ports": [ + { + "name": "http", + "containerPort": 6671 + } + ], + "env": [ + { + "name": "HWLAB_WORKBENCH_RUNTIME_PORT", + "value": "6671" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "HWLAB_WORKBENCH_SESSIONS_SUMMARY_QUERY_MAX_ATTEMPTS", + "value": "1" + }, + { + "name": "HWLAB_WORKBENCH_SESSIONS_SUMMARY_QUERY_ATTEMPT_TIMEOUT_MS", + "value": "10000" + }, + { + "name": "HWLAB_WORKBENCH_SESSIONS_SUMMARY_QUERY_BACKOFF_MS", + "value": "0" + }, + { + "name": "HWLAB_WORKBENCH_RUNTIME_DB_POOL_MAX", + "value": "16" + }, + { + "name": "HWLAB_WORKBENCH_RUNTIME_QUERY_TIMEOUT_MS", + "value": "10000" + }, + { + "name": "HWLAB_WORKBENCH_RUNTIME_READY_TIMEOUT_MS", + "value": "10000" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_ENABLED", + "value": "1" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_SERVICE_NAME", + "value": "hwlab-workbench-redis" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_PORT", + "value": "6379" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_URL", + "value": "redis://hwlab-workbench-redis.hwlab-v03.svc.cluster.local:6379/0" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_TTL_SESSIONS_SUMMARY_MS", + "value": "30000" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_TTL_TERMINAL_TURN_MS", + "value": "300000" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_TTL_TERMINAL_TRACE_PAGE_MS", + "value": "300000" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_TTL_RUNNING_PAGE_MS", + "value": "5000" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_MAX_KEY_BYTES", + "value": "512" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_MAX_PAYLOAD_BYTES", + "value": "262144" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_CONNECT_TIMEOUT_MS", + "value": "200" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_OPERATION_TIMEOUT_MS", + "value": "100" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_METRICS_LABELS", + "value": "{\"lane\":\"v03\",\"service\":\"hwlab-workbench-runtime\",\"cacheKeyClass\":\"workbench-derived-read\"}" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_UNAVAILABLE_LIVENESS_FAILURE", + "value": "0" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_UNAVAILABLE_READ_MODE", + "value": "db-or-degraded" + }, + { + "name": "HWLAB_WORKBENCH_CACHE_REDIS_UNAVAILABLE_FALLBACK_STATE_SOURCE", + "value": "0" + }, + { + "name": "HWLAB_WORKBENCH_RUNTIME_DB_URL", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-cloud-api-v03-db", + "key": "database-url", + "optional": true + } + } + }, + { + "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", + "value": "http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-workbench-runtime" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env@sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-934129c3af54" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-workbench-runtime.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-934129c3af54" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "13bdc18b089e043c5eaaaa79e50f9858fba53506d35e5e2d73dca1ead8608d1b" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "396d8eb6ed0800ea9fad0b4c7340fe4b826e67efaeee108e1e042c58f002ac4b" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + }, + "timeoutSeconds": 10, + "failureThreshold": 5 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + }, + "timeoutSeconds": 5, + "failureThreshold": 6 + }, + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 10, + "failureThreshold": 30, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-workbench-runtime" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:6671/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-cloud-api", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-cloud-api", + "hwlab.pikastech.local/service-id": "hwlab-cloud-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-cloud-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-cloud-api", + "hwlab.pikastech.local/service-id": "hwlab-cloud-api", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-cloud-api.sh", + "hwlab.pikastech.local/environment-digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "hwlab.pikastech.local/environment-input-hash": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c", + "hwlab.pikastech.local/code-input-hash": "022052df829862fde013af1c8c36e6c502d637e9efeacc78b1af9f867b4bf66d" + } + }, + "spec": { + "initContainers": [], + "containers": [ + { + "name": "hwlab-cloud-api", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "ports": [ + { + "name": "http", + "containerPort": 6667 + } + ], + "env": [ + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_PUBLIC_ENDPOINT", + "value": "https://lab-dev.hwpod.com" + }, + { + "name": "HWLAB_CLOUD_API_PORT", + "value": "6667" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_RUNTIME_SUBSTITUTE_FORBIDDEN", + "value": "unidesk-backend,provider-gateway,microservice-proxy" + }, + { + "name": "HWLAB_CLOUD_DB_URL", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-cloud-api-v03-db", + "key": "database-url", + "optional": true + } + } + }, + { + "name": "HWLAB_CLOUD_DB_SSL_MODE", + "value": "disable" + }, + { + "name": "HWLAB_CLOUD_DB_CONTRACT", + "value": "v03-redacted-presence-only" + }, + { + "name": "HWLAB_CLOUD_RUNTIME_ADAPTER", + "value": "postgres" + }, + { + "name": "HWLAB_CLOUD_RUNTIME_DURABLE", + "value": "true" + }, + { + "name": "HWLAB_M3_IO_CONTROL_ENABLED", + "value": "false" + }, + { + "name": "HWLAB_CODE_AGENT_TIMEOUT_MS", + "value": "1200000" + }, + { + "name": "NO_PROXY", + "value": "hwlab-v03.svc.cluster.local,.svc,.cluster.local,hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,api.minimaxi.com,.minimaxi.com" + }, + { + "name": "no_proxy", + "value": "hwlab-v03.svc.cluster.local,.svc,.cluster.local,hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,api.minimaxi.com,.minimaxi.com" + }, + { + "name": "HWLAB_CODE_AGENT_SKILLS_DIRS", + "value": "/app/skills:/data/user-skills" + }, + { + "name": "HWLAB_PREINSTALLED_SKILLS_DIR", + "value": "/app/skills" + }, + { + "name": "HWLAB_USER_SKILLS_DIR", + "value": "/data/user-skills" + }, + { + "name": "HWLAB_CODE_AGENT_DEFAULT_PROVIDER_PROFILE", + "value": "gpt.pika" + }, + { + "name": "HWLAB_CODE_AGENT_DEEPSEEK_MODEL", + "value": "deepseek-chat" + }, + { + "name": "HWLAB_CODE_AGENT_DEEPSEEK_BASE_URL", + "value": "http://hwlab-deepseek-proxy.hwlab-v03.svc.cluster.local:4000/v1/responses" + }, + { + "name": "HWLAB_CODE_AGENT_CODEX_API_MODEL", + "value": "gpt-5.5" + }, + { + "name": "HWLAB_CODE_AGENT_CODEX_API_BASE_URL", + "value": "http://127.0.0.1:49280/responses" + }, + { + "name": "HWLAB_CODE_AGENT_CODEX_API_UPSTREAM_BASE_URL", + "value": "https://hyueapi.com" + }, + { + "name": "HWLAB_CODE_AGENT_CODEX_API_FORWARDER_PORT", + "value": "49280" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_OBSERVABILITY_CONFIG_REVISION", + "value": "PJ2026-01060505-20260619-long-trace-timeout-mitigation" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX", + "value": "5" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_BASE_MS", + "value": "1000" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX_DELAY_MS", + "value": "30000" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-bootstrap-admin", + "key": "password-hash", + "optional": true + } + } + }, + { + "name": "HWLAB_PRESET_USER_HUIGGAO_PASSWORD_HASH", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-preset-users", + "key": "huiggao-password-hash", + "optional": true + } + } + }, + { + "name": "HWLAB_ACCESS_CONTROL_USERS_JSON", + "value": "[{\"id\":\"usr_v03_admin\",\"username\":\"admin\",\"displayName\":\"HWLAB v0.3 Admin\",\"email\":null,\"role\":\"admin\",\"status\":\"active\",\"navProfile\":\"admin-full\",\"passwordHashEnv\":\"HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH\"},{\"id\":\"usr_v03_huiggao\",\"username\":\"huiggao@163.com\",\"displayName\":\"huiggao@163.com\",\"email\":\"huiggao@163.com\",\"role\":\"user\",\"status\":\"active\",\"navProfile\":\"code-mdtodo-only\",\"passwordHashEnv\":\"HWLAB_PRESET_USER_HUIGGAO_PASSWORD_HASH\"}]" + }, + { + "name": "HWLAB_ACCESS_CONTROL_NAV_PROFILES_JSON", + "value": "[{\"id\":\"admin-full\",\"displayName\":\"Admin full access\",\"allowedIds\":[\"*\"]},{\"id\":\"code-mdtodo-only\",\"displayName\":\"Code and MDTODO only\",\"allowedIds\":[\"workbench.code\",\"project.mdtodo\",\"project.tasktree\"]}]" + }, + { + "name": "HWLAB_CLOUD_DB_POOL_MAX", + "value": "16" + }, + { + "name": "HWLAB_WORKBENCH_RUNTIME_TIMEOUT_MS", + "value": "3000" + }, + { + "name": "HWLAB_WORKBENCH_FACTS_QUERY_MAX_ATTEMPTS", + "value": "1" + }, + { + "name": "HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_BASE_MS", + "value": "0" + }, + { + "name": "HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_MAX_MS", + "value": "1" + }, + { + "name": "HWLAB_HWPOD_OPERATION_RETENTION_SECONDS", + "value": "604800" + }, + { + "name": "HWLAB_ACCESS_CONTROL_REQUIRED", + "value": "1" + }, + { + "name": "HWLAB_SESSION_COOKIE_SAMESITE", + "value": "None" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_ID", + "value": "usr_v03_admin" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_USERNAME", + "value": "admin" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME", + "value": "HWLAB v0.3 Admin" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_API_KEY_ID", + "value": "key_master_server_admin" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_API_KEY", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-master-server-admin-api-key", + "key": "api-key", + "optional": true + } + } + }, + { + "name": "HWLAB_USER_BILLING_URL", + "value": "http://hwlab-user-billing.hwlab-v03.svc.cluster.local:6670" + }, + { + "name": "HWLAB_WORKBENCH_RUNTIME_URL", + "value": "http://hwlab-workbench-runtime.hwlab-v03.svc.cluster.local:6671" + }, + { + "name": "HWLAB_WORKBENCH_API_URL", + "value": "http://hwlab-workbench-api.hwlab-v03.svc.cluster.local:6677" + }, + { + "name": "WORKBENCH_CLOUD_API_AUTHORIZATION", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-master-server-admin-api-key", + "key": "api-key", + "optional": true + } + } + }, + { + "name": "HWLAB_PROJECT_MANAGEMENT_URL", + "value": "http://hwlab-project-management.hwlab-v03.svc.cluster.local:6672" + }, + { + "name": "HWLAB_TASKTREE_URL", + "value": "http://hwlab-tasktree-api.hwlab-v03.svc.cluster.local:6673" + }, + { + "name": "HARNESSRL_API_URL", + "value": "http://hwlab-harnessrl-api.hwlab-v03.svc.cluster.local:6675" + }, + { + "name": "HWLAB_HWPOD_SPEC_REGISTRY_DIRS", + "value": "/etc/hwlab/hwpod-specs" + }, + { + "name": "HWLAB_HWPOD_NODE_WS_TOKEN", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-hwpod-node-auth", + "key": "token", + "optional": true + } + } + }, + { + "name": "HWLAB_USER_BILLING_LOGIN_RETRY_ATTEMPTS", + "value": "2" + }, + { + "name": "HWLAB_USER_BILLING_LOGIN_RETRY_DELAY_MS", + "value": "250" + }, + { + "name": "HWLAB_USER_BILLING_CODE_AGENT_ENABLED", + "value": "1" + }, + { + "name": "HWLAB_USER_BILLING_CODE_AGENT_ESTIMATED_CREDITS", + "value": "1" + }, + { + "name": "HWLAB_USER_BILLING_CODE_AGENT_USED_CREDITS", + "value": "1" + }, + { + "name": "HWLAB_KEYCLOAK_ISSUER", + "value": "https://auth.74-48-78-17.nip.io/realms/hwlab" + }, + { + "name": "HWLAB_KEYCLOAK_CLIENT_ID", + "value": "hwlab-cloud-web" + }, + { + "name": "HWLAB_KEYCLOAK_CLIENT_SECRET", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-cloud-web-client", + "key": "client-secret", + "optional": true + } + } + }, + { + "name": "HWLAB_CODE_AGENT_ADAPTER", + "value": "agentrun-v02" + }, + { + "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", + "value": "http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-cloud-api" + }, + { + "name": "AGENTRUN_MGR_URL", + "value": "http://agentrun-mgr.agentrun-v02.svc.cluster.local:8080" + }, + { + "name": "AGENTRUN_API_KEY", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-master-server-admin-api-key", + "key": "api-key", + "optional": true + } + } + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_RUNNER_NAMESPACE", + "value": "agentrun-v02" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_SECRET_NAMESPACE", + "value": "agentrun-v02" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_REPO_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_KAFKA_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_KAFKA_AGENTRUN_EVENT_CONSUME_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_KAFKA_DIRECT_PUBLISH_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_WORKBENCH_LIVE_KAFKA_SSE_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_KAFKA_TRANSACTIONAL_PROJECTOR_ENABLED", + "value": "false" + }, + { + "name": "HWLAB_KAFKA_PROJECTION_OUTBOX_RELAY_ENABLED", + "value": "false" + }, + { + "name": "HWLAB_WORKBENCH_PROJECTION_REALTIME_ENABLED", + "value": "false" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_KAFKA_BOOTSTRAP_SERVERS", + "value": "platform-infra-kafka-kafka-bootstrap.platform-infra.svc.cluster.local:9092" + }, + { + "name": "HWLAB_KAFKA_STDIO_TOPIC", + "value": "codex-stdio.raw.v1" + }, + { + "name": "HWLAB_KAFKA_AGENTRUN_EVENT_TOPIC", + "value": "agentrun.event.v1" + }, + { + "name": "HWLAB_KAFKA_EVENT_TOPIC", + "value": "hwlab.event.v1" + }, + { + "name": "HWLAB_KAFKA_CLIENT_ID", + "value": "hwlab-v03-cloud-api" + }, + { + "name": "HWLAB_KAFKA_AGENTRUN_EVENT_GROUP_ID", + "value": "hwlab-agentrun-event-direct-publish" + }, + { + "name": "HWLAB_KAFKA_PROJECTOR_GROUP_ID", + "value": "hwlab-v03-agentrun-event-projector" + }, + { + "name": "HWLAB_KAFKA_HWLAB_EVENT_GROUP_ID", + "value": "hwlab-v03-workbench-live-sse" + }, + { + "name": "HWLAB_KAFKA_HWLAB_DEBUG_EVENT_TOPIC", + "value": "hwlab.event.debug.v1" + }, + { + "name": "HWLAB_KAFKA_HWLAB_DEBUG_GROUP_PREFIX", + "value": "hwlab-v03-workbench-isolated-debug" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_LIMIT", + "value": "200" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_TIMEOUT_MS", + "value": "15000" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_GC_ENABLED", + "value": "1" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_TTL_MS", + "value": "600000" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_GC_INTERVAL_MS", + "value": "60000" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_GC_INITIAL_DELAY_MS", + "value": "5000" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_GC_BATCH_SIZE", + "value": "100" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_GC_JITTER_MS", + "value": "15000" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_GC_FAILURE_BACKOFF_MS", + "value": "120000" + }, + { + "name": "HWLAB_SECRET_PLANE_SMOKE", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-secret-plane-smoke", + "key": "password", + "optional": true + } + } + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-cloud-api.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "022052df829862fde013af1c8c36e6c502d637e9efeacc78b1af9f867b4bf66d" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RETENTION_EVENT_LIMIT", + "value": "10000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RETENTION_SCAN_LIMIT", + "value": "1000000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RETENTION_TIMEOUT_MS", + "value": "30000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RETENTION_GROUP_PREFIX", + "value": "hwlab-v03-agent-observer-replay" + }, + { + "name": "HWLAB_AGENT_OBSERVER_SSE_HEARTBEAT_MS", + "value": "15000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RECONNECT_DELAY_MS", + "value": "1500" + }, + { + "name": "HWLAB_AGENT_OBSERVER_BATCH_MAX_EVENTS", + "value": "100" + }, + { + "name": "HWLAB_AGENT_OBSERVER_LIVE_BUFFER_LIMIT", + "value": "2000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_IDENTITY_WINDOW_LIMIT", + "value": "12000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_REDUCER_EVENT_LIMIT", + "value": "2000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_REDUCER_ENTITY_LIMIT", + "value": "500" + }, + { + "name": "HWLAB_AGENT_OBSERVER_TREE_NODE_LIMIT", + "value": "500" + }, + { + "name": "HWLAB_AGENT_OBSERVER_INSPECTOR_EVENT_TAIL_LIMIT", + "value": "100" + }, + { + "name": "HWLAB_AGENT_OBSERVER_VIRTUAL_LIST_WINDOW_LIMIT", + "value": "160" + }, + { + "name": "HWLAB_AGENT_OBSERVER_CHANGE_HIGHLIGHT_MS", + "value": "1200" + }, + { + "name": "HWLAB_AGENT_OBSERVER_STALE_AFTER_MS", + "value": "30000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_REDUCED_MOTION", + "value": "respect-system" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_GROUP_PREFIX", + "value": "hwlab-v03-cloud-api-sse" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_TIMEOUT_MS", + "value": "30000" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_SCAN_LIMIT", + "value": "1000000" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_MATCHED_EVENT_LIMIT", + "value": "2000" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_LIVE_BUFFER_LIMIT", + "value": "2000" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_PROVIDER_ID", + "value": "NC01" + }, + { + "name": "HWLAB_OPENFGA_MODE", + "value": "enforce" + }, + { + "name": "HWLAB_OPENFGA_API_URL", + "value": "http://hwlab-openfga.hwlab-v03.svc.cluster.local:8080" + }, + { + "name": "HWLAB_OPENFGA_AUTHN_TOKEN", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-openfga", + "key": "authn-preshared-key", + "optional": true + } + } + }, + { + "name": "UNIDESK_MAIN_SERVER_IP", + "value": "http://74.48.78.17:18081" + }, + { + "name": "HWLAB_CODE_AGENT_CODEX_STDIO_SUPERVISOR", + "value": "repo-owned" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_CODEX_SECRET_NAME", + "value": "agentrun-v01-provider-codex" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_DSFLASH_GO_SECRET_NAME", + "value": "agentrun-v01-provider-dsflash-go" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_GPT_PIKA_SECRET_NAME", + "value": "agentrun-v02-provider-gpt-pika" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_GROK_SECRET_NAME", + "value": "agentrun-v02-provider-grok" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_GITHUB_TOOL_SECRET_NAME", + "value": "agentrun-v01-tool-github-pr" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_UNIDESK_SSH_TOOL_SECRET_NAME", + "value": "agentrun-v01-tool-unidesk-ssh" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + }, + "timeoutSeconds": 3, + "failureThreshold": 5 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + }, + "periodSeconds": 20, + "timeoutSeconds": 5, + "failureThreshold": 6 + }, + "volumeMounts": [ + { + "name": "hwlab-user-skills", + "mountPath": "/data/user-skills" + }, + { + "name": "hwpod-preinstalled-specs", + "mountPath": "/etc/hwlab/hwpod-specs", + "readOnly": true + } + ], + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 3, + "failureThreshold": 30, + "successThreshold": 1 + }, + "lifecycle": { + "preStop": { + "exec": { + "command": [ + "sh", + "-c", + "port=\"${PORT:-${HWLAB_PORT:-${HWLAB_CLOUD_API_PORT:-6667}}}\"; url=\"http://127.0.0.1:${port}/v1/internal/workbench/drain\"; /usr/local/bin/bun -e 'const [url, hostname] = process.argv.slice(2); await fetch(url, { method: \"POST\", headers: { \"x-hwlab-drain-hostname\": hostname || \"\" } }).catch(() => {});' \"$url\" \"${HOSTNAME:-}\" >/dev/null 2>&1 || true; sleep 3" + ] + } + } + } + }, + { + "name": "hwlab-codex-api-forwarder", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "ports": [ + { + "name": "codex-api", + "containerPort": 49280 + } + ], + "env": [ + { + "name": "HWLAB_CODE_AGENT_CODEX_API_FORWARDER_HOST", + "value": "127.0.0.1" + }, + { + "name": "HWLAB_CODE_AGENT_CODEX_API_FORWARDER_PORT", + "value": "49280" + }, + { + "name": "HWLAB_CODE_AGENT_CODEX_API_UPSTREAM_BASE_URL", + "value": "https://hyueapi.com" + }, + { + "name": "NO_PROXY", + "value": "hwlab-v03.svc.cluster.local,.svc,.cluster.local,hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,api.minimaxi.com,.minimaxi.com" + }, + { + "name": "no_proxy", + "value": "hwlab-v03.svc.cluster.local,.svc,.cluster.local,hyueapi.com,.hyueapi.com,hyui.com,.hyui.com,127.0.0.1,localhost,::1,10.0.0.0/8,10.42.0.0/16,10.43.0.0/16,api.minimaxi.com,.minimaxi.com" + }, + { + "name": "HWLAB_M3_IO_CONTROL_ENABLED", + "value": "false" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_PUBLIC_ENDPOINT", + "value": "https://lab-dev.hwpod.com" + }, + { + "name": "HWLAB_CLOUD_API_PORT", + "value": "6667" + }, + { + "name": "HWLAB_RUNTIME_SUBSTITUTE_FORBIDDEN", + "value": "unidesk-backend,provider-gateway,microservice-proxy" + }, + { + "name": "HWLAB_CLOUD_DB_URL", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-cloud-api-v03-db", + "key": "database-url", + "optional": true + } + } + }, + { + "name": "HWLAB_CLOUD_DB_SSL_MODE", + "value": "disable" + }, + { + "name": "HWLAB_CLOUD_DB_CONTRACT", + "value": "v03-redacted-presence-only" + }, + { + "name": "HWLAB_CLOUD_RUNTIME_ADAPTER", + "value": "postgres" + }, + { + "name": "HWLAB_CLOUD_RUNTIME_DURABLE", + "value": "true" + }, + { + "name": "HWLAB_CODE_AGENT_TIMEOUT_MS", + "value": "1200000" + }, + { + "name": "HWLAB_CODE_AGENT_SKILLS_DIRS", + "value": "/app/skills:/data/user-skills" + }, + { + "name": "HWLAB_PREINSTALLED_SKILLS_DIR", + "value": "/app/skills" + }, + { + "name": "HWLAB_USER_SKILLS_DIR", + "value": "/data/user-skills" + }, + { + "name": "HWLAB_CODE_AGENT_DEFAULT_PROVIDER_PROFILE", + "value": "gpt.pika" + }, + { + "name": "HWLAB_CODE_AGENT_DEEPSEEK_MODEL", + "value": "deepseek-chat" + }, + { + "name": "HWLAB_CODE_AGENT_DEEPSEEK_BASE_URL", + "value": "http://hwlab-deepseek-proxy.hwlab-v03.svc.cluster.local:4000/v1/responses" + }, + { + "name": "HWLAB_CODE_AGENT_CODEX_API_MODEL", + "value": "gpt-5.5" + }, + { + "name": "HWLAB_CODE_AGENT_CODEX_API_BASE_URL", + "value": "http://127.0.0.1:49280/responses" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_OBSERVABILITY_CONFIG_REVISION", + "value": "PJ2026-01060505-20260619-long-trace-timeout-mitigation" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX", + "value": "5" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_BASE_MS", + "value": "1000" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_DISPATCH_RETRY_MAX_DELAY_MS", + "value": "30000" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-bootstrap-admin", + "key": "password-hash", + "optional": true + } + } + }, + { + "name": "HWLAB_PRESET_USER_HUIGGAO_PASSWORD_HASH", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-preset-users", + "key": "huiggao-password-hash", + "optional": true + } + } + }, + { + "name": "HWLAB_ACCESS_CONTROL_USERS_JSON", + "value": "[{\"id\":\"usr_v03_admin\",\"username\":\"admin\",\"displayName\":\"HWLAB v0.3 Admin\",\"email\":null,\"role\":\"admin\",\"status\":\"active\",\"navProfile\":\"admin-full\",\"passwordHashEnv\":\"HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH\"},{\"id\":\"usr_v03_huiggao\",\"username\":\"huiggao@163.com\",\"displayName\":\"huiggao@163.com\",\"email\":\"huiggao@163.com\",\"role\":\"user\",\"status\":\"active\",\"navProfile\":\"code-mdtodo-only\",\"passwordHashEnv\":\"HWLAB_PRESET_USER_HUIGGAO_PASSWORD_HASH\"}]" + }, + { + "name": "HWLAB_ACCESS_CONTROL_NAV_PROFILES_JSON", + "value": "[{\"id\":\"admin-full\",\"displayName\":\"Admin full access\",\"allowedIds\":[\"*\"]},{\"id\":\"code-mdtodo-only\",\"displayName\":\"Code and MDTODO only\",\"allowedIds\":[\"workbench.code\",\"project.mdtodo\",\"project.tasktree\"]}]" + }, + { + "name": "HWLAB_CLOUD_DB_POOL_MAX", + "value": "16" + }, + { + "name": "HWLAB_WORKBENCH_RUNTIME_TIMEOUT_MS", + "value": "3000" + }, + { + "name": "HWLAB_WORKBENCH_FACTS_QUERY_MAX_ATTEMPTS", + "value": "1" + }, + { + "name": "HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_BASE_MS", + "value": "0" + }, + { + "name": "HWLAB_WORKBENCH_FACTS_QUERY_BACKOFF_MAX_MS", + "value": "1" + }, + { + "name": "HWLAB_HWPOD_OPERATION_RETENTION_SECONDS", + "value": "604800" + }, + { + "name": "HWLAB_ACCESS_CONTROL_REQUIRED", + "value": "1" + }, + { + "name": "HWLAB_SESSION_COOKIE_SAMESITE", + "value": "None" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_ID", + "value": "usr_v03_admin" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_USERNAME", + "value": "admin" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME", + "value": "HWLAB v0.3 Admin" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_API_KEY_ID", + "value": "key_master_server_admin" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_API_KEY", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-master-server-admin-api-key", + "key": "api-key", + "optional": true + } + } + }, + { + "name": "HWLAB_USER_BILLING_URL", + "value": "http://hwlab-user-billing.hwlab-v03.svc.cluster.local:6670" + }, + { + "name": "HWLAB_WORKBENCH_RUNTIME_URL", + "value": "http://hwlab-workbench-runtime.hwlab-v03.svc.cluster.local:6671" + }, + { + "name": "HWLAB_WORKBENCH_API_URL", + "value": "http://hwlab-workbench-api.hwlab-v03.svc.cluster.local:6677" + }, + { + "name": "WORKBENCH_CLOUD_API_AUTHORIZATION", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-master-server-admin-api-key", + "key": "api-key", + "optional": true + } + } + }, + { + "name": "HWLAB_PROJECT_MANAGEMENT_URL", + "value": "http://hwlab-project-management.hwlab-v03.svc.cluster.local:6672" + }, + { + "name": "HWLAB_TASKTREE_URL", + "value": "http://hwlab-tasktree-api.hwlab-v03.svc.cluster.local:6673" + }, + { + "name": "HARNESSRL_API_URL", + "value": "http://hwlab-harnessrl-api.hwlab-v03.svc.cluster.local:6675" + }, + { + "name": "HWLAB_HWPOD_SPEC_REGISTRY_DIRS", + "value": "/etc/hwlab/hwpod-specs" + }, + { + "name": "HWLAB_HWPOD_NODE_WS_TOKEN", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-hwpod-node-auth", + "key": "token", + "optional": true + } + } + }, + { + "name": "HWLAB_USER_BILLING_LOGIN_RETRY_ATTEMPTS", + "value": "2" + }, + { + "name": "HWLAB_USER_BILLING_LOGIN_RETRY_DELAY_MS", + "value": "250" + }, + { + "name": "HWLAB_USER_BILLING_CODE_AGENT_ENABLED", + "value": "1" + }, + { + "name": "HWLAB_USER_BILLING_CODE_AGENT_ESTIMATED_CREDITS", + "value": "1" + }, + { + "name": "HWLAB_USER_BILLING_CODE_AGENT_USED_CREDITS", + "value": "1" + }, + { + "name": "HWLAB_KEYCLOAK_ISSUER", + "value": "https://auth.74-48-78-17.nip.io/realms/hwlab" + }, + { + "name": "HWLAB_KEYCLOAK_CLIENT_ID", + "value": "hwlab-cloud-web" + }, + { + "name": "HWLAB_KEYCLOAK_CLIENT_SECRET", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-cloud-web-client", + "key": "client-secret", + "optional": true + } + } + }, + { + "name": "HWLAB_CODE_AGENT_ADAPTER", + "value": "agentrun-v02" + }, + { + "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", + "value": "http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-cloud-api" + }, + { + "name": "AGENTRUN_MGR_URL", + "value": "http://agentrun-mgr.agentrun-release.svc.cluster.local:8080" + }, + { + "name": "AGENTRUN_API_KEY", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-master-server-admin-api-key", + "key": "api-key", + "optional": true + } + } + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_RUNNER_NAMESPACE", + "value": "agentrun-release" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_SECRET_NAMESPACE", + "value": "agentrun-release" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_REPO_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_KAFKA_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_KAFKA_AGENTRUN_EVENT_CONSUME_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_KAFKA_DIRECT_PUBLISH_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_WORKBENCH_LIVE_KAFKA_SSE_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_KAFKA_TRANSACTIONAL_PROJECTOR_ENABLED", + "value": "false" + }, + { + "name": "HWLAB_KAFKA_PROJECTION_OUTBOX_RELAY_ENABLED", + "value": "false" + }, + { + "name": "HWLAB_WORKBENCH_PROJECTION_REALTIME_ENABLED", + "value": "false" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_KAFKA_BOOTSTRAP_SERVERS", + "value": "platform-infra-kafka-kafka-bootstrap.platform-infra.svc.cluster.local:9092" + }, + { + "name": "HWLAB_KAFKA_STDIO_TOPIC", + "value": "codex-stdio.raw.v1" + }, + { + "name": "HWLAB_KAFKA_AGENTRUN_EVENT_TOPIC", + "value": "agentrun.event.v1" + }, + { + "name": "HWLAB_KAFKA_EVENT_TOPIC", + "value": "hwlab.event.v1" + }, + { + "name": "HWLAB_KAFKA_CLIENT_ID", + "value": "hwlab-v03-cloud-api" + }, + { + "name": "HWLAB_KAFKA_AGENTRUN_EVENT_GROUP_ID", + "value": "hwlab-v03-agentrun-event-direct-publish" + }, + { + "name": "HWLAB_KAFKA_PROJECTOR_GROUP_ID", + "value": "hwlab-v03-agentrun-event-projector" + }, + { + "name": "HWLAB_KAFKA_HWLAB_EVENT_GROUP_ID", + "value": "hwlab-v03-workbench-live-sse" + }, + { + "name": "HWLAB_KAFKA_HWLAB_DEBUG_EVENT_TOPIC", + "value": "hwlab.event.debug.v1" + }, + { + "name": "HWLAB_KAFKA_HWLAB_DEBUG_GROUP_PREFIX", + "value": "hwlab-v03-workbench-isolated-debug" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_LIMIT", + "value": "200" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_TIMEOUT_MS", + "value": "15000" + }, + { + "name": "HWLAB_KAFKA_PROJECTOR_HEARTBEAT_INTERVAL_MS", + "value": "2000" + }, + { + "name": "HWLAB_KAFKA_OUTBOX_RELAY_INTERVAL_MS", + "value": "250" + }, + { + "name": "HWLAB_KAFKA_OUTBOX_RELAY_BATCH_SIZE", + "value": "100" + }, + { + "name": "HWLAB_KAFKA_OUTBOX_RELAY_LEASE_MS", + "value": "30000" + }, + { + "name": "HWLAB_KAFKA_OUTBOX_RELAY_SEND_TIMEOUT_MS", + "value": "10000" + }, + { + "name": "HWLAB_KAFKA_OUTBOX_RELAY_RETRY_BACKOFF_MS", + "value": "1000" + }, + { + "name": "HWLAB_WORKBENCH_OUTBOX_TAIL_BATCH_SIZE", + "value": "100" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_GC_ENABLED", + "value": "1" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_TTL_MS", + "value": "600000" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_GC_INTERVAL_MS", + "value": "60000" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_GC_INITIAL_DELAY_MS", + "value": "5000" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_GC_BATCH_SIZE", + "value": "100" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_GC_JITTER_MS", + "value": "15000" + }, + { + "name": "HWLAB_WORKBENCH_EMPTY_SESSION_GC_FAILURE_BACKOFF_MS", + "value": "120000" + }, + { + "name": "HWLAB_SECRET_PLANE_SMOKE", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-secret-plane-smoke", + "key": "password", + "optional": true + } + } + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-codex-api-responses-forwarder.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "1342b35c683d1388cd20618daef82ba05fe0a3ab327033f8039f27cae7d92d9c" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "022052df829862fde013af1c8c36e6c502d637e9efeacc78b1af9f867b4bf66d" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RETENTION_EVENT_LIMIT", + "value": "10000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RETENTION_SCAN_LIMIT", + "value": "1000000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RETENTION_TIMEOUT_MS", + "value": "30000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RETENTION_GROUP_PREFIX", + "value": "hwlab-v03-agent-observer-replay" + }, + { + "name": "HWLAB_AGENT_OBSERVER_SSE_HEARTBEAT_MS", + "value": "15000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RECONNECT_DELAY_MS", + "value": "1500" + }, + { + "name": "HWLAB_AGENT_OBSERVER_BATCH_MAX_EVENTS", + "value": "100" + }, + { + "name": "HWLAB_AGENT_OBSERVER_LIVE_BUFFER_LIMIT", + "value": "2000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_IDENTITY_WINDOW_LIMIT", + "value": "12000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_REDUCER_EVENT_LIMIT", + "value": "2000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_REDUCER_ENTITY_LIMIT", + "value": "500" + }, + { + "name": "HWLAB_AGENT_OBSERVER_TREE_NODE_LIMIT", + "value": "500" + }, + { + "name": "HWLAB_AGENT_OBSERVER_INSPECTOR_EVENT_TAIL_LIMIT", + "value": "100" + }, + { + "name": "HWLAB_AGENT_OBSERVER_VIRTUAL_LIST_WINDOW_LIMIT", + "value": "160" + }, + { + "name": "HWLAB_AGENT_OBSERVER_CHANGE_HIGHLIGHT_MS", + "value": "1200" + }, + { + "name": "HWLAB_AGENT_OBSERVER_STALE_AFTER_MS", + "value": "30000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_REDUCED_MOTION", + "value": "respect-system" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_GROUP_PREFIX", + "value": "hwlab-v03-agent-observer-replay" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_TIMEOUT_MS", + "value": "30000" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_SCAN_LIMIT", + "value": "1000000" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_MATCHED_EVENT_LIMIT", + "value": "10000" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_LIVE_BUFFER_LIMIT", + "value": "2000" + }, + { + "name": "HWLAB_WORKBENCH_SSE_DRAIN_TIMEOUT_MS", + "value": "2500" + }, + { + "name": "HWLAB_CODE_AGENT_AGENTRUN_PROVIDER_ID", + "value": "NC01" + }, + { + "name": "HWLAB_OPENFGA_MODE", + "value": "enforce" + }, + { + "name": "HWLAB_OPENFGA_API_URL", + "value": "http://hwlab-openfga.hwlab-v03.svc.cluster.local:8080" + }, + { + "name": "HWLAB_OPENFGA_AUTHN_TOKEN", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-openfga", + "key": "authn-preshared-key", + "optional": true + } + } + }, + { + "name": "UNIDESK_MAIN_SERVER_IP", + "value": "http://74.48.78.17:18081" + }, + { + "name": "HWLAB_CODE_AGENT_CODEX_STDIO_SUPERVISOR", + "value": "repo-owned" + } + ], + "readinessProbe": { + "exec": { + "command": [ + "node", + "-e", + "fetch('http://127.0.0.1:49280/health/readiness').then((response) => process.exit(response.ok ? 0 : 1)).catch(() => process.exit(1))" + ] + }, + "timeoutSeconds": 2 + }, + "livenessProbe": { + "exec": { + "command": [ + "node", + "-e", + "fetch('http://127.0.0.1:49280/health/live').then((response) => process.exit(response.ok ? 0 : 1)).catch(() => process.exit(1))" + ] + }, + "timeoutSeconds": 2 + }, + "volumeMounts": [ + { + "name": "hwpod-preinstalled-specs", + "mountPath": "/etc/hwlab/hwpod-specs", + "readOnly": true + } + ], + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "exec": { + "command": [ + "node", + "-e", + "fetch('http://127.0.0.1:49280/health/readiness').then((response) => process.exit(response.ok ? 0 : 1)).catch(() => process.exit(1))" + ] + }, + "timeoutSeconds": 2, + "periodSeconds": 10, + "failureThreshold": 30, + "successThreshold": 1 + }, + "lifecycle": { + "preStop": { + "exec": { + "command": [ + "sh", + "-c", + "port=\"${PORT:-${HWLAB_PORT:-${HWLAB_CLOUD_API_PORT:-6667}}}\"; url=\"http://127.0.0.1:${port}/v1/internal/workbench/drain\"; /usr/local/bin/bun -e 'const [url, hostname] = process.argv.slice(2); await fetch(url, { method: \"POST\", headers: { \"x-hwlab-drain-hostname\": hostname || \"\" } }).catch(() => {});' \"$url\" \"${HOSTNAME:-}\" >/dev/null 2>&1 || true; sleep 3" + ] + } + } + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-cloud-api" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:6667/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + }, + { + "name": "HWLAB_METRICS_EXTRA_URL", + "value": "http://127.0.0.1:6667/v1/web-performance/metrics" + }, + { + "name": "HWLAB_METRICS_EXTRA_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-user-skills", + "persistentVolumeClaim": { + "claimName": "hwlab-user-skills" + } + }, + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + }, + { + "name": "hwpod-preinstalled-specs", + "configMap": { + "name": "hwlab-v03-hwpod-preinstalled-specs" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-user-billing", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-user-billing", + "hwlab.pikastech.local/service-id": "hwlab-user-billing", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-user-billing", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-user-billing", + "hwlab.pikastech.local/service-id": "hwlab-user-billing", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-user-billing.sh", + "hwlab.pikastech.local/environment-digest": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f", + "hwlab.pikastech.local/environment-input-hash": "934129c3af54712455d60e482164908d4c1578a20efad966d26757a136a73b85", + "hwlab.pikastech.local/code-input-hash": "686039eef616c0850f74f2a31618dfdb2fd91b0ef15a1805f487cbded3b021ce" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-user-billing", + "image": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env@sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f", + "ports": [ + { + "name": "http", + "containerPort": 6670 + } + ], + "env": [ + { + "name": "HWLAB_USER_BILLING_PORT", + "value": "6670" + }, + { + "name": "HWLAB_USER_BILLING_STATE_AUTHORITY", + "value": "pk01-postgres" + }, + { + "name": "HWLAB_USER_BILLING_STATELESS", + "value": "true" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "HWLAB_USER_BILLING_DB_URL", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-cloud-api-v03-db", + "key": "database-url", + "optional": true + } + } + }, + { + "name": "HWLAB_USER_BILLING_DB_POOL_MAX", + "value": "2" + }, + { + "name": "HWLAB_USER_BILLING_MIGRATION_TIMEOUT_SECONDS", + "value": "180" + }, + { + "name": "HWLAB_USER_BILLING_BOOTSTRAP_TIMEOUT_SECONDS", + "value": "60" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_ID", + "value": "usr_v03_admin" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_USERNAME", + "value": "admin" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_DISPLAY_NAME", + "value": "HWLAB v0.3 Admin" + }, + { + "name": "HWLAB_BOOTSTRAP_ADMIN_PASSWORD_HASH", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-bootstrap-admin", + "key": "password-hash", + "optional": true + } + } + }, + { + "name": "HWLAB_USER_BILLING_EXTERNAL_DB_LABEL", + "value": "pk01-external-postgres" + }, + { + "name": "HWLAB_USER_BILLING_REGISTRATION_ENABLED", + "value": "1" + }, + { + "name": "HWLAB_USER_BILLING_INITIAL_CREDITS", + "value": "0" + }, + { + "name": "HWLAB_USER_BILLING_CREDIT_PER_1K_TOKENS", + "value": "1" + }, + { + "name": "HWLAB_USER_BILLING_MIGRATE_ON_START", + "value": "1" + }, + { + "name": "HWLAB_USER_BILLING_REDIS_URL", + "value": "redis://hwlab-user-billing-redis.hwlab-v03.svc.cluster.local:6379/0" + }, + { + "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", + "value": "http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-user-billing" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env@sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-934129c3af54" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-user-billing.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-go-runtime-env:env-934129c3af54" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "934129c3af54712455d60e482164908d4c1578a20efad966d26757a136a73b85" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "686039eef616c0850f74f2a31618dfdb2fd91b0ef15a1805f487cbded3b021ce" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:74624eb24c92c9a48a0c2d24a16da77832471a3ca0167ee4f888595f0267554f" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + }, + "timeoutSeconds": 10, + "failureThreshold": 5 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + }, + "timeoutSeconds": 5, + "failureThreshold": 6 + }, + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/ready", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 10, + "failureThreshold": 30, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-user-billing" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:6670/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-cloud-web", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-cloud-web", + "hwlab.pikastech.local/service-id": "hwlab-cloud-web", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-cloud-web", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-cloud-web", + "hwlab.pikastech.local/service-id": "hwlab-cloud-web", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-cloud-web.sh", + "hwlab.pikastech.local/environment-digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "hwlab.pikastech.local/environment-input-hash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "hwlab.pikastech.local/code-input-hash": "dcba5a0e5833061aea5158f6a31f41373f9ee80a9960a1e347fa3316571132cf" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-cloud-web", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "ports": [ + { + "name": "http", + "containerPort": 8080 + } + ], + "env": [ + { + "name": "HWLAB_API_BASE_URL", + "value": "http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667" + }, + { + "name": "HWLAB_CLOUD_WEB_PROXY_TIMEOUT_MS", + "value": "1260000" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "BUN_CONFIG_REGISTRY", + "value": "https://registry.npmjs.org/" + }, + { + "name": "npm_config_registry", + "value": "https://registry.npmjs.org/" + }, + { + "name": "HWLAB_CLOUD_WEB_DISPLAY_TIME_ZONE", + "value": "Asia/Shanghai" + }, + { + "name": "HWLAB_CLOUD_WEB_DISPLAY_TIME_LOCALE", + "value": "zh-CN" + }, + { + "name": "HWLAB_CLOUD_WEB_DISPLAY_TIME_LABEL", + "value": "北京时间" + }, + { + "name": "HWLAB_WORKBENCH_LIVE_KAFKA_SSE_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_REFRESH_REPLAY_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_WORKBENCH_PROJECTION_REALTIME_ENABLED", + "value": "false" + }, + { + "name": "HWLAB_WORKBENCH_KAFKA_DEBUG_REPLAY_ENABLED", + "value": "true" + }, + { + "name": "HWLAB_CLOUD_WEB_OPENCODE_UPSTREAM_URL", + "value": "http://opencode-server.hwlab-v03.svc.cluster.local:4096" + }, + { + "name": "HWLAB_CLOUD_WEB_OPENCODE_USERNAME", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-opencode-server-auth", + "key": "username", + "optional": true + } + } + }, + { + "name": "HWLAB_CLOUD_WEB_OPENCODE_PASSWORD", + "valueFrom": { + "secretKeyRef": { + "name": "hwlab-v03-opencode-server-auth", + "key": "password", + "optional": true + } + } + }, + { + "name": "HWLAB_CLOUD_WEB_OPENCODE_DEFAULT_PROJECT", + "value": "/workspace" + }, + { + "name": "HWLAB_CLOUD_WEB_OPENCODE_EVENT_DIRECTORY_FROM", + "value": "/workspace" + }, + { + "name": "HWLAB_CLOUD_WEB_OPENCODE_EVENT_DIRECTORY_TO", + "value": "/" + }, + { + "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", + "value": "http://otel-collector.platform-infra.svc.cluster.local:4318/v1/traces" + }, + { + "name": "OTEL_SERVICE_NAME", + "value": "hwlab-cloud-web" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-cloud-web.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "dcba5a0e5833061aea5158f6a31f41373f9ee80a9960a1e347fa3316571132cf" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RETENTION_EVENT_LIMIT", + "value": "10000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RETENTION_SCAN_LIMIT", + "value": "1000000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RETENTION_TIMEOUT_MS", + "value": "30000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RETENTION_GROUP_PREFIX", + "value": "hwlab-v03-agent-observer-replay" + }, + { + "name": "HWLAB_AGENT_OBSERVER_SSE_HEARTBEAT_MS", + "value": "15000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_RECONNECT_DELAY_MS", + "value": "1500" + }, + { + "name": "HWLAB_AGENT_OBSERVER_BATCH_MAX_EVENTS", + "value": "100" + }, + { + "name": "HWLAB_AGENT_OBSERVER_LIVE_BUFFER_LIMIT", + "value": "2000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_IDENTITY_WINDOW_LIMIT", + "value": "12000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_REDUCER_EVENT_LIMIT", + "value": "2000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_REDUCER_ENTITY_LIMIT", + "value": "500" + }, + { + "name": "HWLAB_AGENT_OBSERVER_TREE_NODE_LIMIT", + "value": "500" + }, + { + "name": "HWLAB_AGENT_OBSERVER_INSPECTOR_EVENT_TAIL_LIMIT", + "value": "100" + }, + { + "name": "HWLAB_AGENT_OBSERVER_VIRTUAL_LIST_WINDOW_LIMIT", + "value": "160" + }, + { + "name": "HWLAB_AGENT_OBSERVER_CHANGE_HIGHLIGHT_MS", + "value": "1200" + }, + { + "name": "HWLAB_AGENT_OBSERVER_STALE_AFTER_MS", + "value": "30000" + }, + { + "name": "HWLAB_AGENT_OBSERVER_REDUCED_MOTION", + "value": "respect-system" + }, + { + "name": "HWLAB_AGENT_OBSERVER_NODE_ID", + "value": "NC01" + }, + { + "name": "HWLAB_AGENT_OBSERVER_LANE", + "value": "v03" + }, + { + "name": "HWLAB_PUBLIC_ENDPOINT", + "value": "https://lab-dev.hwpod.com" + }, + { + "name": "HWLAB_WORKBENCH_TRACE_AUTO_EXPAND_RUNNING", + "value": "1" + }, + { + "name": "HWLAB_WORKBENCH_TRACE_AUTO_COLLAPSE_TERMINAL", + "value": "0" + }, + { + "name": "HWLAB_WORKBENCH_RAW_HWLAB_EVENT_WINDOW_ENABLED", + "value": "1" + }, + { + "name": "HWLAB_WORKBENCH_RAW_HWLAB_EVENT_WINDOW_MAX_ENTRIES", + "value": "200" + }, + { + "name": "HWLAB_WORKBENCH_RAW_HWLAB_EVENT_WINDOW_MAX_RETAINED_BYTES", + "value": "1048576" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + } + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + } + }, + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 3, + "failureThreshold": 90, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-cloud-web" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:8080/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-gateway", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-gateway", + "hwlab.pikastech.local/service-id": "hwlab-gateway", + "hwlab.pikastech.local/activation": "manual", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 0, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-gateway", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-gateway", + "hwlab.pikastech.local/service-id": "hwlab-gateway", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-gateway.sh", + "hwlab.pikastech.local/environment-digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "hwlab.pikastech.local/environment-input-hash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "hwlab.pikastech.local/code-input-hash": "33a6ee768a1b5271e20f25bcb47f2f0f54160284c9c1308f0f031932f1356108" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-gateway", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "ports": [ + { + "name": "http", + "containerPort": 7001 + } + ], + "env": [ + { + "name": "HWLAB_GATEWAY_MODE", + "value": "hardware-boundary" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-gateway.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "33a6ee768a1b5271e20f25bcb47f2f0f54160284c9c1308f0f031932f1356108" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + } + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + } + }, + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2, + "failureThreshold": 30, + "successThreshold": 1 + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-edge-proxy", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-edge-proxy", + "hwlab.pikastech.local/service-id": "hwlab-edge-proxy", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-edge-proxy", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-edge-proxy", + "hwlab.pikastech.local/service-id": "hwlab-edge-proxy", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-edge-proxy.sh", + "hwlab.pikastech.local/environment-digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "hwlab.pikastech.local/environment-input-hash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "hwlab.pikastech.local/code-input-hash": "6b7f2c6afbfc76b3ad02e1a4fea96582c58a205633b91d37c46716220a716f5d" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-edge-proxy", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "ports": [ + { + "name": "http", + "containerPort": 6667 + } + ], + "env": [ + { + "name": "HWLAB_EDGE_LISTEN", + "value": "0.0.0.0:6667" + }, + { + "name": "HWLAB_EDGE_UPSTREAM", + "value": "http://hwlab-cloud-api.hwlab-v03.svc.cluster.local:6667" + }, + { + "name": "HWLAB_EDGE_PROXY_TIMEOUT_MS", + "value": "1260000" + }, + { + "name": "HWLAB_EDGE_IDLE_TIMEOUT_SECONDS", + "value": "120" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-edge-proxy.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "6b7f2c6afbfc76b3ad02e1a4fea96582c58a205633b91d37c46716220a716f5d" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_PUBLIC_ENDPOINT", + "value": "https://lab-dev.hwpod.com" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health", + "port": "http" + }, + "timeoutSeconds": 3, + "failureThreshold": 5 + }, + "livenessProbe": { + "httpGet": { + "path": "/health", + "port": "http" + }, + "periodSeconds": 20, + "timeoutSeconds": 5, + "failureThreshold": 6 + }, + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 3, + "failureThreshold": 30, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-edge-proxy" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:6667/health" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + } + ] + } + } + } + }, + { + "apiVersion": "apps/v1", + "kind": "Deployment", + "metadata": { + "name": "hwlab-agent-skills", + "namespace": "hwlab-v03", + "labels": { + "app.kubernetes.io/name": "hwlab-agent-skills", + "hwlab.pikastech.local/service-id": "hwlab-agent-skills", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "unidesk.ai/node-staging": "false", + "hwlab.pikastech.local/monitoring": "enabled" + }, + "annotations": { + "hwlab.pikastech.local/gitops-note": "node DEV GitOps target.", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + } + }, + "spec": { + "replicas": 1, + "selector": { + "matchLabels": { + "app.kubernetes.io/name": "hwlab-agent-skills", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03" + } + }, + "template": { + "metadata": { + "labels": { + "app.kubernetes.io/name": "hwlab-agent-skills", + "hwlab.pikastech.local/service-id": "hwlab-agent-skills", + "app.kubernetes.io/part-of": "hwlab", + "hwlab.pikastech.local/environment": "v03", + "hwlab.pikastech.local/profile": "v03", + "hwlab.pikastech.local/gitops-target": "v03", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/monitoring": "enabled", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + "annotations": { + "hwlab.pikastech.local/metrics-sidecar-sha256": "782e26256b5a5cddff52a165a0eb5f852973eee1aac1b19acac4a313db7968f4", + "hwlab.pikastech.local/gitops-render-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/artifact-source-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/rendered-by": "scripts/gitops-render.mjs", + "hwlab.pikastech.local/runtime-mode": "env-reuse-gitea-checkout", + "hwlab.pikastech.local/boot-repo": "git@github.com:pikasTech/HWLAB.git", + "hwlab.pikastech.local/boot-commit": "ed0c4a7e27270434708a189ba6403097b4270ac7", + "hwlab.pikastech.local/boot-sh": "deploy/runtime/boot/hwlab-agent-skills.sh", + "hwlab.pikastech.local/environment-digest": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "hwlab.pikastech.local/environment-input-hash": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba", + "hwlab.pikastech.local/code-input-hash": "b274823f7b33a772fb75b57973cfe739d7385412291af146ce7001d7798af0eb" + } + }, + "spec": { + "containers": [ + { + "name": "hwlab-agent-skills", + "image": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2", + "ports": [ + { + "name": "http", + "containerPort": 7430 + } + ], + "env": [ + { + "name": "HWLAB_SKILLS_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "TZ", + "value": "Asia/Shanghai" + }, + { + "name": "HWLAB_ENVIRONMENT", + "value": "v03" + }, + { + "name": "HWLAB_COMMIT_ID", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env@sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_IMAGE_TAG", + "value": "env-1342b35c683d" + }, + { + "name": "HWLAB_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_PROFILE", + "value": "v03" + }, + { + "name": "HWLAB_GITOPS_SOURCE_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_RUNTIME_MODE", + "value": "env-reuse-gitea-checkout" + }, + { + "name": "HWLAB_BOOT_REPO", + "value": "git@github.com:pikasTech/HWLAB.git" + }, + { + "name": "HWLAB_BOOT_COMMIT", + "value": "ed0c4a7e27270434708a189ba6403097b4270ac7" + }, + { + "name": "HWLAB_BOOT_REF", + "value": "v0.3" + }, + { + "name": "HWLAB_BOOT_SH", + "value": "deploy/runtime/boot/hwlab-agent-skills.sh" + }, + { + "name": "HWLAB_BOOT_READ_URL", + "value": "http://gitea-http.devops-infra.svc.cluster.local:3000/mirrors/pikasTech-HWLAB.git" + }, + { + "name": "HWLAB_ENVIRONMENT_IMAGE", + "value": "127.0.0.1:5000/hwlab/hwlab-ts-runtime-env:env-1342b35c683d" + }, + { + "name": "HWLAB_ENVIRONMENT_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + }, + { + "name": "HWLAB_ENVIRONMENT_INPUT_HASH", + "value": "5531c27ecbd8a37dde527aecc6c53d1c626da0776ee56daefb67f921bb478eba" + }, + { + "name": "HWLAB_CODE_INPUT_HASH", + "value": "b274823f7b33a772fb75b57973cfe739d7385412291af146ce7001d7798af0eb" + }, + { + "name": "HWLAB_IMAGE_DIGEST", + "value": "sha256:2ab70e5daca54eff3bd86dcb812e3441516352a10046589662d36c8ce4cf8ec2" + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + } + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + } + }, + "imagePullPolicy": "IfNotPresent", + "startupProbe": { + "httpGet": { + "path": "/health/live", + "port": "http" + }, + "periodSeconds": 10, + "timeoutSeconds": 2, + "failureThreshold": 30, + "successThreshold": 1 + } + }, + { + "name": "hwlab-metrics", + "image": "127.0.0.1:5000/hwlab/hwlab-ci-node-tools:node22-alpine-bun-v1", + "imagePullPolicy": "IfNotPresent", + "command": [ + "node", + "/metrics/metrics-sidecar.mjs" + ], + "env": [ + { + "name": "HWLAB_METRICS_SERVICE_ID", + "value": "hwlab-agent-skills" + }, + { + "name": "HWLAB_METRICS_NAMESPACE", + "value": "hwlab-v03" + }, + { + "name": "HWLAB_METRICS_GITOPS_TARGET", + "value": "v03" + }, + { + "name": "HWLAB_METRICS_PORT", + "value": "9100" + }, + { + "name": "HWLAB_METRICS_TARGET_URL", + "value": "http://127.0.0.1:7430/health/live" + }, + { + "name": "HWLAB_METRICS_TARGET_TIMEOUT_MS", + "value": "2000" + } + ], + "ports": [ + { + "name": "metrics", + "containerPort": 9100 + } + ], + "readinessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 3, + "periodSeconds": 10 + }, + "livenessProbe": { + "httpGet": { + "path": "/health/live", + "port": "metrics" + }, + "initialDelaySeconds": 10, + "periodSeconds": 20 + }, + "volumeMounts": [ + { + "name": "hwlab-metrics-sidecar", + "mountPath": "/metrics", + "readOnly": true + } + ] + } + ], + "volumes": [ + { + "name": "hwlab-metrics-sidecar", + "configMap": { + "name": "hwlab-v03-metrics-sidecar" + } + } + ] + } + } + } + } + ] +}