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"
]
}