257 lines
9.7 KiB
JavaScript
257 lines
9.7 KiB
JavaScript
const builder = require('electron-builder')
|
|
const path = require('path')
|
|
const fs = require('fs')
|
|
const basefile = __dirname + '/'
|
|
const package = fs.readFileSync(basefile + 'package.json')
|
|
const data = JSON.parse(package)
|
|
const version = data.version
|
|
const codename = data.codename
|
|
const ver = `${version} (${codename})`
|
|
const construct = require('./view/make/make.js')
|
|
const { platform, arch } = process
|
|
const Platform = builder.Platform
|
|
const Arch = builder.Arch
|
|
const artifactName = 'TheDesk-setup-${arch}.${ext}'
|
|
const config = {
|
|
productName: 'TheDesk',
|
|
appId: 'top.thedesk',
|
|
asarUnpack: ['node_modules/itunes-nowplaying-mac', 'main/script'],
|
|
afterSign: 'build/notarize.js',
|
|
directories: {
|
|
output: '../build',
|
|
},
|
|
win: {
|
|
icon: 'build/thedesk.ico',
|
|
target: ['nsis', 'appx', 'portable'],
|
|
publish: []
|
|
},
|
|
appx: {
|
|
identityName: '53491Cutls.TheDesk',
|
|
applicationId: 'Cutls.TheDesk',
|
|
publisherDisplayName: 'Cutls',
|
|
publisher: 'CN=629757F5-A5EE-474F-9562-B304A89A9FD1',
|
|
languages: ['JA-JP', 'EN-US'],
|
|
},
|
|
nsis: {
|
|
oneClick: false,
|
|
allowToChangeInstallationDirectory: true,
|
|
artifactName: 'TheDesk-setup-${arch}.${ext}',
|
|
},
|
|
linux: {
|
|
target: ['zip', 'appImage', 'snap', 'deb'],
|
|
category: 'Network',
|
|
},
|
|
deb: {
|
|
depends: ['gconf2', 'gconf-service', 'libnotify4', 'libappindicator1', 'libxtst6', 'libnss3']
|
|
},
|
|
mac: {
|
|
hardenedRuntime: true,
|
|
gatekeeperAssess: false,
|
|
entitlements: 'build/entitlements.mac.plist',
|
|
entitlementsInherit: 'build/entitlements.mac.plist',
|
|
},
|
|
dmg: {
|
|
sign: false,
|
|
},
|
|
}
|
|
|
|
async function build(os, arch, config) {
|
|
let targets = new Map()
|
|
let archToType = new Map()
|
|
archToType.set(arch, [])
|
|
targets.set(os, archToType)
|
|
await builder.build({
|
|
targets: targets,
|
|
config: config,
|
|
publish: 'never'
|
|
})
|
|
}
|
|
async function cmd(options) {
|
|
if (isTrue(options, 'help', 'h')) {
|
|
return console.log(help())
|
|
}
|
|
if (isTrue(options, 'onlyStore') || isTrue(options, 'withStore')) {
|
|
console.log('start building for application stores')
|
|
construct(ver, basefile, false, true)
|
|
if ((platform === 'win32' && !isTrue(options, 'skiWindows')) || isTrue(options, 'windows', 'w')) {
|
|
if ((isTrue(options, 'withIa32') && arch === 'x64') || arch === 'ia32') {
|
|
config.nsis.artifactName = artifactName.replace('${arch}', 'ia32')
|
|
await build(Platform.WINDOWS, Arch.ia32, config)
|
|
fs.renameSync(
|
|
`../build/TheDesk ${version}.exe`,
|
|
'../build/TheDesk-ia32-store.exe'
|
|
)
|
|
fs.renameSync(
|
|
`../build/TheDesk-setup-ia32.exe`,
|
|
'../build/TheDesk-setup-ia32-store.exe'
|
|
)
|
|
}
|
|
if (arch === 'x64') {
|
|
config.nsis.artifactName = artifactName.replace('${arch}', 'x64')
|
|
await build(Platform.WINDOWS, Arch.x64, config)
|
|
fs.renameSync(
|
|
`../build/TheDesk ${version}.exe`,
|
|
'../build/TheDesk-store.exe'
|
|
)
|
|
fs.renameSync(
|
|
`../build/TheDesk-setup-x64.exe`,
|
|
'../build/TheDesk-setup-store.exe'
|
|
)
|
|
}
|
|
}
|
|
if ((platform === 'linux' && !isTrue(options, 'skipLinux')) || isTrue(options, 'linux', 'l')) {
|
|
if (arch === 'ia32') {
|
|
await build(Platform.LINUX, Arch.ia32, config)
|
|
}
|
|
if ((isTrue(options, 'withIa32') && arch === 'x64')) {
|
|
console.log('snapcraft does not curretly support builing i386 on amd64')
|
|
}
|
|
if (arch === 'x64') {
|
|
await build(Platform.LINUX, Arch.x64, config)
|
|
if (!isTrue(options, 'onlyStore')) {
|
|
fs.renameSync(
|
|
`../build/thedesk_${version}_amd64.snap`,
|
|
`../build/thedesk_${version}_amd64-store.snap`
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!isTrue(options, 'onlyStore')) {
|
|
console.log('start building for normal usage')
|
|
construct(ver, basefile, false, false)
|
|
if ((platform === 'win32' && !isTrue(options, 'skiWindows')) || isTrue(options, 'windows', 'w')) {
|
|
if ((isTrue(options, 'withIa32') && arch === 'x64') || arch === 'ia32') {
|
|
config.nsis.artifactName = artifactName.replace('${arch}', 'ia32')
|
|
await build(Platform.WINDOWS, Arch.ia32, config)
|
|
fs.renameSync(
|
|
`../build/TheDesk ${version}.exe`,
|
|
'../build/TheDesk-ia32.exe'
|
|
)
|
|
}
|
|
if (arch === 'x64') {
|
|
config.nsis.artifactName = artifactName.replace('${arch}', 'x64')
|
|
await build(Platform.WINDOWS, Arch.x64, config)
|
|
fs.renameSync(
|
|
`../build/TheDesk ${version}.exe`,
|
|
'../build/TheDesk.exe'
|
|
)
|
|
fs.renameSync(
|
|
`../build/TheDesk-setup-x64.exe`,
|
|
'../build/TheDesk-setup.exe'
|
|
)
|
|
}
|
|
if ((isTrue(options, 'withArm64') && arch === 'x64') || arch === 'arm64') {
|
|
config.nsis.artifactName = artifactName.replace('${arch}', 'arm64')
|
|
await build(Platform.WINDOWS, Arch.arm64, config)
|
|
fs.renameSync(
|
|
`../build/TheDesk ${version}.exe`,
|
|
'../build/TheDesk-arm64.exe'
|
|
)
|
|
}
|
|
}
|
|
if ((platform === 'linux' && !isTrue(options, 'skipLinux')) || isTrue(options, 'linux', 'l')) {
|
|
if (arch === 'ia32') {
|
|
await build(Platform.LINUX, Arch.ia32, config)
|
|
}
|
|
if (isTrue(options, 'withIa32') && arch === 'x64') {
|
|
console.log('snapcraft does not curretly support builing i386 on amd64')
|
|
}
|
|
if (arch === 'x64') {
|
|
await build(Platform.LINUX, Arch.x64, config)
|
|
fs.renameSync(
|
|
`../build/thedesk_${version}_amd64.snap`,
|
|
`../build/thedesk_${version}_amd64-normal.snap`
|
|
)
|
|
if (isTrue(options, 'onlyStore') || isTrue(options, 'withStore')) {
|
|
fs.renameSync(
|
|
`../build/thedesk_${version}_amd64-store.snap`,
|
|
`../build/thedesk_${version}_amd64.snap`
|
|
)
|
|
}
|
|
}
|
|
}
|
|
if (platform === 'darwin' && !isTrue(options, 'skipMacOS')) {
|
|
if (isTrue(options, 'unnotarize')) delete config.afterSign
|
|
if (arch === 'x64') {
|
|
await build(Platform.MAC, Arch.x64, config)
|
|
fs.renameSync(
|
|
`../build/TheDesk-${version}.dmg`,
|
|
`../build/TheDesk-${version}-x64.dmg`
|
|
)
|
|
if (isTrue(options, 'withArm64')) {
|
|
delete config.afterSign
|
|
await build(Platform.MAC, Arch.arm64, config)
|
|
fs.renameSync(
|
|
`../build/TheDesk-${version}.dmg`,
|
|
`../build/TheDesk-${version}-arm64.dmg`
|
|
)
|
|
}
|
|
fs.renameSync(
|
|
`../build/TheDesk-${version}-x64.dmg`,
|
|
`../build/TheDesk-${version}.dmg`
|
|
)
|
|
}
|
|
if (arch === 'arm64') {
|
|
delete config.afterSign
|
|
await build(Platform.MAC, Arch.arm64, config)
|
|
fs.renameSync(
|
|
`../build/TheDesk-${version}.dmg`,
|
|
`../build/TheDesk-${version}-arm64.dmg`
|
|
)
|
|
if (isTrue(options, 'skipX64')) await build(Platform.MAC, Arch.x64, config)
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
function isTrue(options, long, short) {
|
|
const { argv } = process
|
|
if (options ? options[long] : 0) return true
|
|
if (argv.includes(`--${long}`)) return true
|
|
if (short && argv.includes(`-${short}`)) return true
|
|
return false
|
|
}
|
|
function help() {
|
|
return `
|
|
TheDesk Builder command tool
|
|
yarn build [options] (or node build.js [options])
|
|
yarn build:[preset] (check package.json)
|
|
|
|
--help or -h: show help
|
|
|
|
[Build for other platforms]
|
|
--windows (-w)
|
|
--linux (-l)
|
|
|
|
--skipWindows
|
|
--skipLinux
|
|
--skipMacOS
|
|
To skip building for itself platform.
|
|
|
|
|
|
[only Windows, Linux]
|
|
--onlyStore: application store of platforms assets(without update check)
|
|
--withStore: application store assets and normal version
|
|
|
|
[only Windows]
|
|
|
|
--withIa32: ia32 build on x64 system(if your machine is ia32, it will be built if this arg is not passed)
|
|
--withArm64(beta) arm64 build on x64 system(if your machine is arm64, it will be built if this arg is not passed, and not build store build for arm64)
|
|
|
|
[only macOS]
|
|
--unnotarize: Without notarize
|
|
`
|
|
}
|
|
|
|
/**
|
|
* Builder
|
|
* @module builder
|
|
* @param {Object} [options] - Options
|
|
* @param {boolean} [options.onlyStore] - App Store of platforms assets(without update check)
|
|
* @param {boolean} [options.withStore] - App Store of platforms assets(without update check) assets and normal version
|
|
* @param {boolean} [options.withIa32] - [Windows only] ia32 build on x64 system(if your machine is ia32, it will be built if this arg is not passed)
|
|
* @param {boolean} [options.withArm64] - [Windows only(beta)] arm64 build on x64 system(if your machine is arm64, it will be built if this arg is not passed, and not build store build for arm64)
|
|
* @return {void}
|
|
*/
|
|
module.exports = cmd |