diff --git a/.circleci/config.yml b/.circleci/config.yml
index 20177117aa..110c581868 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -3,7 +3,7 @@ version: 2
jobs:
build:
docker:
- - image: circleci/node:12.13.1
+ - image: circleci/node:12.14.1
steps:
- checkout
- restore_cache:
diff --git a/.idea/dictionaries/develar.xml b/.idea/dictionaries/develar.xml
index 1bd6e0d4db..9a263a3c6c 100644
--- a/.idea/dictionaries/develar.xml
+++ b/.idea/dictionaries/develar.xml
@@ -267,6 +267,7 @@
napi
netlify
nevershow
+ nightlies
nokeys
nomacver
noninteractive
diff --git a/docker/node/Dockerfile b/docker/node/Dockerfile
index 8522a6bb8a..a34ae68cb7 100644
--- a/docker/node/Dockerfile
+++ b/docker/node/Dockerfile
@@ -1,6 +1,6 @@
FROM electronuserland/builder:base
-ENV NODE_VERSION 12.13.1
+ENV NODE_VERSION 12.14.1
# this package is used for snapcraft and we should not clear apt list - to avoid apt-get update during snap build
RUN curl -L https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz | tar xz -C /usr/local --strip-components=1 && \
diff --git a/packages/app-builder-lib/src/electron/electronVersion.ts b/packages/app-builder-lib/src/electron/electronVersion.ts
index 577a3219dd..d574e5cc10 100644
--- a/packages/app-builder-lib/src/electron/electronVersion.ts
+++ b/packages/app-builder-lib/src/electron/electronVersion.ts
@@ -1,4 +1,5 @@
import { InvalidConfigurationError, log } from "builder-util"
+import { parseXml } from "builder-util-runtime"
import { httpExecutor } from "builder-util/out/nodeHttpExecutor"
import { readJson } from "fs-extra"
import { Lazy } from "lazy-val"
@@ -57,32 +58,27 @@ export async function computeElectronVersion(projectDir: string, projectMetadata
return result
}
- const electronVersionFromMetadata = findFromPackageMetadata(await projectMetadata!!.value)
- const electronPackageName = findFromPackageMetadata(await projectMetadata!!.value)
-
- if (electronPackageName === "electron-nightly") {
- log.warn("You are using a nightly version of electron, be warned that those builds are highly unstable.")
- try {
- const releaseInfo = JSON.parse((await httpExecutor.request({
- hostname: "github.com",
- path: "/electron/nightlies/releases/latest",
- headers: {
- accept: "application/json",
- },
- }))!!)
- return (releaseInfo.tag_name.startsWith("v")) ? releaseInfo.tag_name.substring(1) : releaseInfo.tag_name
- }
- catch (e) {
- log.warn(e)
- }
- throw new InvalidConfigurationError(`Cannot find electron in '${path.join(projectDir, "package.json")}'`)
+ const dependency = findFromPackageMetadata(await projectMetadata!!.value)
+ if (dependency?.name === "electron-nightly") {
+ log.info("You are using a nightly version of electron, be warned that those builds are highly unstable.")
+ const feedXml = await httpExecutor.request({
+ hostname: "github.com",
+ path: `/electron/nightlies/releases.atom`,
+ headers: {
+ accept: "application/xml, application/atom+xml, text/xml, */*",
+ },
+ })
+ const feed = parseXml(feedXml!!)
+ const latestRelease = feed.element("entry", false, `No published versions on GitHub`)
+ const v = latestRelease.element("link").attribute("href").match(/\/tag\/v?([^\/]+)$/)!![1]
+ return v.startsWith("v") ? v.substring(1) : v
}
- else if (electronPackageName === "electron" || electronPackageName === "electron-prebuilt" || electronPackageName === "electron-prebuilt-compile" && electronVersionFromMetadata === "latest") {
+ else if (dependency?.version === "latest") {
log.warn("Electron version is set to \"latest\", but it is recommended to set it to some more restricted version range.")
try {
const releaseInfo = JSON.parse((await httpExecutor.request({
hostname: "github.com",
- path: "/electron/electron/releases/latest",
+ path: `/electron/${dependency?.name === "electron-nightly" ? "nightlies" : "electron"}/releases/latest`,
headers: {
accept: "application/json",
},
@@ -96,15 +92,21 @@ export async function computeElectronVersion(projectDir: string, projectMetadata
throw new InvalidConfigurationError(`Cannot find electron dependency to get electron version in the '${path.join(projectDir, "package.json")}'`)
}
- if (electronVersionFromMetadata == null || !/^\d/.test(electronVersionFromMetadata)) {
- const versionMessage = electronVersionFromMetadata == null ? "" : ` and version ("${electronVersionFromMetadata}") is not fixed in project`
+ const version = dependency?.version
+ if (version == null || !/^\d/.test(version)) {
+ const versionMessage = version == null ? "" : ` and version ("${version}") is not fixed in project`
throw new InvalidConfigurationError(`Cannot compute electron version from installed node modules - none of the possible electron modules are installed${versionMessage}.\nSee https://github.com/electron-userland/electron-builder/issues/3984#issuecomment-504968246`)
}
- return semver.coerce(electronVersionFromMetadata)!!.toString()
+ return semver.coerce(version)!!.toString()
+}
+
+interface NameAndVersion {
+ readonly name: string
+ readonly version: string
}
-function findFromPackageMetadata(packageData: any): string | null {
+function findFromPackageMetadata(packageData: any): NameAndVersion | null {
for (const name of electronPackages) {
const devDependencies = packageData.devDependencies
let dep = devDependencies == null ? null : devDependencies[name]
@@ -113,7 +115,7 @@ function findFromPackageMetadata(packageData: any): string | null {
dep = dependencies == null ? null : dependencies[name]
}
if (dep != null) {
- return dep
+ return {name, version: dep}
}
}
return null
diff --git a/packages/electron-updater/src/providers/GitHubProvider.ts b/packages/electron-updater/src/providers/GitHubProvider.ts
index 7cf3d4edff..372f5c0153 100644
--- a/packages/electron-updater/src/providers/GitHubProvider.ts
+++ b/packages/electron-updater/src/providers/GitHubProvider.ts
@@ -59,7 +59,6 @@ export class GitHubProvider extends BaseGitHubProvider {
break
}
}
-
}
}
catch (e) {
diff --git a/test/out/__snapshots__/ExtraBuildTest.js.snap b/test/out/__snapshots__/ExtraBuildTest.js.snap
index 988a0c01df..3758647dea 100644
--- a/test/out/__snapshots__/ExtraBuildTest.js.snap
+++ b/test/out/__snapshots__/ExtraBuildTest.js.snap
@@ -127,3 +127,9 @@ Object {
"linux": Array [],
}
`;
+
+exports[`retrieve latest electron-nightly version 1`] = `
+Object {
+ "linux": Array [],
+}
+`;
diff --git a/test/src/ExtraBuildTest.ts b/test/src/ExtraBuildTest.ts
index 0318940cf2..85d68f8471 100644
--- a/test/src/ExtraBuildTest.ts
+++ b/test/src/ExtraBuildTest.ts
@@ -69,6 +69,18 @@ test.ifAll.ifLinuxOrDevMac("retrieve latest electron version", app({
}),
}))
+test.ifAll.ifLinuxOrDevMac("retrieve latest electron-nightly version", app({
+ targets: linuxDirTarget,
+}, {
+ projectDirCreated: projectDir => modifyPackageJson(projectDir, data => {
+ data.devDependencies = {
+ ...data.devDependencies,
+ "electron-nightly": "latest",
+ }
+ delete data.build.electronVersion
+ }),
+}))
+
test.ifAll.ifDevOrLinuxCi("override targets in the config", app({
targets: linuxDirTarget,
}, {