Last active
December 28, 2023 10:18
-
-
Save si458/8571e8435f0bf6ece31c118e459ab780 to your computer and use it in GitHub Desktop.
build script for pkg with icon and metainfo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
if (process.argv[2] == undefined) process.exit(0); | |
if (process.argv[2] == "") process.exit(0); | |
const { pkg_fetch_version, node_version, pkg_cache_path, icon, version, description, company, name, copyright, file } = require(`./${process.argv[2]}.json`); | |
const ResEdit = require('resedit'); | |
const path = require("path"); | |
const fs = require('fs'); | |
const https = require('https'); | |
function download(url, dest) { | |
return new Promise((resolve, reject) => { | |
fs.access(dest, fs.constants.F_OK, (err) => { | |
if (err === null) reject('File already exists'); | |
const request = https.get(url, response => { | |
if (response.statusCode === 200) { | |
const file = fs.createWriteStream(dest, { flags: 'wx' }); | |
file.on('finish', () => resolve()); | |
file.on('error', err => { | |
file.close(); | |
if (err.code === 'EEXIST') reject('File already exists'); | |
else fs.unlink(dest, () => reject(err.message)); // Delete temp file | |
}); | |
response.pipe(file); | |
} else if (response.statusCode === 302 || response.statusCode === 301) { | |
download(response.headers.location, dest).then(() => resolve()); | |
} else { | |
reject(`Server responded with ${response.statusCode}: ${response.statusMessage}`); | |
} | |
}); | |
request.on('error', err => { | |
reject(err.message); | |
}); | |
}); | |
}); | |
} | |
process.env['PKG_CACHE_PATH'] = path.join(__dirname, pkg_cache_path); | |
const pkg_fetch = path.join(process.env['PKG_CACHE_PATH'], `v${pkg_fetch_version}`); | |
const fetched = path.join(pkg_fetch, `fetched-v${node_version}-win-x64`); | |
const built = path.join(pkg_fetch, `built-v${node_version}-win-x64`); | |
const url = `https://github.com/vercel/pkg-fetch/releases/download/v${pkg_fetch_version}/node-v${node_version}-win-x64` | |
const { exec } = require('pkg'); | |
(async () => { | |
if (!fs.existsSync(fetched)) { | |
console.log('Downloading File'); | |
try { await fs.mkdirSync(pkg_fetch, { recursive: true }); } catch (e) { console.error(e); } | |
try { await download(url,fetched); } catch (e) { console.error(e); process.exit(1); } | |
console.log('Downloaded File'); | |
} else { | |
console.log('Using Existing File'); | |
} | |
console.log('Reading EXE'); | |
let data = fs.readFileSync(fetched); | |
let exe = ResEdit.NtExecutable.from(data); | |
let res = ResEdit.NtExecutableResource.from(exe); | |
let viList = ResEdit.Resource.VersionInfo.fromEntries(res.entries); | |
console.log(viList[0].data.strings); | |
let vi = viList[0]; | |
const theversion = `${version}.0`.split("."); | |
console.log('Removing OriginalFilename'); | |
vi.removeStringValue({ lang: 1033, codepage: 1200 }, 'OriginalFilename'); | |
console.log('Removing InternalName'); | |
vi.removeStringValue({ lang: 1033, codepage: 1200 }, 'InternalName'); | |
console.log('Setting Product Version'); | |
vi.setProductVersion(theversion[0], theversion[1], theversion[2], theversion[3], 1033); | |
console.log('Setting File Version'); | |
vi.setFileVersion(theversion[0], theversion[1], theversion[2], theversion[3], 1033); | |
console.log('Setting File Info'); | |
vi.setStringValues( | |
{ lang: 1033, codepage: 1200 }, | |
{ | |
FileDescription: description, | |
ProductName: name, | |
CompanyName: company, | |
LegalCopyright: copyright | |
} | |
); | |
console.log(vi.data.strings); | |
vi.outputToResourceEntries(res.entries); | |
console.log('Replacing Icon'); | |
let iconFile = ResEdit.Data.IconFile.from(fs.readFileSync(path.join(__dirname, icon))); | |
ResEdit.Resource.IconGroupEntry.replaceIconsForResource( | |
res.entries, | |
1, | |
1033, | |
iconFile.icons.map((item) => item.data) | |
); | |
res.outputResource(exe); | |
console.log('Generating EXE'); | |
let newBinary = exe.generate(); | |
console.log('Saving EXE'); | |
fs.writeFileSync(built, Buffer.from(newBinary)); | |
console.log('Bundling App'); | |
await exec(['--build', '--debug', '--config', `${process.argv[2]}.json`, `${file}`]); | |
})(); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"pkg": { | |
"targets": [ | |
"node14-win-x64" | |
], | |
"outputPath": "dist", | |
"assets": [ | |
"node_modules/printer/lib/node_printer.node" | |
] | |
}, | |
"pkg_fetch_version": "3.2", | |
"node_version": "14.17.2", | |
"pkg_cache_path": ".pkg-cache", | |
"icon": "icon.ico", | |
"name": "myapp", | |
"description": "myapp description", | |
"company": "mycompany", | |
"version": "1.0.0", | |
"copyright": "mycopyright Ltd", | |
"file": "index.js" | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
npm install resedit pkg --save-dev | |
node build.js myapp |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
same reply, so you would need to convert it yourself sadly