Files
pikasTech-unidesk/scripts/native/cicd/compact-git-mirror.mjs
T
2026-07-03 11:00:11 +00:00

48 lines
1.8 KiB
JavaScript

import { execFileSync } from "node:child_process";
const repoPath = process.env.REPO_PATH || "";
const repository = process.env.REPOSITORY || "";
const sourceBranch = process.env.SOURCE_BRANCH || "";
const snapshotPrefix = (process.env.SNAPSHOT_PREFIX || "").replace(/\/+$/u, "");
const gitopsBranch = process.env.GITOPS_BRANCH || "";
function rev(ref) {
if (!ref) return null;
try {
const out = execFileSync("git", [`--git-dir=${repoPath}`, "rev-parse", "--verify", `${ref}^{commit}`], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
return /^[0-9a-f]{40}$/iu.test(out) ? out : null;
} catch {
return null;
}
}
const localSource = rev(`refs/heads/${sourceBranch}`);
const githubSource = rev(`refs/mirror-stage/heads/${sourceBranch}`);
const snapshotSource = githubSource || localSource;
const sourceStageRef = snapshotSource ? `${snapshotPrefix}/${snapshotSource}` : null;
const sourceSnapshot = sourceStageRef === null ? null : rev(sourceStageRef);
const localGitops = gitopsBranch ? rev(`refs/heads/${gitopsBranch}`) : null;
const githubGitops = gitopsBranch ? rev(`refs/mirror-stage/heads/${gitopsBranch}`) : null;
const pendingFlush = gitopsBranch ? Boolean(localGitops && localGitops !== githubGitops) : null;
const githubInSync = gitopsBranch ? Boolean(!localGitops || localGitops === githubGitops) : null;
const sourceSnapshotReady = snapshotSource ? sourceSnapshot === snapshotSource : false;
process.stdout.write(JSON.stringify({
ok: Boolean(localSource) && sourceSnapshotReady && pendingFlush !== true,
repository,
repoPath,
sourceBranch,
gitopsBranch: gitopsBranch || null,
localSource,
githubSource,
sourceStageRef,
sourceSnapshot,
sourceSnapshotReady,
localGitops,
githubGitops,
pendingFlush,
githubInSync,
statusAuthority: "k8s-git-mirror-cache",
valuesRedacted: true,
}));