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 = require(path.join(__dirname, "../../..", "packages/builder-util")).executeAppBuilder export async function deleteOldElectronVersion(): Promise { // on CircleCi no need to clean manually if (process.env.CIRCLECI || !isCi) { return } const cacheDir = getElectronCacheDir() let files: Array 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 { const platforms = process.platform === "win32" ? ["win32"] : ["darwin", "linux", "win32"] if (process.platform === "darwin") { platforms.push("mas") } const versions: Array = [] 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") { // Chromium dropped support for ia32 linux binaries in 102.0.4999.0 // https://www.electronjs.org/docs/latest/breaking-changes#removed-ia32-linux-binaries 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 }) }