mirror of https://github.com/aminya/setup-cpp
fix: ensure constant initialization order
This commit is contained in:
parent
52047bd03a
commit
4c53a2d376
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,6 +1,7 @@
|
|||
import { syncVersions, getVersion } from "../versions/versions"
|
||||
import { parseArgs, Inputs } from "../cli-options"
|
||||
import { parseArgs } from "../cli-options"
|
||||
import { getCompilerInfo } from "../compilers"
|
||||
import { Inputs } from "../tool"
|
||||
|
||||
jest.setTimeout(300000)
|
||||
describe("getCompilerInfo", () => {
|
||||
|
|
|
@ -2,13 +2,7 @@ import { getInput } from "@actions/core"
|
|||
import { info } from "ci-log"
|
||||
import mri from "mri"
|
||||
import { InstallationInfo } from "./utils/setup/setupBin"
|
||||
import { setups, tools } from "./tool"
|
||||
|
||||
/** The possible inputs to the program */
|
||||
export type Inputs = keyof typeof setups | "compiler" | "architecture" | "timeout"
|
||||
|
||||
/** an array of possible inputs */
|
||||
export const inputs: Array<Inputs> = ["compiler", "architecture", "timeout", ...tools]
|
||||
import { Inputs, inputs } from "./tool"
|
||||
|
||||
export function parseArgs(args: string[]): Opts {
|
||||
return mri<Record<Inputs, string | undefined> & { help: boolean }>(args, {
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
import { endGroup, startGroup } from "@actions/core"
|
||||
import { error } from "ci-log"
|
||||
import { join } from "patha"
|
||||
import { getSuccessMessage } from "./cli-options"
|
||||
import { InstallationInfo } from "./utils/setup/setupBin"
|
||||
import { setupVCVarsall } from "./vcvarsall/vcvarsall"
|
||||
import { getVersion } from "./versions/versions"
|
||||
import pTimeout from "p-timeout"
|
||||
import { ToolName, setups } from "./tool"
|
||||
|
||||
export const DEFAULT_TIMEOUT = 20 * 60 * 1000 // 20 minutes
|
||||
|
||||
export async function installTool(
|
||||
tool: ToolName,
|
||||
version: string,
|
||||
osVersion: number[] | null,
|
||||
arch: string,
|
||||
setupCppDir: string,
|
||||
successMessages: string[],
|
||||
errorMessages: string[],
|
||||
timeout: number = DEFAULT_TIMEOUT,
|
||||
) {
|
||||
startGroup(`Installing ${tool} ${version}`)
|
||||
let hasLLVM = false
|
||||
try {
|
||||
hasLLVM = await pTimeout(installToolImpl(tool, version, osVersion, arch, hasLLVM, setupCppDir, successMessages), {
|
||||
milliseconds: timeout * 60 * 1000,
|
||||
})
|
||||
} catch (e) {
|
||||
// push error message to the logger
|
||||
error(e as string | Error)
|
||||
errorMessages.push(`${tool} failed to install`)
|
||||
}
|
||||
endGroup()
|
||||
return hasLLVM
|
||||
}
|
||||
|
||||
async function installToolImpl(
|
||||
tool: ToolName,
|
||||
version: string,
|
||||
osVersion: number[] | null,
|
||||
arch: string,
|
||||
hasLLVM: boolean,
|
||||
setupCppDir: string,
|
||||
successMessages: string[],
|
||||
) {
|
||||
let installationInfo: InstallationInfo | undefined | void
|
||||
if (tool === "vcvarsall") {
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
await setupVCVarsall(getVersion(tool, version, osVersion), undefined, arch, undefined, undefined, false, false)
|
||||
} else {
|
||||
// get the setup function
|
||||
const setupFunction = setups[tool]
|
||||
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
hasLLVM = ["llvm", "clangformat", "clangtidy"].includes(tool)
|
||||
|
||||
// the tool installation directory (for the functions that ue it)
|
||||
const setupDir = join(setupCppDir, hasLLVM ? "llvm" : tool)
|
||||
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
installationInfo = await setupFunction(getVersion(tool, version, osVersion), setupDir, arch)
|
||||
}
|
||||
// preparing a report string
|
||||
successMessages.push(getSuccessMessage(tool, installationInfo))
|
||||
return hasLLVM
|
||||
}
|
|
@ -35,7 +35,9 @@ async function setupLLVMWithoutActivation_raw(version: string, setupDir: string,
|
|||
const setupLLVMWithoutActivation = memoize(setupLLVMWithoutActivation_raw, { isPromise: true })
|
||||
|
||||
/** Setup llvm tools (clang tidy, clang format, etc) without activating llvm and using it as the compiler */
|
||||
export const setupClangTools = setupLLVMWithoutActivation
|
||||
export function setupClangTools(version: string, setupDir: string, arch: string) {
|
||||
return setupLLVMOnly(version, setupDir, arch)
|
||||
}
|
||||
|
||||
async function setupLLVMOnly(version: string, setupDir: string, arch: string) {
|
||||
const coeredVersion = semverCoerceIfInvalid(version)
|
||||
|
|
|
@ -5,7 +5,7 @@ import { hasNala, isPackageInstalled, setupAptPack } from "../utils/setup/setupA
|
|||
import { InstallationInfo } from "../utils/setup/setupBin"
|
||||
import { promises } from "fs"
|
||||
import { info } from "console"
|
||||
import { DEFAULT_TIMEOUT } from "../tool"
|
||||
import { DEFAULT_TIMEOUT } from "../installTool"
|
||||
const { readFile, writeFile, chmod } = promises
|
||||
|
||||
export async function setupLLVMApt(majorVersion: number): Promise<InstallationInfo> {
|
||||
|
|
|
@ -11,12 +11,13 @@ import { untildifyUser } from "untildify-user"
|
|||
import { checkUpdates } from "./check-updates"
|
||||
import { parseArgs, printHelp } from "./cli-options"
|
||||
import { installCompiler } from "./compilers"
|
||||
import { installTool, tools } from "./tool"
|
||||
import { finalizeCpprc } from "./utils/env/addEnv"
|
||||
import { isArch } from "./utils/env/isArch"
|
||||
import { ubuntuVersion } from "./utils/env/ubuntu_version"
|
||||
import { setupPacmanPack } from "./utils/setup/setupPacmanPack"
|
||||
import { syncVersions } from "./versions/versions"
|
||||
import { installTool } from "./installTool"
|
||||
import { tools } from "./tool"
|
||||
|
||||
/** The main entry function */
|
||||
async function main(args: string[]): Promise<number> {
|
||||
|
|
67
src/tool.ts
67
src/tool.ts
|
@ -1,11 +1,7 @@
|
|||
import { endGroup, startGroup } from "@actions/core"
|
||||
import { error } from "ci-log"
|
||||
import { join } from "patha"
|
||||
import { setupBazel } from "./bazel/bazel"
|
||||
import { setupBrew } from "./brew/brew"
|
||||
import { setupCcache } from "./ccache/ccache"
|
||||
import { setupChocolatey } from "./chocolatey/chocolatey"
|
||||
import { getSuccessMessage } from "./cli-options"
|
||||
import { setupCmake } from "./cmake/cmake"
|
||||
import { setupConan } from "./conan/conan"
|
||||
import { setupCppcheck } from "./cppcheck/cppcheck"
|
||||
|
@ -26,11 +22,8 @@ import { setupPython } from "./python/python"
|
|||
import { setupSccache } from "./sccache/sccache"
|
||||
import { setupSevenZip } from "./sevenzip/sevenzip"
|
||||
import { setupTask } from "./task/task"
|
||||
import { InstallationInfo } from "./utils/setup/setupBin"
|
||||
import { setupVcpkg } from "./vcpkg/vcpkg"
|
||||
import { setupVCVarsall } from "./vcvarsall/vcvarsall"
|
||||
import { getVersion } from "./versions/versions"
|
||||
import pTimeout from "p-timeout"
|
||||
|
||||
/** The setup functions */
|
||||
export const setups = {
|
||||
|
@ -69,60 +62,8 @@ export type ToolName = keyof typeof setups
|
|||
/** The tools that can be installed */
|
||||
export const tools = Object.keys(setups) as Array<ToolName>
|
||||
|
||||
export const DEFAULT_TIMEOUT = 20 * 60 * 1000 // 20 minutes
|
||||
/** The possible inputs to the program */
|
||||
export type Inputs = keyof typeof setups | "compiler" | "architecture" | "timeout"
|
||||
|
||||
export async function installTool(
|
||||
tool: ToolName,
|
||||
version: string,
|
||||
osVersion: number[] | null,
|
||||
arch: string,
|
||||
setupCppDir: string,
|
||||
successMessages: string[],
|
||||
errorMessages: string[],
|
||||
timeout: number = DEFAULT_TIMEOUT,
|
||||
) {
|
||||
startGroup(`Installing ${tool} ${version}`)
|
||||
let hasLLVM = false
|
||||
try {
|
||||
hasLLVM = await pTimeout(installToolImpl(tool, version, osVersion, arch, hasLLVM, setupCppDir, successMessages), {
|
||||
milliseconds: timeout * 60 * 1000,
|
||||
})
|
||||
} catch (e) {
|
||||
// push error message to the logger
|
||||
error(e as string | Error)
|
||||
errorMessages.push(`${tool} failed to install`)
|
||||
}
|
||||
endGroup()
|
||||
return hasLLVM
|
||||
}
|
||||
|
||||
async function installToolImpl(
|
||||
tool: ToolName,
|
||||
version: string,
|
||||
osVersion: number[] | null,
|
||||
arch: string,
|
||||
hasLLVM: boolean,
|
||||
setupCppDir: string,
|
||||
successMessages: string[],
|
||||
) {
|
||||
let installationInfo: InstallationInfo | undefined | void
|
||||
if (tool === "vcvarsall") {
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
await setupVCVarsall(getVersion(tool, version, osVersion), undefined, arch, undefined, undefined, false, false)
|
||||
} else {
|
||||
// get the setup function
|
||||
const setupFunction = setups[tool]
|
||||
|
||||
// eslint-disable-next-line no-param-reassign
|
||||
hasLLVM = ["llvm", "clangformat", "clangtidy"].includes(tool)
|
||||
|
||||
// the tool installation directory (for the functions that ue it)
|
||||
const setupDir = join(setupCppDir, hasLLVM ? "llvm" : tool)
|
||||
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
installationInfo = await setupFunction(getVersion(tool, version, osVersion), setupDir, arch)
|
||||
}
|
||||
// preparing a report string
|
||||
successMessages.push(getSuccessMessage(tool, installationInfo))
|
||||
return hasLLVM
|
||||
}
|
||||
/** an array of possible inputs */
|
||||
export const inputs: Array<Inputs> = ["compiler", "architecture", "timeout", ...tools]
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { Opts, Inputs } from "../cli-options"
|
||||
import { Opts } from "../cli-options"
|
||||
import { Inputs } from "../tool"
|
||||
import { DefaultLinuxVersion, DefaultVersions } from "./default_versions"
|
||||
|
||||
/** Get the default version if passed true or undefined, otherwise return the version itself */
|
||||
|
|
Loading…
Reference in New Issue