Skip to content

Commit b960d2f

Browse files
authored
refactor: enabling getBin to accept a different repo as a download source (useful for testing) (#9151)
1 parent 73696c6 commit b960d2f

File tree

10 files changed

+65
-34
lines changed

10 files changed

+65
-34
lines changed

.changeset/lovely-colts-hear.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"app-builder-lib": patch
3+
---
4+
5+
refactor: enabling `getBin` to accept a different repo as a download source (useful for testing)

packages/app-builder-lib/src/binDownload.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { executeAppBuilder } from "builder-util"
22
import { Nullish } from "builder-util-runtime"
3+
import { sanitizeFileName } from "builder-util/out/filename"
34

45
const versionToPromise = new Map<string, Promise<string>>()
56

@@ -16,41 +17,39 @@ export function getBinFromCustomLoc(name: string, version: string, binariesLocUr
1617
return getBin(dirName, binariesLocUrl, checksum)
1718
}
1819

19-
export function getBinFromUrl(name: string, version: string, checksum: string): Promise<string> {
20-
const dirName = `${name}-${version}`
20+
export function getBinFromUrl(releaseName: string, filenameWithExt: string, checksum: string, githubOrgRepo = "electron-userland/electron-builder-binaries"): Promise<string> {
2121
let url: string
2222
if (process.env.ELECTRON_BUILDER_BINARIES_DOWNLOAD_OVERRIDE_URL) {
23-
url = process.env.ELECTRON_BUILDER_BINARIES_DOWNLOAD_OVERRIDE_URL + "/" + dirName + ".7z"
23+
url = process.env.ELECTRON_BUILDER_BINARIES_DOWNLOAD_OVERRIDE_URL + "/" + filenameWithExt
2424
} else {
2525
const baseUrl =
2626
process.env.NPM_CONFIG_ELECTRON_BUILDER_BINARIES_MIRROR ||
2727
process.env.npm_config_electron_builder_binaries_mirror ||
2828
process.env.npm_package_config_electron_builder_binaries_mirror ||
2929
process.env.ELECTRON_BUILDER_BINARIES_MIRROR ||
30-
"https://github.com/electron-userland/electron-builder-binaries/releases/download/"
30+
`https://github.com/${githubOrgRepo}/releases/download/`
3131
const middleUrl =
3232
process.env.NPM_CONFIG_ELECTRON_BUILDER_BINARIES_CUSTOM_DIR ||
3333
process.env.npm_config_electron_builder_binaries_custom_dir ||
3434
process.env.npm_package_config_electron_builder_binaries_custom_dir ||
3535
process.env.ELECTRON_BUILDER_BINARIES_CUSTOM_DIR ||
36-
dirName
37-
const urlSuffix = dirName + ".7z"
38-
url = `${baseUrl}${middleUrl}/${urlSuffix}`
36+
releaseName
37+
url = `${baseUrl}${middleUrl}/${filenameWithExt}`
3938
}
4039

41-
return getBin(dirName, url, checksum)
40+
return getBin(releaseName, url, checksum)
4241
}
4342

4443
export function getBin(name: string, url?: string | null, checksum?: string | null): Promise<string> {
4544
// Old cache is ignored if cache environment variable changes
46-
const cacheName = `${process.env.ELECTRON_BUILDER_CACHE}${name}`
45+
const cacheName = sanitizeFileName(`${process.env.ELECTRON_BUILDER_CACHE ?? ""}${name}`)
4746
let promise = versionToPromise.get(cacheName) // if rejected, we will try to download again
4847

4948
if (promise != null) {
5049
return promise
5150
}
5251

53-
promise = doGetBin(name, url, checksum)
52+
promise = doGetBin(cacheName, url, checksum)
5453
versionToPromise.set(cacheName, promise)
5554
return promise
5655
}

packages/app-builder-lib/src/targets/MsiTarget.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ export default class MsiTarget extends Target {
8686
await packager.info.emitMsiProjectCreated(projectFile)
8787

8888
// noinspection SpellCheckingInspection
89-
const vendorPath = await getBinFromUrl("wix", "4.0.0.5512.2", "/X5poahdCc3199Vt6AP7gluTlT1nxi9cbbHhZhCMEu+ngyP1LiBMn+oZX7QAZVaKeBMc2SjVp7fJqNLqsUnPNQ==")
89+
const vendorPath = await getBinFromUrl("wix-4.0.0.5512.2", "wix-4.0.0.5512.2.7z", "/X5poahdCc3199Vt6AP7gluTlT1nxi9cbbHhZhCMEu+ngyP1LiBMn+oZX7QAZVaKeBMc2SjVp7fJqNLqsUnPNQ==")
9090

9191
// noinspection SpellCheckingInspection
9292
const candleArgs = ["-arch", wixArch === Arch.ia32 ? "x86" : "x64", `-dappDir=${vm.toVmFile(appOutDir)}`].concat(this.getCommonWixArgs())

packages/app-builder-lib/src/targets/nsis/nsisUtil.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ export const NSIS_PATH = () => {
3333
}
3434
}
3535
// Warning: Don't use v3.0.4.2 - https://github.com/electron-userland/electron-builder/issues/6334
36-
// noinspection SpellCheckingInspection
37-
return getBinFromUrl("nsis", "3.0.4.1", "VKMiizYdmNdJOWpRGz4trl4lD++BvYP2irAXpMilheUP0pc93iKlWAoP843Vlraj8YG19CVn0j+dCo/hURz9+Q==")
36+
return getBinFromUrl("nsis-3.0.4.1", "nsis-3.0.4.1.7z", "VKMiizYdmNdJOWpRGz4trl4lD++BvYP2irAXpMilheUP0pc93iKlWAoP843Vlraj8YG19CVn0j+dCo/hURz9+Q==")
3837
})
3938
}
4039

@@ -44,7 +43,7 @@ export const NSIS_RESOURCES_PATH = () => {
4443
const { checksum, url, version } = options.customNsisResources
4544
return getBinFromCustomLoc("nsis-resources", version, url, checksum)
4645
}
47-
return getBinFromUrl("nsis-resources", "3.4.1", "Dqd6g+2buwwvoG1Vyf6BHR1b+25QMmPcwZx40atOT57gH27rkjOei1L0JTldxZu4NFoEmW4kJgZ3DlSWVON3+Q==")
46+
return getBinFromUrl("nsis-resources-3.4.1", "nsis-resources-3.4.1.7z", "Dqd6g+2buwwvoG1Vyf6BHR1b+25QMmPcwZx40atOT57gH27rkjOei1L0JTldxZu4NFoEmW4kJgZ3DlSWVON3+Q==")
4847
})
4948
}
5049

packages/app-builder-lib/src/targets/tools.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ import * as path from "path"
22
import { getBinFromUrl } from "../binDownload"
33

44
export function getLinuxToolsPath() {
5-
//noinspection SpellCheckingInspection
6-
return getBinFromUrl("linux-tools", "mac-10.12.3", "SQ8fqIRVXuQVWnVgaMTDWyf2TLAJjJYw3tRSqQJECmgF6qdM7Kogfa6KD49RbGzzMYIFca9Uw3MdsxzOPRWcYw==")
5+
return getBinFromUrl("linux-tools-mac-10.12.3", "linux-tools-mac-10.12.3.7z", "SQ8fqIRVXuQVWnVgaMTDWyf2TLAJjJYw3tRSqQJECmgF6qdM7Kogfa6KD49RbGzzMYIFca9Uw3MdsxzOPRWcYw==")
76
}
87

98
export async function getFpmPath() {
9+
if (process.env.CUSTOM_FPM_PATH != null) {
10+
return path.resolve(process.env.CUSTOM_FPM_PATH)
11+
}
1012
const exec = "fpm"
1113
if (process.platform === "win32" || process.env.USE_SYSTEM_FPM === "true") {
1214
return exec
@@ -21,7 +23,15 @@ export async function getFpmPath() {
2123
checksum = "OnzvBdsHE5djcXcAT87rwbnZwS789ZAd2ehuIO42JWtBAHNzXKxV4o/24XFX5No4DJWGO2YSGQttW+zn7d/4rQ=="
2224
archSuffix = "-x86"
2325
}
24-
return path.join(await getBinFromUrl("fpm", "1.9.3-2.3.1-linux" + archSuffix, checksum), exec)
26+
const fileName = "fpm-1.9.3-2.3.1-linux" + archSuffix
27+
return path.join(await getBinFromUrl(fileName, fileName + ".7z", checksum), exec)
2528
}
26-
return path.join(await getBinFromUrl("fpm", "1.9.3-20150715-2.2.2-mac", "oXfq+0H2SbdrbMik07mYloAZ8uHrmf6IJk+Q3P1kwywuZnKTXSaaeZUJNlWoVpRDWNu537YxxpBQWuTcF+6xfw=="), exec)
29+
return path.join(
30+
await getBinFromUrl(
31+
"fpm-1.9.3-20150715-2.2.2-mac",
32+
"fpm-1.9.3-20150715-2.2.2-mac.7z",
33+
"oXfq+0H2SbdrbMik07mYloAZ8uHrmf6IJk+Q3P1kwywuZnKTXSaaeZUJNlWoVpRDWNu537YxxpBQWuTcF+6xfw=="
34+
),
35+
exec
36+
)
2737
}

packages/builder-util/src/log.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class Logger {
2525

2626
constructor(protected readonly stream: WritableStream) {
2727
if (this.shouldDisableNonErrorLoggingVitest) {
28-
this.log(`non-error logging is silenced during VITEST workfloww when DEBUG=electron-builder flag is not set`)
28+
this.log(`non-error logging is silenced during VITEST workflow when DEBUG=electron-builder flag is not set`)
2929
}
3030
}
3131

test/src/binDownloadTest.ts

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,45 @@
11
import { getBinFromUrl } from "app-builder-lib/out/binDownload"
22

33
test("download binary from Github", async ({ expect }) => {
4-
const bin = await getBinFromUrl("linux-tools", "mac-10.12.3", "SQ8fqIRVXuQVWnVgaMTDWyf2TLAJjJYw3tRSqQJECmgF6qdM7Kogfa6KD49RbGzzMYIFca9Uw3MdsxzOPRWcYw==")
4+
const bin = await getBinFromUrl(
5+
"linux-tools-mac-10.12.3",
6+
"linux-tools-mac-10.12.3.7z",
7+
"SQ8fqIRVXuQVWnVgaMTDWyf2TLAJjJYw3tRSqQJECmgF6qdM7Kogfa6KD49RbGzzMYIFca9Uw3MdsxzOPRWcYw=="
8+
)
59
expect(bin).toBeTruthy()
610
})
711

812
test("download binary from Mirror with custom dir", async ({ expect }) => {
913
process.env.ELECTRON_BUILDER_BINARIES_MIRROR = "https://github.com/electron-userland/electron-builder-binaries/releases/download/"
1014
process.env.ELECTRON_BUILDER_BINARIES_CUSTOM_DIR = "linux-tools-mac-10.12.3"
11-
const bin = await getBinFromUrl("linux-tools", "mac-10.12.3", "SQ8fqIRVXuQVWnVgaMTDWyf2TLAJjJYw3tRSqQJECmgF6qdM7Kogfa6KD49RbGzzMYIFca9Uw3MdsxzOPRWcYw==")
12-
delete process.env.ELECTRON_BUILDER_BINARIES_MIRROR
15+
const bin = await getBinFromUrl(
16+
"linux-tools-mac-10.12.3",
17+
"linux-tools-mac-10.12.3.7z",
18+
"SQ8fqIRVXuQVWnVgaMTDWyf2TLAJjJYw3tRSqQJECmgF6qdM7Kogfa6KD49RbGzzMYIFca9Uw3MdsxzOPRWcYw=="
19+
)
20+
delete process.env.ELECTRON_BUILDER_BINARIES_MIRROR
1321
delete process.env.ELECTRON_BUILDER_BINARIES_CUSTOM_DIR
1422
expect(bin).toBeTruthy()
1523
})
1624

1725
test("download binary from Mirror", async ({ expect }) => {
1826
process.env.ELECTRON_BUILDER_BINARIES_MIRROR = "https://github.com/electron-userland/electron-builder-binaries/releases/download/"
19-
const bin = await getBinFromUrl("linux-tools", "mac-10.12.3", "SQ8fqIRVXuQVWnVgaMTDWyf2TLAJjJYw3tRSqQJECmgF6qdM7Kogfa6KD49RbGzzMYIFca9Uw3MdsxzOPRWcYw==")
20-
delete process.env.ELECTRON_BUILDER_BINARIES_MIRROR
27+
const bin = await getBinFromUrl(
28+
"linux-tools-mac-10.12.3",
29+
"linux-tools-mac-10.12.3.7z",
30+
"SQ8fqIRVXuQVWnVgaMTDWyf2TLAJjJYw3tRSqQJECmgF6qdM7Kogfa6KD49RbGzzMYIFca9Uw3MdsxzOPRWcYw=="
31+
)
32+
delete process.env.ELECTRON_BUILDER_BINARIES_MIRROR
2133
expect(bin).toBeTruthy()
2234
})
2335

2436
test("download binary from Mirror with Url override", async ({ expect }) => {
2537
process.env.ELECTRON_BUILDER_BINARIES_DOWNLOAD_OVERRIDE_URL = "https://github.com/electron-userland/electron-builder-binaries/releases/download/linux-tools-mac-10.12.3"
26-
const bin = await getBinFromUrl("linux-tools", "mac-10.12.3", "SQ8fqIRVXuQVWnVgaMTDWyf2TLAJjJYw3tRSqQJECmgF6qdM7Kogfa6KD49RbGzzMYIFca9Uw3MdsxzOPRWcYw==")
27-
delete process.env.ELECTRON_BUILDER_BINARIES_DOWNLOAD_OVERRIDE_URL
38+
const bin = await getBinFromUrl(
39+
"linux-tools-mac-10.12.3",
40+
"linux-tools-mac-10.12.3.7z",
41+
"SQ8fqIRVXuQVWnVgaMTDWyf2TLAJjJYw3tRSqQJECmgF6qdM7Kogfa6KD49RbGzzMYIFca9Uw3MdsxzOPRWcYw=="
42+
)
43+
delete process.env.ELECTRON_BUILDER_BINARIES_DOWNLOAD_OVERRIDE_URL
2844
expect(bin).toBeTruthy()
2945
})

test/src/linux/debTest.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@ import { Arch, Platform } from "electron-builder"
22
import * as fs from "fs/promises"
33
import { app, execShell, getTarExecutable } from "../helpers/packTester"
44

5+
const defaultDebTarget = Platform.LINUX.createTarget("deb", Arch.x64)
6+
57
test.ifNotWindows("deb", ({ expect }) =>
68
app(expect, {
7-
targets: Platform.LINUX.createTarget("deb"),
9+
targets: defaultDebTarget,
810
})
911
)
1012

1113
test.ifNotWindows("arm", ({ expect }) => app(expect, { targets: Platform.LINUX.createTarget("deb", Arch.armv7l, Arch.arm64) }))
1214

1315
test.ifNotWindows("custom depends", ({ expect }) =>
1416
app(expect, {
15-
targets: Platform.LINUX.createTarget("deb"),
17+
targets: defaultDebTarget,
1618
config: {
1719
linux: {
1820
executableName: "Boo",
@@ -36,7 +38,7 @@ test.ifNotWindows("custom depends", ({ expect }) =>
3638

3739
test.ifNotWindows("top-level exec name", ({ expect }) =>
3840
app(expect, {
39-
targets: Platform.LINUX.createTarget("deb"),
41+
targets: defaultDebTarget,
4042
config: {
4143
productName: "foo",
4244
executableName: "Boo",
@@ -46,7 +48,7 @@ test.ifNotWindows("top-level exec name", ({ expect }) =>
4648

4749
test.ifNotWindows("no quotes for safe exec name", ({ expect }) =>
4850
app(expect, {
49-
targets: Platform.LINUX.createTarget("deb"),
51+
targets: defaultDebTarget,
5052
config: {
5153
productName: "foo",
5254
linux: {
@@ -65,7 +67,7 @@ test.ifNotWindows("executable path in postinst script", ({ expect }) =>
6567
app(
6668
expect,
6769
{
68-
targets: Platform.LINUX.createTarget("deb"),
70+
targets: defaultDebTarget,
6971
config: {
7072
productName: "foo",
7173
linux: {
@@ -90,7 +92,7 @@ test.ifNotWindows("deb file associations", ({ expect }) =>
9092
app(
9193
expect,
9294
{
93-
targets: Platform.LINUX.createTarget("deb"),
95+
targets: defaultDebTarget,
9496
config: {
9597
fileAssociations: [
9698
{

test/src/updater/blackboxUpdateTest.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ async function runTestWithinServer(doTest: (rootDirectory: string, updateConfigP
308308
// Math.random() / Math.random() is used to avoid zero
309309
// Math.floor(((Math.random() / Math.random()) * 1000) % 65535) is used to avoid port number collision
310310
const port = 8000 + Math.floor(((Math.random() / Math.random()) * 1000) % 65535)
311-
const serverBin = await getBinFromUrl("ran", "0.1.3", "imfA3LtT6umMM0BuQ29MgO3CJ9uleN5zRBi3sXzcTbMOeYZ6SQeN7eKr3kXZikKnVOIwbH+DDO43wkiR/qTdkg==")
311+
const serverBin = await getBinFromUrl("ran-0.1.3", "ran-0.1.3.7z", "imfA3LtT6umMM0BuQ29MgO3CJ9uleN5zRBi3sXzcTbMOeYZ6SQeN7eKr3kXZikKnVOIwbH+DDO43wkiR/qTdkg==")
312312
const httpServerProcess = doSpawn(path.join(serverBin, process.platform, "ran"), [`-root=${root}`, `-port=${port}`, "-gzip=false", "-listdir=true"])
313313

314314
const updateConfig = await writeUpdateConfig<GenericServerOptions>({

test/src/updater/differentialUpdateTest.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ async function testBlockMap(expect: ExpectStatic, oldDir: string, newDir: string
188188
)
189189
const port = 8000 + (updaterClass.name.charCodeAt(0) as number) + Math.floor(Math.random() * 10000)
190190

191-
const serverBin = await getBinFromUrl("ran", "0.1.3", "imfA3LtT6umMM0BuQ29MgO3CJ9uleN5zRBi3sXzcTbMOeYZ6SQeN7eKr3kXZikKnVOIwbH+DDO43wkiR/qTdkg==")
191+
const serverBin = await getBinFromUrl("ran-0.1.3", "ran-0.1.3.7z", "imfA3LtT6umMM0BuQ29MgO3CJ9uleN5zRBi3sXzcTbMOeYZ6SQeN7eKr3kXZikKnVOIwbH+DDO43wkiR/qTdkg==")
192192
const httpServerProcess = doSpawn(path.join(serverBin, process.platform, "ran"), [`-root=${newDir}`, `-port=${port}`, "-gzip=false", "-listdir=true"])
193193

194194
// Mac uses electron's native autoUpdater to serve updates to, we mock here since electron API isn't available within jest runtime

0 commit comments

Comments
 (0)