From 4fdbc51a7eedf44216e2a2a9c317864aa4aa16d9 Mon Sep 17 00:00:00 2001 From: smail Date: Sat, 17 Oct 2026 17:59:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=89=93=E5=8C=85=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E8=A7=84=E5=88=99=EF=BC=9A=E9=83=A8=E7=BD=B2=E5=8C=85?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E5=8C=85=E5=90=AB=E7=89=88=E6=9C=AC=E5=8F=B7?= =?UTF-8?q?=E5=B9=B6=E4=BF=9D=E6=8C=81=E5=90=91=E4=B8=8B=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/package.mjs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/deploy/package.mjs b/deploy/package.mjs index 4b609ce2..da93bc14 100644 --- a/deploy/package.mjs +++ b/deploy/package.mjs @@ -9,6 +9,17 @@ import { buildPlan, root, targets } from './build-plugins.mjs' const execute = promisify(execFile) const runtimeDirectories = ['config', 'data', 'ssl', 'log'] +export async function resolveAppVersion(workspace = root) { + if (process.env.SMAIL_VERSION) return process.env.SMAIL_VERSION + try { + const vueFile = path.join(workspace, 'frontend', 'src', 'views', 'components', 'HomeAside', 'HomeAside.vue') + const content = await readFile(vueFile, 'utf8') + const match = content.match(/class="app-version-badge">\s*(V\d+\.\d+\.\d+)\s*<\/span>/) + if (match) return match[1] + } catch (e) {} + return 'dev' +} + export function packagePlan(target, workspace = root) { buildPlan({ target }) const [goos, goarch] = target.split('_') @@ -107,20 +118,27 @@ export async function packageRelease(selectedTargets = targets, { workspace = ro await chmod(destination, 0o755) files.push({ name, ...await digestFile(destination) }) } - const archiveName = `${name}.${target.startsWith('windows_') ? 'zip' : 'tar.gz'}` + const version = await resolveAppVersion(workspace) + const baseExt = target.startsWith('windows_') ? 'zip' : 'tar.gz' + const archiveName = version && version !== 'dev' ? `Smail_${version}_${target}.${baseExt}` : `${name}.${baseExt}` + const legacyArchiveName = `${name}.${baseExt}` const stagedArchive = path.join(staging, archiveName) await createArchive(target, staging, stagedArchive) const archive = path.join(releaseRoot, archiveName) const receipt = path.join(receiptRoot, `${name}.json`) const stagedReceipt = path.join(staging, `${name}.json`) await writeFile(stagedReceipt, JSON.stringify({ - version: process.env.SMAIL_VERSION || 'dev', gitHash: process.env.GIT_HASH || '', + version: version || process.env.SMAIL_VERSION || 'dev', gitHash: process.env.GIT_HASH || '', protocolVersion: 1, target, plugins: buildPlan({ target }).map(item => item.id), files, archive: { name: archiveName, ...await digestFile(stagedArchive) }, createdAt: new Date().toISOString() }, null, 2) + '\n') await preservePrevious(outputRoot, [directory, archive, receipt]) await rename(stagedArchive, archive) + if (archiveName !== legacyArchiveName) { + const legacyArchive = path.join(releaseRoot, legacyArchiveName) + try { await copyFile(archive, legacyArchive) } catch (e) {} + } await rename(stagedReceipt, receipt) await rename(staging, directory) releases.push({ target, directory, archive, receipt })