diff --git a/package.json b/package.json index 9c20a91e3b4..fba2561c620 100644 --- a/package.json +++ b/package.json @@ -28,8 +28,8 @@ "///": "all dependencies for all packages (hoisted)", "dependencies": { "7zip-bin": "^2.0.4", - "ajv": "^5.0.4-beta.2", - "ajv-keywords": "^2.0.1-beta.2", + "ajv": "^5.0.0", + "ajv-keywords": "^2.0.0", "archiver": "^1.3.0", "aws-sdk": "^2.45.0", "bluebird-lst": "^1.0.2", diff --git a/packages/electron-builder/package.json b/packages/electron-builder/package.json index 557f1798a09..814e9d7da5b 100644 --- a/packages/electron-builder/package.json +++ b/packages/electron-builder/package.json @@ -45,8 +45,8 @@ "homepage": "https://github.com/electron-userland/electron-builder", "dependencies": { "7zip-bin": "^2.0.4", - "ajv": "^5.0.4-beta.2", - "ajv-keywords": "^2.0.1-beta.2", + "ajv": "^5.0.0", + "ajv-keywords": "^2.0.0", "bluebird-lst": "^1.0.2", "chalk": "^1.1.3", "chromium-pickle-js": "^0.2.0", diff --git a/packages/electron-builder/src/fileMatcher.ts b/packages/electron-builder/src/fileMatcher.ts index fc3aa2aa593..7116d8c4cf7 100644 --- a/packages/electron-builder/src/fileMatcher.ts +++ b/packages/electron-builder/src/fileMatcher.ts @@ -14,16 +14,24 @@ export class FileMatcher { readonly from: string readonly to: string - readonly patterns: Array + private readonly patterns: Array constructor(from: string, to: string, private readonly macroExpander: (pattern: string) => string, patterns?: Array | string | n) { this.from = macroExpander(from) this.to = macroExpander(to) - this.patterns = asArray(patterns).map(it => path.posix.normalize(macroExpander(it))) + this.patterns = asArray(patterns).map(it => this.normalizePattern(it)) + } + + private normalizePattern(pattern: string) { + return path.posix.normalize(this.macroExpander(pattern)) } addPattern(pattern: string) { - this.patterns.push(path.posix.normalize(this.macroExpander(pattern))) + this.patterns.push(this.normalizePattern(pattern)) + } + + prependPattern(pattern: string) { + this.patterns.unshift(this.normalizePattern(pattern)) } addAllPattern() { @@ -74,13 +82,23 @@ export class FileMatcher { } } -export function createFileMatcher(info: BuildInfo, appDir: string, resourcesPath: string, macroExpander: (pattern: string) => string, platformSpecificBuildOptions: PlatformSpecificBuildOptions) { +export function createFileMatcher(info: BuildInfo, appDir: string, resourcesPath: string, macroExpander: (pattern: string) => string, platformSpecificBuildOptions: PlatformSpecificBuildOptions, buildResourceDir: string) { const patterns = info.isPrepackedAppAsar ? null : getFileMatchers(info.config, "files", appDir, path.join(resourcesPath, "app"), false, macroExpander, platformSpecificBuildOptions) const matcher = patterns == null ? new FileMatcher(appDir, path.join(resourcesPath, "app"), macroExpander) : patterns[0] + + const relativeBuildResourceDir = path.relative(matcher.from, buildResourceDir) + const ignoreBuildResourceDirPattern = (relativeBuildResourceDir.length !== 0 && !relativeBuildResourceDir.startsWith(".")) ? `!${relativeBuildResourceDir}{,/**/*}` : null + if (matcher.isEmpty() || matcher.containsOnlyIgnore()) { matcher.addAllPattern() + if (ignoreBuildResourceDirPattern != null) { + matcher.addPattern(ignoreBuildResourceDirPattern) + } } else { + if (ignoreBuildResourceDirPattern != null) { + matcher.prependPattern(ignoreBuildResourceDirPattern) + } matcher.addPattern("package.json") } matcher.addPattern("!**/node_modules/*/{CHANGELOG.md,ChangeLog,changelog.md,README.md,README,readme.md,readme,test,__tests__,tests,powered-test,example,examples,*.d.ts}") diff --git a/packages/electron-builder/src/platformPackager.ts b/packages/electron-builder/src/platformPackager.ts index ac72a124f98..76a32387c18 100644 --- a/packages/electron-builder/src/platformPackager.ts +++ b/packages/electron-builder/src/platformPackager.ts @@ -142,7 +142,6 @@ export abstract class PlatformPackager const appDir = this.info.appDir const ignoreFiles = new Set([path.resolve(this.info.projectDir, outDir), - path.resolve(this.info.projectDir, this.buildResourcesDir), path.resolve(this.info.projectDir, "electron-builder.yml"), path.resolve(this.info.projectDir, "electron-builder.json"), path.resolve(this.info.projectDir, "electron-builder.json5")]) @@ -175,7 +174,7 @@ export abstract class PlatformPackager } } - const defaultMatcher = createFileMatcher(this.info, appDir, resourcesPath, macroExpander, platformSpecificBuildOptions) + const defaultMatcher = createFileMatcher(this.info, appDir, resourcesPath, macroExpander, platformSpecificBuildOptions, path.resolve(this.info.projectDir, this.buildResourcesDir)) const isElectronCompile = asarOptions != null && isElectronCompileUsed(this.info) if (isElectronCompile) { defaultMatcher.addPattern("!.cache{,/**/*}") diff --git a/test/fixtures/test-app-build-sub/build/app/index.html b/test/fixtures/test-app-build-sub/build/app/index.html new file mode 100644 index 00000000000..8d710f08e6d --- /dev/null +++ b/test/fixtures/test-app-build-sub/build/app/index.html @@ -0,0 +1,13 @@ + + + + + Hello World! + + +

Hello World!

+ We are using node , + Chrome , + and Electron . + + diff --git a/test/fixtures/test-app-build-sub/build/app/main.js b/test/fixtures/test-app-build-sub/build/app/main.js new file mode 100644 index 00000000000..e8ddab327ef --- /dev/null +++ b/test/fixtures/test-app-build-sub/build/app/main.js @@ -0,0 +1,32 @@ +"use strict" + +const electron = require('electron') +const app = electron.app +const BrowserWindow = electron.BrowserWindow + +let mainWindow + +function createWindow () { + mainWindow = new BrowserWindow({width: 800, height: 600}) + mainWindow.loadURL('file://' + __dirname + '/index.html') + + mainWindow.webContents.openDevTools() + + mainWindow.on('closed', function() { + mainWindow = null + }); +} + +app.on('ready', createWindow) + +app.on('window-all-closed', function () { + if (process.platform !== 'darwin') { + app.quit() + } +}) + +app.on('activate', function () { + if (mainWindow === null) { + createWindow() + } +}) \ No newline at end of file diff --git a/test/fixtures/test-app-build-sub/package.json b/test/fixtures/test-app-build-sub/package.json new file mode 100644 index 00000000000..843d428d5f0 --- /dev/null +++ b/test/fixtures/test-app-build-sub/package.json @@ -0,0 +1,23 @@ +{ + "version": "1.0.0", + "main": "./build/app/main.js", + "author": "true", + "name": "Foo", + "build": { + "electronVersion": "1.6.6", + "appId": "org.electron-builder.testApp", + "compression": "store", + "npmRebuild": false, + "mac": { + "category": "your.app.category.type" + }, + "directories": { + "output": "build/dist" + }, + "files": [ + "build/app/**/*.js", + "build/app/**/*.html" + ], + "asar": false + } +} diff --git a/test/out/__snapshots__/ExtraBuildTest.js.snap b/test/out/__snapshots__/ExtraBuildTest.js.snap index 8bb98eac2ae..2e99f6e6154 100644 --- a/test/out/__snapshots__/ExtraBuildTest.js.snap +++ b/test/out/__snapshots__/ExtraBuildTest.js.snap @@ -29,6 +29,12 @@ Object { } `; +exports[`do not exclude build entirely (respect files) 1`] = ` +Object { + "linux": Array [], +} +`; + exports[`override targets in the config - only arch 1`] = ` Object { "win": Array [ diff --git a/test/src/ExtraBuildTest.ts b/test/src/ExtraBuildTest.ts index fcd6d746351..1ba9728273b 100644 --- a/test/src/ExtraBuildTest.ts +++ b/test/src/ExtraBuildTest.ts @@ -4,7 +4,7 @@ import { move, readFile } from "fs-extra-p" import { safeLoad } from "js-yaml" import * as path from "path" import { assertThat } from "./helpers/fileAssert" -import { app, appThrows } from "./helpers/packTester" +import { app, appThrows, assertPack } from "./helpers/packTester" import { expectUpdateMetadata } from "./helpers/winHelper" function createBuildResourcesTest(platform: Platform) { @@ -160,4 +160,7 @@ test.ifAll.ifDevOrLinuxCi("scheme validation extraFiles", app({ } ], }, -})) \ No newline at end of file +})) + +// test on all CI to check path separators +test.ifAll("do not exclude build entirely (respect files)", () => assertPack("test-app-build-sub", {targets: linuxDirTarget})) \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 551ef045b01..367066d7abc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -86,9 +86,9 @@ acorn@^4.0.4: version "4.0.11" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" -ajv-keywords@^2.0.1-beta.2: - version "2.0.1-beta.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.0.1-beta.2.tgz#b48f36d63e9334c5045bafde090db006328a0972" +ajv-keywords@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.0.0.tgz#a37d02f845b6f52569804164270b24cb6c6cee61" ajv@^4.9.1: version "4.11.7" @@ -97,9 +97,9 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.0.4-beta.2: - version "5.0.4-beta.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.0.4-beta.3.tgz#bb87e35a8f04787a3b7e9b7b2756a6acb6ac926c" +ajv@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.0.0.tgz#a2c717764e8036d15fd227b070ddaf7867ab413a" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" @@ -786,8 +786,8 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: delayed-stream "~1.0.0" command-line-args@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-4.0.2.tgz#a99c2f28ceabcf26ac56d38e78b600ea3b57e650" + version "4.0.3" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-4.0.3.tgz#aefb061f107f0fd8d72b3c5e0ba042b319891bae" dependencies: array-back "^1.0.4" find-replace "^1.0.3" @@ -1025,8 +1025,8 @@ diff@^3.0.0, diff@^3.2.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" dmd@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dmd/-/dmd-3.0.3.tgz#3c91f7ba895d379a21c187386d2427e52909a070" + version "3.0.4" + resolved "https://registry.yarnpkg.com/dmd/-/dmd-3.0.4.tgz#8a641518a7e2641f95777e046b5c4f085a9ec9b5" dependencies: array-back "^1.0.4" cache-point "^0.4.0" @@ -1039,7 +1039,7 @@ dmd@^3.0.0: reduce-unique "^1.0.0" reduce-without "^1.0.1" test-value "^2.1.0" - walk-back "^2.0.1" + walk-back "^3.0.0" doctrine@^2.0.0: version "2.0.0" @@ -1536,7 +1536,7 @@ is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" -is-buffer@^1.0.2: +is-buffer@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" @@ -2085,10 +2085,10 @@ jsprim@^1.2.2: verror "1.3.6" kind-of@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" + version "3.2.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" dependencies: - is-buffer "^1.0.2" + is-buffer "^1.1.5" klaw@~1.3.0: version "1.3.1" @@ -2269,7 +2269,7 @@ mime@^1.3.4: dependencies: brace-expansion "^1.0.0" -minimist@0.0.8: +minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -2277,10 +2277,6 @@ 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" -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -2383,7 +2379,7 @@ object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-get@^2.0.4, object-get@^2.1.0: +object-get@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/object-get/-/object-get-2.1.0.tgz#722bbdb60039efa47cad3c6dc2ce51a85c02c5ae" @@ -2709,10 +2705,11 @@ regex-cache@^0.4.2: is-primitive "^2.0.0" registry-auth-token@^3.0.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.2.0.tgz#5bf3bd4608a2dd9242542c44d66ad8a5f9cdd3b0" + version "3.3.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.0.tgz#57ae67347e73d96345ed1bc01294c7237c02aa63" dependencies: rc "^1.1.6" + safe-buffer "^5.0.1" registry-url@^3.0.3: version "3.1.0" @@ -2884,12 +2881,12 @@ sntp@1.x.x: hoek "2.x.x" sort-array@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sort-array/-/sort-array-1.1.1.tgz#9032f6f0be284eecb12af98a3db02612828a66d1" + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-array/-/sort-array-1.1.2.tgz#b88986053c0170a7f9de63f18a49ec79c24c3e64" dependencies: - array-back "^1.0.3" - object-get "^2.0.4" - typical "^2.4.2" + array-back "^1.0.4" + object-get "^2.1.0" + typical "^2.6.0" source-map-support@^0.4.14, source-map-support@^0.4.2: version "0.4.14" @@ -3371,6 +3368,10 @@ walk-back@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/walk-back/-/walk-back-2.0.1.tgz#554e2a9d874fac47a8cb006bf44c2f0c4998a0a4" +walk-back@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/walk-back/-/walk-back-3.0.0.tgz#2358787a35da91032dad5e92f80b12370d8795c5" + walkdir@0.0.11, walkdir@^0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/walkdir/-/walkdir-0.0.11.tgz#a16d025eb931bd03b52f308caed0f40fcebe9532" @@ -3400,8 +3401,8 @@ whatwg-encoding@^1.0.1: iconv-lite "0.4.13" whatwg-url@^4.3.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.7.0.tgz#202035ac1955b087cdd20fa8b58ded3ab1cd2af5" + version "4.7.1" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.7.1.tgz#df4dc2e3f25a63b1fa5b32ed6d6c139577d690de" dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0"