Jelajahi Sumber

在桌面安装包中记录可核对的构建来源

LSamien 1 bulan lalu
induk
melakukan
60d0ca9ad9
3 mengubah file dengan 7 tambahan dan 0 penghapusan
  1. 2 0
      desktop/main.mjs
  2. 1 0
      electron-builder.yml
  3. 4 0
      scripts/build-desktop.mjs

+ 2 - 0
desktop/main.mjs

@@ -116,6 +116,8 @@ else {
     await preferences.load()
     startHidden = preferences.value.backgroundAtLogin && app.getLoginItemSettings().wasOpenedAtLogin
     const packageVersion = JSON.parse(readFileSync(join(root, 'release.json'), 'utf8')).webVersion
+    const buildInfo=JSON.parse(readFileSync(join(root,'build-info.json'),'utf8'))
+    app.setAboutPanelOptions({applicationName:'夭夭',applicationVersion:packageVersion,version:`${String(buildInfo.commit).slice(0,12)}${buildInfo.dirty?' · 工作区快照':''}`})
     manager = new DesktopServiceManager({ home, port, version: packageVersion, log, onState: stateChanged,
       fork: ({ home, port }) => {
         const env = { ...process.env, NODE_ENV: 'production', NODE_USE_ENV_PROXY: '0',

+ 1 - 0
electron-builder.yml

@@ -22,6 +22,7 @@ extraResources:
       - hermes_worker.py
       - guest_proxy.py
       - release.json
+      - build-info.json
       - ui/**/*
 asar: true
 npmRebuild: false

+ 4 - 0
scripts/build-desktop.mjs

@@ -1,4 +1,5 @@
 import { build } from 'esbuild'
+import { execFileSync } from 'node:child_process'
 import { buildRunner } from './build-runner.mjs'
 import { cp, mkdir, rm, readdir, readFile, writeFile } from 'node:fs/promises'
 import { resolve } from 'node:path'
@@ -21,6 +22,9 @@ for (const file of await readdir(resolve(root, 'desktop'))) {
   if (file.endsWith('.test.mjs') || !/\.(mjs|cjs|html|css|png)$/.test(file)) continue
   await cp(resolve(root, 'desktop', file), resolve(shell, file))
 }
+let commit='source-archive',dirty=false
+try{commit=execFileSync('git',['rev-parse','HEAD'],{cwd:root,encoding:'utf8'}).trim();dirty=!!execFileSync('git',['status','--porcelain'],{cwd:root,encoding:'utf8'}).trim()}catch{}
+await writeFile(resolve(out,'build-info.json'),JSON.stringify({commit,dirty,builtAt:new Date().toISOString()},null,2)+'\n')
 const manifest = JSON.parse(await readFile(resolve(root, 'release.json'), 'utf8'))
 await writeFile(resolve(shell, 'package.json'), JSON.stringify({ name: 'hermes-yaoyao-desktop', version: manifest.webVersion,
   productName: '夭夭', description: '夭夭:本地服务、多 Agent 团队与电脑工作空间',