UNPKG

@lodestar/prover

Version:

A Typescript implementation of the Ethereum Consensus light client

71 lines (63 loc) 2 kB
import {execSync} from "node:child_process"; // This file is created in the build step and is distributed through NPM // MUST be in sync with `-/gitDataPath.ts` and `package.json` files. import {GitData, readGitDataFile} from "./gitDataPath.js"; /** Reads git data from a persisted file or local git data at build time. */ export function readAndGetGitData(): GitData { try { // Gets git data containing current branch and commit info from persistent file. let persistedGitData: Partial<GitData>; try { persistedGitData = readGitDataFile(); } catch (_e) { persistedGitData = {}; } const currentGitData = getGitData(); return { // If the CLI is run from source, prioritze current git data // over `.git-data.json` file, which might be stale here. branch: currentGitData.branch && currentGitData.branch.length > 0 ? currentGitData.branch : (persistedGitData.branch ?? ""), commit: currentGitData.commit && currentGitData.commit.length > 0 ? currentGitData.commit : (persistedGitData.commit ?? ""), }; } catch (_e) { return { branch: "", commit: "", }; } } /** Gets git data containing current branch and commit info from CLI. */ export function getGitData(): GitData { return { branch: process.env.GIT_BRANCH ?? getBranch(), commit: process.env.GIT_COMMIT ?? getCommit(), }; } /** Tries to get branch from git CLI. */ function getBranch(): string { try { return shellSilent("git rev-parse --abbrev-ref HEAD"); } catch (_e) { return ""; } } /** Tries to get commit from git from git CLI. */ function getCommit(): string { try { return shellSilent("git rev-parse --verify HEAD"); } catch (_e) { return ""; } } /** Silent shell that won't pollute stdout, or stderr */ function shellSilent(cmd: string): string { return execSync(cmd, {stdio: ["ignore", "pipe", "ignore"]}) .toString() .trim(); }