diff --git a/.idea/dictionaries/develar.xml b/.idea/dictionaries/develar.xml
index 2d9292eed22..22e88d0493b 100644
--- a/.idea/dictionaries/develar.xml
+++ b/.idea/dictionaries/develar.xml
@@ -34,6 +34,7 @@
customfunction
debian
depcheck
+ devmode
difflet
digester
disturl
@@ -44,6 +45,7 @@
enoent
eperm
finishpage
+ fontconfig
fseventsd
github
globaldots
@@ -82,10 +84,15 @@
langs
lcid
libappindicator
+ libdbusmenu
libexec
+ libgconf
libgcrypt
libgnome
libnotify
+ libnss
+ libunity
+ libxss
localappdata
lockfile
lzfse
@@ -112,6 +119,7 @@
nuget
nupkg
nuspec
+ opengl
osslsigncode
packagejson
pacman
@@ -124,6 +132,7 @@
progexe
promisify
psmdcp
+ pulseaudio
rcedit
readpass
regedit
@@ -136,6 +145,7 @@
signcode
signtool
smprograms
+ snapcraft
srcfolder
templating
testapp
diff --git a/.idea/runConfigurations/linuxPackagerTest.xml b/.idea/runConfigurations/linuxPackagerTest.xml
deleted file mode 100644
index dc6fad857b3..00000000000
--- a/.idea/runConfigurations/linuxPackagerTest.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/README.md b/README.md
index efeb36b0bf6..84a47de0909 100755
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ A complete solution to package and build a ready for distribution Electron app f
* Numerous target formats:
* All platforms: `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir` (unpacked directory).
* [macOS](https://github.com/electron-userland/electron-builder/wiki/Options#MacOptions-target): `dmg`, `pkg`, `mas`.
- * [Linux](https://github.com/electron-userland/electron-builder/wiki/Options#LinuxBuildOptions-target): `AppImage`, `deb`, `rpm`, `freebsd`, `pacman`, `p5p`, `apk`.
+ * [Linux](https://github.com/electron-userland/electron-builder/wiki/Options#LinuxBuildOptions-target): [AppImage](http://appimage.org), [snap](http://snapcraft.io), `deb`, `rpm`, `freebsd`, `pacman`, `p5p`, `apk`.
* [Windows](https://github.com/electron-userland/electron-builder/wiki/Options#WinBuildOptions-target): NSIS, Squirrel.Windows.
* [Two package.json Structure](https://github.com/electron-userland/electron-builder/wiki/Two-package.json-Structure) is supported, but you are not forced to use it even if you have native production dependencies.
* [Publishing artifacts](https://github.com/electron-userland/electron-builder/wiki/Publishing-Artifacts) to GitHub Releases and Bintray.
diff --git a/docker/base/Dockerfile b/docker/base/Dockerfile
index 080113d8228..8a75f85fe19 100644
--- a/docker/base/Dockerfile
+++ b/docker/base/Dockerfile
@@ -1,4 +1,4 @@
-FROM buildpack-deps:xenial-curl
+FROM buildpack-deps:yakkety-curl
# rpm is required for FPM to build rpm package
# yasm is required to build p7zip
@@ -15,10 +15,9 @@ ENV USE_SYSTEM_7ZA true
ENV DEBUG_COLORS true
ENV FORCE_COLOR true
-RUN apt-key adv --keyserver pgp.mit.edu --recv D101F7899D41F3C3 && echo "deb http://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
-
-RUN apt-get update -y && \
- apt-get install --no-install-recommends -y yarn xorriso bsdtar build-essential autoconf libssl-dev icnsutils graphicsmagick gcc-multilib g++-multilib libgnome-keyring-dev lzip rpm yasm && \
+RUN apt-key adv --keyserver pgp.mit.edu --recv D101F7899D41F3C3 && apt-key adv --fetch-keys http://dl.yarnpkg.com/debian/pubkey.gpg && echo "deb http://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
+apt-get update -y && \
+ apt-get install --no-install-recommends -y git snapcraft yarn xorriso bsdtar build-essential autoconf libssl-dev icnsutils graphicsmagick gcc-multilib g++-multilib libgnome-keyring-dev lzip rpm yasm && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* && \
curl -L http://tukaani.org/xz/xz-$XZ_VERSION.tar.xz | tar -xJ && cd xz-$XZ_VERSION && ./configure && make && make install && cd .. && rm -rf xz-$XZ_VERSION && ldconfig && \
diff --git a/docker/wine/Dockerfile b/docker/wine/Dockerfile
index 6967f5c7796..df96a42f3a5 100644
--- a/docker/wine/Dockerfile
+++ b/docker/wine/Dockerfile
@@ -2,7 +2,7 @@ FROM electronuserland/electron-builder:latest
# libgnome-keyring-dev — to build keytar
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F9CB8DB0 && \
-echo "deb http://ppa.launchpad.net/ubuntu-wine/ppa/ubuntu xenial main " | tee /etc/apt/sources.list.d/wine.list && \
+echo "deb http://ppa.launchpad.net/ubuntu-wine/ppa/ubuntu yakkety main " | tee /etc/apt/sources.list.d/wine.list && \
dpkg --add-architecture i386 && \
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF && \
echo "deb http://download.mono-project.com/repo/debian wheezy main" | tee /etc/apt/sources.list.d/mono-xamarin.list && \
diff --git a/docs/Options.md b/docs/Options.md
index cdf1721dd68..3aa67303f78 100644
--- a/docs/Options.md
+++ b/docs/Options.md
@@ -142,7 +142,7 @@ Linux specific build options.
| category | The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).
| packageCategory | The [package category](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Section). Not applicable for AppImage.
| description | As [description](#AppMetadata-description) from application package.json, but allows you to specify different for Linux.
-| target |
Target package type: list of AppImage
, deb
, rpm
, freebsd
, pacman
, p5p
, apk
, 7z
, zip
, tar.xz
, tar.lz
, tar.gz
, tar.bz2
, dir
. Defaults to AppImage
.
The most effective [xz](https://en.wikipedia.org/wiki/Xz) compression format used by default.
Only deb
and AppImage
is tested. Feel free to file issues for rpm
and other package formats.
+| target | Target package type: list of AppImage
, snap
, deb
, rpm
, freebsd
, pacman
, p5p
, apk
, 7z
, zip
, tar.xz
, tar.lz
, tar.gz
, tar.bz2
, dir
. Defaults to AppImage
.
The most effective [xz](https://en.wikipedia.org/wiki/Xz) compression format used by default.
| synopsis | *deb-only.* The [short description](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description).
| maintainer | The maintainer. Defaults to [author](#AppMetadata-author).
| vendor | The vendor. Defaults to [author](#AppMetadata-author).
diff --git a/package.json b/package.json
index 849b5a70759..1e083a52320 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,7 @@
"lint": "node ./test/lint.js",
"pretest": "yarn run compile && yarn run lint",
"check-deps": "node ./test/out/helpers/checkDeps.js",
- "test": "node ./test/out/helpers/runTests.js",
+ "test": "node --trace-warnings ./test/out/helpers/runTests.js",
"test-linux": "docker run --rm -ti -v ${PWD}:/project -v ${PWD##*/}-node-modules:/project/node_modules -v ~/.electron:/root/.electron electronuserland/electron-builder:wine /test.sh",
"pack-updater": "cd nsis-auto-updater && yarn --production && cd ..",
"semantic-release": "semantic-release pre && npm publish && semantic-release post",
@@ -68,7 +68,7 @@
"cli-cursor": "^1.0.2",
"cuint": "^0.2.2",
"debug": "^2.3.2",
- "electron-download": "2.1.2",
+ "electron-download-tf": "3.1.0",
"electron-macos-sign": "1.0.1",
"fs-extra-p": "^2.0.7",
"hosted-git-info": "^2.1.5",
@@ -143,13 +143,6 @@
]
]
},
- "ava": {
- "verbose": true,
- "cache": false,
- "files": [
- "test/out/*.js"
- ]
- },
"jest": {
"testEnvironment": "node",
"testPathDirs": [
@@ -167,5 +160,8 @@
"release": {
"verifyConditions": []
},
- "typings": "./out/electron-builder.d.ts"
+ "typings": "./out/electron-builder.d.ts",
+ "publishConfig": {
+ "tag": "next"
+ }
}
diff --git a/src/linuxPackager.ts b/src/linuxPackager.ts
index e3458ba849f..4920bbf6e49 100755
--- a/src/linuxPackager.ts
+++ b/src/linuxPackager.ts
@@ -9,6 +9,7 @@ import AppImageTarget from "./targets/appImage"
import { rename } from "fs-extra-p"
import { LinuxBuildOptions } from "./options/linuxOptions"
import sanitizeFileName from "sanitize-filename"
+import SnapTarget from "./targets/snap"
export class LinuxPackager extends PlatformPackager {
readonly executableName: string
@@ -49,6 +50,10 @@ export class LinuxPackager extends PlatformPackager {
const targetClass: typeof AppImageTarget = require("./targets/appImage").default
mapper("appimage", outDir => new targetClass(this, getHelper(), outDir))
}
+ else if (name === "snap") {
+ const targetClass: typeof SnapTarget = require("./targets/snap").default
+ mapper("snap", outDir => new targetClass(this, getHelper(), outDir))
+ }
else if (name === "deb" || name === "rpm" || name === "sh" || name === "freebsd" || name === "pacman" || name === "apk" || name === "p5p") {
const targetClass: typeof FpmTarget = require("./targets/fpm").default
mapper(name, outDir => new targetClass(name, this, getHelper(), outDir))
diff --git a/src/options/linuxOptions.ts b/src/options/linuxOptions.ts
index 6573b3355dc..3ad910b9fa6 100644
--- a/src/options/linuxOptions.ts
+++ b/src/options/linuxOptions.ts
@@ -22,11 +22,9 @@ export interface LinuxBuildOptions extends PlatformSpecificBuildOptions {
readonly description?: string | null
/*
- Target package type: list of `AppImage`, `deb`, `rpm`, `freebsd`, `pacman`, `p5p`, `apk`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`. Defaults to `AppImage`.
+ Target package type: list of `AppImage`, `snap`, `deb`, `rpm`, `freebsd`, `pacman`, `p5p`, `apk`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`. Defaults to `AppImage`.
The most effective [xz](https://en.wikipedia.org/wiki/Xz) compression format used by default.
-
- Only `deb` and `AppImage` is tested. Feel free to file issues for `rpm` and other package formats.
*/
readonly target?: Array | null
@@ -73,3 +71,26 @@ export interface LinuxBuildOptions extends PlatformSpecificBuildOptions {
*/
readonly executableName?: string | null
}
+
+export interface SnapOptions extends LinuxBuildOptions {
+ /*
+ The type of confinement supported by the snap. Can be either `devmode` (i.e. this snap doesn’t support running under confinement) or `strict` (i.e. full confinement supported via interfaces).
+ */
+ confinement?: "devmode" | "strict" | null
+
+ /*
+ The 78 character long summary. Defaults to [productName](#AppMetadata-productName).
+ */
+ summary?: string | null
+
+ /*
+ The quality grade of the snap. It can be either `devel` (i.e. a development version of the snap, so not to be published to the “stable” or “candidate” channels) or “stable” (i.e. a stable release or release candidate, which can be released to all channels).
+ Defaults to `stable`.
+ */
+ grade?: "devel" | "stable" | null
+
+ /*
+ The list of features that must be supported by the core in order for this snap to install.
+ */
+ assumes?: Array | null
+}
\ No newline at end of file
diff --git a/src/packager/dirPackager.ts b/src/packager/dirPackager.ts
index af4651e1161..71b599b60df 100644
--- a/src/packager/dirPackager.ts
+++ b/src/packager/dirPackager.ts
@@ -6,7 +6,7 @@ import { debug7zArgs, spawn } from "../util/util"
import { path7za } from "7zip-bin"
import * as path from "path"
-const downloadElectron: (options: any) => Promise = BluebirdPromise.promisify(require("electron-download"))
+const downloadElectron: (options: any) => Promise = BluebirdPromise.promisify(require("electron-download-tf"))
function createDownloadOpts(opts: any, platform: string, arch: string, electronVersion: string) {
const downloadOpts = Object.assign({
diff --git a/src/targets/LinuxTargetHelper.ts b/src/targets/LinuxTargetHelper.ts
index 3605ad1864c..e05d0af87c7 100644
--- a/src/targets/LinuxTargetHelper.ts
+++ b/src/targets/LinuxTargetHelper.ts
@@ -63,6 +63,10 @@ export class LinuxTargetHelper {
return iconPath == null ? await this.packager.getDefaultIcon("icns") : path.resolve(this.packager.projectDir, iconPath)
}
+ getDescription(options: LinuxBuildOptions) {
+ return options.description || this.packager.appInfo.description
+ }
+
async computeDesktopEntry(platformSpecificBuildOptions: LinuxBuildOptions, exec?: string, extra?: { [key: string]: string; }): Promise {
const appInfo = this.packager.appInfo
@@ -71,7 +75,7 @@ export class LinuxTargetHelper {
const desktopMeta: any = Object.assign({
Name: appInfo.productName,
- Comment: platformSpecificBuildOptions.description || appInfo.description,
+ Comment: this.getDescription(platformSpecificBuildOptions),
Exec: exec == null ? `"${installPrefix}/${productFilename}/${this.packager.executableName}"` : exec,
Terminal: "false",
Type: "Application",
diff --git a/src/targets/appImage.ts b/src/targets/appImage.ts
index bbf2ab98736..2fd559fb24a 100644
--- a/src/targets/appImage.ts
+++ b/src/targets/appImage.ts
@@ -32,19 +32,19 @@ export default class AppImageTarget extends TargetEx {
}
async build(appOutDir: string, arch: Arch): Promise {
- log(`Building AppImage`)
+ log(`Building AppImage for arch ${Arch[arch]}`)
const packager = this.packager
// avoid spaces in the file name
- const image = path.join(this.outDir, packager.generateName("AppImage", arch, true))
- await unlinkIfExists(image)
+ const resultFile = path.join(this.outDir, packager.generateName("AppImage", arch, true))
+ await unlinkIfExists(resultFile)
const appImagePath = await appImagePathPromise
const args = [
"-joliet", "on",
"-volid", "AppImage",
- "-dev", image,
+ "-dev", resultFile,
"-padding", "0",
"-map", appOutDir, "/usr/bin",
"-map", path.join(__dirname, "..", "..", "templates", "linux", "AppRun.sh"), "/AppRun",
@@ -70,13 +70,13 @@ export default class AppImageTarget extends TargetEx {
await new BluebirdPromise((resolve, reject) => {
const rd = createReadStream(path.join(appImagePath, arch === Arch.ia32 ? "32" : "64", "runtime"))
rd.on("error", reject)
- const wr = createWriteStream(image, {flags: "r+"})
+ const wr = createWriteStream(resultFile, {flags: "r+"})
wr.on("error", reject)
wr.on("finish", resolve)
rd.pipe(wr)
})
- const fd = await open(image, "r+")
+ const fd = await open(resultFile, "r+")
try {
const magicData = new Buffer([0x41, 0x49, 0x01])
await write(fd, magicData, 0, magicData.length, 8)
@@ -85,8 +85,8 @@ export default class AppImageTarget extends TargetEx {
await close(fd)
}
- await chmod(image, "0755")
+ await chmod(resultFile, "0755")
- packager.dispatchArtifactCreated(image, packager.generateName("AppImage", arch, true))
+ packager.dispatchArtifactCreated(resultFile, packager.generateName("AppImage", arch, true))
}
}
\ No newline at end of file
diff --git a/src/targets/fpm.ts b/src/targets/fpm.ts
index f900bdbe347..5c7bcdfc248 100644
--- a/src/targets/fpm.ts
+++ b/src/targets/fpm.ts
@@ -99,7 +99,7 @@ export default class FpmTarget extends TargetEx {
"--force",
"--after-install", scripts[0],
"--after-remove", scripts[1],
- "--description", smarten(target === "rpm" ? options.description! : `${synopsis || ""}\n ${options.description}`),
+ "--description", smarten(target === "rpm" ? this.helper.getDescription(options)! : `${synopsis || ""}\n ${this.helper.getDescription(options)}`),
"--maintainer", author,
"--vendor", options.vendor || author,
"--version", appInfo.version,
diff --git a/src/targets/snap.ts b/src/targets/snap.ts
new file mode 100644
index 00000000000..64cb50d1ab5
--- /dev/null
+++ b/src/targets/snap.ts
@@ -0,0 +1,111 @@
+import { TargetEx } from "../platformPackager"
+import { Arch } from "../metadata"
+import { LinuxTargetHelper } from "./LinuxTargetHelper"
+import { LinuxPackager } from "../linuxPackager"
+import { log } from "../util/log"
+import { SnapOptions } from "../options/linuxOptions"
+import { emptyDir, writeFile } from "fs-extra-p"
+import * as path from "path"
+import { safeDump } from "js-yaml"
+import { spawn, unlinkIfExists } from "../util/util"
+import { homedir } from "os"
+
+export default class SnapTarget extends TargetEx {
+ private readonly options: SnapOptions = Object.assign({}, this.packager.platformSpecificBuildOptions, (this.packager.devMetadata.build)[this.name])
+ private readonly desktopEntry: Promise
+
+ constructor(private packager: LinuxPackager, private helper: LinuxTargetHelper, private outDir: string) {
+ super("snap")
+
+ // we add X-AppImage-BuildId to ensure that new desktop file will be installed
+ this.desktopEntry = helper.computeDesktopEntry(this.options, "AppRun")
+ }
+
+ async build(appOutDir: string, arch: Arch): Promise {
+ log(`Building Snap for arch ${Arch[arch]}`)
+
+ const packager = this.packager
+ const appInfo = packager.appInfo
+ const options = this.options
+
+ const resultFile = path.join(this.outDir, packager.generateName("snap", arch, true))
+ await unlinkIfExists(resultFile)
+
+ const snap: any = {}
+ snap.name = appInfo.name.toLowerCase()
+ snap.version = appInfo.version
+ snap.summary = options.summary || appInfo.productName
+ snap.description = this.helper.getDescription(options)
+ snap.confinement = options.confinement || "strict"
+ snap.grade = options.grade || "stable"
+
+ if (options.assumes != null) {
+ if (!Array.isArray(options.assumes)) {
+ throw new Error("snap.assumes must be an array of strings")
+ }
+ snap.assumes = options.assumes
+ }
+
+ const snapDir = `${appOutDir}-snap`
+
+ snap.apps = {}
+ snap.apps[snap.name] = {
+ command: `desktop-launch $SNAP/${packager.executableName}`,
+ plugs: [
+ "browser-support", "network", "unity7", "gsettings", "pulseaudio", "opengl",
+ ]
+ }
+
+ const isUseDocker = process.platform !== "linux"
+ snap.parts = {
+ "deps": {
+ plugin: "nil",
+ "stage-packages": ["libgconf-2-4", "libnss3", "libxss1", "fontconfig-config"],
+ },
+ "desktop-integration": {
+ plugin: "nil",
+ "stage-packages": ["libappindicator1", "libdbusmenu-glib4", "libnotify4", "libunity9"],
+ },
+ app: {
+ plugin: "dump",
+ source: isUseDocker ? `/out/${path.basename(snapDir)}` : appOutDir,
+ filesets: {
+ app: [`${appOutDir}/*`]
+ },
+ after: ["desktop-glib-only"]
+ }
+ }
+
+ const snapcraft = path.join(snapDir, "snapcraft.yaml")
+ await emptyDir(snapDir)
+ await writeFile(snapcraft, safeDump(snap))
+
+// await writeFile(path.join(snapDir, "wrapper"), `
+// #!/bin/bash
+// unset XDG_CONFIG_DIRS
+// exec $SNAP/${packager.executableName}
+// `)
+
+ // const args = ["snapcraft", path.relative(snapDir)]
+ // snap /out/${path.basename(snapDir)} --output /out/${path.basename(resultFile)}
+ if (isUseDocker) {
+ await spawn("docker", ["run", "--rm",
+ "-v", `${packager.info.projectDir}:/project`,
+ "-v", `${homedir()}/.electron:/root/.electron`,
+ // dist dir can be outside of project dir
+ "-v", `${this.outDir}:/out`,
+ "-w", `/out/${path.basename(snapDir)}`,
+ "electronuserland/electron-builder:latest",
+ "/bin/bash", "-c", `env && snapcraft snap`], {
+ cwd: packager.info.projectDir,
+ })
+ }
+ else {
+ await spawn("snapcraft", ["snap"], {
+ cwd: snapDir,
+ })
+ }
+
+ packager.dispatchArtifactCreated(resultFile, packager.generateName("snap", arch, true))
+ }
+}
\ No newline at end of file
diff --git a/src/util/util.ts b/src/util/util.ts
index 72e3728b6e8..a5ff44f4539 100644
--- a/src/util/util.ts
+++ b/src/util/util.ts
@@ -78,12 +78,13 @@ export function doSpawn(command: string, args: Array, options?: SpawnOpt
}
if (debug.enabled) {
- debug(`Spawning ${command} ${removePassword(args.join(" "))}`)
+ const argsString = args.join(" ")
+ debug(`Spawning ${command} ${command === "docker" ? argsString : removePassword(argsString)}`)
}
return _spawn(command, args, options)
}
-export function spawn(command: string, args?: Array | null, options?: SpawnOptions): BluebirdPromise {
+export function spawn(command: string, args?: Array | null, options?: SpawnOptions): Promise {
return new BluebirdPromise((resolve, reject) => {
handleProcess("close", doSpawn(command, args || [], options), command, resolve, reject)
})
diff --git a/test/jestSetup.js b/test/jestSetup.js
index b859caa0de4..8e277191b4b 100644
--- a/test/jestSetup.js
+++ b/test/jestSetup.js
@@ -8,7 +8,7 @@ const isCi = (process.env.CI || "").toLowerCase() === "true"
// Squirrel.Windows msi is very slow
jasmine.DEFAULT_TIMEOUT_INTERVAL = (isWindows ? 10 : 10) * 1000 * 60
-if (!isWindows || isCi) {
+if (process.env.RUN_IN_BAND !== "true" && (!isWindows || isCi)) {
//noinspection JSUnresolvedVariable
it = it.concurrent
//noinspection JSUnresolvedVariable
diff --git a/test/src/helpers/runTests.ts b/test/src/helpers/runTests.ts
index 9dc6326c160..7290465861e 100755
--- a/test/src/helpers/runTests.ts
+++ b/test/src/helpers/runTests.ts
@@ -8,7 +8,7 @@ import { TEST_DIR, ELECTRON_VERSION } from "./config"
const util = require("../../../out/util/util")
const isEmptyOrSpaces = util.isEmptyOrSpaces
-const downloadElectron: (options: any) => Promise = BluebirdPromise.promisify(require("electron-download"))
+const downloadElectron: (options: any) => Promise = BluebirdPromise.promisify(require("electron-download-tf"))
async function main() {
const testDir = TEST_DIR
diff --git a/test/src/linuxPackagerTest.ts b/test/src/linuxPackagerTest.ts
index fe908f4aeb8..10216dcc8ca 100755
--- a/test/src/linuxPackagerTest.ts
+++ b/test/src/linuxPackagerTest.ts
@@ -10,6 +10,8 @@ test.ifNotWindows("arm deb", app({targets: Platform.LINUX.createTarget("deb", Ar
test.ifDevOrLinuxCi("AppImage", app({targets: Platform.LINUX.createTarget()}))
+test.ifNotCi("snap", app({targets: Platform.LINUX.createTarget("snap")}))
+
test.ifDevOrLinuxCi("AppImage - default icon", app({
targets: Platform.LINUX.createTarget("appimage"),
devMetadata: {
diff --git a/yarn.lock b/yarn.lock
index 1a15a587ac8..68e10f35697 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -517,8 +517,8 @@ babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0:
to-fast-properties "^1.0.1"
babylon@^6.1.21, babylon@^6.11.0, babylon@^6.13.0:
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.0.tgz#c8ba4b69b544b2cd8f3fb96b06614660a49b7128"
+ version "6.14.1"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.14.1.tgz#956275fab72753ad9b3435d7afe58f8bf0a29815"
balanced-match@^0.4.1:
version "0.4.2"
@@ -1142,18 +1142,18 @@ ecc-jsbn@~0.1.1:
dependencies:
jsbn "~0.1.0"
-electron-download@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/electron-download/-/electron-download-2.1.2.tgz#913b35b07a90ff1b644834e9bf03f5f1d6f24f64"
+electron-download-tf@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/electron-download-tf/-/electron-download-tf-3.1.0.tgz#c6d62c0e0a4c63b67295f57b6b66514c13b8ed8d"
dependencies:
- debug "^2.2.0"
- home-path "^1.0.1"
+ debug "^2.3.2"
+ fs-extra "^1.0.0"
minimist "^1.2.0"
- mkdirp "^0.5.0"
- mv "^2.0.3"
- nugget "^1.5.1"
- path-exists "^1.0.0"
- rc "^1.1.2"
+ nugget "^2.0.1"
+ path-exists "^3.0.0"
+ rc "^1.1.6"
+ semver "^5.3.0"
+ sumchecker "^1.2.0"
electron-macos-sign@1.0.1:
version "1.0.1"
@@ -1189,6 +1189,10 @@ error-ex@^1.2.0:
dependencies:
is-arrayish "^0.2.1"
+es6-promise@^3.2.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
+
escape-string-regexp@^1.0.2:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
@@ -1375,6 +1379,14 @@ fs-extra-tf@^1.0.0:
jsonfile "^2.4.0"
klaw "^1.3.1"
+fs-extra@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^2.1.0"
+ klaw "^1.0.0"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -1624,10 +1636,6 @@ home-or-tmp@^2.0.0:
os-homedir "^1.0.0"
os-tmpdir "^1.0.1"
-home-path@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.3.tgz#9ece59fec3f032e6d10b5434fee264df4c2de32f"
-
hosted-git-info@^2.1.4, hosted-git-info@^2.1.5:
version "2.1.5"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b"
@@ -2188,7 +2196,7 @@ json8@^0.9.2:
version "0.9.2"
resolved "https://registry.yarnpkg.com/json8/-/json8-0.9.2.tgz#dced62a24c8ed457702d45c71068081925c3011f"
-jsonfile@^2.4.0:
+jsonfile@^2.1.0, jsonfile@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
optionalDependencies:
@@ -2220,7 +2228,7 @@ kind-of@^3.0.2:
dependencies:
is-buffer "^1.0.2"
-klaw@^1.3.1:
+klaw@^1.0.0, klaw@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
optionalDependencies:
@@ -2531,7 +2539,7 @@ minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
+mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
@@ -2558,22 +2566,10 @@ multimatch@^2.1.0:
arrify "^1.0.0"
minimatch "^3.0.0"
-mv@^2.0.3:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2"
- dependencies:
- mkdirp "~0.5.1"
- ncp "~2.0.0"
- rimraf "~2.4.0"
-
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
-ncp@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3"
-
node-emoji@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.4.1.tgz#c9fa0cf91094335bcb967a6f42b2305c15af2ebc"
@@ -2673,16 +2669,16 @@ npm-registry-client@^7.3.0:
gauge "~2.7.1"
set-blocking "~2.0.0"
-nugget@^1.5.1:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/nugget/-/nugget-1.6.2.tgz#88ca6e03ba5706a99173f5da0902593d6bcae107"
+nugget@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0"
dependencies:
debug "^2.1.3"
minimist "^1.1.0"
pretty-bytes "^1.0.2"
progress-stream "^1.1.0"
request "^2.45.0"
- single-line-log "^0.4.1"
+ single-line-log "^1.1.2"
throttleit "0.0.2"
number-is-nan@^1.0.0:
@@ -2809,16 +2805,16 @@ parse5@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
-path-exists@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081"
-
path-exists@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
dependencies:
pinkie-promise "^2.0.0"
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@@ -2951,7 +2947,7 @@ randomatic@^1.1.3:
is-number "^2.0.2"
kind-of "^3.0.2"
-rc@^1.0.1, rc@^1.1.2, rc@^1.1.6:
+rc@^1.0.1, rc@^1.1.6:
version "1.1.6"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9"
dependencies:
@@ -3158,7 +3154,7 @@ right-align@^0.1.1:
dependencies:
align-text "^0.1.1"
-rimraf@^2.4.3, rimraf@^2.4.4, rimraf@~2.4.0:
+rimraf@^2.4.3, rimraf@^2.4.4:
version "2.4.5"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da"
dependencies:
@@ -3229,9 +3225,11 @@ signal-exit@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81"
-single-line-log@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-0.4.1.tgz#87a55649f749d783ec0dcd804e8140d9873c7cee"
+single-line-log@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364"
+ dependencies:
+ string-width "^1.0.1"
slash@^1.0.0:
version "1.0.0"
@@ -3376,6 +3374,13 @@ strip-json-comments@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+sumchecker@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-1.2.0.tgz#8c79282f6b5d74e7fbcfb49505e50d096c63f38d"
+ dependencies:
+ debug "^2.2.0"
+ es6-promise "^3.2.1"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"