Files
creamlinux-installer/scripts/generate-updater-json.js
2025-05-18 21:05:32 +02:00

83 lines
2.6 KiB
JavaScript

const fs = require('fs')
const path = require('path')
const { execSync } = require('child_process')
// Read the current version from package.json
const packageJson = require('../package.json')
const version = packageJson.version
console.log(`Current version: ${version}`)
// Get the current date in RFC 3339 format for pub_date
const pubDate = new Date().toISOString()
// Base URL where the assets will be available
const baseUrl = 'https://github.com/tickbase/creamlinux/releases/download'
const releaseTag = `v${version}`
const releaseUrl = `${baseUrl}/${releaseTag}`
// Create the updater JSON structure
const updaterJson = {
version,
notes: `Release version ${version}`,
pub_date: pubDate,
platforms: {
// Windows x64
'windows-x86_64': {
url: `${releaseUrl}/creamlinux-setup.exe`,
signature: readSignature('windows', 'creamlinux-setup.exe'),
},
// Linux x64
'linux-x86_64': {
url: `${releaseUrl}/creamlinux.AppImage`,
signature: readSignature('linux', 'creamlinux.AppImage'),
},
// macOS x64 and arm64 (universal)
'darwin-universal': {
url: `${releaseUrl}/creamlinux.app.tar.gz`,
signature: readSignature('macos', 'creamlinux.app.tar.gz'),
},
},
}
// Write the updater JSON file
fs.writeFileSync('latest.json', JSON.stringify(updaterJson, null, 2))
console.log('Created latest.json updater file')
// Helper function to read signature files
function readSignature(platform, filename) {
try {
// Determine path based on platform
let sigPath
switch (platform) {
case 'windows':
// Check both NSIS and MSI
try {
sigPath = path.join('src-tauri', 'target', 'release', 'bundle', 'nsis', `${filename}.sig`)
return fs.readFileSync(sigPath, 'utf8').trim()
} catch (e) {
sigPath = path.join('src-tauri', 'target', 'release', 'bundle', 'msi', `${filename}.sig`)
return fs.readFileSync(sigPath, 'utf8').trim()
}
case 'linux':
sigPath = path.join(
'src-tauri',
'target',
'release',
'bundle',
'appimage',
`${filename}.sig`
)
return fs.readFileSync(sigPath, 'utf8').trim()
case 'macos':
sigPath = path.join('src-tauri', 'target', 'release', 'bundle', 'macos', `${filename}.sig`)
return fs.readFileSync(sigPath, 'utf8').trim()
default:
throw new Error(`Unknown platform: ${platform}`)
}
} catch (error) {
console.error(`Error reading signature for ${platform}/${filename}:`, error.message)
return ''
}
}