import { isCI as isCi } from "ci-info"
import * as fs from "fs/promises"
import * as path from "path"
import { gte } from "semver"
import { ELECTRON_VERSION, getElectronCacheDir } from "./testConfig"
const executeAppBuilder: (options: any) => Promise<any> = require(path.join(__dirname, "../../..", "packages/builder-util")).executeAppBuilder
export async function deleteOldElectronVersion(): Promise<any> {
if (process.env.CIRCLECI || !isCi) {
return
}
const cacheDir = getElectronCacheDir()
let files: Array<string>
try {
files = await fs.readdir(cacheDir)
} catch (e: any) {
if (e.code === "ENOENT") {
return
} else {
throw e
}
}
return await Promise.all(
files.map(file => {
if (file.endsWith(".zip") && !file.includes(ELECTRON_VERSION)) {
console.log(`Remove old electron ${file}`)
return fs.unlink(path.join(cacheDir, file))
}
return Promise.resolve(null)
})
)
}
export function downloadAllRequiredElectronVersions(): Promise<any> {
const platforms = process.platform === "win32" ? ["win32"] : ["darwin", "linux", "win32"]
if (process.platform === "darwin") {
platforms.push("mas")
}
const versions: Array<any> = []
for (const platform of platforms) {
const archs: string[] =
platform === "mas" || platform === "darwin"
? ["x64"]
: platform === "win32"
? ["ia32", "x64"]
: require(`${path.join(__dirname, "../../..")}/packages/builder-util/out/util`).getArchCliNames()
for (const arch of archs) {
if (gte(ELECTRON_VERSION, "19.0.0") && platform === "linux" && arch === "ia32") {
continue
}
versions.push({
version: ELECTRON_VERSION,
arch,
platform,
})
}
}
return executeAppBuilder(["download-electron", "--configuration", JSON.stringify(versions)])
}
if (require.main === module) {
downloadAllRequiredElectronVersions().catch(error => {
console.error((error.stack || error).toString())
process.exitCode = -1
})
}