48 lines
1.8 KiB
JavaScript
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,
|
|
}));
|