feat(electron): add persistent auth, auto-updater, and NAS copy script
- Integrate electron-store for persistent PocketBase auth backup across localStorage clears and app reinstalls - Switch build target from portable to nsis to generate latest.yml for electron-updater generic provider - Add user confirmation dialogs before download and before install - Add post-build script to copy .exe/.yml/.nupkg to NAS share and local electron-update/ directory for nginx volume mount - Mount ./electron-update into frontend nginx containers via docker-compose for automatic update file serving Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const srcDir = path.join(__dirname, '..', 'dist')
|
||||
// 项目根目录下的 electron-update,用于 docker volume 挂载给 nginx
|
||||
const localUpdateDir = path.join(__dirname, '..', '..', 'electron-update')
|
||||
// NAS 共享路径
|
||||
const nasDir = '\\\\JIULUGNAS\\personal_folder\\CodeSpace\\GameGroup2'
|
||||
|
||||
function ensureDir(dir) {
|
||||
try {
|
||||
if (!fs.existsSync(dir)) {
|
||||
fs.mkdirSync(dir, { recursive: true })
|
||||
}
|
||||
return true
|
||||
} catch (err) {
|
||||
console.error(`[copy-to-nas] failed to create dir ${dir}:`, err.message)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
function copyFilesTo(destDir, label) {
|
||||
if (!fs.existsSync(srcDir)) {
|
||||
console.log(`[copy-to-nas] dist not found, skipping ${label}`)
|
||||
return
|
||||
}
|
||||
|
||||
const files = fs.readdirSync(srcDir).filter((f) => {
|
||||
// 只复制更新相关文件:安装包、yml、blockmap、nupkg
|
||||
const ext = path.extname(f).toLowerCase()
|
||||
return (
|
||||
ext === '.exe' ||
|
||||
ext === '.yml' ||
|
||||
ext === '.blockmap' ||
|
||||
ext === '.nupkg' ||
|
||||
ext === '.yaml'
|
||||
)
|
||||
})
|
||||
|
||||
if (files.length === 0) {
|
||||
console.log(`[copy-to-nas] no update files found in dist, skipping ${label}`)
|
||||
return
|
||||
}
|
||||
|
||||
if (!ensureDir(destDir)) return
|
||||
|
||||
for (const file of files) {
|
||||
const src = path.join(srcDir, file)
|
||||
const dest = path.join(destDir, file)
|
||||
try {
|
||||
fs.copyFileSync(src, dest)
|
||||
console.log(`[copy-to-nas] copied ${file} -> ${destDir}`)
|
||||
} catch (err) {
|
||||
console.error(`[copy-to-nas] failed to copy ${file} to ${label}:`, err.message)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 复制到本地目录(供 docker volume 挂载)
|
||||
copyFilesTo(localUpdateDir, 'local')
|
||||
|
||||
// 复制到 NAS
|
||||
copyFilesTo(nasDir, 'NAS')
|
||||
Reference in New Issue
Block a user