From 792e307d991f5ed172685ff26218e46ccc80c8bb Mon Sep 17 00:00:00 2001 From: Codex Date: Thu, 28 May 2026 18:00:23 +0800 Subject: [PATCH] fix: remove v02 control-plane fallbacks --- scripts/g14-gitops-render.mjs | 87 +++++++++++++++++++++-------------- 1 file changed, 53 insertions(+), 34 deletions(-) diff --git a/scripts/g14-gitops-render.mjs b/scripts/g14-gitops-render.mjs index dc014521..b16e34df 100644 --- a/scripts/g14-gitops-render.mjs +++ b/scripts/g14-gitops-render.mjs @@ -1257,26 +1257,32 @@ workdir="$(mktemp -d)" git clone --depth 1 --branch "$SOURCE_BRANCH" "$GIT_URL" "$workdir/repo" cd "$workdir/repo" revision="$(git rev-parse HEAD)" -LANE="\${LANE:-g14}" -CATALOG_PATH="\${CATALOG_PATH:-deploy/artifact-catalog.dev.json}" -IMAGE_TAG_MODE="\${IMAGE_TAG_MODE:-short}" +: "\${LANE:?LANE is required}" +: "\${CATALOG_PATH:?CATALOG_PATH is required}" +: "\${IMAGE_TAG_MODE:?IMAGE_TAG_MODE is required}" node scripts/g14-gitops-render.mjs --lane "$LANE" --catalog-path "$CATALOG_PATH" --image-tag-mode "$IMAGE_TAG_MODE" --source-revision "$revision" --source-repo "$GIT_URL" --source-branch "$SOURCE_BRANCH" --gitops-branch "$GITOPS_BRANCH" --registry-prefix "$REGISTRY_PREFIX" node scripts/g14-gitops-render.mjs --lane "$LANE" --catalog-path "$CATALOG_PATH" --image-tag-mode "$IMAGE_TAG_MODE" --source-revision "$revision" --source-repo "$GIT_URL" --source-branch "$SOURCE_BRANCH" --gitops-branch "$GITOPS_BRANCH" --registry-prefix "$REGISTRY_PREFIX" --check node <<'NODE' const fs = require("node:fs"); const https = require("node:https"); -const namespace = process.env.POD_NAMESPACE || "hwlab-ci"; +function requiredEnv(name) { + const value = process.env[name]; + if (!value) throw new Error(name + " is required"); + return value; +} + +const namespace = requiredEnv("POD_NAMESPACE"); const host = process.env.KUBERNETES_SERVICE_HOST; const port = process.env.KUBERNETES_SERVICE_PORT || "443"; if (!host) throw new Error("KUBERNETES_SERVICE_HOST is not available"); const token = fs.readFileSync("/var/run/secrets/kubernetes.io/serviceaccount/token", "utf8"); const ca = fs.readFileSync("/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"); -const tektonDir = process.env.TEKTON_DIR || "tekton"; +const tektonDir = requiredEnv("TEKTON_DIR"); const argoFiles = String(process.env.ARGO_FILES || "").split(",").map((item) => item.trim()).filter(Boolean); -const fieldManager = process.env.FIELD_MANAGER || "hwlab-g14-control-plane-reconciler"; -const eventName = process.env.RECONCILE_EVENT || "g14-control-plane-reconciled"; +const fieldManager = requiredEnv("FIELD_MANAGER"); +const eventName = requiredEnv("RECONCILE_EVENT"); const manifestFiles = [ "deploy/gitops/g14/" + tektonDir + "/rbac.yaml", "deploy/gitops/g14/" + tektonDir + "/pipeline.yaml", @@ -1384,26 +1390,33 @@ case "$subject" in ;; esac short="$(printf '%.12s' "$revision")" -prefix="\${PIPELINERUN_PREFIX:-hwlab-g14-ci-poll}" +: "\${PIPELINERUN_PREFIX:?PIPELINERUN_PREFIX is required}" +: "\${GITOPS_TARGET:?GITOPS_TARGET is required}" +prefix="$PIPELINERUN_PREFIX" name="$prefix-$short" export POLLER_REVISION="$revision" export POLLER_PIPELINERUN="$name" export POLLER_SOURCE_SUBJECT="$subject" -echo "Checking \${GITOPS_TARGET:-g14} source $revision with PipelineRun $name" +echo "Checking $GITOPS_TARGET source $revision with PipelineRun $name" node <<'NODE' const fs = require("node:fs"); const https = require("node:https"); -function env(name, fallback) { - return process.env[name] || fallback; +function requiredEnv(name) { + const value = process.env[name]; + if (!value) throw new Error(name + " is required"); + return value; } -const namespace = env("POD_NAMESPACE", "hwlab-ci"); -const name = env("POLLER_PIPELINERUN", ""); -const revision = env("POLLER_REVISION", ""); +function optionalEnv(name) { + return process.env[name] || ""; +} + +const namespace = requiredEnv("POD_NAMESPACE"); +const name = requiredEnv("POLLER_PIPELINERUN"); +const revision = requiredEnv("POLLER_REVISION"); const host = process.env.KUBERNETES_SERVICE_HOST; const port = process.env.KUBERNETES_SERVICE_PORT || "443"; -if (!name || !revision) throw new Error("poller did not resolve a PipelineRun name and revision"); if (!host) throw new Error("KUBERNETES_SERVICE_HOST is not available"); const token = fs.readFileSync("/var/run/secrets/kubernetes.io/serviceaccount/token", "utf8"); @@ -1431,7 +1444,7 @@ function request(method, path, body) { const labels = { "app.kubernetes.io/part-of": "hwlab", - "hwlab.pikastech.local/gitops-target": env("GITOPS_TARGET", "g14"), + "hwlab.pikastech.local/gitops-target": requiredEnv("GITOPS_TARGET"), "hwlab.pikastech.local/source-commit": revision, "hwlab.pikastech.local/trigger": "polling" }; @@ -1444,29 +1457,29 @@ const pipelineRun = { namespace, labels, annotations: { - "hwlab.pikastech.local/source-subject": env("POLLER_SOURCE_SUBJECT", ""), - "hwlab.pikastech.local/source-branch": env("SOURCE_BRANCH", "G14"), - "hwlab.pikastech.local/gitops-branch": env("GITOPS_BRANCH", "G14-gitops") + "hwlab.pikastech.local/source-subject": optionalEnv("POLLER_SOURCE_SUBJECT"), + "hwlab.pikastech.local/source-branch": requiredEnv("SOURCE_BRANCH"), + "hwlab.pikastech.local/gitops-branch": requiredEnv("GITOPS_BRANCH") } }, spec: { - pipelineRef: { name: env("PIPELINE_NAME", "hwlab-g14-ci-image-publish") }, + pipelineRef: { name: requiredEnv("PIPELINE_NAME") }, taskRunTemplate: { - serviceAccountName: env("SERVICE_ACCOUNT_NAME", "hwlab-tekton-runner"), + serviceAccountName: requiredEnv("SERVICE_ACCOUNT_NAME"), podTemplate: { hostNetwork: true, dnsPolicy: "ClusterFirstWithHostNet", securityContext: { fsGroup: 1000 } } }, params: [ - { name: "git-url", value: env("GIT_URL", "git@github.com:pikasTech/HWLAB.git") }, - { name: "source-branch", value: env("SOURCE_BRANCH", "G14") }, - { name: "gitops-branch", value: env("GITOPS_BRANCH", "G14-gitops") }, - { name: "lane", value: env("LANE", "g14") }, - { name: "catalog-path", value: env("CATALOG_PATH", "deploy/artifact-catalog.dev.json") }, - { name: "image-tag-mode", value: env("IMAGE_TAG_MODE", "short") }, - { name: "runtime-path", value: env("RUNTIME_PATH", "deploy/gitops/g14/runtime-dev") }, + { name: "git-url", value: requiredEnv("GIT_URL") }, + { name: "source-branch", value: requiredEnv("SOURCE_BRANCH") }, + { name: "gitops-branch", value: requiredEnv("GITOPS_BRANCH") }, + { name: "lane", value: requiredEnv("LANE") }, + { name: "catalog-path", value: requiredEnv("CATALOG_PATH") }, + { name: "image-tag-mode", value: requiredEnv("IMAGE_TAG_MODE") }, + { name: "runtime-path", value: requiredEnv("RUNTIME_PATH") }, { name: "revision", value: revision }, - { name: "registry-prefix", value: env("REGISTRY_PREFIX", "127.0.0.1:5000/hwlab") }, - { name: "services", value: env("SERVICES", "${defaultServicesParam}") }, - { name: "base-image", value: env("BASE_IMAGE", "${defaultDevBaseImage}") } + { name: "registry-prefix", value: requiredEnv("REGISTRY_PREFIX") }, + { name: "services", value: requiredEnv("SERVICES") }, + { name: "base-image", value: requiredEnv("BASE_IMAGE") } ], workspaces: [ { name: "source", volumeClaimTemplate: { spec: { accessModes: ["ReadWriteOnce"], resources: { requests: { storage: "8Gi" } } } } }, @@ -1870,9 +1883,15 @@ const https = require("node:https"); const host = process.env.KUBERNETES_SERVICE_HOST; const port = process.env.KUBERNETES_SERVICE_PORT || "443"; -const revision = process.env.HWLAB_SOURCE_REVISION || ""; -const runtimeNamespace = process.env.HWLAB_RUNTIME_NAMESPACE || "hwlab-dev"; -const gitopsTarget = process.env.HWLAB_GITOPS_TARGET || "g14"; +function requiredEnv(name) { + const value = process.env[name]; + if (!value) throw new Error(name + " is required"); + return value; +} + +const revision = requiredEnv("HWLAB_SOURCE_REVISION"); +const runtimeNamespace = requiredEnv("HWLAB_RUNTIME_NAMESPACE"); +const gitopsTarget = requiredEnv("HWLAB_GITOPS_TARGET"); const pipelineRun = process.env.HWLAB_TEKTON_PIPELINERUN || null; const taskRun = process.env.HWLAB_TEKTON_TASKRUN || null; const task = process.env.HWLAB_TEKTON_TASK || null;