a7e580407c
* feat: add desktop wrapper with frontend-only packaging * docs: add desktop build docs and track dashboard lockfile * fix: track desktop lockfile for npm ci * fix: allow custom install directory for windows installer * chore: migrate desktop workflow to pnpm * fix(desktop): build AppImage only on Linux * fix(desktop): harden packaged startup and backend bundling * fix(desktop): adapt packaged restart and plugin dependency flow * fix(desktop): prevent backend respawn race on quit * fix(desktop): prefer pyproject version for desktop packaging * fix(desktop): improve startup loading UX and reduce flicker * ci: add desktop multi-platform release workflow * ci: fix desktop release build and mac runner labels * ci: disable electron-builder auto publish in desktop build * ci: avoid electron-builder publish path in build matrix * ci: normalize desktop release artifact names * ci: exclude blockmap files from desktop release assets * ci: prefix desktop release assets with AstrBot and purge blockmaps * feat: add electron bridge types and expose backend control methods in preload script * Update startup screen assets and styles - Changed the icon from PNG to SVG format for better scalability. - Updated the border color from #d0d0d0 to #eeeeee for a softer appearance. - Adjusted the width of the startup screen from 460px to 360px for improved responsiveness. * Update .gitignore to include package.json * chore: remove desktop gitkeep ignore exceptions * docs: update desktop troubleshooting for current runtime behavior * refactor(desktop): modularize runtime and harden startup flow --------- Co-authored-by: Soulter <905617992@qq.com> Co-authored-by: Soulter <37870767+Soulter@users.noreply.github.com>
67 lines
1.8 KiB
JavaScript
67 lines
1.8 KiB
JavaScript
import { readFile, writeFile } from 'node:fs/promises';
|
|
import { spawnSync } from 'node:child_process';
|
|
import path from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
const rootDir = path.resolve(__dirname, '..', '..');
|
|
const desktopPackagePath = path.join(rootDir, 'desktop', 'package.json');
|
|
const pyprojectPath = path.join(rootDir, 'pyproject.toml');
|
|
|
|
function getGitTag() {
|
|
const result = spawnSync('git', ['describe', '--tags', '--abbrev=0'], {
|
|
cwd: rootDir,
|
|
encoding: 'utf8',
|
|
});
|
|
if (result.status === 0) {
|
|
const tag = result.stdout.trim();
|
|
return tag.length ? tag : null;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function normalizeTag(tag) {
|
|
return tag.replace(/^v/i, '');
|
|
}
|
|
|
|
async function getPyprojectVersion() {
|
|
try {
|
|
const data = await readFile(pyprojectPath, 'utf8');
|
|
const match = data.match(/^\s*version\s*=\s*"([^"]+)"/m);
|
|
return match ? match[1] : null;
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
const pkgRaw = await readFile(desktopPackagePath, 'utf8');
|
|
const pkg = JSON.parse(pkgRaw);
|
|
const tag = getGitTag();
|
|
const versionFromTag = tag ? normalizeTag(tag) : null;
|
|
const versionFromPyproject = await getPyprojectVersion();
|
|
const version = versionFromPyproject || versionFromTag || pkg.version;
|
|
|
|
if (
|
|
versionFromPyproject &&
|
|
versionFromTag &&
|
|
versionFromPyproject !== versionFromTag
|
|
) {
|
|
console.log(
|
|
`Using pyproject version ${versionFromPyproject} (ignoring git tag ${versionFromTag}).`,
|
|
);
|
|
}
|
|
|
|
if (!version) {
|
|
console.warn('No version found to sync.');
|
|
process.exit(0);
|
|
}
|
|
|
|
if (pkg.version === version) {
|
|
console.log(`Desktop version already ${version}`);
|
|
process.exit(0);
|
|
}
|
|
|
|
pkg.version = version;
|
|
await writeFile(desktopPackagePath, `${JSON.stringify(pkg, null, 2)}\n`, 'utf8');
|
|
console.log(`Updated desktop version to ${version}`);
|