2022-11-03 11:01:42 +08:00
|
|
|
import { Inputs, Opts } from "../main"
|
|
|
|
import { DefaultLinuxVersion, DefaultVersions } from "./default_versions"
|
|
|
|
|
|
|
|
/** Get the default version if passed true or undefined, otherwise return the version itself */
|
|
|
|
export function getVersion(name: string, version: string | undefined, osVersion: number[] | null = null) {
|
|
|
|
if (isDefault(version, name)) {
|
|
|
|
if (process.platform === "linux" && osVersion !== null && name in DefaultLinuxVersion) {
|
|
|
|
return getDefaultLinuxVersion(name, osVersion)
|
|
|
|
}
|
|
|
|
// anything else
|
|
|
|
return DefaultVersions[name]
|
|
|
|
} else {
|
|
|
|
return version ?? ""
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// choose the default linux version based on ubuntu version
|
|
|
|
function getDefaultLinuxVersion(name: string, osVersion: number[]) {
|
|
|
|
const osVersionMaj = osVersion[0]
|
|
|
|
const newest = parseInt(Object.keys(DefaultLinuxVersion[name])[0], 10) // newest version with the default
|
|
|
|
if (osVersionMaj >= newest) {
|
|
|
|
return DefaultLinuxVersion[name][osVersionMaj]
|
|
|
|
} else {
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function isDefault(version: string | undefined, name: string) {
|
|
|
|
return version === "true" || (version === undefined && name in DefaultVersions)
|
|
|
|
}
|
|
|
|
|
|
|
|
export function syncVersions(opts: Opts, tools: Inputs[]): boolean {
|
2023-01-18 03:39:39 +08:00
|
|
|
const toolsInUse = tools.filter((tool) => opts[tool] !== undefined)
|
|
|
|
const toolsNonDefaultVersion = toolsInUse.filter((tool) => !isDefault(opts[tool], tool))
|
2022-11-03 11:01:42 +08:00
|
|
|
|
2023-01-18 03:39:39 +08:00
|
|
|
const targetVersion = toolsNonDefaultVersion.length ? opts[toolsNonDefaultVersion[0]] : "true"
|
2022-11-03 11:01:42 +08:00
|
|
|
|
2023-01-18 03:39:39 +08:00
|
|
|
// return false if any explicit versions don't match the target version
|
|
|
|
if (toolsNonDefaultVersion.findIndex((tool) => opts[tool] !== targetVersion) !== -1) {
|
|
|
|
return false
|
2022-11-03 11:01:42 +08:00
|
|
|
}
|
2023-01-18 03:39:39 +08:00
|
|
|
|
|
|
|
toolsInUse.forEach((tool) => (opts[tool] = targetVersion))
|
2022-11-03 11:01:42 +08:00
|
|
|
return true
|
|
|
|
}
|