test("cli", async () => { // because these methods are internal const { configureBuildCommand, normalizeOptions } = require("electron-builder/out/builder") const yargs = require("yargs") configureBuildCommand(yargs) function parse(input: string): any { return normalizeOptions(yargs.parse(input.split(" "))) } function expected(opt: any): object { return { publish: undefined, draft: undefined, prerelease: undefined, ...opt} } expect(parse("--platform mac")).toMatchSnapshot() expect(parse("-owl --x64 --ia32")) expect(parse("-mwl --x64 --ia32")) expect(parse("--dir")).toMatchObject(expected({targets: Platform.current().createTarget(DIR_TARGET)})) expect(parse("--mac --dir")).toMatchSnapshot() expect(parse("--x64 --dir")).toMatchObject(expected({targets: Platform.current().createTarget(DIR_TARGET, Arch.x64)})) expect(parse("--platform linux --dir")).toMatchSnapshot() expect(parse("--arch x64")).toMatchObject(expected({targets: Platform.current().createTarget(null, Arch.x64)})) expect(parse("--ia32 --x64")).toMatchObject(expected({targets: Platform.current().createTarget(null, Arch.x64, Arch.ia32)})) expect(parse("--linux")).toMatchSnapshot() expect(parse("--win")).toMatchSnapshot() expect(parse("-owl")).toMatchSnapshot() expect(parse("-l tar.gz:ia32")).toMatchSnapshot() expect(parse("-l tar.gz:x64")).toMatchSnapshot() expect(parse("-l tar.gz")).toMatchSnapshot() expect(parse("-w tar.gz:x64")).toMatchSnapshot() expect(parse("-c.compress=store -c.asar -c ./config.json")).toMatchObject({ config: { asar: true, compress: "store", extends: "./config.json" } }) function parseExtraMetadata(input: string) { const result = parse(input) delete result.targets return result } expect(parseExtraMetadata("--em.foo=bar")) })
test("cli", async () => { // because these methods are internal const { configureBuildCommand, normalizeOptions } = require("electron-builder/out/builder") const yargs = require("yargs") configureBuildCommand(yargs) function parse(input: string): any { const options = normalizeOptions(yargs.parse(input.split(" "))) checkBuildRequestOptions(options) return options } function expected(opt: any): object { return { draft: undefined, prerelease: undefined, ...opt } } expect(parse("--platform mac")).toMatchSnapshot() expect(parse("-owl --x64 --ia32")) expect(parse("-mwl --x64 --ia32")) expect(parse("--dir")).toMatchObject(expected({targets: Platform.current().createTarget(DIR_TARGET)})) expect(parse("--mac --dir")).toMatchSnapshot() expect(parse("--x64 --dir")).toMatchObject(expected({targets: Platform.current().createTarget(DIR_TARGET, Arch.x64)})) expect(parse("--platform linux --dir")).toMatchSnapshot() expect(parse("--arch x64")).toMatchObject(expected({targets: Platform.current().createTarget(null, Arch.x64)})) expect(parse("--ia32 --x64")).toMatchObject(expected({targets: Platform.current().createTarget(null, Arch.x64, Arch.ia32)})) expect(parse("--linux")).toMatchSnapshot() expect(parse("--win")).toMatchSnapshot() expect(parse("-owl")).toMatchSnapshot() expect(parse("-l tar.gz:ia32")).toMatchSnapshot() expect(parse("-l tar.gz:x64")).toMatchSnapshot() expect(parse("-l tar.gz")).toMatchSnapshot() expect(parse("-w tar.gz:x64")).toMatchSnapshot() expect(parse("-p always -w --x64")).toMatchSnapshot() expect(parse("--prepackaged someDir -w --x64")).toMatchSnapshot() expect(parse("--project someDir -w --x64")).toMatchSnapshot() expect(parse("-c.compress=store -c.asar -c ./config.json")).toMatchObject({ config: { asar: true, compress: "store", extends: "./config.json" } }) })
test("cli", async () => { const yargs = require("yargs") configureBuildCommand(yargs) function parse(input: string): BuildOptions { return normalizeOptions(yargs.parse(input.split(" "))) } function expected(opt: BuildOptions): object { return Object.assign({ publish: undefined, draft: undefined, prerelease: undefined, extraMetadata: undefined, }, opt) } expect(parse("--platform mac")).toMatchSnapshot() expect(parse("-owl --x64 --ia32")) expect(parse("-mwl --x64 --ia32")) expect(parse("--dir")).toMatchObject(expected({targets: Platform.current().createTarget(DIR_TARGET)})) expect(parse("--mac --dir")).toMatchSnapshot() expect(parse("--x64 --dir")).toMatchObject(expected({targets: Platform.current().createTarget(DIR_TARGET, Arch.x64)})) expect(parse("--platform linux --dir")).toMatchSnapshot() expect(parse("--arch x64")).toMatchObject(expected({targets: Platform.current().createTarget(null, Arch.x64)})) expect(parse("--ia32 --x64")).toMatchObject(expected({targets: Platform.current().createTarget(null, Arch.x64, Arch.ia32)})) expect(parse("--linux")).toMatchSnapshot() expect(parse("--win")).toMatchSnapshot() expect(parse("-owl")).toMatchSnapshot() expect(parse("-l tar.gz:ia32")).toMatchSnapshot() expect(parse("-l tar.gz:x64")).toMatchSnapshot() expect(parse("-l tar.gz")).toMatchSnapshot() expect(parse("-w tar.gz:x64")).toMatchSnapshot() function parseExtraMetadata(input: string) { const result = parse(input) delete result.targets return result } expect(parseExtraMetadata("--em.foo=bar")) })
async function doExtraResourcesTest(platform: Platform) { const osName = platform.buildConfigurationKey //noinspection SpellCheckingInspection await assertPack("test-app-one", { // to check NuGet package targets: platform.createTarget(platform === Platform.WINDOWS ? "squirrel" : DIR_TARGET), config: { extraResources: [ "foo", "bar/hello.txt", "./dir-relative/f.txt", "bar/${arch}.txt", "${os}/${arch}.txt", ], [osName]: { extraResources: [ "platformSpecificR" ], extraFiles: [ "platformSpecificF" ], } }, }, { projectDirCreated: projectDir => { return BluebirdPromise.all([ outputFile(path.join(projectDir, "foo/nameWithoutDot"), "nameWithoutDot"), outputFile(path.join(projectDir, "bar/hello.txt"), "data"), outputFile(path.join(projectDir, "dir-relative/f.txt"), "data"), outputFile(path.join(projectDir, `bar/${process.arch}.txt`), "data"), outputFile(path.join(projectDir, `${osName}/${process.arch}.txt`), "data"), outputFile(path.join(projectDir, "platformSpecificR"), "platformSpecificR"), outputFile(path.join(projectDir, "ignoreMe.txt"), "ignoreMe"), ]) }, packed: context => { const base = path.join(context.outDir, `${platform.buildConfigurationKey}${platform === Platform.MAC ? "" : "-unpacked"}`) let resourcesDir = path.join(base, "resources") if (platform === Platform.MAC) { resourcesDir = path.join(base, `${context.packager.appInfo.productFilename}.app`, "Contents", "Resources") } return BluebirdPromise.all([ assertThat(path.join(resourcesDir, "foo")).isDirectory(), assertThat(path.join(resourcesDir, "foo", "nameWithoutDot")).isFile(), assertThat(path.join(resourcesDir, "bar", "hello.txt")).isFile(), assertThat(path.join(resourcesDir, "dir-relative", "f.txt")).isFile(), assertThat(path.join(resourcesDir, "bar", `${process.arch}.txt`)).isFile(), assertThat(path.join(resourcesDir, osName, `${process.arch}.txt`)).isFile(), assertThat(path.join(resourcesDir, "platformSpecificR")).isFile(), assertThat(path.join(resourcesDir, "ignoreMe.txt")).doesNotExist(), ]) }, }) }
function createBuildResourcesTest(platform: Platform) { return app({ // only dir - avoid DMG targets: platform.createTarget(platform === Platform.MAC ? DIR_TARGET : null), config: { directories: { buildResources: "custom", output: "customDist", // https://github.com/electron-userland/electron-builder/issues/601 app: ".", } }, }, { packed: async context => { await assertThat(path.join(context.projectDir, "customDist")).isDirectory() }, projectDirCreated: projectDir => move(path.join(projectDir, "build"), path.join(projectDir, "custom")) }) }
export function platform(platform: Platform): PackagerOptions { return { targets: platform.createTarget() } }
(async () => { // Promise is returned build({ targets: Platform.current().createTarget(), config: { appId: "hr.envox.eez.studio", copyright: "Copyright © 2018-present Envox d.o.o.", directories: { output: "builder-output" }, files: [ "dist/**", "libs/**", "icon.icns", "icon.ico", "LICENSE.TXT", "node_modules/**", "!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}", "!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples}", "!**/node_modules/*.d.ts", "!**/node_modules/.bin", "!**/node_modules/better-sqlite3/build/Release", "!**/node_modules/usb/build/Release", "!**/node_modules/@serial-port/bindings/build/Release", "!**/node_modules/lzz-gyp/lzz-compiled/linux", "!**/node_modules/lzz-gyp/lzz-compiled/osx", "!**/node_modules/lzz-gyp/lzz-compiled/bsd", "!**/*.js.map" ], extraResources: await getExtraResource(), fileAssociations: [ { ext: "eez-project", name: "EEZ Studio Project", role: "Editor" } ], mac: { target: ["dmg", "pkg", "zip"], category: "public.app-category.utilities", icon: "./icon.icns", type: "distribution" }, dmg: { background: "dist/eez-studio-ui/_images/background.png", iconSize: 160, iconTextSize: 12, window: { width: 660, height: 400 }, contents: [ { x: 180, y: 170, type: "file" }, { x: 480, y: 170, type: "link", path: "/Applications" } ] }, pkg: { license: "LICENSE.TXT" }, win: { target: ["nsis" /*, "portable", "zip"*/], icon: "./icon.ico" }, nsis: { installerIcon: "./icon.ico", license: "LICENSE.TXT", warningsAsErrors: false }, linux: { target: ["AppImage", "deb", "rpm", "snap"], icon: "dist/eez-studio-ui/_images/eez_logo.png", category: "Utility" }, snap: { grade: "stable", summary: "Cross-platform visual development tool and SCPI instrument controller." }, publish: { provider: "github", owner: "notable", releaseType: "release", publishAutoUpdate: true } } }) .then(() => { // handle result }) .catch(error => { // handle error }); })();