From 9f7c8255b2989544f9a100cbac59193a2cc9a476 Mon Sep 17 00:00:00 2001 From: develar Date: Sat, 11 Feb 2017 13:22:53 +0100 Subject: [PATCH] fix(deployment): NSIS Web Installer update info is not generated #1207 --- packages/electron-builder-core/src/core.ts | 4 +++- .../electron-builder-http/src/CancellationToken.ts | 10 ++++++++-- .../src/squirrelWindows.ts | 2 +- packages/electron-builder/src/macPackager.ts | 4 ++-- .../electron-builder/src/publish/PublishManager.ts | 13 +++++++++---- .../electron-builder/src/targets/ArchiveTarget.ts | 2 +- packages/electron-builder/src/targets/appImage.ts | 2 +- packages/electron-builder/src/targets/appx.ts | 2 +- packages/electron-builder/src/targets/dmg.ts | 2 +- packages/electron-builder/src/targets/fpm.ts | 2 +- packages/electron-builder/src/targets/nsis.ts | 2 +- packages/electron-builder/src/targets/pkg.ts | 2 +- packages/electron-builder/src/targets/snap.ts | 2 +- .../electron-builder/src/targets/targetFactory.ts | 4 ++++ test/out/windows/__snapshots__/nsisTest.js.snap | 2 ++ 15 files changed, 37 insertions(+), 18 deletions(-) diff --git a/packages/electron-builder-core/src/core.ts b/packages/electron-builder-core/src/core.ts index c29b7fa2989..30dd387aec9 100644 --- a/packages/electron-builder-core/src/core.ts +++ b/packages/electron-builder-core/src/core.ts @@ -78,7 +78,9 @@ export class Platform { } export abstract class Target { - constructor(public readonly name: string, public readonly isAsyncSupported: boolean = true) { + abstract readonly outDir: string + + constructor(readonly name: string, readonly isAsyncSupported: boolean = true) { } abstract build(appOutDir: string, arch: Arch): Promise diff --git a/packages/electron-builder-http/src/CancellationToken.ts b/packages/electron-builder-http/src/CancellationToken.ts index b74082354ad..db882e7f754 100644 --- a/packages/electron-builder-http/src/CancellationToken.ts +++ b/packages/electron-builder-http/src/CancellationToken.ts @@ -2,8 +2,7 @@ import { EventEmitter } from "events" import BluebirdPromise from "bluebird-lst-c" export class CancellationToken extends EventEmitter { - private _cancelled = false - + private _cancelled: boolean get cancelled(): boolean { return this._cancelled || (this._parent != null && this._parent.cancelled) } @@ -13,6 +12,13 @@ export class CancellationToken extends EventEmitter { this._parent = value } + // babel cannot compile ... correctly for super calls + constructor() { + super() + + this._cancelled = false + } + cancel() { this._cancelled = true this.emit("cancel") diff --git a/packages/electron-builder-squirrel-windows/src/squirrelWindows.ts b/packages/electron-builder-squirrel-windows/src/squirrelWindows.ts index 455d8c0b928..7eb9eea7dc5 100644 --- a/packages/electron-builder-squirrel-windows/src/squirrelWindows.ts +++ b/packages/electron-builder-squirrel-windows/src/squirrelWindows.ts @@ -13,7 +13,7 @@ const SW_SHA2 = "e96a109d4641ebb85d163eaefe7770b165ebc25d1cc77c5179f021b232fc373 export default class SquirrelWindowsTarget extends Target { private readonly options: SquirrelWindowsOptions = Object.assign({}, this.packager.platformSpecificBuildOptions, this.packager.config.squirrelWindows) - constructor(private readonly packager: WinPackager, private readonly outDir: string) { + constructor(private readonly packager: WinPackager, readonly outDir: string) { super("squirrel") } diff --git a/packages/electron-builder/src/macPackager.ts b/packages/electron-builder/src/macPackager.ts index f0c51243dd7..6be542cf430 100644 --- a/packages/electron-builder/src/macPackager.ts +++ b/packages/electron-builder/src/macPackager.ts @@ -52,11 +52,11 @@ export default class MacPackager extends PlatformPackager { break case "dmg": - mapper("dmg", () => new DmgTarget(this)) + mapper("dmg", outDir => new DmgTarget(this, outDir)) break case "pkg": - mapper("pkg", () => new PkgTarget(this)) + mapper("pkg", outDir => new PkgTarget(this, outDir)) break default: diff --git a/packages/electron-builder/src/publish/PublishManager.ts b/packages/electron-builder/src/publish/PublishManager.ts index 853541a4ef6..a6213f0faaa 100644 --- a/packages/electron-builder/src/publish/PublishManager.ts +++ b/packages/electron-builder/src/publish/PublishManager.ts @@ -5,7 +5,7 @@ import { GenericServerOptions, GithubOptions, PublishConfiguration, S3Options, U import { asArray, debug, isEmptyOrSpaces } from "electron-builder-util" import { log } from "electron-builder-util/out/log" import { throwError } from "electron-builder-util/out/promise" -import { createReadStream, outputJson, writeFile } from "fs-extra-p" +import { createReadStream, outputJson, writeFile, ensureDir } from "fs-extra-p" import isCi from "is-ci" import { safeDump } from "js-yaml" import * as path from "path" @@ -14,7 +14,6 @@ import { Macros, PlatformSpecificBuildOptions } from "../metadata" import { Packager } from "../packager" import { ArtifactCreated, BuildInfo } from "../packagerApi" import { PlatformPackager } from "../platformPackager" -import { ArchiveTarget } from "../targets/ArchiveTarget" import { BintrayPublisher } from "electron-builder-publisher/out/BintrayPublisher" import { GitHubPublisher } from "electron-builder-publisher/out/gitHubPublisher" import { getCiTag, getResolvedPublishConfig } from "./publisher" @@ -124,7 +123,7 @@ export class PublishManager implements PublishContext { } if (target != null && event.file != null && !this.cancellationToken.cancelled) { - if ((packager.platform === Platform.MAC && target.name === "zip") || (packager.platform === Platform.WINDOWS && target.name === "nsis")) { + if ((packager.platform === Platform.MAC && target.name === "zip") || (packager.platform === Platform.WINDOWS && (target.name === "nsis") || target.name.startsWith("nsis-"))) { this.addTask(writeUpdateInfo(event, publishConfigs)) } } @@ -207,7 +206,13 @@ async function writeUpdateInfo(event: ArtifactCreated, _publishConfigs: Arrayevent.target).outDir + + const target = event.target! + let outDir = target.outDir + if (target!.name.startsWith("nsis-")) { + outDir = path.join(outDir, target.name) + await ensureDir(outDir) + } for (const publishConfig of publishConfigs) { const isGitHub = publishConfig.provider === "github" diff --git a/packages/electron-builder/src/targets/ArchiveTarget.ts b/packages/electron-builder/src/targets/ArchiveTarget.ts index 0aafdb4bb8d..7a196c800cb 100644 --- a/packages/electron-builder/src/targets/ArchiveTarget.ts +++ b/packages/electron-builder/src/targets/ArchiveTarget.ts @@ -5,7 +5,7 @@ import * as path from "path" import { tar, archive } from "./archive" export class ArchiveTarget extends Target { - constructor(name: string, public readonly outDir: string, private readonly packager: PlatformPackager) { + constructor(name: string, readonly outDir: string, private readonly packager: PlatformPackager) { super(name) } diff --git a/packages/electron-builder/src/targets/appImage.ts b/packages/electron-builder/src/targets/appImage.ts index 9de6197a3de..668ebc512d4 100644 --- a/packages/electron-builder/src/targets/appImage.ts +++ b/packages/electron-builder/src/targets/appImage.ts @@ -21,7 +21,7 @@ export default class AppImageTarget extends Target { private readonly options: AppImageOptions = Object.assign({}, this.packager.platformSpecificBuildOptions, (this.packager.config)[this.name]) private readonly desktopEntry: Promise - constructor(ignored: string, private packager: LinuxPackager, private helper: LinuxTargetHelper, private outDir: string) { + constructor(ignored: string, private readonly packager: LinuxPackager, private readonly helper: LinuxTargetHelper, readonly outDir: string) { super("appImage") // we add X-AppImage-BuildId to ensure that new desktop file will be installed diff --git a/packages/electron-builder/src/targets/appx.ts b/packages/electron-builder/src/targets/appx.ts index be5b6ebd384..c5ea3c5a108 100644 --- a/packages/electron-builder/src/targets/appx.ts +++ b/packages/electron-builder/src/targets/appx.ts @@ -14,7 +14,7 @@ import { copyDir } from "electron-builder-util/out/fs" export default class AppXTarget extends Target { private readonly options: AppXOptions = Object.assign({}, this.packager.platformSpecificBuildOptions, this.packager.config.appx) - constructor(private readonly packager: WinPackager, private readonly outDir: string) { + constructor(private readonly packager: WinPackager, readonly outDir: string) { super("appx") const osVersion = release() diff --git a/packages/electron-builder/src/targets/dmg.ts b/packages/electron-builder/src/targets/dmg.ts index d0025ac46a8..2ed796fa272 100644 --- a/packages/electron-builder/src/targets/dmg.ts +++ b/packages/electron-builder/src/targets/dmg.ts @@ -14,7 +14,7 @@ import { exists, statOrNull } from "electron-builder-util/out/fs" export class DmgTarget extends Target { private helperDir = path.join(__dirname, "..", "..", "templates", "dmg") - constructor(private packager: PlatformPackager) { + constructor(private readonly packager: PlatformPackager, readonly outDir: string) { super("dmg") } diff --git a/packages/electron-builder/src/targets/fpm.ts b/packages/electron-builder/src/targets/fpm.ts index a9377462253..842d1c9e902 100644 --- a/packages/electron-builder/src/targets/fpm.ts +++ b/packages/electron-builder/src/targets/fpm.ts @@ -34,7 +34,7 @@ export default class FpmTarget extends Target { private readonly scriptFiles: Promise> private readonly desktopEntry: Promise - constructor(name: string, private packager: LinuxPackager, private helper: LinuxTargetHelper, private outDir: string) { + constructor(name: string, private readonly packager: LinuxPackager, private readonly helper: LinuxTargetHelper, readonly outDir: string) { super(name, false) this.scriptFiles = this.createScripts() diff --git a/packages/electron-builder/src/targets/nsis.ts b/packages/electron-builder/src/targets/nsis.ts index 475e2f71794..8e670824757 100644 --- a/packages/electron-builder/src/targets/nsis.ts +++ b/packages/electron-builder/src/targets/nsis.ts @@ -33,7 +33,7 @@ export default class NsisTarget extends Target { private readonly nsisTemplatesDir = path.join(__dirname, "..", "..", "templates", "nsis") - constructor(private packager: WinPackager, private outDir: string, targetName: string) { + constructor(private packager: WinPackager, readonly outDir: string, targetName: string) { super(targetName) let options = this.packager.config.nsis || Object.create(null) diff --git a/packages/electron-builder/src/targets/pkg.ts b/packages/electron-builder/src/targets/pkg.ts index 936edafc8d8..f0e034c5acb 100644 --- a/packages/electron-builder/src/targets/pkg.ts +++ b/packages/electron-builder/src/targets/pkg.ts @@ -14,7 +14,7 @@ export class PkgTarget extends Target { private readonly options: PkgOptions = this.packager.config.pkg || Object.create(null) private readonly installLocation = this.options.installLocation || "/Applications" - constructor(private packager: MacPackager) { + constructor(private readonly packager: MacPackager, readonly outDir: string) { super("pkg") } diff --git a/packages/electron-builder/src/targets/snap.ts b/packages/electron-builder/src/targets/snap.ts index 311702d85a9..eab7f35b57a 100644 --- a/packages/electron-builder/src/targets/snap.ts +++ b/packages/electron-builder/src/targets/snap.ts @@ -12,7 +12,7 @@ import { Target, Arch, toLinuxArchString } from "electron-builder-core" export default class SnapTarget extends Target { private readonly options: SnapOptions = Object.assign({}, this.packager.platformSpecificBuildOptions, (this.packager.config)[this.name]) - constructor(name: string, private packager: LinuxPackager, private helper: LinuxTargetHelper, private outDir: string) { + constructor(name: string, private readonly packager: LinuxPackager, private readonly helper: LinuxTargetHelper, readonly outDir: string) { super(name) } diff --git a/packages/electron-builder/src/targets/targetFactory.ts b/packages/electron-builder/src/targets/targetFactory.ts index 2381730cf49..636920ddb0c 100644 --- a/packages/electron-builder/src/targets/targetFactory.ts +++ b/packages/electron-builder/src/targets/targetFactory.ts @@ -54,6 +54,10 @@ export function createCommonTarget(target: string, outDir: string, packager: Pla } export class NoOpTarget extends Target { + get outDir(): string { + throw new Error("NoOpTarget") + } + async build(appOutDir: string, arch: Arch): Promise { // no build } diff --git a/test/out/windows/__snapshots__/nsisTest.js.snap b/test/out/windows/__snapshots__/nsisTest.js.snap index 87179548a71..03304ee50ab 100644 --- a/test/out/windows/__snapshots__/nsisTest.js.snap +++ b/test/out/windows/__snapshots__/nsisTest.js.snap @@ -114,6 +114,8 @@ exports[`test web installer 1`] = ` Array [ "Test App ßW Web Setup 1.1.0.exe", "TestApp-1.1.0-x64.nsis.7z", + "latest.yml", + "latest.yml", ] `;