Skip to content

Commit

Permalink
feat: support resolving of latest version for electron-nightly
Browse files Browse the repository at this point in the history
  • Loading branch information
develar committed Jan 21, 2020
1 parent ff1b1d5 commit 244abfb
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 29 deletions.
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
1 change: 1 addition & 0 deletions .idea/dictionaries/develar.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion docker/node/Dockerfile
Original file line number Diff line number Diff line change
@@ -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 && \
Expand Down
54 changes: 28 additions & 26 deletions packages/app-builder-lib/src/electron/electronVersion.ts
Original file line number Diff line number Diff line change
@@ -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"
Expand Down Expand Up @@ -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",
},
Expand All @@ -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]
Expand All @@ -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
Expand Down
1 change: 0 additions & 1 deletion packages/electron-updater/src/providers/GitHubProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ export class GitHubProvider extends BaseGitHubProvider<UpdateInfo> {
break
}
}

}
}
catch (e) {
Expand Down
6 changes: 6 additions & 0 deletions test/out/__snapshots__/ExtraBuildTest.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -127,3 +127,9 @@ Object {
"linux": Array [],
}
`;

exports[`retrieve latest electron-nightly version 1`] = `
Object {
"linux": Array [],
}
`;
12 changes: 12 additions & 0 deletions test/src/ExtraBuildTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}, {
Expand Down

0 comments on commit 244abfb

Please sign in to comment.