github-desktop/script/dist-info.ts

174 lines
4.9 KiB
TypeScript
Raw Normal View History

2018-01-17 14:15:44 +00:00
import * as Path from 'path'
import * as Fs from 'fs'
2016-05-25 14:37:27 +00:00
2018-01-17 14:15:44 +00:00
import { getProductName, getVersion } from '../app/package-info'
2016-05-25 14:37:27 +00:00
2018-01-17 14:15:44 +00:00
const productName = getProductName()
const version = getVersion()
2017-11-20 01:30:35 +00:00
2018-01-17 14:15:44 +00:00
const projectRoot = Path.join(__dirname, '..')
2016-05-25 14:37:27 +00:00
2018-01-17 14:15:44 +00:00
export function getDistRoot() {
return Path.join(projectRoot, 'dist')
}
2018-01-17 14:15:44 +00:00
export function getDistPath() {
return Path.join(
getDistRoot(),
`${getExecutableName()}-${process.platform}-${getDistArchitecture()}`
2017-07-13 15:11:04 +00:00
)
2016-05-25 14:37:27 +00:00
}
2018-01-17 14:15:44 +00:00
export function getExecutableName() {
2017-07-14 14:20:20 +00:00
const suffix = process.env.NODE_ENV === 'development' ? '-dev' : ''
if (process.platform === 'win32') {
return `${getWindowsIdentifierName()}${suffix}`
2017-12-11 23:24:16 +00:00
} else if (process.platform === 'linux') {
return 'desktop'
2017-12-11 23:24:16 +00:00
} else {
return productName
}
2016-05-25 14:37:27 +00:00
}
2018-01-17 14:15:44 +00:00
export function getOSXZipName() {
return `${productName}-${getDistArchitecture()}.zip`
2016-06-16 19:42:35 +00:00
}
2018-01-17 14:15:44 +00:00
export function getOSXZipPath() {
return Path.join(getDistPath(), '..', getOSXZipName())
2016-06-16 19:42:35 +00:00
}
2018-01-17 14:15:44 +00:00
export function getWindowsInstallerName() {
2017-07-14 14:20:20 +00:00
const productName = getExecutableName()
return `${productName}Setup-${getDistArchitecture()}.msi`
2016-05-25 20:48:45 +00:00
}
2018-01-17 14:15:44 +00:00
export function getWindowsInstallerPath() {
return Path.join(getDistPath(), '..', 'installer', getWindowsInstallerName())
2016-06-16 19:42:35 +00:00
}
2018-01-17 14:15:44 +00:00
export function getWindowsStandaloneName() {
2017-07-14 14:20:20 +00:00
const productName = getExecutableName()
return `${productName}Setup-${getDistArchitecture()}.exe`
2016-06-16 19:42:35 +00:00
}
2018-01-17 14:15:44 +00:00
export function getWindowsStandalonePath() {
return Path.join(getDistPath(), '..', 'installer', getWindowsStandaloneName())
2016-06-16 19:42:35 +00:00
}
2021-04-08 11:30:14 +00:00
export function getWindowsFullNugetPackageName(
includeArchitecture: boolean = false
) {
const architectureInfix = includeArchitecture
? `-${getDistArchitecture()}`
: ''
2021-04-08 11:30:14 +00:00
return `${getWindowsIdentifierName()}-${version}${architectureInfix}-full.nupkg`
2016-06-16 19:42:35 +00:00
}
2018-01-17 14:15:44 +00:00
export function getWindowsFullNugetPackagePath() {
return Path.join(
2017-07-13 15:11:04 +00:00
getDistPath(),
'..',
'installer',
getWindowsFullNugetPackageName()
)
2016-05-25 20:48:45 +00:00
}
2021-04-08 11:30:14 +00:00
export function getWindowsDeltaNugetPackageName(
includeArchitecture: boolean = false
) {
const architectureInfix = includeArchitecture
? `-${getDistArchitecture()}`
: ''
2021-04-08 11:30:14 +00:00
return `${getWindowsIdentifierName()}-${version}${architectureInfix}-delta.nupkg`
2017-07-13 15:49:16 +00:00
}
2018-01-17 14:15:44 +00:00
export function getWindowsDeltaNugetPackagePath() {
return Path.join(
2017-07-13 15:49:16 +00:00
getDistPath(),
'..',
'installer',
getWindowsDeltaNugetPackageName()
)
}
2018-01-17 14:15:44 +00:00
export function getWindowsIdentifierName() {
2017-05-12 18:32:51 +00:00
return 'GitHubDesktop'
}
2018-01-17 14:15:44 +00:00
export function getBundleSizes() {
2023-06-27 22:50:54 +00:00
const outPath = Path.join(projectRoot, 'out')
return {
// eslint-disable-next-line no-sync
rendererBundleSize: Fs.statSync(Path.join(outPath, 'renderer.js')).size,
// eslint-disable-next-line no-sync
mainBundleSize: Fs.statSync(Path.join(outPath, 'main.js')).size,
}
2017-06-19 20:35:46 +00:00
}
export const isPublishable = () =>
['production', 'beta', 'test'].includes(getChannel())
2017-06-19 20:35:46 +00:00
export const getChannel = () =>
process.env.RELEASE_CHANNEL ?? process.env.NODE_ENV ?? 'development'
export function getDistArchitecture(): 'arm64' | 'x64' {
// If a specific npm_config_arch is set, we use that one instead of the OS arch (to support cross compilation)
if (
process.env.npm_config_arch === 'arm64' ||
process.env.npm_config_arch === 'x64'
) {
return process.env.npm_config_arch
}
if (process.arch === 'arm64') {
return 'arm64'
}
// TODO: Check if it's x64 running on an arm64 Windows with IsWow64Process2
// More info: https://www.rudyhuyn.com/blog/2017/12/13/how-to-detect-that-your-x86-application-runs-on-windows-on-arm/
// Right now (March 3, 2021) is not very important because support for x64
// apps on an arm64 Windows is experimental. See:
// https://blogs.windows.com/windows-insider/2020/12/10/introducing-x64-emulation-in-preview-for-windows-10-on-arm-pcs-to-the-windows-insider-program/
return 'x64'
}
2018-01-17 14:15:44 +00:00
export function getUpdatesURL() {
// It is also possible to use a `x64/` path, but for now we'll leave the
// original URL without architecture in it (which will still work for
// compatibility reasons) in case anything goes wrong until we have everything
// sorted out.
const architecturePath = getDistArchitecture() === 'arm64' ? 'arm64/' : ''
return `https://central.github.com/api/deployments/desktop/desktop/${architecturePath}latest?version=${version}&env=${getChannel()}`
2017-07-13 14:28:20 +00:00
}
2018-01-17 14:15:44 +00:00
export function shouldMakeDelta() {
// Only production and beta channels include deltas. Test releases aren't
// necessarily sequential so deltas wouldn't make sense.
2023-06-27 22:50:54 +00:00
return ['production', 'beta'].includes(getChannel())
}
export function getIconFileName(): string {
const baseName = 'icon-logo'
return getChannel() === 'development' ? `${baseName}-yellow` : baseName
}
2023-10-23 14:27:21 +00:00
export function getChannelFromReleaseBranch(): string {
const branchName = process.env.GITHUB_HEAD_REF ?? ''
if (!branchName.includes('releases/')) {
return 'development'
}
if (getVersion().includes('test')) {
return 'test'
}
if (getVersion().includes('beta')) {
return 'beta'
}
return 'production'
}