Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
await BluebirdPromise.map(this.archs.keys(), async arch => {
const fileInfo = await this.packageHelper.packArch(arch, this)
const file = fileInfo.path
const defineKey = arch === Arch.x64 ? "APP_64" : (arch === Arch.arm64 ? "APP_ARM64" : "APP_32")
defines[defineKey] = file
defines[`${defineKey}_NAME`] = path.basename(file)
// nsis expect a hexadecimal string
defines[`${defineKey}_HASH`] = Buffer.from(fileInfo.sha512, "base64").toString("hex").toUpperCase()
if (this.isWebInstaller) {
await packager.dispatchArtifactCreated(file, this, arch)
packageFiles[Arch[arch]] = fileInfo
}
const archiveInfo = (await exec(path7za, ["l", file])).trim()
// after adding blockmap data will be "Warnings: 1" in the end of output
const match = archiveInfo.match(/(\d+)\s+\d+\s+\d+\s+files/)
if (match == null) {
log.warn({output: archiveInfo}, "cannot compute size of app package")
}
}, "signing")
await this.doSign(signOptions)
// https://github.com/electron-userland/electron-builder/issues/1196#issuecomment-312310209
if (masOptions != null && !isDevelopment) {
const certType = isDevelopment ? "Mac Developer" : "3rd Party Mac Developer Installer"
const masInstallerIdentity = await findIdentity(certType, masOptions.identity, keychainFile)
if (masInstallerIdentity == null) {
throw new InvalidConfigurationError(`Cannot find valid "${certType}" identity to sign MAS installer, please see https://electron.build/code-signing`)
}
// mas uploaded to AppStore, so, use "-" instead of space for name
const artifactName = this.expandArtifactNamePattern(masOptions, "pkg")
const artifactPath = path.join(outDir!, artifactName)
await this.doFlat(appPath, artifactPath, masInstallerIdentity, keychainFile)
await this.dispatchArtifactCreated(artifactPath, null, Arch.x64, this.computeSafeArtifactName(artifactName, "pkg"))
}
}
async build(appOutDir: string, arch: Arch): Promise {
const packager = this.packager
const isMac = packager.platform === Platform.MAC
const format = this.name
let defaultPattern: string
if (packager.platform === Platform.LINUX) {
// tslint:disable-next-line:no-invalid-template-strings
defaultPattern = "${name}-${version}" + (arch === Arch.x64 ? "" : "-${arch}") + ".${ext}"
}
else {
// tslint:disable-next-line:no-invalid-template-strings
defaultPattern = "${productName}-${version}" + (arch === Arch.x64 ? "" : "-${arch}") + "-${os}.${ext}"
}
const artifactName = packager.expandArtifactNamePattern(this.options, format, arch, defaultPattern, false)
const artifactPath = path.join(this.outDir, artifactName)
await packager.info.callArtifactBuildStarted({
targetPresentableName: `${isMac ? "macOS " : ""}${format}`,
file: artifactPath,
arch,
})
let updateInfo: any = null
if (format.startsWith("tar.")) {
await tar(packager.compression, format, artifactPath, appOutDir, isMac, packager.info.tempDirManager)
}
else {
let withoutDir = !isMac
function archNameToTriplet(arch: Arch): string {
switch (arch) {
case Arch.x64:
return "x86_64-linux-gnu"
case Arch.ia32:
return "i386-linux-gnu"
case Arch.armv7l:
// noinspection SpellCheckingInspection
return "arm-linux-gnueabihf"
case Arch.arm64:
return "aarch64-linux-gnu"
default:
throw new Error(`Unsupported arch ${arch}`)
}
}
const compression = this.packager.compression
const options = this.options
const iconPath = await this.packager.getIconPath()
return (await projectTemplate.value)({
...commonOptions,
isCreateDesktopShortcut: commonOptions.isCreateDesktopShortcut !== DesktopShortcutCreationPolicy.NEVER,
isRunAfterFinish: options.runAfterFinish !== false,
iconPath: iconPath == null ? null : this.vm.toVmFile(iconPath),
compressionLevel: compression === "store" ? "none" : "high",
version: appInfo.getVersionInWeirdWindowsForm(),
productName: appInfo.productName,
upgradeCode: (options.upgradeCode || UUID.v5(appInfo.id, ELECTRON_BUILDER_UPGRADE_CODE_NS_UUID)).toUpperCase(),
manufacturer: companyName || appInfo.productName,
appDescription: appInfo.description,
// https://stackoverflow.com/questions/1929038/compilation-error-ice80-the-64bitcomponent-uses-32bitdirectory
programFilesId: arch === Arch.x64 ? "ProgramFiles64Folder" : "ProgramFilesFolder",
// wix in the name because special wix format can be used in the name
installationDirectoryWixName: getWindowsInstallationDirName(appInfo, commonOptions.isPerMachine === true),
dirs,
files,
})
}
function commonArch(currentIfNotSpecified: boolean): Array {
if (platform === Platform.MAC) {
return args.x64 || currentIfNotSpecified ? [Arch.x64] : []
}
const result = Array()
if (args.x64) {
result.push(Arch.x64)
}
if (args.armv7l) {
result.push(Arch.armv7l)
}
if (args.arm64) {
result.push(Arch.arm64)
}
if (args.ia32) {
result.push(Arch.ia32)
}
function commonArch(currentIfNotSpecified: boolean): Array {
if (platform === Platform.MAC) {
return currentIfNotSpecified ? [Arch.x64] : []
}
const result = Array()
return result.length === 0 && currentIfNotSpecified ? [archFromString(process.arch)] : result
}
function getArchPrefixForUpdateFile(arch: Arch | null, packager: PlatformPackager) {
if (arch == null || arch === Arch.x64 || packager.platform !== Platform.LINUX) {
return ""
}
return arch === Arch.armv7l ? "-arm" : `-${Arch[arch]}`
}
export function toAppImageOrSnapArch(arch: Arch): string {
switch (arch) {
case Arch.x64:
return "x86_64"
case Arch.ia32:
return "i386"
case Arch.armv7l:
return "arm"
case Arch.arm64:
return "arm_aarch64"
default:
throw new Error(`Unsupported arch ${arch}`)
}
}
export function toAppImageOrSnapArch(arch: Arch): string {
switch (arch) {
case Arch.x64:
return "x86_64"
case Arch.ia32:
return "i386"
case Arch.armv7l:
return "arm"
case Arch.arm64:
return "arm_aarch64"
default:
throw new Error(`Unsupported arch ${arch}`)
}
}