Files
qwenpaw/scripts/pack-tauri/sync_tauri_version.mjs
agent-radar 1a3a4ccde1
Creator App Tests / PR Spam Gate (push) Skipped
Frontend Tests / PR Spam Gate (push) Skipped
NPM Format (website & console) / PR Spam Gate (push) Skipped
Pre-commit Checks / PR Spam Gate (push) Skipped
QwenPaw Creator Plugin Release / check-version (push) Canceled after 0s
QwenPaw Creator Plugin Release / upload-oss (push) Canceled after 0s
Tests / PR Spam Gate (push) Skipped
CodeQL / CodeQL (python) (push) Canceled after 0s
CodeQL / CodeQL (typescript) (push) Canceled after 0s
Creator App Tests / Creator Backend Tests (push) Canceled after 0s
Creator App Tests / Creator UI Build & Tests (push) Canceled after 0s
E2E Smoke Tests / Playwright UI Smoke (push) Canceled after 0s
Frontend Tests / Detect console changes (push) Canceled after 0s
NPM Format (website & console) / website format check (push) Canceled after 0s
NPM Format (website & console) / console format check (push) Canceled after 0s
Pre-commit Checks / Pre-commit (push) Canceled after 0s
QwenPaw Data Plugin Release / check-version (push) Canceled after 0s
Tests / Detect code changes (push) Canceled after 0s
Frontend Tests / Vitest Unit Tests (push) Canceled after 0s
Frontend Tests / Frontend Summary (push) Canceled after 0s
QwenPaw Data Plugin Release / upload-oss (push) Canceled after 0s
Tests / Maintainer Approval (push) Canceled after 0s
Tests / Unit Tests - py3.11 - macos-latest (push) Canceled after 0s
Tests / Unit Tests - py3.11 - ubuntu-latest (push) Canceled after 0s
Tests / Unit Tests - py3.13 - ubuntu-latest (push) Canceled after 0s
Tests / Unit Tests - py3.11 - windows-latest (push) Canceled after 0s
Tests / Contract Tests - py3.11 - macos-latest (push) Canceled after 0s
Tests / Contract Tests - py3.11 - ubuntu-latest (push) Canceled after 0s
Tests / Contract Tests - py3.13 - ubuntu-latest (push) Canceled after 0s
Tests / Contract Tests - py3.11 - windows-latest (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - macos-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - macos-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - macos-latest - p2 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - fallback (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - ubuntu-latest - p2 (push) Canceled after 0s
Tests / Integrated Tests - py3.13 - ubuntu-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.13 - ubuntu-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.13 - ubuntu-latest - p2 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - windows-latest - p0 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - windows-latest - p1 (push) Canceled after 0s
Tests / Integrated Tests - py3.11 - windows-latest - p2 (push) Canceled after 0s
Tests / Coverage Report (push) Canceled after 0s
Tests / Test Summary (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:01:50 +08:00

132 lines
3.9 KiB
JavaScript

// Sync the Python PEP 440 version from src/qwenpaw/__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/qwenpaw/__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}`);