refactor: split control-plane cli modules
This commit is contained in:
@@ -0,0 +1,659 @@
|
||||
// SPEC: PJ2026-01060307 控制面模块化 draft-2026-06-25-p0. catalog module for scripts/src/artifact-registry.ts.
|
||||
|
||||
// Moved mechanically from scripts/src/artifact-registry.ts:249-880 for #903.
|
||||
|
||||
import { createHash } from "node:crypto";
|
||||
import { existsSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
||||
import { join } from "node:path";
|
||||
import { runCommand, type CommandResult } from "../command";
|
||||
import { readConfig, type UniDeskConfig, repoRoot, rootPath } from "../config";
|
||||
import { startJob } from "../jobs";
|
||||
import {
|
||||
compareDeployJsonExecutorMirrors,
|
||||
deployJsonCommitImage,
|
||||
deployJsonDriftResult,
|
||||
deployJsonSourceOfTruth,
|
||||
hasDeployJsonExecutorContract,
|
||||
k3sManifestExecutorMirror,
|
||||
parseDeployJsonServiceContractBase64,
|
||||
readDeployJsonServiceContractFromFile,
|
||||
type DeployJsonExecutorMirror,
|
||||
type DeployJsonServiceContract,
|
||||
} from "../deploy-json-contract";
|
||||
import { d601K3sGuardShellLines } from "../d601-k3s-guard";
|
||||
import { composeRuntimeEnvValue } from "../runtime-env";
|
||||
|
||||
import type { ArtifactConsumerSpec, AuthHealthGate, RuntimeSecretRequirement } from "./types";
|
||||
import { todoNoteSyntheticHealthDeployProof } from "./types";
|
||||
|
||||
export function todoNoteHealthProbeCommand(): string {
|
||||
return "bun -e \"fetch('http://127.0.0.1:4211/api/health').then(async r=>{const text=await r.text(); let body; try{body=JSON.parse(text)}catch{body={ok:r.ok,raw:text}}; console.log(JSON.stringify(body)); process.exit(r.ok?0:1)}).catch(e=>{console.error(e); process.exit(1)})\"";
|
||||
}
|
||||
|
||||
export const baiduNetdiskRuntimeSecretRequirements: RuntimeSecretRequirement[] = [
|
||||
{ sourceEnvName: "UNIDESK_BAIDU_NETDISK_CLIENT_ID", containerEnvName: "BAIDU_NETDISK_CLIENT_ID" },
|
||||
{ sourceEnvName: "UNIDESK_BAIDU_NETDISK_CLIENT_SECRET", containerEnvName: "BAIDU_NETDISK_CLIENT_SECRET" },
|
||||
{ sourceEnvName: "UNIDESK_BAIDU_NETDISK_TOKEN_KEY", containerEnvName: "BAIDU_NETDISK_TOKEN_KEY" },
|
||||
];
|
||||
|
||||
export const baiduNetdiskAuthHealthGate: AuthHealthGate = {
|
||||
requiredFields: ["configured", "clientIdConfigured", "clientSecretConfigured", "tokenKeyConfigured", "loggedIn"],
|
||||
recoveryHint: "Restore UNIDESK_BAIDU_NETDISK_CLIENT_ID, UNIDESK_BAIDU_NETDISK_CLIENT_SECRET, and UNIDESK_BAIDU_NETDISK_TOKEN_KEY in the canonical .state/docker-compose.env, recreate only baidu-netdisk with the canonical env file, then verify microservice health baidu-netdisk.",
|
||||
};
|
||||
|
||||
export const artifactConsumerSpecs: Record<string, ArtifactConsumerSpec> = {
|
||||
"auth-broker": {
|
||||
serviceId: "auth-broker",
|
||||
environment: "prod",
|
||||
kind: "compose",
|
||||
registryRepository: "unidesk/auth-broker",
|
||||
dockerfile: "src/components/microservices/auth-broker/Dockerfile",
|
||||
prodLiveApply: "supervisor-only",
|
||||
prodLiveBlockReason: "auth-broker is registered for source/contract/profile dry-run only; live production apply requires a separate credential mounting and exposure review.",
|
||||
devLiveApply: "supervisor-only",
|
||||
devLiveBlockReason: "auth-broker DEV live apply requires explicit operator authorization after reviewing credential mounting, private exposure, and dry-run evidence.",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "auth-broker",
|
||||
targetCommitImage: (commit: string) => `auth-broker:${commit}`,
|
||||
deployRef: "deploy.json#environments.dev.services.auth-broker",
|
||||
compose: {
|
||||
serviceName: "auth-broker",
|
||||
containerName: "auth-broker-backend",
|
||||
deployEnvPrefix: "UNIDESK_AUTH_BROKER_DEPLOY",
|
||||
healthProbeCommand: "auth-broker --healthcheck",
|
||||
requireHealthCommit: false,
|
||||
},
|
||||
},
|
||||
prod: {
|
||||
targetImage: "auth-broker",
|
||||
targetCommitImage: (commit: string) => `auth-broker:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.auth-broker",
|
||||
compose: {
|
||||
serviceName: "auth-broker",
|
||||
containerName: "auth-broker-backend",
|
||||
deployEnvPrefix: "UNIDESK_AUTH_BROKER_DEPLOY",
|
||||
healthProbeCommand: "auth-broker --healthcheck",
|
||||
requireHealthCommit: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"backend-core": {
|
||||
serviceId: "backend-core",
|
||||
environment: "prod",
|
||||
kind: "compose",
|
||||
registryRepository: "unidesk/backend-core",
|
||||
dockerfile: "src/components/backend-core/Dockerfile",
|
||||
prodLiveApply: "enabled",
|
||||
targets: {
|
||||
prod: {
|
||||
targetImage: "unidesk-backend-core",
|
||||
targetCommitImage: (commit: string) => `unidesk-backend-core:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.backend-core",
|
||||
compose: {
|
||||
serviceName: "backend-core",
|
||||
containerName: "unidesk-backend-core",
|
||||
deployEnvPrefix: "UNIDESK_DEPLOY",
|
||||
healthProbeCommand: "if command -v backend-core >/dev/null 2>&1; then backend-core --fetch-json http://127.0.0.1:8080/health --require-ok; elif command -v bun >/dev/null 2>&1; then bun -e \"fetch('http://127.0.0.1:8080/health').then(async r=>{const text=await r.text(); console.log(text); process.exit(r.ok?0:1)}).catch(e=>{console.error(e); process.exit(1)})\"; else exit 1; fi",
|
||||
requireHealthCommit: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"dev:backend-core": {
|
||||
serviceId: "backend-core",
|
||||
environment: "dev",
|
||||
kind: "d601-k3s",
|
||||
registryRepository: "unidesk/backend-core",
|
||||
dockerfile: "src/components/backend-core/Dockerfile",
|
||||
prodLiveApply: "enabled",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "unidesk-backend-core:dev",
|
||||
targetCommitImage: (commit: string) => `unidesk-backend-core:${commit}`,
|
||||
deployRef: "origin/master:deploy.json#environments.dev.services.backend-core",
|
||||
k3s: {
|
||||
namespace: "unidesk-dev",
|
||||
manifestRepoPath: "src/components/microservices/k3sctl-adapter/k3s/dev/unidesk-dev-core.k8s.yaml",
|
||||
deploymentName: "backend-core-dev",
|
||||
serviceName: "backend-core-dev",
|
||||
servicePort: 8080,
|
||||
containerName: "backend-core",
|
||||
healthPath: "/health",
|
||||
applySelector: "app.kubernetes.io/name=backend-core",
|
||||
podLabelSelector: "app.kubernetes.io/name=backend-core,app.kubernetes.io/component=core,unidesk.ai/environment=dev",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"baidu-netdisk": {
|
||||
serviceId: "baidu-netdisk",
|
||||
environment: "prod",
|
||||
kind: "compose",
|
||||
registryRepository: "unidesk/baidu-netdisk",
|
||||
dockerfile: "src/components/microservices/baidu-netdisk/Dockerfile",
|
||||
prodLiveApply: "enabled",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "baidu-netdisk",
|
||||
targetCommitImage: (commit: string) => `baidu-netdisk:${commit}`,
|
||||
deployRef: "deploy.json#environments.dev.services.baidu-netdisk",
|
||||
compose: {
|
||||
serviceName: "baidu-netdisk",
|
||||
containerName: "baidu-netdisk-backend",
|
||||
deployEnvPrefix: "UNIDESK_BAIDU_NETDISK_DEPLOY",
|
||||
healthProbeCommand: "bun -e \"fetch('http://127.0.0.1:4244/health').then(async r=>{const text=await r.text(); console.log(text); process.exit(r.ok?0:1)}).catch(e=>{console.error(e); process.exit(1)})\"",
|
||||
requireHealthCommit: true,
|
||||
requiredRuntimeSecrets: baiduNetdiskRuntimeSecretRequirements,
|
||||
authHealthGate: baiduNetdiskAuthHealthGate,
|
||||
},
|
||||
},
|
||||
prod: {
|
||||
targetImage: "baidu-netdisk",
|
||||
targetCommitImage: (commit: string) => `baidu-netdisk:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.baidu-netdisk",
|
||||
compose: {
|
||||
serviceName: "baidu-netdisk",
|
||||
containerName: "baidu-netdisk-backend",
|
||||
deployEnvPrefix: "UNIDESK_BAIDU_NETDISK_DEPLOY",
|
||||
healthProbeCommand: "bun -e \"fetch('http://127.0.0.1:4244/health').then(async r=>{const text=await r.text(); console.log(text); process.exit(r.ok?0:1)}).catch(e=>{console.error(e); process.exit(1)})\"",
|
||||
requireHealthCommit: true,
|
||||
requiredRuntimeSecrets: baiduNetdiskRuntimeSecretRequirements,
|
||||
authHealthGate: baiduNetdiskAuthHealthGate,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"code-queue-mgr": {
|
||||
serviceId: "code-queue-mgr",
|
||||
environment: "prod",
|
||||
kind: "compose",
|
||||
registryRepository: "unidesk/code-queue-mgr",
|
||||
dockerfile: "src/components/microservices/code-queue-mgr/Dockerfile",
|
||||
prodLiveApply: "supervisor-only",
|
||||
prodLiveBlockReason: "code-queue-mgr is the main-server Code Queue control-plane sidecar; live production apply requires explicit supervisor confirmation.",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "code-queue-mgr",
|
||||
targetCommitImage: (commit: string) => `code-queue-mgr:${commit}`,
|
||||
deployRef: "deploy.json#environments.dev.services.code-queue-mgr",
|
||||
compose: {
|
||||
serviceName: "code-queue-mgr",
|
||||
containerName: "code-queue-mgr-backend",
|
||||
deployEnvPrefix: "UNIDESK_CODE_QUEUE_MGR_DEPLOY",
|
||||
healthProbeCommand: "code-queue-mgr --print-health",
|
||||
requireHealthCommit: true,
|
||||
},
|
||||
},
|
||||
prod: {
|
||||
targetImage: "code-queue-mgr",
|
||||
targetCommitImage: (commit: string) => `code-queue-mgr:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.code-queue-mgr",
|
||||
compose: {
|
||||
serviceName: "code-queue-mgr",
|
||||
containerName: "code-queue-mgr-backend",
|
||||
deployEnvPrefix: "UNIDESK_CODE_QUEUE_MGR_DEPLOY",
|
||||
healthProbeCommand: "code-queue-mgr --print-health",
|
||||
requireHealthCommit: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"decision-center": {
|
||||
serviceId: "decision-center",
|
||||
environment: "prod",
|
||||
kind: "d601-k3s",
|
||||
registryRepository: "unidesk/decision-center",
|
||||
dockerfile: "src/components/microservices/decision-center/Dockerfile",
|
||||
prodLiveApply: "enabled",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "unidesk-decision-center:dev",
|
||||
targetCommitImage: (commit: string) => `unidesk-decision-center:${commit}`,
|
||||
deployRef: "deploy.json#environments.dev.services.decision-center",
|
||||
k3s: {
|
||||
namespace: "unidesk-dev",
|
||||
manifestRepoPath: "src/components/microservices/k3sctl-adapter/k3s/dev/unidesk-dev-decision-center.k8s.yaml",
|
||||
deploymentName: "decision-center-dev",
|
||||
serviceName: "decision-center-dev",
|
||||
servicePort: 4277,
|
||||
containerName: "decision-center",
|
||||
healthPath: "/health",
|
||||
podLabelSelector: "app.kubernetes.io/name=decision-center,unidesk.ai/environment=dev",
|
||||
},
|
||||
},
|
||||
prod: {
|
||||
targetImage: "unidesk-decision-center:d601",
|
||||
targetCommitImage: (commit: string) => `unidesk-decision-center:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.decision-center",
|
||||
k3s: {
|
||||
namespace: "unidesk",
|
||||
manifestRepoPath: "src/components/microservices/k3sctl-adapter/k3s/decision-center.k8s.yaml",
|
||||
deploymentName: "decision-center",
|
||||
serviceName: "decision-center",
|
||||
servicePort: 4277,
|
||||
containerName: "decision-center",
|
||||
healthPath: "/health",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"mdtodo": {
|
||||
serviceId: "mdtodo",
|
||||
environment: "prod",
|
||||
kind: "d601-k3s",
|
||||
registryRepository: "unidesk/mdtodo",
|
||||
dockerfile: "src/components/microservices/mdtodo/Dockerfile",
|
||||
prodLiveApply: "enabled",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "unidesk-mdtodo:dev",
|
||||
targetCommitImage: (commit: string) => `unidesk-mdtodo:${commit}`,
|
||||
deployRef: "deploy.json#environments.dev.services.mdtodo",
|
||||
k3s: {
|
||||
namespace: "unidesk-dev",
|
||||
manifestRepoPath: "src/components/microservices/k3sctl-adapter/k3s/dev/unidesk-dev-mdtodo.k8s.yaml",
|
||||
deploymentName: "mdtodo-dev",
|
||||
serviceName: "mdtodo-dev",
|
||||
servicePort: 4267,
|
||||
containerName: "mdtodo",
|
||||
healthPath: "/health",
|
||||
podLabelSelector: "app.kubernetes.io/name=mdtodo,unidesk.ai/environment=dev",
|
||||
},
|
||||
},
|
||||
prod: {
|
||||
targetImage: "unidesk-mdtodo:d601",
|
||||
targetCommitImage: (commit: string) => `unidesk-mdtodo:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.mdtodo",
|
||||
k3s: {
|
||||
namespace: "unidesk",
|
||||
manifestRepoPath: "src/components/microservices/k3sctl-adapter/k3s/mdtodo.k8s.yaml",
|
||||
deploymentName: "mdtodo",
|
||||
serviceName: "mdtodo",
|
||||
servicePort: 4267,
|
||||
containerName: "mdtodo",
|
||||
healthPath: "/health",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"claudeqq": {
|
||||
serviceId: "claudeqq",
|
||||
environment: "prod",
|
||||
kind: "d601-k3s",
|
||||
registryRepository: "unidesk/claudeqq",
|
||||
dockerfile: "claudeqq/Dockerfile",
|
||||
sourceRepo: "https://gitee.com/lyon1998/agent_skills",
|
||||
prodLiveApply: "enabled",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "unidesk-claudeqq:dev",
|
||||
targetCommitImage: (commit: string) => `unidesk-claudeqq:${commit}`,
|
||||
deployRef: "deploy.json#environments.dev.services.claudeqq",
|
||||
k3s: {
|
||||
namespace: "unidesk-dev",
|
||||
manifestRepoPath: "src/components/microservices/k3sctl-adapter/k3s/dev/unidesk-dev-claudeqq.k8s.yaml",
|
||||
deploymentName: "claudeqq-dev",
|
||||
serviceName: "claudeqq-dev",
|
||||
servicePort: 3290,
|
||||
containerName: "claudeqq",
|
||||
healthPath: "/health",
|
||||
podLabelSelector: "app.kubernetes.io/name=claudeqq,unidesk.ai/environment=dev",
|
||||
},
|
||||
},
|
||||
prod: {
|
||||
targetImage: "unidesk-claudeqq:d601",
|
||||
targetCommitImage: (commit: string) => `unidesk-claudeqq:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.claudeqq",
|
||||
k3s: {
|
||||
namespace: "unidesk",
|
||||
manifestRepoPath: "src/components/microservices/k3sctl-adapter/k3s/claudeqq.k8s.yaml",
|
||||
deploymentName: "claudeqq",
|
||||
serviceName: "claudeqq",
|
||||
servicePort: 3290,
|
||||
containerName: "claudeqq",
|
||||
healthPath: "/health",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"code-queue": {
|
||||
serviceId: "code-queue",
|
||||
environment: "dev",
|
||||
kind: "d601-k3s",
|
||||
registryRepository: "unidesk/code-queue",
|
||||
dockerfile: "src/components/microservices/code-queue/Dockerfile",
|
||||
prodLiveApply: "unsupported",
|
||||
prodLiveBlockReason: "code-queue is dev-only for artifact consumer validation and has no production artifact deploy, production rollout, or production manifest mutation target.",
|
||||
devLiveApply: "supervisor-only",
|
||||
devLiveBlockReason: "Code Queue DEV live apply is self-bootstrap sensitive: a running Code Queue task may plan only dry-run evidence. A human operator or supervisor must explicitly authorize DEV apply outside Code Queue after reviewing the CI artifact digest and dry-run target list.",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "unidesk-code-queue:dev",
|
||||
targetCommitImage: (commit: string) => `unidesk-code-queue:${commit}`,
|
||||
deployRef: "deploy.json#environments.dev.services.code-queue",
|
||||
k3s: {
|
||||
namespace: "unidesk-dev",
|
||||
manifestRepoPath: "src/components/microservices/k3sctl-adapter/k3s/dev/unidesk-dev-code-queue.k8s.yaml",
|
||||
deploymentName: "code-queue-scheduler-dev",
|
||||
extraDeployments: [
|
||||
{ name: "d601-dev-provider-egress-proxy", containerName: "provider-egress-proxy" },
|
||||
"code-queue-read-dev",
|
||||
"code-queue-write-dev",
|
||||
],
|
||||
serviceName: "code-queue-scheduler-dev",
|
||||
servicePort: 4222,
|
||||
containerName: "code-queue",
|
||||
healthPath: "/health",
|
||||
podLabelSelector: "app.kubernetes.io/name=code-queue,app.kubernetes.io/component=scheduler,unidesk.ai/environment=dev",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"frontend": {
|
||||
serviceId: "frontend",
|
||||
environment: "prod",
|
||||
kind: "compose",
|
||||
registryRepository: "unidesk/frontend",
|
||||
dockerfile: "src/components/frontend/Dockerfile",
|
||||
prodLiveApply: "enabled",
|
||||
targets: {
|
||||
prod: {
|
||||
targetImage: "unidesk-frontend",
|
||||
targetCommitImage: (commit: string) => `unidesk-frontend:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.frontend",
|
||||
compose: {
|
||||
serviceName: "frontend",
|
||||
containerName: "unidesk-frontend",
|
||||
deployEnvPrefix: "UNIDESK_FRONTEND_DEPLOY",
|
||||
healthProbeCommand: "bun -e \"fetch('http://127.0.0.1:8080/health').then(async r=>{const text=await r.text(); console.log(text); process.exit(r.ok?0:1)}).catch(e=>{console.error(e); process.exit(1)})\"",
|
||||
requireHealthCommit: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"findjob": {
|
||||
serviceId: "findjob",
|
||||
environment: "prod",
|
||||
kind: "d601-compose",
|
||||
sourceRepo: "https://gitee.com/Lyon1998/findjob",
|
||||
registryRepository: "unidesk/findjob",
|
||||
dockerfile: "Dockerfile",
|
||||
prodLiveApply: "enabled",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "findjob-server",
|
||||
targetCommitImage: (commit: string) => `findjob-server:${commit}`,
|
||||
deployRef: "deploy.json#environments.dev.services.findjob",
|
||||
compose: {
|
||||
serviceName: "server",
|
||||
containerName: "findjob-server",
|
||||
deployEnvPrefix: "UNIDESK_FINDJOB_DEPLOY",
|
||||
workDir: "/home/ubuntu/findjob",
|
||||
composeFile: "docker-compose.yml",
|
||||
projectHint: "findjob",
|
||||
healthProbeCommand: "curl -fsS --max-time 12 http://127.0.0.1:3254/api/health",
|
||||
requireHealthCommit: false,
|
||||
},
|
||||
},
|
||||
prod: {
|
||||
targetImage: "findjob-server",
|
||||
targetCommitImage: (commit: string) => `findjob-server:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.findjob",
|
||||
compose: {
|
||||
serviceName: "server",
|
||||
containerName: "findjob-server",
|
||||
deployEnvPrefix: "UNIDESK_FINDJOB_DEPLOY",
|
||||
workDir: "/home/ubuntu/findjob",
|
||||
composeFile: "docker-compose.yml",
|
||||
projectHint: "findjob",
|
||||
healthProbeCommand: "curl -fsS --max-time 12 http://127.0.0.1:3254/api/health",
|
||||
requireHealthCommit: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"k3sctl-adapter": {
|
||||
serviceId: "k3sctl-adapter",
|
||||
environment: "prod",
|
||||
kind: "d601-compose",
|
||||
registryRepository: "unidesk/k3sctl-adapter",
|
||||
dockerfile: "src/components/microservices/k3sctl-adapter/Dockerfile",
|
||||
prodLiveApply: "supervisor-only",
|
||||
prodLiveBlockReason: "k3sctl-adapter is an infrastructure control bridge; this executor exposes artifact consumer plan/dry-run only. Real production deployment requires supervisor confirmation outside this task.",
|
||||
targets: {
|
||||
prod: {
|
||||
targetImage: "unidesk-k3sctl-adapter:d601",
|
||||
targetCommitImage: (commit: string) => `unidesk-k3sctl-adapter:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.k3sctl-adapter",
|
||||
compose: {
|
||||
serviceName: "k3sctl-adapter",
|
||||
containerName: "k3sctl-adapter",
|
||||
deployEnvPrefix: "UNIDESK_K3SCTL_ADAPTER_DEPLOY",
|
||||
workDir: "/home/ubuntu/cq-deploy",
|
||||
composeFile: "src/components/microservices/k3sctl-adapter/docker-compose.d601.yml",
|
||||
projectHint: "k3sctl-adapter",
|
||||
healthProbeCommand: "curl -fsS --max-time 10 http://127.0.0.1:4266/health",
|
||||
requireHealthCommit: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"met-nonlinear": {
|
||||
serviceId: "met-nonlinear",
|
||||
environment: "prod",
|
||||
kind: "d601-compose",
|
||||
sourceRepo: "https://github.com/pikasTech/met_nonlinear",
|
||||
registryRepository: "unidesk/met-nonlinear",
|
||||
dockerfile: "docker/unidesk/Dockerfile.ml",
|
||||
prodLiveApply: "unsupported",
|
||||
prodLiveBlockReason: "met-nonlinear is blocked for live artifact deploy because config.json points at docker/unidesk/Dockerfile.ml while the compose service is met-nonlinear-ts. The current compose contract does not let CD prove that the recreated long-running container image label equals the requested commit.",
|
||||
runtimeVerification: "blocked",
|
||||
runtimeVerificationBlockReason: "D601 direct artifact consumer is implemented, but this service's registered Dockerfile is the ML image contract while the long-running Compose service is met-nonlinear-ts. Publish a labeled artifact that matches the running service image contract before live deploy, or update the service contract to a server Dockerfile.",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "met-nonlinear-ml:tf26",
|
||||
targetCommitImage: (commit: string) => `met-nonlinear-ml:${commit}`,
|
||||
deployRef: "deploy.json#environments.dev.services.met-nonlinear",
|
||||
compose: {
|
||||
serviceName: "met-nonlinear-ts",
|
||||
containerName: "met-nonlinear-ts",
|
||||
deployEnvPrefix: "UNIDESK_MET_NONLINEAR_DEPLOY",
|
||||
workDir: "/home/ubuntu/met_nonlinear",
|
||||
composeFile: "docker-compose.unidesk.yml",
|
||||
projectHint: "met-nonlinear",
|
||||
healthProbeCommand: "curl -fsS --max-time 20 http://127.0.0.1:3288/health",
|
||||
requireHealthCommit: false,
|
||||
},
|
||||
},
|
||||
prod: {
|
||||
targetImage: "met-nonlinear-ml:tf26",
|
||||
targetCommitImage: (commit: string) => `met-nonlinear-ml:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.met-nonlinear",
|
||||
compose: {
|
||||
serviceName: "met-nonlinear-ts",
|
||||
containerName: "met-nonlinear-ts",
|
||||
deployEnvPrefix: "UNIDESK_MET_NONLINEAR_DEPLOY",
|
||||
workDir: "/home/ubuntu/met_nonlinear",
|
||||
composeFile: "docker-compose.unidesk.yml",
|
||||
projectHint: "met-nonlinear",
|
||||
healthProbeCommand: "curl -fsS --max-time 20 http://127.0.0.1:3288/health",
|
||||
requireHealthCommit: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"oa-event-flow": {
|
||||
serviceId: "oa-event-flow",
|
||||
environment: "prod",
|
||||
kind: "compose",
|
||||
registryRepository: "unidesk/oa-event-flow",
|
||||
dockerfile: "src/components/microservices/oa-event-flow/Dockerfile",
|
||||
prodLiveApply: "enabled",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "oa-event-flow",
|
||||
targetCommitImage: (commit: string) => `oa-event-flow:${commit}`,
|
||||
deployRef: "deploy.json#environments.dev.services.oa-event-flow",
|
||||
compose: {
|
||||
serviceName: "oa-event-flow",
|
||||
containerName: "oa-event-flow-backend",
|
||||
deployEnvPrefix: "UNIDESK_OA_EVENT_FLOW_DEPLOY",
|
||||
healthProbeCommand: "bun -e \"fetch('http://127.0.0.1:4255/health').then(async r=>{const text=await r.text(); console.log(text); process.exit(r.ok?0:1)}).catch(e=>{console.error(e); process.exit(1)})\"",
|
||||
requireHealthCommit: true,
|
||||
},
|
||||
},
|
||||
prod: {
|
||||
targetImage: "oa-event-flow",
|
||||
targetCommitImage: (commit: string) => `oa-event-flow:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.oa-event-flow",
|
||||
compose: {
|
||||
serviceName: "oa-event-flow",
|
||||
containerName: "oa-event-flow-backend",
|
||||
deployEnvPrefix: "UNIDESK_OA_EVENT_FLOW_DEPLOY",
|
||||
healthProbeCommand: "bun -e \"fetch('http://127.0.0.1:4255/health').then(async r=>{const text=await r.text(); console.log(text); process.exit(r.ok?0:1)}).catch(e=>{console.error(e); process.exit(1)})\"",
|
||||
requireHealthCommit: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"project-manager": {
|
||||
serviceId: "project-manager",
|
||||
environment: "prod",
|
||||
kind: "compose",
|
||||
registryRepository: "unidesk/project-manager",
|
||||
dockerfile: "src/components/microservices/project-manager/Dockerfile",
|
||||
prodLiveApply: "enabled",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "project-manager",
|
||||
targetCommitImage: (commit: string) => `project-manager:${commit}`,
|
||||
deployRef: "deploy.json#environments.dev.services.project-manager",
|
||||
compose: {
|
||||
serviceName: "project-manager",
|
||||
containerName: "project-manager-backend",
|
||||
deployEnvPrefix: "UNIDESK_PROJECT_MANAGER_DEPLOY",
|
||||
healthProbeCommand: "bun -e \"fetch('http://127.0.0.1:4233/health').then(async r=>{const text=await r.text(); console.log(text); process.exit(r.ok?0:1)}).catch(e=>{console.error(e); process.exit(1)})\"",
|
||||
requireHealthCommit: true,
|
||||
},
|
||||
},
|
||||
prod: {
|
||||
targetImage: "project-manager",
|
||||
targetCommitImage: (commit: string) => `project-manager:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.project-manager",
|
||||
compose: {
|
||||
serviceName: "project-manager",
|
||||
containerName: "project-manager-backend",
|
||||
deployEnvPrefix: "UNIDESK_PROJECT_MANAGER_DEPLOY",
|
||||
healthProbeCommand: "bun -e \"fetch('http://127.0.0.1:4233/health').then(async r=>{const text=await r.text(); console.log(text); process.exit(r.ok?0:1)}).catch(e=>{console.error(e); process.exit(1)})\"",
|
||||
requireHealthCommit: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"pipeline": {
|
||||
serviceId: "pipeline",
|
||||
environment: "prod",
|
||||
kind: "d601-compose",
|
||||
sourceRepo: "https://github.com/pikasTech/pipeline",
|
||||
registryRepository: "unidesk/pipeline",
|
||||
dockerfile: "Dockerfile",
|
||||
prodLiveApply: "enabled",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "pipeline-v2-control",
|
||||
targetCommitImage: (commit: string) => `pipeline-v2-control:${commit}`,
|
||||
deployRef: "deploy.json#environments.dev.services.pipeline",
|
||||
compose: {
|
||||
serviceName: "pipeline-control",
|
||||
containerName: "pipeline-v2-control",
|
||||
deployEnvPrefix: "UNIDESK_PIPELINE_DEPLOY",
|
||||
workDir: "/home/ubuntu/pipeline",
|
||||
composeFile: "docker-compose.yml",
|
||||
projectHint: "pipeline",
|
||||
healthProbeCommand: "curl -fsS --max-time 20 http://127.0.0.1:18082/health",
|
||||
requireHealthCommit: false,
|
||||
},
|
||||
},
|
||||
prod: {
|
||||
targetImage: "pipeline-v2-control",
|
||||
targetCommitImage: (commit: string) => `pipeline-v2-control:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.pipeline",
|
||||
compose: {
|
||||
serviceName: "pipeline-control",
|
||||
containerName: "pipeline-v2-control",
|
||||
deployEnvPrefix: "UNIDESK_PIPELINE_DEPLOY",
|
||||
workDir: "/home/ubuntu/pipeline",
|
||||
composeFile: "docker-compose.yml",
|
||||
projectHint: "pipeline",
|
||||
healthProbeCommand: "curl -fsS --max-time 20 http://127.0.0.1:18082/health",
|
||||
requireHealthCommit: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"todo-note": {
|
||||
serviceId: "todo-note",
|
||||
environment: "prod",
|
||||
kind: "compose",
|
||||
registryRepository: "unidesk/todo-note",
|
||||
sourceRepo: "https://gitee.com/Lyon1998/todo_note",
|
||||
dockerfile: "Dockerfile",
|
||||
prodLiveApply: "enabled",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "todo-note",
|
||||
targetCommitImage: (commit: string) => `todo-note:${commit}`,
|
||||
deployRef: "deploy.json#environments.dev.services.todo-note",
|
||||
compose: {
|
||||
serviceName: "todo-note",
|
||||
containerName: "todo-note-backend",
|
||||
deployEnvPrefix: "UNIDESK_TODO_NOTE_DEPLOY",
|
||||
healthProbeCommand: todoNoteHealthProbeCommand(),
|
||||
requireHealthCommit: true,
|
||||
syntheticHealthDeployProof: todoNoteSyntheticHealthDeployProof,
|
||||
},
|
||||
},
|
||||
prod: {
|
||||
targetImage: "todo-note",
|
||||
targetCommitImage: (commit: string) => `todo-note:${commit}`,
|
||||
deployRef: "deploy.json#environments.prod.services.todo-note",
|
||||
compose: {
|
||||
serviceName: "todo-note",
|
||||
containerName: "todo-note-backend",
|
||||
deployEnvPrefix: "UNIDESK_TODO_NOTE_DEPLOY",
|
||||
healthProbeCommand: todoNoteHealthProbeCommand(),
|
||||
requireHealthCommit: true,
|
||||
syntheticHealthDeployProof: todoNoteSyntheticHealthDeployProof,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
"dev:frontend": {
|
||||
serviceId: "frontend",
|
||||
environment: "dev",
|
||||
kind: "d601-k3s",
|
||||
registryRepository: "unidesk/frontend",
|
||||
dockerfile: "src/components/frontend/Dockerfile",
|
||||
prodLiveApply: "enabled",
|
||||
targets: {
|
||||
dev: {
|
||||
targetImage: "unidesk-frontend:dev",
|
||||
targetCommitImage: (commit: string) => `unidesk-frontend:${commit}`,
|
||||
deployRef: "origin/master:deploy.json#environments.dev.services.frontend",
|
||||
k3s: {
|
||||
namespace: "unidesk-dev",
|
||||
manifestRepoPath: "src/components/microservices/k3sctl-adapter/k3s/dev/unidesk-dev-core.k8s.yaml",
|
||||
deploymentName: "frontend-dev",
|
||||
serviceName: "frontend-dev",
|
||||
servicePort: 8080,
|
||||
containerName: "frontend",
|
||||
healthPath: "/health",
|
||||
applySelector: "app.kubernetes.io/name=frontend",
|
||||
podLabelSelector: "app.kubernetes.io/name=frontend,app.kubernetes.io/component=web,unidesk.ai/environment=dev",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user