Merge pull request #137 from aminya/refactor-version [skip ci]

This commit is contained in:
Amin Yahyaabadi 2022-11-02 20:44:00 -07:00 committed by GitHub
commit 73a098f0c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 98 additions and 92 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
import { syncVersions, getVersion } from "../default_versions"
import { syncVersions, getVersion } from "../versions/versions"
import { getCompilerInfo, Inputs, parseArgs } from "../main"
jest.setTimeout(300000)

View File

@ -1,7 +1,7 @@
import { setupCmake } from "../cmake"
import { setupTmpDir, cleanupTmpDir, testBin } from "../../utils/tests/test-helpers"
import ciDetect from "@npmcli/ci-detect"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
jest.setTimeout(300000)

View File

@ -1,6 +1,6 @@
import { setupConan } from "../conan"
import { testBin } from "../../utils/tests/test-helpers"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
jest.setTimeout(300000)
describe("setup-conan", () => {

View File

@ -1,6 +1,6 @@
import { setupCppcheck } from "../cppcheck"
import { testBin } from "../../utils/tests/test-helpers"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
jest.setTimeout(300000)
describe("setup-cppcheck", () => {

View File

@ -1,7 +1,7 @@
import { setupDoxygen } from "../doxygen"
import { cleanupTmpDir, setupTmpDir, testBin } from "../../utils/tests/test-helpers"
import { InstallationInfo } from "../../utils/setup/setupBin"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
import which from "which"
import { ubuntuVersion } from "../../utils/env/ubuntu_version"

View File

@ -8,7 +8,7 @@ import { addExeExt, join } from "patha"
import { extractTar, extractZip } from "../utils/setup/extract"
import { notice } from "ci-log"
import { setupGraphviz } from "../graphviz/graphviz"
import { getVersion } from "../default_versions"
import { getVersion } from "../versions/versions"
import { existsSync } from "fs"
import { isArch } from "../utils/env/isArch"
import { hasDnf } from "../utils/env/hasDnf"

View File

@ -1,6 +1,6 @@
import { cleanupTmpDir, setupTmpDir, testBin } from "../../utils/tests/test-helpers"
import { setupGcc } from "../gcc"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
import { join, addExeExt } from "patha"
import execa from "execa"
import { chmodSync } from "fs"

View File

@ -1,6 +1,6 @@
import { setupGcovr } from "../gcovr"
import { testBin } from "../../utils/tests/test-helpers"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
import { ubuntuVersion } from "../../utils/env/ubuntu_version"
jest.setTimeout(300000)

View File

@ -1,7 +1,7 @@
import { setupGraphviz } from "../graphviz"
import { cleanupTmpDir, setupTmpDir, testBin } from "../../utils/tests/test-helpers"
import { InstallationInfo } from "../../utils/setup/setupBin"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
jest.setTimeout(300000)
describe("setup-graphviz", () => {

View File

@ -2,7 +2,7 @@ import execa from "execa"
import { join, addExeExt } from "patha"
import which from "which"
import { setupCmake } from "../cmake/cmake"
import { getVersion } from "../default_versions"
import { getVersion } from "../versions/versions"
import { extractTarByExe } from "../utils/setup/extract"
import { setupAptPack } from "../utils/setup/setupAptPack"
import { setupPacmanPack } from "../utils/setup/setupPacmanPack"

View File

@ -6,7 +6,7 @@ import ciDetect from "@npmcli/ci-detect"
import execa from "execa"
import path, { addExeExt } from "patha"
import { chmodSync } from "fs"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
import { ubuntuVersion } from "../../utils/env/ubuntu_version"
import * as io from "@actions/io"

View File

@ -19,7 +19,7 @@ import { info, warning } from "ci-log"
import { existsSync } from "fs"
import ciDetect from "@npmcli/ci-detect"
import { setupGcc } from "../gcc/gcc"
import { getVersion } from "../default_versions"
import { getVersion } from "../versions/versions"
import { isArch } from "../utils/env/isArch"
import { isUbuntu } from "../utils/env/isUbuntu"

View File

@ -31,7 +31,7 @@ import numerousLocale from "numerous/locales/en.js"
import { ubuntuVersion } from "./utils/env/ubuntu_version"
import semverValid from "semver/functions/valid"
import { getVersion, syncVersions } from "./default_versions"
import { getVersion, syncVersions } from "./versions/versions"
import { setupGcc } from "./gcc/gcc"
import { InstallationInfo } from "./utils/setup/setupBin"
import { error, info, success, warning } from "ci-log"
@ -148,13 +148,7 @@ export async function main(args: string[]): Promise<number> {
// installing the specified tools
let osVersion: number[] | null = null
try {
// get the version if not already done
osVersion = await ubuntuVersion()
} catch (err) {
warning((err as Error).toString())
}
const osVersion = await ubuntuVersion()
// sync the version for the llvm tools
if (!syncVersions(opts, ["llvm", "clangtidy", "clangformat"])) {

View File

@ -1,6 +1,6 @@
import { setupMeson } from "../meson"
import { testBin } from "../../utils/tests/test-helpers"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
import { ubuntuVersion } from "../../utils/env/ubuntu_version"
jest.setTimeout(300000)

View File

@ -1,7 +1,7 @@
import { setupNinja } from "../ninja"
import { setupTmpDir, cleanupTmpDir, testBin } from "../../utils/tests/test-helpers"
import ciDetect from "@npmcli/ci-detect"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
jest.setTimeout(300000)
async function testNinja(directory: string) {

View File

@ -1,6 +1,6 @@
import { setupPowershell } from "../powershell"
import { testBin } from "../../utils/tests/test-helpers"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
jest.setTimeout(300000)
describe("setup-powershell", () => {

View File

@ -1,6 +1,6 @@
import { setupPython } from "../python"
import { cleanupTmpDir, setupTmpDir, testBin } from "../../utils/tests/test-helpers"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
import { ubuntuVersion } from "../../utils/env/ubuntu_version"
import ciDetect from "@npmcli/ci-detect"
import { info } from "ci-log"

View File

@ -1,7 +1,7 @@
import { setupTask } from "../task"
import { cleanupTmpDir, setupTmpDir, testBin } from "../../utils/tests/test-helpers"
import ciDetect from "@npmcli/ci-detect"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
jest.setTimeout(300000)
describe("setup-task", () => {

View File

@ -1,9 +1,11 @@
import { warning } from "ci-log"
import { getUbuntuVersion } from "ubuntu-version"
import which from "which"
import { setupAptPack } from "../setup/setupAptPack"
import { isUbuntu } from "./isUbuntu"
export async function ubuntuVersion(): Promise<number[] | null> {
try {
if (isUbuntu()) {
if (which.sync("lsb_release", { nothrow: true }) === null) {
await setupAptPack("lsb-release")
@ -11,11 +13,16 @@ export async function ubuntuVersion(): Promise<number[] | null> {
const versionSplitted = await getUbuntuVersion()
if (versionSplitted.length === 0) {
throw new Error("Failed to get the ubuntu major version.")
warning("Failed to get the ubuntu major version.")
return null
}
return versionSplitted
} else {
return null
}
} catch (err) {
warning((err as Error).toString())
return null
}
}

View File

@ -7,7 +7,7 @@ import { addPath } from "../env/addEnv"
import { setupPython } from "../../python/python"
import { isBinUptoDate } from "./version"
import { join } from "patha"
import { getVersion } from "../../default_versions"
import { getVersion } from "../../versions/versions"
import { InstallationInfo } from "./setupBin"
import { setupAptPack } from "./setupAptPack"
import { setupPacmanPack } from "./setupPacmanPack"

View File

@ -1,10 +1,9 @@
import { Inputs, Opts } from "./main"
import { isArch } from "./utils/env/isArch"
import { isArch } from "../utils/env/isArch"
// passing "" to a tool installed by a package manager (apt, brew, choco) will result in the default version of that package manager.
// the directly downloaded tools require a given version ("" doesn't work).
const DefaultVersions: Record<string, string> = {
export const DefaultVersions: Record<string, string> = {
llvm: "13.0.0", // https://github.com/llvm/llvm-project/releases
clangtidy: "13.0.0",
clangformat: "13.0.0",
@ -22,7 +21,7 @@ const DefaultVersions: Record<string, string> = {
/// If an ubuntu versions is not in this map:
// - the newer ubuntu versions use the first entry (e.g. v20),
// - the older ones use ""
const DefaultUbuntuVersion: Record<string, Record<number, string>> = {
export const DefaultLinuxVersion: Record<string, Record<number, string>> = {
llvm: {
22: "13.0.0-ubuntu-20.04",
20: "13.0.0-ubuntu-20.04",
@ -69,51 +68,3 @@ const DefaultUbuntuVersion: Record<string, Record<number, string>> = {
14: "40",
},
}
/** 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 (useDefault(version, name)) {
// choose the default linux version based on ubuntu version
if (process.platform === "linux" && osVersion !== null && name in DefaultUbuntuVersion) {
const osVersionMaj = osVersion[0]
const newest = parseInt(Object.keys(DefaultUbuntuVersion[name])[0], 10) // newest version with the default
if (osVersionMaj >= newest) {
return DefaultUbuntuVersion[name][osVersionMaj]
} else {
return ""
}
}
// anything else
return DefaultVersions[name]
} else {
return version ?? ""
}
}
function useDefault(version: string | undefined, name: string) {
return version === "true" || (version === undefined && name in DefaultVersions)
}
export function syncVersions(opts: Opts, tools: Inputs[]): boolean {
for (let i = 0; i < tools.length; i++) {
// tools excluding i_tool
const otherTools = tools.slice(0, i).concat(tools.slice(i + 1))
const tool = tools[i]
if (!useDefault(opts[tool], tool)) {
for (let i_other = 0; i_other < otherTools.length; i_other++) {
const otherTool = otherTools[i_other]
const useDefaultOtherTool = useDefault(opts[otherTool], otherTools[i_other])
if (useDefaultOtherTool) {
// use the same version if the other tool was requested with the default
opts[otherTool] = opts[tool]
} else if (opts[tool] !== opts[otherTools[i_other]]) {
// error if different from the other given versions
return false
}
}
}
}
return true
}

54
src/versions/versions.ts Normal file
View File

@ -0,0 +1,54 @@
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 {
for (let i = 0; i < tools.length; i++) {
// tools excluding i_tool
const otherTools = tools.slice(0, i).concat(tools.slice(i + 1))
const tool = tools[i]
if (!isDefault(opts[tool], tool)) {
for (let i_other = 0; i_other < otherTools.length; i_other++) {
const otherTool = otherTools[i_other]
const useDefaultOtherTool = isDefault(opts[otherTool], otherTools[i_other])
if (useDefaultOtherTool) {
// use the same version if the other tool was requested with the default
opts[otherTool] = opts[tool]
} else if (opts[tool] !== opts[otherTools[i_other]]) {
// error if different from the other given versions
return false
}
}
}
}
return true
}