diff --git a/.idea/electron-builder.iml b/.idea/electron-builder.iml index 8738136cc2c..5a0811a72be 100644 --- a/.idea/electron-builder.iml +++ b/.idea/electron-builder.iml @@ -5,7 +5,9 @@ + + @@ -15,6 +17,7 @@ + diff --git a/docs/Options.md b/docs/Options.md index 20fafa3d647..45441bf991d 100644 --- a/docs/Options.md +++ b/docs/Options.md @@ -244,6 +244,9 @@ Please note — on macOS [you need to register an `open-url` event handler](http ### `.build.squirrelWindows` + +To use Squirrel.Windows please install `electron-builder-squirrel-windows` dependency. + | Name | Description | --- | --- | iconUrl |

A URL to an ICO file to use as the application icon (displayed in Control Panel > Programs and Features). Defaults to the Electron icon.

Please note — [local icon file url is not accepted](https://github.com/atom/grunt-electron-installer/issues/73), must be https/http.

  • If you don’t plan to build windows installer, you can omit it.
  • If your project repository is public on GitHub, it will be https://github.com/${u}/${p}/blob/master/build/icon.ico?raw=true by default.
@@ -260,7 +263,7 @@ Windows specific build options. | Name | Description | --- | --- -| target |

Target package type: list of nsis, appx, squirrel, 7z, zip, tar.xz, tar.lz, tar.gz, tar.bz2, dir. Defaults to nsis.

AppX package can be built only on Windows 10.

+| target |

Target package type: list of nsis, appx, squirrel, 7z, zip, tar.xz, tar.lz, tar.gz, tar.bz2, dir. Defaults to nsis.

AppX package can be built only on Windows 10.

To use Squirrel.Windows please install electron-builder-squirrel-windows dependency.

| signingHashAlgorithms |

Array of signing algorithms used. Defaults to ['sha1', 'sha256']

For AppX sha256 is always used.

| icon | The path to application icon. Defaults to `build/icon.ico` (consider using this convention instead of complicating your configuration). | legalTrademarks | The trademarks and registered trademarks. diff --git a/package.json b/package.json index 0919f137bdd..feb4a0eb8c2 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,8 @@ "private": true, "license": "MIT", "scripts": { - "compile": "ts-babel packages/electron-builder-http packages/electron-builder-util packages/electron-builder packages/electron-auto-updater test", - "lint": "node ./packages/lint.js", + "compile": "ts-babel packages/electron-builder-http packages/electron-builder-core packages/electron-builder-util packages/electron-builder packages/electron-builder-squirrel-windows packages/electron-auto-updater test", + "lint": "node test/out/helpers/lint.js", "pretest": "node ./test/vendor/yarn.js compile && node ./test/vendor/yarn.js lint && node ./test/vendor/yarn.js check-deps", "check-deps": "node ./test/out/helpers/checkDeps.js", "test": "node ./test/out/helpers/runTests.js", @@ -56,7 +56,8 @@ "testRegex": "\\.js$", "modulePaths": [ "/packages", - "/packages/electron-builder/node_modules" + "/packages/electron-builder/node_modules", + "/packages/electron-builder-util/node_modules" ], "setupTestFrameworkScriptFile": "/test/jestSetup.js" }, diff --git a/packages/check-release.js b/packages/check-release.js deleted file mode 100644 index 1368c539070..00000000000 --- a/packages/check-release.js +++ /dev/null @@ -1,137 +0,0 @@ -#!/usr/bin/env node - -/** This script checks whether each package should be released with - * a new version according to ComVer https://github.com/staltz/comver. - * It has two modes: REPORT and ORACLE. - * - * It runs in REPORT mode if no additional command line argument was given. - * For instance, `node check-release.js`. It will display a human readable - * report on which packages should have new releases. - * - * It runs in ORACLE mode is an argument was provided, e.g., - * `node check-release.js xstream-run`, - * it will exit with a status code answering whether the `xstream-run` - * package should be released with a new version. - * 0 means no new release is necessary - * 2 means it should have a new minor version _.x release - * 3 means it should have a new major version x._ release - */ - -const conventionalChangelog = require('conventional-changelog') -const fs = require('fs') -const path = require("path") - -const theCommitThatStartedTheMonorepo = "82f16d1b3d6fe163d1f1c52e5a9d05717e0e03b9" - -const packagesWithChangelog = fs.readdirSync(__dirname).filter(it => !it.includes(".")).sort() -console.log(packagesWithChangelog) - -const status = {}; -for (const packageName of packagesWithChangelog) { - status[packageName] = { - increment: 0, // 0 = nothing, 1 = patch, 2 = minor, 3 = major - commits: [], - }; -} - -function incrementName(code) { - if (code === 1) { - return 'patch' - } - else if (code === 2) { - return 'minor' - } - else if (code === 3) { - return 'major' - } - else { - return '' - } -} - -function isCommitBreakingChange(commit) { - return (typeof commit.footer === 'string' && commit.footer.indexOf('BREAKING CHANGE') !== -1) -} - -function showReportHeaderPositive() { - console.log( - 'RELEASES TO DO\n\n' + - 'We checked all packages and recent commits, and discovered that\n' + - 'according to ComVer https://github.com/staltz/comver you should\n' + - 'release new versions for the following packages.\n'); -} - -function showReportHeaderNegative() { - console.log( - 'Nothing to release.\n\n' + - 'We checked all packages and recent commits, and discovered that\n' + - 'you do not need to release any new version, according to ComVer.') -} - -function showReport(status) { - let headerShown = false; - for (const package in status) { - if (status.hasOwnProperty(package) && status[package].increment > 0) { - if (!headerShown) { - showReportHeaderPositive(); - headerShown = true; - } - - console.log('`' + package + '` needs a new ' + - incrementName(status[package].increment).toUpperCase() + - ' version released because:'); - status[package].commits.forEach(function (commit) { - console.log(' . ' + commit.header); - if (isCommitBreakingChange(commit)) { - console.log(' BREAKING CHANGE'); - } - }); - console.log(''); - } - } - if (!headerShown) { - showReportHeaderNegative(); - } -} - -conventionalChangelog({ - preset: 'angular', - append: true, - transform: function (commit, cb) { - console.log(commit.scope) - if (packagesWithChangelog.indexOf(commit.scope) === -1) { - cb(); - return; - } - - const package = commit.scope; - let toPush = null; - if (commit.type === 'fix' || commit.type === 'perf' || commit.type === 'feat') { - status[package].increment = Math.max(status[package].increment, 2); - toPush = commit; - } - if (isCommitBreakingChange(commit)) { - status[package].increment = Math.max(status[package].increment, 3); - toPush = commit; - } - if (toPush) { - status[package].commits.push(commit); - } - if (commit.type === 'release') { - status[package].increment = 0; - status[package].commits = []; - } - cb(); - }, -}, {}, {from: theCommitThatStartedTheMonorepo, reverse: true}) - .on('end', function () { - // ORACLE mode - var argPackage = process.argv[2]; - if (typeof argPackage === 'string' && argPackage.length > 0) { - return process.exit(status[argPackage].increment); - } - // REPORT mode - else { - showReport(status); - } - }).resume(); \ No newline at end of file diff --git a/packages/electron-builder-core/package.json b/packages/electron-builder-core/package.json new file mode 100644 index 00000000000..efa7279bd1c --- /dev/null +++ b/packages/electron-builder-core/package.json @@ -0,0 +1,14 @@ +{ + "name": "electron-builder-core", + "version": "0.0.0-semantic-release", + "main": "out/core.js", + "author": "Vladimir Krivosheev", + "license": "MIT", + "repository": "electron-userland/electron-builder", + "bugs": "https://github.com/electron-userland/electron-builder/issues", + "homepage": "https://github.com/electron-userland/electron-builder", + "files": [ + "out" + ], + "typings": "./out/electron-builder-core.d.ts" +} diff --git a/packages/electron-builder-core/src/core.ts b/packages/electron-builder-core/src/core.ts new file mode 100644 index 00000000000..3503ddcbea3 --- /dev/null +++ b/packages/electron-builder-core/src/core.ts @@ -0,0 +1,86 @@ +export enum Arch { + ia32, x64, armv7l +} + +export function getArchSuffix(arch: Arch): string { + return arch === Arch.x64 ? "" : `-${Arch[arch]}` +} + +export function archFromString(name: string): Arch { + if (name === "x64") { + return Arch.x64 + } + if (name === "ia32") { + return Arch.ia32 + } + if (name === "armv7l") { + return Arch.armv7l + } + + throw new Error(`Unsupported arch ${name}`) +} + +export class Platform { + static MAC = new Platform("mac", "mac", "darwin") + static LINUX = new Platform("linux", "linux", "linux") + static WINDOWS = new Platform("windows", "win", "win32") + + // deprecated + //noinspection JSUnusedGlobalSymbols + static OSX = Platform.MAC + + constructor(public name: string, public buildConfigurationKey: string, public nodeName: string) { + } + + toString() { + return this.name + } + + createTarget(type?: string | Array | null, ...archs: Array): Map>> { + const archToType = new Map() + if (this === Platform.MAC) { + archs = [Arch.x64] + } + + for (const arch of (archs == null || archs.length === 0 ? [archFromString(process.arch)] : archs)) { + archToType.set(arch, type == null ? [] : (Array.isArray(type) ? type : [type])) + } + return new Map([[this, archToType]]) + } + + static current(): Platform { + return Platform.fromString(process.platform) + } + + static fromString(name: string): Platform { + name = name.toLowerCase() + switch (name) { + case Platform.MAC.nodeName: + case Platform.MAC.name: + return Platform.MAC + + case Platform.WINDOWS.nodeName: + case Platform.WINDOWS.name: + case Platform.WINDOWS.buildConfigurationKey: + return Platform.WINDOWS + + case Platform.LINUX.nodeName: + return Platform.LINUX + + default: + throw new Error(`Unknown platform: ${name}`) + } + } +} + + +export abstract class Target { + constructor(public readonly name: string, public readonly isAsyncSupported: boolean = true) { + } + + abstract build(appOutDir: string, arch: Arch): Promise + + finishBuild(): Promise { + return Promise.resolve() + } +} \ No newline at end of file diff --git a/packages/electron-builder-core/tsconfig.json b/packages/electron-builder-core/tsconfig.json new file mode 100755 index 00000000000..8e198e9fe4d --- /dev/null +++ b/packages/electron-builder-core/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig-base.json", + "compilerOptions": { + "outDir": "out" + }, + "declaration": { + "electron-builder-core": "out/electron-builder-core.d.ts" + }, + "include": [ + "src/**/*.ts" + ] +} \ No newline at end of file diff --git a/packages/electron-builder-squirrel-windows/package.json b/packages/electron-builder-squirrel-windows/package.json new file mode 100644 index 00000000000..e3100626a53 --- /dev/null +++ b/packages/electron-builder-squirrel-windows/package.json @@ -0,0 +1,21 @@ +{ + "name": "electron-builder-squirrel-windows", + "version": "0.0.0-semantic-release", + "main": "out/squirrelWindows.js", + "author": "Vladimir Krivosheev", + "license": "MIT", + "repository": "electron-userland/electron-builder", + "bugs": "https://github.com/electron-userland/electron-builder/issues", + "homepage": "https://github.com/electron-userland/electron-builder", + "files": [ + "out" + ], + "dependencies": { + "electron-builder-util": "0.0.0-semantic-release", + "electron-builder-core": "0.0.0-semantic-release", + "bluebird-lst-c": "^1.0.5", + "fs-extra-p": "^3.0.3", + "archiver": "^1.3.0" + }, + "typings": "./out/electron-builder-squirrel-windows.d.ts" +} diff --git a/packages/electron-builder/src/targets/squirrelPack.ts b/packages/electron-builder-squirrel-windows/src/squirrelPack.ts similarity index 99% rename from packages/electron-builder/src/targets/squirrelPack.ts rename to packages/electron-builder-squirrel-windows/src/squirrelPack.ts index f96332d1ac7..1c0f5b3e0ce 100644 --- a/packages/electron-builder/src/targets/squirrelPack.ts +++ b/packages/electron-builder-squirrel-windows/src/squirrelPack.ts @@ -2,7 +2,7 @@ import * as path from "path" import BluebirdPromise from "bluebird-lst-c" import { remove, copy, createWriteStream, unlink, ensureDir, stat } from "fs-extra-p" import { spawn, exec, prepareArgs, execWine, debug } from "electron-builder-util" -import { WinPackager } from "../winPackager" +import { WinPackager } from "electron-builder/out/winPackager" import { log } from "electron-builder-util/out/log" import { walk, copyFile } from "electron-builder-util/out/fs" diff --git a/packages/electron-builder/src/targets/squirrelWindows.ts b/packages/electron-builder-squirrel-windows/src/squirrelWindows.ts similarity index 90% rename from packages/electron-builder/src/targets/squirrelWindows.ts rename to packages/electron-builder-squirrel-windows/src/squirrelWindows.ts index 24a4a4cf206..193372ab940 100644 --- a/packages/electron-builder/src/targets/squirrelWindows.ts +++ b/packages/electron-builder-squirrel-windows/src/squirrelWindows.ts @@ -1,13 +1,10 @@ -import { WinPackager } from "../winPackager" -import { getArchSuffix } from "../platformPackager" -import { Arch } from "../metadata" +import { WinPackager } from "electron-builder/out/winPackager" import * as path from "path" import { warn, log } from "electron-builder-util/out/log" -import { getRepositoryInfo } from "../repositoryInfo" import { getBinFromBintray } from "electron-builder-util/out/binDownload" import { buildInstaller, convertVersion, SquirrelOptions } from "./squirrelPack" -import { SquirrelWindowsOptions } from "../options/winOptions" -import { Target } from "./targetFactory" +import { SquirrelWindowsOptions } from "electron-builder/out/options/winOptions" +import { Target, Arch, getArchSuffix } from "electron-builder-core" const SW_VERSION = "1.5.1.4" //noinspection SpellCheckingInspection @@ -53,7 +50,7 @@ export default class SquirrelWindowsTarget extends Target { const packager = this.packager let iconUrl = this.options.iconUrl || packager.config.iconUrl if (iconUrl == null) { - const info = await getRepositoryInfo(packager.appInfo.metadata, packager.info.devMetadata) + const info = await packager.getRepositoryInfo() if (info != null) { iconUrl = `https://github.com/${info.user}/${info.project}/blob/master/${packager.relativeBuildResourcesDirname}/icon.ico?raw=true` } @@ -93,7 +90,7 @@ export default class SquirrelWindowsTarget extends Target { } if (options.remoteReleases === true) { - const info = await getRepositoryInfo(packager.appInfo.metadata, packager.info.devMetadata) + const info = await packager.getRepositoryInfo() if (info == null) { warn("remoteReleases set to true, but cannot get repository info") } diff --git a/packages/electron-builder-squirrel-windows/tsconfig.json b/packages/electron-builder-squirrel-windows/tsconfig.json new file mode 100755 index 00000000000..38a022d9dba --- /dev/null +++ b/packages/electron-builder-squirrel-windows/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "../tsconfig-base.json", + "compilerOptions": { + "outDir": "out" + }, + "declaration": { + "electron-builder-squirrel-windows": "out/electron-builder-squirrel-windows.d.ts" + }, + "include": [ + "src/**/*.ts" + ], + "files": [ + "../../node_modules/@types/node/index.d.ts", + "../../typings/debug.d.ts", + "../electron-builder/out/electron-builder.d.ts", + "../electron-builder-core/out/electron-builder-core.d.ts", + "../electron-builder-util/out/electron-builder-util.d.ts", + "node_modules/fs-extra-p/index.d.ts", + "node_modules/bluebird-lst-c/index.d.ts", + "node_modules/fs-extra-p/index.d.ts" + ] +} \ No newline at end of file diff --git a/packages/electron-builder/package.json b/packages/electron-builder/package.json index 78af7d34815..384cefba455 100644 --- a/packages/electron-builder/package.json +++ b/packages/electron-builder/package.json @@ -44,7 +44,6 @@ "homepage": "https://github.com/electron-userland/electron-builder", "dependencies": { "7zip-bin": "^2.0.4", - "archiver": "^1.3.0", "asar-electron-builder": "^0.13.5", "bluebird-lst-c": "^1.0.5", "chalk": "^1.1.3", @@ -73,7 +72,8 @@ "uuid-1345": "^0.99.6", "yargs": "^6.6.0", "electron-builder-http": "0.0.0-semantic-release", - "electron-builder-util": "0.0.0-semantic-release" + "electron-builder-util": "0.0.0-semantic-release", + "electron-builder-core": "0.0.0-semantic-release" }, "typings": "./out/electron-builder.d.ts", "publishConfig": { diff --git a/packages/electron-builder/src/builder.ts b/packages/electron-builder/src/builder.ts index c6924d008cf..c2a0057aab9 100644 --- a/packages/electron-builder/src/builder.ts +++ b/packages/electron-builder/src/builder.ts @@ -6,7 +6,7 @@ import { executeFinally } from "electron-builder-util/out/promise" import BluebirdPromise from "bluebird-lst-c" import { isEmptyOrSpaces, debug } from "electron-builder-util" import { log } from "electron-builder-util/out/log" -import { Platform, Arch, archFromString } from "./metadata" +import { Platform, Arch, archFromString } from "electron-builder-core" import { DIR_TARGET } from "./targets/targetFactory" import { BintrayPublisher } from "./publish/BintrayPublisher" import { PublishConfiguration, GithubOptions, BintrayOptions } from "electron-builder-http/out/publishOptions" diff --git a/packages/electron-builder/src/index.ts b/packages/electron-builder/src/index.ts index c52be2b1d19..f015f943897 100644 --- a/packages/electron-builder/src/index.ts +++ b/packages/electron-builder/src/index.ts @@ -1,9 +1,10 @@ export { Packager } from "./packager" -export { PackagerOptions, ArtifactCreated, BuildInfo, getArchSuffix } from "./platformPackager" -export { DIR_TARGET, DEFAULT_TARGET, Target } from "./targets/targetFactory" +export { PackagerOptions, ArtifactCreated, BuildInfo } from "./platformPackager" +export { getArchSuffix, Platform, Arch, archFromString, Target } from "electron-builder-core" export { BuildOptions, build, CliOptions, createTargets } from "./builder" export { PublishOptions, Publisher } from "./publish/publisher" -export { AppMetadata, DevMetadata, Platform, Arch, archFromString, BuildMetadata, CompressionLevel } from "./metadata" +export { AppMetadata, DevMetadata, BuildMetadata, CompressionLevel } from "./metadata" export { MacOptions, DmgOptions, MasBuildOptions, MacOsTargetName } from "./options/macOptions" export { WinBuildOptions, NsisOptions, SquirrelWindowsOptions, AppXOptions } from "./options/winOptions" -export { LinuxBuildOptions } from "./options/linuxOptions" \ No newline at end of file +export { LinuxBuildOptions } from "./options/linuxOptions" +export { DIR_TARGET } from "./targets/targetFactory" \ No newline at end of file diff --git a/packages/electron-builder/src/linuxPackager.ts b/packages/electron-builder/src/linuxPackager.ts index d9299babb7b..1d170e7056c 100755 --- a/packages/electron-builder/src/linuxPackager.ts +++ b/packages/electron-builder/src/linuxPackager.ts @@ -1,8 +1,8 @@ import * as path from "path" import { PlatformPackager, BuildInfo } from "./platformPackager" -import { Platform } from "./metadata" +import { Platform, Target } from "electron-builder-core" import FpmTarget from "./targets/fpm" -import { createCommonTarget, DIR_TARGET, Target } from "./targets/targetFactory" +import { createCommonTarget, DIR_TARGET } from "./targets/targetFactory" import { LinuxTargetHelper } from "./targets/LinuxTargetHelper" import AppImageTarget from "./targets/appImage" import { rename } from "fs-extra-p" diff --git a/packages/electron-builder/src/macPackager.ts b/packages/electron-builder/src/macPackager.ts index 8cc4149ec80..e330a94791d 100644 --- a/packages/electron-builder/src/macPackager.ts +++ b/packages/electron-builder/src/macPackager.ts @@ -1,5 +1,4 @@ import { PlatformPackager, BuildInfo } from "./platformPackager" -import { Platform, Arch } from "./metadata" import { MasBuildOptions, MacOptions } from "./options/macOptions" import * as path from "path" import BluebirdPromise from "bluebird-lst-c" @@ -8,10 +7,11 @@ import { createKeychain, CodeSigningInfo, findIdentity, appleCertificatePrefixes import { deepAssign } from "electron-builder-util/out/deepAssign" import { signAsync, SignOptions } from "electron-macos-sign" import { DmgTarget } from "./targets/dmg" -import { createCommonTarget, DIR_TARGET, NoOpTarget, Target } from "./targets/targetFactory" +import { createCommonTarget, DIR_TARGET, NoOpTarget } from "./targets/targetFactory" import { AppInfo } from "./appInfo" import { PkgTarget, prepareProductBuildArgs } from "./targets/pkg" import { exec } from "electron-builder-util" +import { Target, Platform, Arch } from "electron-builder-core" export default class MacPackager extends PlatformPackager { readonly codeSigningInfo: Promise diff --git a/packages/electron-builder/src/metadata.ts b/packages/electron-builder/src/metadata.ts index 85e655bc3d2..b3a6e130f30 100755 --- a/packages/electron-builder/src/metadata.ts +++ b/packages/electron-builder/src/metadata.ts @@ -4,6 +4,7 @@ import { MacOptions, DmgOptions, MasBuildOptions } from "./options/macOptions" import { Publish } from "electron-builder-http/out/publishOptions" import { WinBuildOptions, NsisOptions, SquirrelWindowsOptions, AppXOptions } from "./options/winOptions" import { LinuxBuildOptions, SnapOptions } from "./options/linuxOptions" +import { Arch } from "electron-builder-core" export interface Metadata { readonly repository?: string | RepositoryInfo | null @@ -357,81 +358,10 @@ export interface PlatformSpecificBuildOptions { readonly forceCodeSigning?: boolean } -export class Platform { - static MAC = new Platform("mac", "mac", "darwin") - static LINUX = new Platform("linux", "linux", "linux") - static WINDOWS = new Platform("windows", "win", "win32") - - // deprecated - //noinspection JSUnusedGlobalSymbols - static OSX = Platform.MAC - - constructor(public name: string, public buildConfigurationKey: string, public nodeName: string) { - } - - toString() { - return this.name - } - - createTarget(type?: string | Array | null, ...archs: Array): Map>> { - const archToType = new Map() - if (this === Platform.MAC) { - archs = [Arch.x64] - } - - for (const arch of (archs == null || archs.length === 0 ? [archFromString(process.arch)] : archs)) { - archToType.set(arch, type == null ? [] : (Array.isArray(type) ? type : [type])) - } - return new Map([[this, archToType]]) - } - - static current(): Platform { - return Platform.fromString(process.platform) - } - - static fromString(name: string): Platform { - name = name.toLowerCase() - switch (name) { - case Platform.MAC.nodeName: - case Platform.MAC.name: - return Platform.MAC - - case Platform.WINDOWS.nodeName: - case Platform.WINDOWS.name: - case Platform.WINDOWS.buildConfigurationKey: - return Platform.WINDOWS - - case Platform.LINUX.nodeName: - return Platform.LINUX - - default: - throw new Error(`Unknown platform: ${name}`) - } - } -} - -export enum Arch { - ia32, x64, armv7l -} - export function toLinuxArchString(arch: Arch) { return arch === Arch.ia32 ? "i386" : (arch === Arch.x64 ? "amd64" : "armv7l") } -export function archFromString(name: string): Arch { - if (name === "x64") { - return Arch.x64 - } - if (name === "ia32") { - return Arch.ia32 - } - if (name === "armv7l") { - return Arch.armv7l - } - - throw new Error(`Unsupported arch ${name}`) -} - export function getDirectoriesConfig(m: DevMetadata) { return m.build.directories || (m).directories } \ No newline at end of file diff --git a/packages/electron-builder/src/options/winOptions.ts b/packages/electron-builder/src/options/winOptions.ts index 2b35150b7e8..7538585bdd8 100644 --- a/packages/electron-builder/src/options/winOptions.ts +++ b/packages/electron-builder/src/options/winOptions.ts @@ -10,6 +10,8 @@ export interface WinBuildOptions extends PlatformSpecificBuildOptions { Target package type: list of `nsis`, `appx`, `squirrel`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`. Defaults to `nsis`. AppX package can be built only on Windows 10. + + To use Squirrel.Windows please install `electron-builder-squirrel-windows` dependency. */ readonly target?: Array | null @@ -145,6 +147,8 @@ export interface NsisOptions { /* ### `.build.squirrelWindows` + + To use Squirrel.Windows please install `electron-builder-squirrel-windows` dependency. */ export interface SquirrelWindowsOptions extends WinBuildOptions { /* diff --git a/packages/electron-builder/src/packager.ts b/packages/electron-builder/src/packager.ts index d0485024e90..53f70a17fc1 100644 --- a/packages/electron-builder/src/packager.ts +++ b/packages/electron-builder/src/packager.ts @@ -3,7 +3,7 @@ import { computeDefaultAppDirectory, getElectronVersion, use, exec, isEmptyOrSpa import { all, executeFinally } from "electron-builder-util/out/promise" import { EventEmitter } from "events" import BluebirdPromise from "bluebird-lst-c" -import { AppMetadata, DevMetadata, Platform, Arch, BuildMetadata, getDirectoriesConfig } from "./metadata" +import { AppMetadata, DevMetadata, BuildMetadata, getDirectoriesConfig } from "./metadata" import { PlatformPackager, BuildInfo, ArtifactCreated } from "./platformPackager" import { WinPackager } from "./winPackager" import * as errorMessages from "./errorMessages" @@ -13,11 +13,12 @@ import { lt as isVersionLessThan } from "semver" import { warn, log } from "electron-builder-util/out/log" import { AppInfo } from "./appInfo" import MacPackager from "./macPackager" -import { createTargets, Target } from "./targets/targetFactory" +import { createTargets } from "./targets/targetFactory" import { readPackageJson } from "./util/readPackageJson" import { TmpDir } from "electron-builder-util/out/tmp" import { BuildOptions } from "./builder" import { getGypEnv, installOrRebuild } from "./yarn" +import { Platform, Arch, Target } from "electron-builder-core" function addHandler(emitter: EventEmitter, event: string, handler: Function) { emitter.on(event, handler) diff --git a/packages/electron-builder/src/platformPackager.ts b/packages/electron-builder/src/platformPackager.ts index 143750aded9..b1e2c5e3e0d 100644 --- a/packages/electron-builder/src/platformPackager.ts +++ b/packages/electron-builder/src/platformPackager.ts @@ -1,4 +1,4 @@ -import { AppMetadata, DevMetadata, Platform, PlatformSpecificBuildOptions, Arch, FileAssociation, BuildMetadata, getDirectoriesConfig } from "./metadata" +import { AppMetadata, DevMetadata, PlatformSpecificBuildOptions, FileAssociation, BuildMetadata, getDirectoriesConfig } from "./metadata" import BluebirdPromise from "bluebird-lst-c" import * as path from "path" import { readdir, remove, rename } from "fs-extra-p" @@ -16,10 +16,10 @@ import { BuildOptions } from "./builder" import { PublishConfiguration, GithubOptions, BintrayOptions, GenericServerOptions } from "electron-builder-http/out/publishOptions" import { getRepositoryInfo } from "./repositoryInfo" import { dependencies } from "./yarn" -import { Target } from "./targets/targetFactory" import { deepAssign } from "electron-builder-util/out/deepAssign" import { statOrNull, unlinkIfExists, copyDir } from "electron-builder-util/out/fs" import EventEmitter = NodeJS.EventEmitter +import { Arch, Target, getArchSuffix, Platform } from "electron-builder-core" export interface PackagerOptions { targets?: Map> @@ -525,10 +525,17 @@ export abstract class PlatformPackager } return null } + + getRepositoryInfo(): Promise { + return getRepositoryInfo(this.appInfo.metadata, this.info.devMetadata) + } } -export function getArchSuffix(arch: Arch): string { - return arch === Arch.x64 ? "" : `-${Arch[arch]}` +export interface RepositoryInfo { + type: string + domain: string + user: string + project: string } export interface ArtifactCreated { diff --git a/packages/electron-builder/src/targets/appImage.ts b/packages/electron-builder/src/targets/appImage.ts index db76319b44e..fac710cc47c 100644 --- a/packages/electron-builder/src/targets/appImage.ts +++ b/packages/electron-builder/src/targets/appImage.ts @@ -1,4 +1,3 @@ -import { Arch } from "../metadata" import * as path from "path" import { exec } from "electron-builder-util" import { open, write, createReadStream, createWriteStream, close, chmod } from "fs-extra-p" @@ -8,7 +7,7 @@ import BluebirdPromise from "bluebird-lst-c" import { v1 as uuid1 } from "uuid-1345" import { LinuxPackager } from "../linuxPackager" import { log } from "electron-builder-util/out/log" -import { Target } from "./targetFactory" +import { Target, Arch } from "electron-builder-core" import { unlinkIfExists } from "electron-builder-util/out/fs" const appImageVersion = process.platform === "darwin" ? "AppImage-09-07-16-mac" : "AppImage-09-07-16-linux" diff --git a/packages/electron-builder/src/targets/appx.ts b/packages/electron-builder/src/targets/appx.ts index 754fe2ba9e4..f5de71b1197 100644 --- a/packages/electron-builder/src/targets/appx.ts +++ b/packages/electron-builder/src/targets/appx.ts @@ -1,12 +1,11 @@ -import { getArchSuffix } from "../platformPackager" -import { Arch } from "../metadata" import { WinPackager } from "../winPackager" +import { getArchSuffix, Arch } from "electron-builder-core" import { use, spawn } from "electron-builder-util" import { emptyDir, copy, readFile, writeFile } from "fs-extra-p" import * as path from "path" import { AppXOptions } from "../options/winOptions" import BluebirdPromise from "bluebird-lst-c" -import { Target } from "./targetFactory" +import { Target } from "electron-builder-core" import { getSignVendorPath } from "../windowsCodeSign" import sanitizeFileName from "sanitize-filename" import { release } from "os" diff --git a/packages/electron-builder/src/targets/dmg.ts b/packages/electron-builder/src/targets/dmg.ts index 9975e58da6f..ed64fadb03f 100644 --- a/packages/electron-builder/src/targets/dmg.ts +++ b/packages/electron-builder/src/targets/dmg.ts @@ -8,8 +8,7 @@ import { debug, use, exec, isEmptyOrSpaces, spawn } from "electron-builder-util" import { copy, unlink, outputFile, remove, readFile } from "fs-extra-p" import { executeFinally } from "electron-builder-util/out/promise" import sanitizeFileName from "sanitize-filename" -import { Arch } from "../metadata" -import { Target } from "./targetFactory" +import { Target, Arch } from "electron-builder-core" import { exists, statOrNull } from "electron-builder-util/out/fs" export class DmgTarget extends Target { diff --git a/packages/electron-builder/src/targets/fpm.ts b/packages/electron-builder/src/targets/fpm.ts index 7a52bbd825e..730fe6c57a0 100644 --- a/packages/electron-builder/src/targets/fpm.ts +++ b/packages/electron-builder/src/targets/fpm.ts @@ -1,4 +1,4 @@ -import { Arch, toLinuxArchString } from "../metadata" +import { toLinuxArchString } from "../metadata" import { smarten } from "../platformPackager" import { use, exec } from "electron-builder-util" import * as path from "path" @@ -10,7 +10,7 @@ import * as errorMessages from "../errorMessages" import { TmpDir } from "electron-builder-util/out/tmp" import { LinuxPackager } from "../linuxPackager" import { log, warn } from "electron-builder-util/out/log" -import { Target } from "./targetFactory" +import { Target, Arch } from "electron-builder-core" import { unlinkIfExists } from "electron-builder-util/out/fs" const fpmPath = (process.platform === "win32" || process.env.USE_SYSTEM_FPM === "true") ? diff --git a/packages/electron-builder/src/targets/nsis.ts b/packages/electron-builder/src/targets/nsis.ts index 6783332b18d..446a5ecabc9 100644 --- a/packages/electron-builder/src/targets/nsis.ts +++ b/packages/electron-builder/src/targets/nsis.ts @@ -1,5 +1,4 @@ import { WinPackager } from "../winPackager" -import { Arch } from "../metadata" import { exec, debug, doSpawn, handleProcess, use, asArray, isEmptyOrSpaces } from "electron-builder-util" import * as path from "path" import BluebirdPromise from "bluebird-lst-c" @@ -13,7 +12,7 @@ import { NsisOptions } from "../options/winOptions" import { PublishConfiguration, GenericServerOptions, UpdateInfo } from "electron-builder-http/out/publishOptions" import { safeDump } from "js-yaml" import { createHash } from "crypto" -import { Target } from "./targetFactory" +import { Target, Arch } from "electron-builder-core" import sanitizeFileName from "sanitize-filename" const NSIS_VERSION = "3.0.4" diff --git a/packages/electron-builder/src/targets/pkg.ts b/packages/electron-builder/src/targets/pkg.ts index 3a6770c5f6c..4d71bf71384 100644 --- a/packages/electron-builder/src/targets/pkg.ts +++ b/packages/electron-builder/src/targets/pkg.ts @@ -1,8 +1,7 @@ import { exec } from "electron-builder-util" -import { Arch } from "../metadata" import MacPackager from "../macPackager" import * as path from "path" -import { Target } from "./targetFactory" +import { Target, Arch } from "electron-builder-core" export class PkgTarget extends Target { constructor(private packager: MacPackager) { diff --git a/packages/electron-builder/src/targets/snap.ts b/packages/electron-builder/src/targets/snap.ts index 98e624ef4b5..745f648cc3f 100644 --- a/packages/electron-builder/src/targets/snap.ts +++ b/packages/electron-builder/src/targets/snap.ts @@ -1,5 +1,5 @@ import { toDebArch } from "../platformPackager" -import { Arch, toLinuxArchString } from "../metadata" +import { toLinuxArchString } from "../metadata" import { LinuxTargetHelper } from "./LinuxTargetHelper" import { LinuxPackager } from "../linuxPackager" import { log } from "electron-builder-util/out/log" @@ -9,7 +9,7 @@ import * as path from "path" import { safeDump } from "js-yaml" import { spawn } from "electron-builder-util" import { homedir } from "os" -import { Target } from "./targetFactory" +import { Target, Arch } from "electron-builder-core" export default class SnapTarget extends Target { private readonly options: SnapOptions = Object.assign({}, this.packager.platformSpecificBuildOptions, (this.packager.config)[this.name]) diff --git a/packages/electron-builder/src/targets/targetFactory.ts b/packages/electron-builder/src/targets/targetFactory.ts index b55137dab38..1275086c37a 100644 --- a/packages/electron-builder/src/targets/targetFactory.ts +++ b/packages/electron-builder/src/targets/targetFactory.ts @@ -1,25 +1,13 @@ import { PlatformPackager } from "../platformPackager" -import { Arch, Platform } from "../metadata" +import { Arch, Platform, Target } from "electron-builder-core" import { tar, archive } from "./archive" import * as path from "path" import { log } from "electron-builder-util/out/log" -import BluebirdPromise from "bluebird-lst-c" const archiveTargets = new Set(["zip", "7z", "tar.xz", "tar.lz", "tar.gz", "tar.bz2"]) export const DEFAULT_TARGET = "default" export const DIR_TARGET = "dir" -export abstract class Target { - constructor(public readonly name: string, public readonly isAsyncSupported: boolean = true) { - } - - abstract build(appOutDir: string, arch: Arch): Promise - - finishBuild(): Promise { - return BluebirdPromise.resolve() - } -} - export function createTargets(nameToTarget: Map, rawList: Array | n, outDir: string, packager: PlatformPackager, cleanupTasks: Array<() => Promise>): Array { const result: Array = [] diff --git a/packages/electron-builder/src/winPackager.ts b/packages/electron-builder/src/winPackager.ts index e9e62ff09da..599fd629707 100644 --- a/packages/electron-builder/src/winPackager.ts +++ b/packages/electron-builder/src/winPackager.ts @@ -1,16 +1,15 @@ import { downloadCertificate } from "./codeSign" import BluebirdPromise from "bluebird-lst-c" import { PlatformPackager, BuildInfo } from "./platformPackager" -import { Platform } from "./metadata" +import { Platform, Target } from "electron-builder-core" import * as path from "path" import { log } from "electron-builder-util/out/log" import { exec, use } from "electron-builder-util" import { open, close, read, rename } from "fs-extra-p" import { sign, SignOptions, getSignVendorPath } from "./windowsCodeSign" -import SquirrelWindowsTarget from "./targets/squirrelWindows" import AppXTarget from "./targets/appx" import NsisTarget from "./targets/nsis" -import { createCommonTarget, DIR_TARGET, Target } from "./targets/targetFactory" +import { createCommonTarget, DIR_TARGET } from "./targets/targetFactory" import { WinBuildOptions } from "./options/winOptions" export interface FileCodeSigningInfo { @@ -75,12 +74,12 @@ export class WinPackager extends PlatformPackager { continue } - const targetClass: typeof NsisTarget | typeof AppXTarget | typeof SquirrelWindowsTarget | null = (() => { + const targetClass: typeof NsisTarget | typeof AppXTarget | null = (() => { switch (name) { case "nsis": return require("./targets/nsis").default case "squirrel": - return require("./targets/squirrelWindows").default + return require("electron-builder-squirrel-windows").default case "appx": return require("./targets/appx").default default: diff --git a/packages/electron-builder/tsconfig.json b/packages/electron-builder/tsconfig.json index 1204000af69..7cfad50af50 100755 --- a/packages/electron-builder/tsconfig.json +++ b/packages/electron-builder/tsconfig.json @@ -14,6 +14,7 @@ "node_modules/electron-macos-sign/index.d.ts", "../electron-builder-http/out/electron-builder-http.d.ts", "../electron-builder-util/out/electron-builder-util.d.ts", + "../electron-builder-core/out/electron-builder-core.d.ts", "../../node_modules/@types/node/index.d.ts", "../../node_modules/@types/js-yaml/index.d.ts", "../../node_modules/@types/ini/index.d.ts" diff --git a/packages/lint.js b/packages/lint.js index 52de513ffab..d81e4fd33d8 100644 --- a/packages/lint.js +++ b/packages/lint.js @@ -69,7 +69,8 @@ const options = { } let hasErrors = false -const packages = fs.readdirSync(__dirname).filter(it => !it.includes(".")).sort().map(it => path.join(__dirname, it)) +const args = process.argv.slice(2) +const packages = args.length == 0 ? fs.readdirSync(__dirname).filter(it => !it.includes(".")).sort().map(it => path.join(__dirname, it)) : [args[0]] for (const projectDir of packages) { console.log(`Linting ${path.basename(projectDir)}`) const program = Linter.createProgram("tsconfig.json", projectDir) diff --git a/test/src/helpers/lint.ts b/test/src/helpers/lint.ts new file mode 100644 index 00000000000..9170a207230 --- /dev/null +++ b/test/src/helpers/lint.ts @@ -0,0 +1,20 @@ +import BluebirdPromise from "bluebird-lst-c" +import { readdir } from "fs-extra-p" +import * as path from "path" +import { cpus } from "os" + +const printErrorAndExit = require("../../../packages/electron-builder-util/out/promise").printErrorAndExit +const spawn = require("../../../packages/electron-builder-util/out/util").spawn + +const rootDir = path.join(__dirname, "../../..") +const packageDir = path.join(rootDir, "packages") + +async function main(): Promise { + const packages = (await readdir(packageDir)).filter(it => !it.includes(".")).sort() + await BluebirdPromise.map(packages, it => spawn(process.env.npm_node_execpath || process.env.NODE_EXE || "node", [path.join(packageDir, "lint.js"), path.join(packageDir, it)], { + stdio: ["ignore", "inherit", "pipe"], + }), {concurrency: cpus().length}) +} + +main() + .catch(printErrorAndExit) \ No newline at end of file diff --git a/test/src/helpers/packTester.ts b/test/src/helpers/packTester.ts index 7eee1c77dd7..b906e226983 100755 --- a/test/src/helpers/packTester.ts +++ b/test/src/helpers/packTester.ts @@ -9,12 +9,12 @@ import { exec, spawn, getTempName } from "electron-builder-util" import { log, warn } from "electron-builder-util/out/log" import pathSorter from "path-sort" import DecompressZip from "decompress-zip" -import { convertVersion } from "electron-builder/out/targets/squirrelPack" +import { convertVersion } from "electron-builder-squirrel-windows/out/squirrelPack" import { TEST_DIR } from "./config" import { deepAssign } from "electron-builder-util/out/deepAssign" import { SignOptions } from "electron-builder/out/windowsCodeSign" import { WinPackager } from "electron-builder/out/winPackager" -import SquirrelWindowsTarget from "electron-builder/out/targets/squirrelWindows" +import SquirrelWindowsTarget from "electron-builder-squirrel-windows" import { DmgTarget } from "electron-builder/out/targets/dmg" import OsXPackager from "electron-builder/out/macPackager" import { SignOptions as MacSignOptions } from "electron-macos-sign" @@ -462,7 +462,7 @@ export class CheckingWinPackager extends WinPackager { async pack(outDir: string, arch: Arch, targets: Array, postAsyncTasks: Array>): Promise { // skip pack - const helperClass: typeof SquirrelWindowsTarget = require("electron-builder/out/targets/squirrelWindows").default + const helperClass: typeof SquirrelWindowsTarget = require("electron-builder-squirrel-windows").default this.effectiveDistOptions = await (new helperClass(this, outDir).computeEffectiveDistOptions()) await this.sign(this.computeAppOutDir(outDir, arch)) diff --git a/test/tsconfig.json b/test/tsconfig.json index 1712c5f345b..fa4cb848899 100755 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -24,9 +24,6 @@ "../packages/electron-builder/node_modules/fs-extra-p/index.d.ts", "../packages/electron-builder/node_modules/bluebird-lst-c/index.d.ts", "../packages/electron-builder/node_modules/electron-macos-sign/index.d.ts", - "../packages/electron-builder-http/out/electron-builder-http.d.ts", - "../packages/electron-auto-updater/out/electron-auto-updater.d.ts", - "../packages/electron-builder-util/out/electron-builder-util.d.ts", - "../packages/electron-builder/out/electron-builder.d.ts" + "../packages/*/out/*.d.ts" ] }