133 lines
4.9 KiB
TypeScript
133 lines
4.9 KiB
TypeScript
// SPEC: PJ2026-01060307 控制面模块化 draft-2026-06-25-p0. pipelinerun module for scripts/src/ci.ts.
|
|
|
|
// Moved mechanically from scripts/src/ci.ts:1560-1667 for #903.
|
|
|
|
import { randomUUID } from "node:crypto";
|
|
import { existsSync, mkdtempSync, readFileSync, rmSync } from "node:fs";
|
|
import { tmpdir } from "node:os";
|
|
import { join, posix as posixPath } from "node:path";
|
|
import { blockedCatalogArtifactIds, catalogSummary, findCiCatalogArtifact, loadCiCatalog, supportedSourceBuildArtifactIds, type CiCatalogArtifact, type CiSourceBuildCatalogArtifact, type CiUpstreamImageCatalogArtifact } from "../ci-catalog";
|
|
import { runCommand } from "../command";
|
|
import { type UniDeskConfig, repoRoot, rootPath } from "../config";
|
|
import { ensureGithubSshIdentityForProvider, gitSshHttpConnectProxySource } from "../deploy-ssh-identity";
|
|
import { jobWithTail, listJobs, readJob, startJob } from "../jobs";
|
|
import { coreInternalFetch } from "../microservices";
|
|
import {
|
|
artifactRegistryReadonlyResultFromCommand,
|
|
buildArtifactRegistryReadonlyProbe,
|
|
parseArtifactRegistryOptions,
|
|
type ArtifactRegistryReadonlyProbe,
|
|
} from "../artifact-registry";
|
|
import { d601K3sGuardShellLines, d601NativeKubeconfig } from "../d601-k3s-guard";
|
|
import { runSshCommandCapture } from "../ssh";
|
|
|
|
import type { CiOptions, CiPublishBackendCoreOptions, CiPublishUserServiceArtifactOptions } from "./types";
|
|
|
|
export function pipelineRunManifest(options: CiOptions): string {
|
|
const safeSuffix = new Date().toISOString().replace(/[-:.TZ]/g, "").slice(0, 14).toLowerCase();
|
|
return `apiVersion: tekton.dev/v1
|
|
kind: PipelineRun
|
|
metadata:
|
|
generateName: unidesk-ci-${safeSuffix}-
|
|
namespace: unidesk-ci
|
|
labels:
|
|
app.kubernetes.io/name: unidesk-ci
|
|
app.kubernetes.io/part-of: unidesk
|
|
unidesk.ai/revision: ${JSON.stringify(options.revision)}
|
|
spec:
|
|
pipelineRef:
|
|
name: unidesk-ci
|
|
taskRunTemplate:
|
|
serviceAccountName: unidesk-ci-runner
|
|
params:
|
|
- name: repo-url
|
|
value: ${JSON.stringify(options.repoUrl)}
|
|
- name: revision
|
|
value: ${JSON.stringify(options.revision)}
|
|
workspaces:
|
|
- name: shared-workspace
|
|
persistentVolumeClaim:
|
|
claimName: unidesk-ci-cache
|
|
`;
|
|
}
|
|
|
|
export function backendCoreArtifactPipelineRunManifest(options: CiPublishBackendCoreOptions): string {
|
|
const safeSuffix = new Date().toISOString().replace(/[-:.TZ]/g, "").slice(0, 14).toLowerCase();
|
|
return `apiVersion: tekton.dev/v1
|
|
kind: PipelineRun
|
|
metadata:
|
|
generateName: backend-core-artifact-${safeSuffix}-
|
|
namespace: unidesk-ci
|
|
labels:
|
|
app.kubernetes.io/name: unidesk-backend-core-artifact-publish
|
|
app.kubernetes.io/part-of: unidesk
|
|
unidesk.ai/service-id: backend-core
|
|
unidesk.ai/revision: ${JSON.stringify(options.commit)}
|
|
spec:
|
|
pipelineRef:
|
|
name: unidesk-backend-core-artifact-publish
|
|
taskRunTemplate:
|
|
serviceAccountName: unidesk-ci-runner
|
|
params:
|
|
- name: repo-url
|
|
value: ${JSON.stringify(options.repoUrl)}
|
|
- name: revision
|
|
value: ${JSON.stringify(options.commit)}
|
|
- name: dockerfile
|
|
value: ${JSON.stringify(options.dockerfile)}
|
|
- name: image-repository
|
|
value: ${JSON.stringify(options.imageRepository)}
|
|
- name: source-host-path
|
|
value: ${JSON.stringify(options.sourceHostPath)}
|
|
workspaces:
|
|
- name: shared-workspace
|
|
persistentVolumeClaim:
|
|
claimName: unidesk-ci-cache
|
|
`;
|
|
}
|
|
|
|
export function userServiceArtifactPipelineRunManifest(options: CiPublishUserServiceArtifactOptions): string {
|
|
const safeSuffix = new Date().toISOString().replace(/[-:.TZ]/g, "").slice(0, 14).toLowerCase();
|
|
return `apiVersion: tekton.dev/v1
|
|
kind: PipelineRun
|
|
metadata:
|
|
generateName: user-service-artifact-${options.serviceId}-${safeSuffix}-
|
|
namespace: unidesk-ci
|
|
labels:
|
|
app.kubernetes.io/name: unidesk-user-service-artifact-publish
|
|
app.kubernetes.io/part-of: unidesk
|
|
unidesk.ai/service-id: ${JSON.stringify(options.serviceId)}
|
|
unidesk.ai/revision: ${JSON.stringify(options.commit)}
|
|
spec:
|
|
pipelineRef:
|
|
name: unidesk-user-service-artifact-publish
|
|
taskRunTemplate:
|
|
serviceAccountName: unidesk-ci-runner
|
|
params:
|
|
- name: repo-url
|
|
value: ${JSON.stringify(options.repoUrl)}
|
|
- name: revision
|
|
value: ${JSON.stringify(options.commit)}
|
|
- name: service-id
|
|
value: ${JSON.stringify(options.serviceId)}
|
|
- name: dockerfile
|
|
value: ${JSON.stringify(options.dockerfile)}
|
|
- name: image-repository
|
|
value: ${JSON.stringify(options.imageRepository)}
|
|
- name: source-host-path
|
|
value: ${JSON.stringify(options.sourceHostPath)}
|
|
workspaces:
|
|
- name: shared-workspace
|
|
persistentVolumeClaim:
|
|
claimName: unidesk-ci-cache
|
|
`;
|
|
}
|
|
|
|
export function backendCoreArtifactSourceHostPath(commit: string): string {
|
|
return `/home/ubuntu/.unidesk/ci/backend-core-artifacts/${commit}`;
|
|
}
|
|
|
|
export function userServiceArtifactSourceHostPath(serviceId: string, commit: string): string {
|
|
return `/home/ubuntu/.unidesk/ci/user-service-artifacts/${serviceId}/${commit}`;
|
|
}
|