mirror of
https://github.com/Quad4-Software/MeshChatX.git
synced 2026-08-18 09:49:09 -04:00
124 lines
3.3 KiB
JavaScript
124 lines
3.3 KiB
JavaScript
|
|
/**
|
||
|
|
* Bake git commit and build channel into meshchatx/src/_build_meta_baked.py
|
||
|
|
* (gitignored). meshchatx.src.build_meta imports that overlay when present.
|
||
|
|
*
|
||
|
|
* Invoked from scripts/sync_version.js (pnpm run version:sync / build).
|
||
|
|
*
|
||
|
|
* Channel detection (first match wins):
|
||
|
|
* MESHCHATX_BUILD_CHANNEL env
|
||
|
|
* GITHUB_REF_NAME / GITHUB_REF (nightly-*, preview-dev-*, preview-*, vX.Y.Z)
|
||
|
|
* default: local (is_dev)
|
||
|
|
*
|
||
|
|
* Dev channels (nightly, preview-dev, preview, local) set IS_DEV_BUILD.
|
||
|
|
* Release tags (vX.Y.Z) clear IS_DEV_BUILD.
|
||
|
|
*/
|
||
|
|
|
||
|
|
const fs = require("fs");
|
||
|
|
const path = require("path");
|
||
|
|
const { execFileSync } = require("child_process");
|
||
|
|
|
||
|
|
const root = path.resolve(__dirname, "..");
|
||
|
|
const metaPath = path.join(root, "meshchatx", "src", "_build_meta_baked.py");
|
||
|
|
|
||
|
|
function envTrim(name) {
|
||
|
|
const v = process.env[name];
|
||
|
|
return typeof v === "string" ? v.trim() : "";
|
||
|
|
}
|
||
|
|
|
||
|
|
function git(args) {
|
||
|
|
try {
|
||
|
|
return execFileSync("git", args, {
|
||
|
|
cwd: root,
|
||
|
|
encoding: "utf8",
|
||
|
|
stdio: ["ignore", "pipe", "ignore"],
|
||
|
|
}).trim();
|
||
|
|
} catch {
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function resolveCommit() {
|
||
|
|
const fromEnv = envTrim("MESHCHATX_GIT_COMMIT") || envTrim("GIT_COMMIT") || envTrim("GITHUB_SHA");
|
||
|
|
if (fromEnv) {
|
||
|
|
return fromEnv;
|
||
|
|
}
|
||
|
|
return git(["rev-parse", "HEAD"]);
|
||
|
|
}
|
||
|
|
|
||
|
|
function shortCommit(full) {
|
||
|
|
if (!full) {
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
if (/^[0-9a-f]{7,40}$/i.test(full)) {
|
||
|
|
return full.slice(0, 7).toLowerCase();
|
||
|
|
}
|
||
|
|
const fromGit = git(["rev-parse", "--short=7", "HEAD"]);
|
||
|
|
return fromGit || full.slice(0, 7);
|
||
|
|
}
|
||
|
|
|
||
|
|
function refName() {
|
||
|
|
return (
|
||
|
|
envTrim("MESHCHATX_BUILD_REF") ||
|
||
|
|
envTrim("GITHUB_REF_NAME") ||
|
||
|
|
envTrim("GITHUB_REF").replace(/^refs\/(heads|tags)\//, "")
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
function resolveChannel(ref) {
|
||
|
|
const forced = envTrim("MESHCHATX_BUILD_CHANNEL").toLowerCase();
|
||
|
|
if (forced) {
|
||
|
|
return forced;
|
||
|
|
}
|
||
|
|
if (!ref) {
|
||
|
|
return "local";
|
||
|
|
}
|
||
|
|
if (ref.startsWith("nightly-")) {
|
||
|
|
return "nightly";
|
||
|
|
}
|
||
|
|
if (ref.startsWith("preview-dev-")) {
|
||
|
|
return "preview-dev";
|
||
|
|
}
|
||
|
|
if (ref.startsWith("preview-")) {
|
||
|
|
return "preview";
|
||
|
|
}
|
||
|
|
if (/^v\d+\.\d+\.\d+/.test(ref)) {
|
||
|
|
return "release";
|
||
|
|
}
|
||
|
|
return "local";
|
||
|
|
}
|
||
|
|
|
||
|
|
function isDevChannel(channel) {
|
||
|
|
return channel !== "release";
|
||
|
|
}
|
||
|
|
|
||
|
|
function pyString(value) {
|
||
|
|
return JSON.stringify(String(value ?? ""));
|
||
|
|
}
|
||
|
|
|
||
|
|
function bake() {
|
||
|
|
const commit = resolveCommit();
|
||
|
|
const short = shortCommit(commit);
|
||
|
|
const ref = refName();
|
||
|
|
const channel = resolveChannel(ref);
|
||
|
|
const isDev = isDevChannel(channel);
|
||
|
|
|
||
|
|
const content = `# SPDX-License-Identifier: 0BSD
|
||
|
|
"""Generated by scripts/bake_build_meta.js. Do not commit."""
|
||
|
|
|
||
|
|
GIT_COMMIT = ${pyString(commit)}
|
||
|
|
GIT_COMMIT_SHORT = ${pyString(short)}
|
||
|
|
BUILD_CHANNEL = ${pyString(channel)}
|
||
|
|
IS_DEV_BUILD = ${isDev ? "True" : "False"}
|
||
|
|
`;
|
||
|
|
|
||
|
|
const prev = fs.existsSync(metaPath) ? fs.readFileSync(metaPath, "utf8") : null;
|
||
|
|
if (prev !== content) {
|
||
|
|
fs.writeFileSync(metaPath, content, "utf8");
|
||
|
|
console.log(`Baked build_meta channel=${channel} is_dev=${isDev} commit=${short || "unknown"}`);
|
||
|
|
} else {
|
||
|
|
console.log(`build_meta unchanged channel=${channel} is_dev=${isDev} commit=${short || "unknown"}`);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
bake();
|