mirror of
https://github.com/Molunerfinn/PicGo.git
synced 2026-10-19 16:14:41 +00:00
79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
const fs = require('fs')
|
|
const path = require('path')
|
|
const crypto = require('crypto')
|
|
const yaml = require('js-yaml')
|
|
|
|
const distDir = path.join(__dirname, '../dist')
|
|
const yamlPath = path.join(distDir, 'latest.yml')
|
|
|
|
if (!fs.existsSync(yamlPath)) {
|
|
console.log('⚠️ latest.yml not found in dist/. Skipping update.')
|
|
process.exit(0)
|
|
}
|
|
|
|
console.log(`Reading ${yamlPath}...`)
|
|
const yamlContent = fs.readFileSync(yamlPath, 'utf8')
|
|
let doc
|
|
|
|
try {
|
|
doc = yaml.load(yamlContent)
|
|
} catch (e) {
|
|
console.error('❌ Failed to parse latest.yml:', e)
|
|
process.exit(1)
|
|
}
|
|
|
|
// Get all .exe files in dist directory
|
|
const files = fs.readdirSync(distDir).filter(f => f.endsWith('.exe'))
|
|
|
|
if (files.length === 0) {
|
|
console.log('⚠️ No .exe files found in dist/.')
|
|
process.exit(0)
|
|
}
|
|
|
|
let updated = false
|
|
|
|
files.forEach(file => {
|
|
const filePath = path.join(distDir, file)
|
|
|
|
// 1. Calculate new Hash and Size
|
|
const buffer = fs.readFileSync(filePath)
|
|
const hash = crypto.createHash('sha512').update(buffer).digest('base64')
|
|
const size = fs.statSync(filePath).size
|
|
|
|
console.log(`Processing ${file}:`)
|
|
console.log(` -> New Hash: ${hash}`)
|
|
console.log(` -> New Size: ${size}`)
|
|
|
|
// 2. Update entries in 'files' list
|
|
if (Array.isArray(doc.files)) {
|
|
const fileEntry = doc.files.find(f => f.url === file)
|
|
if (fileEntry) {
|
|
fileEntry.sha512 = hash
|
|
fileEntry.size = size
|
|
updated = true
|
|
console.log(' -> Updated file entry in yaml object')
|
|
}
|
|
}
|
|
|
|
// 3. Update root path entry (if exists)
|
|
// electron-builder's latest.yml usually has root path, sha512, size
|
|
// corresponding to the main file of current build (usually x64 or current arch)
|
|
if (doc.path === file) {
|
|
doc.sha512 = hash
|
|
doc.size = size
|
|
updated = true
|
|
console.log(' -> Updated root path entry in yaml object')
|
|
}
|
|
})
|
|
|
|
if (updated) {
|
|
// 4. Dump back to file
|
|
// lineWidth: -1 prevents long strings from wrapping, keeping it clean
|
|
const newYamlContent = yaml.dump(doc, { lineWidth: -1 })
|
|
fs.writeFileSync(yamlPath, newYamlContent, 'utf8')
|
|
console.log('✅ latest.yml updated successfully.')
|
|
console.log('New yaml content:')
|
|
console.log(newYamlContent)
|
|
} else {
|
|
console.log('⚠️ No matching entries found in latest.yml to update.')
|
|
} |