132 lines
3.9 KiB
JavaScript
132 lines
3.9 KiB
JavaScript
// Sync the Python PEP 440 version from src/pineagents/__version__.py into a
|
|
// gitignored Tauri config override. Do not write the tracked tauri.conf.json:
|
|
// its version would otherwise become a stale generated value after rebases.
|
|
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const scriptDir = path.dirname(fileURLToPath(import.meta.url));
|
|
const repoRoot = path.resolve(scriptDir, "../..");
|
|
const versionFile = path.join(repoRoot, "src/pineagents/__version__.py");
|
|
const tauriConfigFile = path.join(
|
|
repoRoot,
|
|
"console/src-tauri/tauri.conf.json",
|
|
);
|
|
const tauriVersionConfigFile = path.join(
|
|
repoRoot,
|
|
"console/src-tauri/tauri.version.conf.json",
|
|
);
|
|
|
|
function readPythonVersion() {
|
|
const text = fs.readFileSync(versionFile, "utf8");
|
|
const match = text.match(/__version__\s*=\s*"([^"]+)"/);
|
|
if (!match) {
|
|
throw new Error(`Could not read __version__ from ${versionFile}`);
|
|
}
|
|
return match[1];
|
|
}
|
|
|
|
function toSemver(version) {
|
|
const match = version.match(
|
|
/^(\d+)\.(\d+)\.(\d+)(?:(a|b|rc)(\d+))?(?:\.post(\d+))?(?:\.dev(\d+))?$/,
|
|
);
|
|
if (!match) {
|
|
throw new Error(`Unsupported Python version for Tauri: ${version}`);
|
|
}
|
|
|
|
const [, major, minor, patch, prerelease, prereleaseNumber, post, dev] =
|
|
match;
|
|
const prereleaseMap = { a: "alpha", b: "beta", rc: "rc" };
|
|
const labels = [];
|
|
if (prerelease)
|
|
labels.push(`${prereleaseMap[prerelease]}.${prereleaseNumber}`);
|
|
if (dev) labels.push(`dev.${dev}`);
|
|
|
|
const prereleaseSuffix = labels.length ? `-${labels.join(".")}` : "";
|
|
const postMetadata = post ? `+post.${post}` : "";
|
|
return `${major}.${minor}.${patch}${prereleaseSuffix}${postMetadata}`;
|
|
}
|
|
|
|
function readBaseUpdaterConfig() {
|
|
const config = JSON.parse(fs.readFileSync(tauriConfigFile, "utf8"));
|
|
const updater = config?.plugins?.updater ?? {};
|
|
if (!updater.pubkey) {
|
|
throw new Error(
|
|
`Could not read plugins.updater.pubkey from ${tauriConfigFile}`,
|
|
);
|
|
}
|
|
return updater;
|
|
}
|
|
|
|
function readUpdaterEndpoints(baseUpdater) {
|
|
const raw = process.env.TAURI_UPDATER_ENDPOINTS?.trim();
|
|
if (!raw) return baseUpdater.endpoints;
|
|
|
|
if (raw.startsWith("[")) {
|
|
const parsed = JSON.parse(raw);
|
|
if (
|
|
!Array.isArray(parsed) ||
|
|
parsed.some((entry) => typeof entry !== "string")
|
|
) {
|
|
throw new Error(
|
|
"TAURI_UPDATER_ENDPOINTS JSON must be an array of strings",
|
|
);
|
|
}
|
|
return parsed;
|
|
}
|
|
|
|
return raw
|
|
.split(/[\n,]/)
|
|
.map((entry) => entry.trim())
|
|
.filter(Boolean);
|
|
}
|
|
|
|
function shouldCreateUpdaterArtifacts() {
|
|
return Boolean(process.env.TAURI_SIGNING_PRIVATE_KEY?.trim());
|
|
}
|
|
|
|
function writeTauriVersionConfig(file, version) {
|
|
const baseUpdater = readBaseUpdaterConfig();
|
|
const pubkey = process.env.TAURI_UPDATER_PUBKEY?.trim() || baseUpdater.pubkey;
|
|
const endpoints = readUpdaterEndpoints(baseUpdater);
|
|
const createUpdaterArtifacts = shouldCreateUpdaterArtifacts();
|
|
const config = {
|
|
version,
|
|
...(createUpdaterArtifacts
|
|
? {
|
|
bundle: {
|
|
createUpdaterArtifacts: true,
|
|
},
|
|
}
|
|
: {}),
|
|
plugins: {
|
|
updater: {
|
|
pubkey,
|
|
...(endpoints?.length ? { endpoints } : {}),
|
|
},
|
|
},
|
|
};
|
|
fs.writeFileSync(file, `${JSON.stringify(config, null, 2)}\n`);
|
|
console.log(
|
|
`Using updater pubkey from ${
|
|
process.env.TAURI_UPDATER_PUBKEY?.trim()
|
|
? "TAURI_UPDATER_PUBKEY"
|
|
: "tauri.conf.json"
|
|
}`,
|
|
);
|
|
if (process.env.TAURI_UPDATER_ENDPOINTS?.trim()) {
|
|
console.log("Using updater endpoints from TAURI_UPDATER_ENDPOINTS");
|
|
}
|
|
console.log(
|
|
createUpdaterArtifacts
|
|
? "Creating Tauri updater artifacts"
|
|
: "Skipping Tauri updater artifacts because TAURI_SIGNING_PRIVATE_KEY is not set",
|
|
);
|
|
}
|
|
|
|
const semver = toSemver(readPythonVersion());
|
|
|
|
writeTauriVersionConfig(tauriVersionConfigFile, semver);
|
|
|
|
console.log(`Wrote Tauri version override ${semver}`);
|