mirror of https://github.com/aminya/setup-cpp
feat: install 7z if needed for extraction of llvm on Windows
This commit is contained in:
parent
6aef987ea2
commit
c65b6f6d58
|
@ -33,9 +33,13 @@ The package can be used locally or from CI services like GitHub Actions.
|
|||
- gcovr
|
||||
- opencppcoverage
|
||||
- kcov
|
||||
|
||||
`setup-cpp` can also install the following. These are automatically installed if needed for the above Cpp tools (e.g., python is required for conan).
|
||||
|
||||
- python
|
||||
- choco
|
||||
- brew
|
||||
- sevenzip
|
||||
|
||||
# Usage
|
||||
|
||||
|
|
|
@ -69,6 +69,9 @@ inputs:
|
|||
kcov:
|
||||
description: "The kcov version to install."
|
||||
required: false
|
||||
sevenzip:
|
||||
description: "The 7z version to install."
|
||||
required: false
|
||||
|
||||
runs:
|
||||
using: "node12"
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -29,6 +29,7 @@ import { join } from "path"
|
|||
import { setupVCVarsall } from "./vcvarsall/vcvarsall"
|
||||
import { setupKcov } from "./kcov/kcov"
|
||||
import { addEnv } from "./utils/env/addEnv"
|
||||
import { setupSevenZip } from "./sevenzip/sevenzip"
|
||||
|
||||
/** The setup functions */
|
||||
const setups = {
|
||||
|
@ -54,6 +55,7 @@ const setups = {
|
|||
kcov: setupKcov,
|
||||
make: setupMake,
|
||||
task: setupTask,
|
||||
sevenzip: setupSevenZip,
|
||||
}
|
||||
|
||||
/** The tools that can be installed */
|
||||
|
@ -80,6 +82,7 @@ const tools: Array<keyof typeof setups> = [
|
|||
"kcov",
|
||||
"make",
|
||||
"task",
|
||||
"sevenzip",
|
||||
]
|
||||
|
||||
/** The possible inputs to the program */
|
||||
|
@ -290,9 +293,11 @@ All the available tools:
|
|||
--gcovr
|
||||
--opencppcoverage
|
||||
--kcov
|
||||
|
||||
--python
|
||||
--choco
|
||||
--brew
|
||||
--sevenzip
|
||||
`)
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
import { setupSevenZip } from "../sevenzip"
|
||||
import { testBin } from "../../utils/tests/test-helpers"
|
||||
import { InstallationInfo } from "../../utils/setup/setupBin"
|
||||
|
||||
jest.setTimeout(300000)
|
||||
describe("setup-7z", () => {
|
||||
it("should setup 7z", async () => {
|
||||
const installInfo = await setupSevenZip("", "", process.arch)
|
||||
|
||||
await testBin("7z", ["--help"], (installInfo as InstallationInfo | undefined)?.binDir)
|
||||
})
|
||||
})
|
|
@ -0,0 +1,21 @@
|
|||
import { setupAptPack } from "../utils/setup/setupAptPack"
|
||||
import { setupBrewPack } from "../utils/setup/setupBrewPack"
|
||||
import { setupChocoPack } from "../utils/setup/setupChocoPack"
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
export function setupSevenZip(version: string, _setupDir: string, _arch: string) {
|
||||
switch (process.platform) {
|
||||
case "win32": {
|
||||
return setupChocoPack("7zip", version)
|
||||
}
|
||||
case "darwin": {
|
||||
return setupBrewPack("p7zip", version)
|
||||
}
|
||||
case "linux": {
|
||||
return setupAptPack("p7zip-full", version)
|
||||
}
|
||||
default: {
|
||||
throw new Error(`Unsupported platform`)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,8 +1,20 @@
|
|||
import execa from "execa"
|
||||
import { mkdirP } from "@actions/io"
|
||||
import which from "which"
|
||||
import { setupSevenZip } from "../../sevenzip/sevenzip"
|
||||
export { extractTar, extractXar, extract7z, extractZip } from "@actions/tool-cache"
|
||||
|
||||
let sevenZip: string | undefined
|
||||
|
||||
export async function extractExe(file: string, dest: string) {
|
||||
// install 7z if needed
|
||||
if (sevenZip === undefined) {
|
||||
if (which.sync("7z", { nothrow: true }) !== null) {
|
||||
sevenZip = "7z"
|
||||
}
|
||||
await setupSevenZip("", "", process.arch)
|
||||
}
|
||||
|
||||
await execa("7z", ["x", file, `-o${dest}`])
|
||||
return dest
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue