Merge pull request #401 from aminya/apt-fast

feat: add apt-fast as an installable tool
This commit is contained in:
Amin Ya 2025-05-20 16:09:08 -07:00 committed by GitHub
commit da1971da81
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
77 changed files with 536 additions and 311 deletions

View File

@ -31,7 +31,7 @@ Setting up a **cross-platform** environment for building and testing C++/C proje
| --------------- | ----------------------------------------------------------------------------------------------------------- |
| compiler | llvm, gcc, msvc, apple-clang, vcvarsall |
| build system | cmake, ninja, meson, make, task, bazel |
| package manager | vcpkg, conan, choco, brew, nala, git, setup-cpp |
| package manager | vcpkg, conan, choco, brew, apt-fast, nala, git, setup-cpp |
| analyzer/linter | clang-tidy, clang-format, cppcheck, cpplint, flawfinder, lizard, infer, cmakelang, cmake-format, cmake-lint |
| cache | ccache, sccache |
| documentation | doxygen, graphviz |

View File

@ -23,6 +23,7 @@ COPY "./dist/modern" "/usr/lib/setup-cpp/"
# install the cpp tools
RUN node --enable-source-maps /usr/lib/setup-cpp/setup-cpp.mjs \
--apt-fast true \
--cmake true \
--ninja true \
--task true \

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

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

@ -4,4 +4,4 @@ pre-commit:
test.lint:
run: pnpm run test.lint
build:
run: pnpm run clean && pnpm run build -- --no-color && git add ./dist
run: pnpm run build -- --no-color && git add ./dist

View File

@ -26,7 +26,7 @@
"tsconfig.json"
],
"scripts": {
"build": "run-s clean && pnpm -r build && run-p build.types.modern lint.root.tsc build.cli.modern build.cli.legacy build.library && run-p build.json build.bash",
"build": "turbo build && run-p build.types.modern lint.root.tsc build.cli.modern build.cli.legacy build.library && run-p build.json build.bash",
"build.cli.modern": "cross-env NODE_ENV=production vite build --mode cli-modern",
"build.cli.legacy": "cross-env NODE_ENV=production vite build --mode cli-legacy",
"build.library": "cross-env NODE_ENV=production vite build --mode library",
@ -150,7 +150,7 @@
"ts-node": "^10.9.2",
"ts-readme": "^1.1.3",
"tsx": "^4.19.3",
"turbo": "2.4.4",
"turbo": "2.5.3",
"typescript": "^5.8.2",
"ubuntu-version": "^2.0.0",
"untildify-user": "workspace:*",

View File

@ -0,0 +1,11 @@
import { error, info, notice, success, warning } from "../src/index.js"
describe("ci-log", () => {
it("should be a function", () => {
expect(error).toBeInstanceOf(Function)
expect(success).toBeInstanceOf(Function)
expect(warning).toBeInstanceOf(Function)
expect(notice).toBeInstanceOf(Function)
expect(info).toBeInstanceOf(Function)
})
})

View File

@ -0,0 +1,4 @@
{
"extends": "../tsconfig.json",
"include": ["**/*.ts"]
}

View File

@ -0,0 +1,2 @@
import jestConfig from "../../jest.config.mjs"
export default jestConfig

View File

@ -12,9 +12,11 @@
"scripts": {
"build": "tsc --pretty",
"dev": "tsc --watch --pretty",
"lint.tsc.test": "tsc --noEmit --pretty -p ./__tests__/tsconfig.json",
"lint.tsc": "tsc --noEmit --pretty",
"lint.eslint": "eslint '**/*.{ts,tsx,js,jsx,cjs,mjs,json,yaml}' --no-error-on-unmatched-pattern --cache --cache-location ./.cache/eslint/ --fix",
"prepublishOnly": "pnpm run build"
"prepublishOnly": "pnpm run build",
"test": "jest --coverage"
},
"dependencies": {
"@actions/core": "^1.10.1",

View File

@ -0,0 +1,10 @@
import { addEnv, addPath, finalizeRC, sourceRC } from "../src/index.js"
describe("envosman", () => {
it("should be a function", () => {
expect(addEnv).toBeInstanceOf(Function)
expect(addPath).toBeInstanceOf(Function)
expect(finalizeRC).toBeInstanceOf(Function)
expect(sourceRC).toBeInstanceOf(Function)
})
})

View File

@ -0,0 +1,4 @@
{
"extends": "../tsconfig.json",
"include": ["**/*.ts"]
}

View File

@ -0,0 +1,2 @@
import jestConfig from "../../jest.config.mjs"
export default jestConfig

View File

@ -12,9 +12,11 @@
"scripts": {
"build": "tsc --pretty",
"dev": "tsc --watch --pretty",
"lint.tsc.test": "tsc --noEmit --pretty -p ./__tests__/tsconfig.json",
"lint.tsc": "tsc --noEmit --pretty",
"lint.eslint": "eslint '**/*.{ts,tsx,js,jsx,cjs,mjs,json,yaml}' --no-error-on-unmatched-pattern --cache --cache-location ./.cache/eslint/ --fix",
"prepublishOnly": "pnpm run build"
"prepublishOnly": "pnpm run build",
"test": "jest --coverage"
},
"dependencies": {
"@actions/core": "^1.10.1",

View File

@ -0,0 +1,9 @@
import { execPowershell, execPowershellSync, getPowerShell } from "../src/index.js"
describe("exec-powershell", () => {
it("should be a function", () => {
expect(execPowershell).toBeInstanceOf(Function)
expect(execPowershellSync).toBeInstanceOf(Function)
expect(getPowerShell).toBeInstanceOf(Function)
})
})

View File

@ -0,0 +1,4 @@
{
"extends": "../tsconfig.json",
"include": ["**/*.ts"]
}

View File

@ -0,0 +1,2 @@
import jestConfig from "../../jest.config.mjs"
export default jestConfig

View File

@ -12,9 +12,11 @@
"scripts": {
"build": "tsc --pretty",
"dev": "tsc --watch --pretty",
"lint.tsc.test": "tsc --noEmit --pretty -p ./__tests__/tsconfig.json",
"lint.tsc": "tsc --noEmit --pretty",
"lint.eslint": "eslint '**/*.{ts,tsx,js,jsx,cjs,mjs,json,yaml}' --no-error-on-unmatched-pattern --cache --cache-location ./.cache/eslint/ --fix",
"prepublishOnly": "pnpm run build"
"prepublishOnly": "pnpm run build",
"test": "jest --coverage"
},
"dependencies": {
"execa": "7.2.0",

View File

@ -0,0 +1,8 @@
import { hasApk, installApkPack } from "../src/index.js"
describe("setup-alpine", () => {
it("should be a function", () => {
expect(installApkPack).toBeInstanceOf(Function)
expect(hasApk).toBeInstanceOf(Function)
})
})

View File

@ -0,0 +1,4 @@
{
"extends": "../tsconfig.json",
"include": ["**/*.ts"]
}

View File

@ -0,0 +1,2 @@
import jestConfig from "../../jest.config.mjs"
export default jestConfig

View File

@ -17,9 +17,11 @@
"scripts": {
"build": "tsc --pretty",
"dev": "tsc --watch --pretty",
"lint.tsc.test": "tsc --noEmit --pretty -p ./__tests__/tsconfig.json",
"lint.tsc": "tsc --noEmit --pretty",
"lint.eslint": "eslint '**/*.{ts,tsx,js,jsx,cjs,mjs,json,yaml}' --no-error-on-unmatched-pattern --cache --cache-location ./.cache/eslint/ --fix",
"prepublishOnly": "pnpm run build"
"prepublishOnly": "pnpm run build",
"test": "jest --coverage"
},
"dependencies": {
"@types/node": "22.15.3",

View File

@ -0,0 +1,14 @@
import { hasAptGet, setupAptFast } from "../src/index.js"
import { testBin } from "./testBin.js"
jest.setTimeout(300000)
describe("setup-apt-fast", () => {
if (!hasAptGet()) {
test.skip("should setup apt-fast", () => {})
return
}
it("should setup apt-fast", async () => {
const installInfo = await setupAptFast()
await testBin("apt-fast", null, installInfo?.binDir)
})
})

View File

@ -1,16 +1,16 @@
import { execRootSync } from "admina"
import { isUbuntu } from "../../utils/env/isUbuntu.js"
import { testBin } from "../../utils/tests/test-helpers.js"
import { setupNala } from "../nala.js"
import { hasAptGet } from "../src/get-apt.js"
import { setupNala } from "../src/nala.js"
import { testBin } from "./testBin.js"
jest.setTimeout(300000)
describe("setup-nala", () => {
if (!isUbuntu()) {
if (!hasAptGet()) {
test.skip("should setup nala", () => {})
return
}
it("should setup nala", async () => {
const installInfo = await setupNala("", "", process.arch)
const installInfo = await setupNala()
await testBin("nala", ["--version"], installInfo?.binDir)
})

View File

@ -0,0 +1,27 @@
import spawn from "cross-spawn"
import { pathExists } from "path-exists"
import { addExeExt, join } from "patha"
import which from "which"
export async function testBin(
name: string,
args: string[] | null = ["--version"],
binDir: string | undefined = undefined,
) {
let bin = name
if (typeof binDir === "string") {
console.log(`Testing the existence of ${binDir}`)
expect(binDir).toBeDefined()
expect(binDir).not.toHaveLength(0)
expect(await pathExists(binDir)).toBeTruthy()
bin = join(binDir, addExeExt(name))
}
if (args !== null) {
console.log(`Running ${bin} ${args.join(" ")}`)
const { status } = spawn.sync(bin, args, { stdio: "inherit" })
expect(status).toBe(0)
}
expect((await which(name, { nothrow: true }))?.includes(bin))
}

View File

@ -0,0 +1,4 @@
{
"extends": "../tsconfig.json",
"include": ["**/*.ts"]
}

View File

@ -0,0 +1,2 @@
import jestConfig from "../../jest.config.mjs"
export default jestConfig

View File

@ -1,6 +1,6 @@
{
"name": "setup-apt",
"version": "3.0.3",
"version": "3.1.0",
"description": "Setup apt packages and repositories in Debian/Ubuntu-based distributions",
"repository": "https://github.com/aminya/setup-cpp",
"homepage": "https://github.com/aminya/setup-cpp/tree/master/packages/setup-apt",
@ -17,22 +17,24 @@
"scripts": {
"build": "tsc --pretty",
"dev": "tsc --watch --pretty",
"lint.tsc.test": "tsc --noEmit --pretty -p ./__tests__/tsconfig.json",
"lint.tsc": "tsc --noEmit --pretty",
"lint.eslint": "eslint '**/*.{ts,tsx,js,jsx,cjs,mjs,json,yaml}' --no-error-on-unmatched-pattern --cache --cache-location ./.cache/eslint/ --fix",
"prepublishOnly": "pnpm run build"
"prepublishOnly": "pnpm run build",
"test": "jest --coverage --runInBand"
},
"dependencies": {
"@types/node": "22.15.3",
"admina": "^1.0.1",
"ci-info": "^4.0.0",
"path-exists": "^5.0.0",
"ci-log": "workspace:*",
"envosman": "workspace:*",
"which": "4.0.0",
"execa": "7.2.0",
"escape-string-regexp": "^5.0.0",
"execa": "7.2.0",
"memoizee": "^0.4.17",
"node-downloader-helper": "2.1.9",
"memoizee": "^0.4.17"
"path-exists": "^5.0.0",
"which": "4.0.0"
},
"engines": {
"node": ">=12"
@ -52,10 +54,14 @@
"ubuntu",
"debian",
"package",
"apt-key"
"apt-key",
"apt-fast",
"nala"
],
"devDependencies": {
"@types/memoizee": "0.4.11",
"@types/which": "~3.0.4"
"@types/which": "~3.0.4",
"cross-spawn": "^7.0.6",
"patha": "^0.4.1"
}
}

View File

@ -0,0 +1,76 @@
import { tmpdir } from "os"
import { dirname, join } from "path"
import { execRootSync } from "admina"
import { error } from "ci-log"
import { readFile, writeFile } from "fs/promises"
import { DownloaderHelper } from "node-downloader-helper"
import which from "which"
import { hasAptGet } from "./get-apt.js"
import { installAptPack } from "./install.js"
let binDir: string | undefined
export async function setupAptFast() {
if (!hasAptGet()) {
return undefined
}
if (typeof binDir === "string") {
return { binDir }
}
const maybeBinDir = which.sync("apt-fast", { nothrow: true })
if (maybeBinDir !== null) {
binDir = dirname(maybeBinDir)
return { binDir }
}
binDir = "/usr/bin" // eslint-disable-line require-atomic-updates
// Install via the installer script
await setupAptFastViaInstaller()
return { binDir }
}
async function setupAptFastViaInstaller() {
const depP = installAptPack([{ name: "bash" }, { name: "wget" }])
const installer = new DownloaderHelper(
"https://git.io/vokNn",
tmpdir(),
{ fileName: "install-apt-fast.sh" },
)
installer.on("error", (err) => {
throw new Error(`Failed to download install-apt-fast.sh: ${err}`)
})
await installer.start()
const installerPath = join(tmpdir(), "install-apt-fast.sh")
// Patch the installer script to not use sudo explicitly
const script = await readFile(installerPath, "utf8")
await writeFile(installerPath, script.replace(/sudo/g, ""))
await depP
try {
execRootSync("bash", [installerPath])
} catch (err) {
error(`Failed to install apt-fast via installer: ${err}`)
}
// Update the apt-fast config
const aptFastConfigPath = "/etc/apt-fast.conf"
let aptFastConfig = await readFile(aptFastConfigPath, "utf8")
// enable default suggested configs
const opts = ["_APTMGR", "DOWNLOADBEFORE"]
for (const opt of opts) {
aptFastConfig = aptFastConfig.replace(new RegExp(`^#\\s*${opt}`, "m"), opt)
}
// write the config using execRootSync
const tempAptFast = join(tmpdir(), "apt-fast.conf")
await writeFile(tempAptFast, aptFastConfig)
execRootSync("mv", [tempAptFast, aptFastConfigPath])
}

View File

@ -7,16 +7,41 @@ export function hasNala() {
return which.sync("nala", { nothrow: true }) !== null
}
/**
* Check if apt-fast is installed
*/
export function hasAptFast() {
return which.sync("apt-fast", { nothrow: true }) !== null
}
/**
* Check if apt is installed
*/
export function hasApt() {
return which.sync("apt", { nothrow: true }) !== null
}
/**
* Check if apt-get is installed
*/
export function hasAptGet() {
return which.sync("apt-get", { nothrow: true }) !== null
}
/**
* Get the apt command to use
* If nala is installed, use that, otherwise use apt-get
*/
export function getApt() {
let apt: string
if (hasNala()) {
apt = "nala"
return "nala"
} else if (hasAptFast()) {
return "apt-fast"
// } else if (hasApt()) {
// return "apt"
} else if (hasAptGet()) {
return "apt-get"
} else {
apt = "apt-get"
throw new Error("No apt command found")
}
return apt
}

View File

@ -1,4 +1,5 @@
export * from "./alternatives.js"
export * from "./apt-fast.js"
export * from "./apt-key.js"
export * from "./apt-repository.js"
export * from "./apt-timeout.js"
@ -6,5 +7,6 @@ export * from "./get-apt.js"
export * from "./init-apt.js"
export * from "./install.js"
export * from "./is-installed.js"
export * from "./nala.js"
export * from "./qualify-install.js"
export * from "./update.js"

View File

@ -4,15 +4,15 @@ import { execRootSync } from "admina"
import { error, info } from "ci-log"
import { readFile, writeFile } from "fs/promises"
import { DownloaderHelper } from "node-downloader-helper"
import { hasNala, installAptPack, qualifiedNeededAptPackage } from "setup-apt"
import which from "which"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { hasAptGet, hasNala } from "./get-apt.js"
import { installAptPack } from "./install.js"
import { qualifiedNeededAptPackage } from "./qualify-install.js"
let binDir: string | undefined
// eslint-disable-next-line @typescript-eslint/no-unused-vars
export async function setupNala(version: string, _setupDir: string, _arch: string) {
if (!isUbuntu()) {
export async function setupNala(version?: string) {
if (!hasAptGet()) {
return undefined
}
if (typeof binDir === "string") {

View File

@ -17,6 +17,7 @@
"scripts": {
"build": "tsc --pretty",
"dev": "tsc --watch --pretty",
"lint.tsc.test": "tsc --noEmit --pretty -p ./__tests__/tsconfig.json",
"lint.tsc": "tsc --noEmit --pretty",
"lint.eslint": "eslint '**/*.{ts,tsx,js,jsx,cjs,mjs,json,yaml}' --no-error-on-unmatched-pattern --cache --cache-location ./.cache/eslint/ --fix",
"prepublishOnly": "pnpm run build",

View File

@ -0,0 +1,7 @@
import { untildifyUser } from "../src/index.js"
describe("untildify-user", () => {
it("should be a function", () => {
expect(untildifyUser).toBeInstanceOf(Function)
})
})

View File

@ -0,0 +1,4 @@
{
"extends": "../tsconfig.json",
"include": ["**/*.ts"]
}

View File

@ -0,0 +1,2 @@
import jestConfig from "../../jest.config.mjs"
export default jestConfig

View File

@ -12,9 +12,11 @@
"scripts": {
"build": "tsc --pretty",
"dev": "tsc --watch --pretty",
"lint.tsc.test": "tsc --noEmit --pretty -p ./__tests__/tsconfig.json",
"lint.tsc": "tsc --noEmit --pretty",
"lint.eslint": "eslint '**/*.{ts,tsx,js,jsx,cjs,mjs,json,yaml}' --no-error-on-unmatched-pattern --cache --cache-location ./.cache/eslint/ --fix",
"prepublishOnly": "pnpm run build"
"prepublishOnly": "pnpm run build",
"test": "jest --coverage"
},
"dependencies": {
"admina": "1.0.1"

View File

@ -45,7 +45,7 @@ importers:
version: 2.2.5
'@liuli-util/vite-plugin-node':
specifier: ^0.9.0
version: 0.9.0(@types/node@22.15.19)(rollup@4.41.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.7.1))
version: 0.9.0(@types/node@22.15.19)(rollup@4.41.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0))
'@octokit/core':
specifier: ^6.1.4
version: 6.1.5
@ -129,7 +129,7 @@ importers:
version: 7.0.6
cspell:
specifier: ^9.0.0
version: 9.0.1
version: 9.0.2
diagnostics_channel:
specifier: ^1.1.0
version: 1.1.0
@ -275,8 +275,8 @@ importers:
specifier: ^4.19.3
version: 4.19.4
turbo:
specifier: 2.4.4
version: 2.4.4
specifier: 2.5.3
version: 2.5.3
typescript:
specifier: ^5.8.2
version: 5.8.3
@ -291,10 +291,10 @@ importers:
version: 0.0.2
vite:
specifier: ^6.2.0
version: 6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.7.1)
version: 6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)
vite-plugin-babel:
specifier: ^1.3.0
version: 1.3.1(@babel/core@7.27.1)(vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.7.1))
version: 1.3.1(@babel/core@7.27.1)(vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0))
web-streams-polyfill:
specifier: ^4.1.0
version: 4.1.0
@ -446,6 +446,12 @@ importers:
'@types/which':
specifier: ~3.0.4
version: 3.0.4
cross-spawn:
specifier: ^7.0.6
version: 7.0.6
patha:
specifier: ^0.4.1
version: 0.4.1
packages/setup-brew:
dependencies:
@ -857,28 +863,28 @@ packages:
cpu: [x64]
os: [win32]
'@cspell/cspell-bundled-dicts@9.0.1':
resolution: {integrity: sha512-h7gTqg0VF4N8VhOPk66XewuSsT56OP2ujgxtAyYQ4H+NuYd3HMfS0h/I3/y9uBhllwOEamaeAzYhc5JF/qIrsQ==}
'@cspell/cspell-bundled-dicts@9.0.2':
resolution: {integrity: sha512-gGFSfVIvYtO95O3Yhcd1o0sOZHjVaCPwYq3MnaNsBBzaMviIZli4FZW9Z+XNKsgo1zRzbl2SdOXJPP0VcyAY0A==}
engines: {node: '>=20'}
'@cspell/cspell-json-reporter@9.0.1':
resolution: {integrity: sha512-Rpn7Tuq9t8bZpXZFV43NkhCl0LaPDJZSON4/JFxGbOcH16ryXfrx7oObUTIIyxSxO3fGkzaJZHIwGibRJSsbNQ==}
'@cspell/cspell-json-reporter@9.0.2':
resolution: {integrity: sha512-Hy9hKG53cFhLwiSZuRVAd5YfBb5pPj3V2Val69TW1j4+sy3podewqm4sb3RqoB01LcDkLI/mOeMwHz1xyIjfoA==}
engines: {node: '>=20'}
'@cspell/cspell-pipe@9.0.1':
resolution: {integrity: sha512-bhFcvF2a8KYKVh/OebCfJ8LFw5GYHyUsUjAbxnznTBrYOFSIclDjwUwT29yVDXwnQkJkB6Px5Y9e2VvtFizVFg==}
'@cspell/cspell-pipe@9.0.2':
resolution: {integrity: sha512-M1e+u3dyGCJicSZ16xmoVut4pI8ynfqILYiDAYC9+rbn04wJdnWD46ElIZnRriFXx7fu/UsUEexu3lFaqKVGEg==}
engines: {node: '>=20'}
'@cspell/cspell-resolver@9.0.1':
resolution: {integrity: sha512-AhIXAhX1qt7Y3EyiP/5rAk7Ow7DJpAyB44wPbfdF9p1vhnk6oQ7RslnD3G6S9o/vNxZ0DWFPREMWx19J/3c+hw==}
'@cspell/cspell-resolver@9.0.2':
resolution: {integrity: sha512-JkMQb+hcEyZ2ALvEeJvfxoIblRpZlnek50Ew5sLSSZciRuhNvQZS5+Apwt1GXHitTo8/bqXFxABNP36O++YAwA==}
engines: {node: '>=20'}
'@cspell/cspell-service-bus@9.0.1':
resolution: {integrity: sha512-DoW6hLkFIO3BXePtUYQEax3FTH9fkwCUbf6qphAEXnr4PjoyPZsgBhR6iCrZd4DyhuFiRvK3Cgpq2o3O0NdODQ==}
'@cspell/cspell-service-bus@9.0.2':
resolution: {integrity: sha512-OjfZ3vnBjmkctC9xs/87/9bx/3kZYUPJkWsZxzfH4rla/HeIUrm9UZlDqCibhWifhPHrDdV9hDW5QEGXkYR2hw==}
engines: {node: '>=20'}
'@cspell/cspell-types@9.0.1':
resolution: {integrity: sha512-8FRmvyV1AYEepJB3J7jji1ZYG9yOK0eYr4WuUVPfUJa6N3HyeZjWKhxbVvqedmEI74f5Ls3cQKHY1T2Yvqk/ag==}
'@cspell/cspell-types@9.0.2':
resolution: {integrity: sha512-RioULo34qbUXuCCLi/DCDxdb++Nm1ospNXzVkKZrSvTG4AjkC95ZhfIOp9jbGSWqL2PGdaHVXgG77EyQbAk5xA==}
engines: {node: '>=20'}
'@cspell/dict-ada@4.1.0':
@ -929,11 +935,11 @@ packages:
'@cspell/dict-en-common-misspellings@2.0.11':
resolution: {integrity: sha512-xFQjeg0wFHh9sFhshpJ+5BzWR1m9Vu8pD0CGPkwZLK9oii8AD8RXNchabLKy/O5VTLwyqPOi9qpyp1cxm3US4Q==}
'@cspell/dict-en-gb-mit@3.0.6':
resolution: {integrity: sha512-QYDwuXi9Yh+AvU1omhz8sWX+A1SxWI3zeK1HdGfTrICZavhp8xxcQGTa5zxTTFRCcQc483YzUH2Dl+6Zd50tJg==}
'@cspell/dict-en-gb-mit@3.0.7':
resolution: {integrity: sha512-fdZbu4jbkzjjTO0jPBGINwQwzNFGapMnhH9D4mDa4UzGGyQFVRx6n/FFwxnfs7CXbuCV6UFSwjHZEAB8pfWn0A==}
'@cspell/dict-en_us@4.4.8':
resolution: {integrity: sha512-OkNUVuU9Q+Sf827/61YPkk6ya6dSsllzeYniBFqNW9TkoqQXT3vggkgmtCE1aEhSvVctMwxpPYoC8pZgn1TeSA==}
'@cspell/dict-en_us@4.4.9':
resolution: {integrity: sha512-5gjqpUwhE+qP9A9wxD1+MGGJ3DNqTgSpiOsS10cGJfV4p/Z194XkDUZrUrJsnJA/3fsCZHAzcNWh8m0bw1v++A==}
'@cspell/dict-filetypes@3.0.12':
resolution: {integrity: sha512-+ds5wgNdlUxuJvhg8A1TjuSpalDFGCh7SkANCWvIplg6QZPXL4j83lqxP7PgjHpx7PsBUS7vw0aiHPjZy9BItw==}
@ -953,8 +959,8 @@ packages:
'@cspell/dict-gaming-terms@1.1.1':
resolution: {integrity: sha512-tb8GFxjTLDQstkJcJ90lDqF4rKKlMUKs5/ewePN9P+PYRSehqDpLI5S5meOfPit8LGszeOrjUdBQ4zXo7NpMyQ==}
'@cspell/dict-git@3.0.4':
resolution: {integrity: sha512-C44M+m56rYn6QCsLbiKiedyPTMZxlDdEYAsPwwlL5bhMDDzXZ3Ic8OCQIhMbiunhCOJJT+er4URmOmM+sllnjg==}
'@cspell/dict-git@3.0.5':
resolution: {integrity: sha512-I7l86J2nOcpBY0OcwXLTGMbcXbEE7nxZme9DmYKrNgmt35fcLu+WKaiXW7P29V+lIXjJo/wKrEDY+wUEwVuABQ==}
'@cspell/dict-golang@6.0.21':
resolution: {integrity: sha512-D3wG1MWhFx54ySFJ00CS1MVjR4UiBVsOWGIjJ5Av+HamnguqEshxbF9mvy+BX0KqzdLVzwFkoLBs8QeOID56HA==}
@ -1009,8 +1015,8 @@ packages:
'@cspell/dict-node@5.0.7':
resolution: {integrity: sha512-ZaPpBsHGQCqUyFPKLyCNUH2qzolDRm1/901IO8e7btk7bEDF56DN82VD43gPvD4HWz3yLs/WkcLa01KYAJpnOw==}
'@cspell/dict-npm@5.2.3':
resolution: {integrity: sha512-EdGkCpAq66Mhi9Qldgsr+NvPVL4TdtmdlqDe4VBp0P3n6J0B7b0jT1MlVDIiLR+F1eqBfL0qjfHf0ey1CafeNw==}
'@cspell/dict-npm@5.2.4':
resolution: {integrity: sha512-/hK5ii9OzSOQkmTjkzJlEYWz+PBnz2hRq5Xu7d4aDURaynO9xMAcK31JJlKNQulBkVbQHxFZLUrzjdzdAr/Opw==}
'@cspell/dict-php@4.0.14':
resolution: {integrity: sha512-7zur8pyncYZglxNmqsRycOZ6inpDoVd4yFfz1pQRe5xaRWMiK3Km4n0/X/1YMWhh3e3Sl/fQg5Axb2hlN68t1g==}
@ -1039,8 +1045,8 @@ packages:
'@cspell/dict-shell@1.1.0':
resolution: {integrity: sha512-D/xHXX7T37BJxNRf5JJHsvziFDvh23IF/KvkZXNSh8VqcRdod3BAz9VGHZf6VDqcZXr1VRqIYR3mQ8DSvs3AVQ==}
'@cspell/dict-software-terms@5.0.8':
resolution: {integrity: sha512-VsJesitvaHZpMgNwHHms3yDsZz7LNToC2HuSAnyt1znn37ribiJF1ty0jWhVQO6fv7K4PM1KsKTJIwqBwc446g==}
'@cspell/dict-software-terms@5.0.10':
resolution: {integrity: sha512-2nTcVKTYJKU5GzeviXGPtRRC9d23MtfpD4PM4pLSzl29/5nx5MxOUHkzPuJdyaw9mXIz8Rm9IlGeVAvQoTI8aw==}
'@cspell/dict-sql@2.2.0':
resolution: {integrity: sha512-MUop+d1AHSzXpBvQgQkCiok8Ejzb+nrzyG16E8TvKL2MQeDwnIvMe3bv90eukP6E1HWb+V/MA/4pnq0pcJWKqQ==}
@ -1060,20 +1066,20 @@ packages:
'@cspell/dict-vue@3.0.4':
resolution: {integrity: sha512-0dPtI0lwHcAgSiQFx8CzvqjdoXROcH+1LyqgROCpBgppommWpVhbQ0eubnKotFEXgpUCONVkeZJ6Ql8NbTEu+w==}
'@cspell/dynamic-import@9.0.1':
resolution: {integrity: sha512-BoWzHwkufo90ubMZUN8Jy4HQYYWFW7psVCdG/4RUgfvVnazkPfLxWBbsPQsLrlIP0utaqei7D9FU0K7r7mpl4A==}
'@cspell/dynamic-import@9.0.2':
resolution: {integrity: sha512-KhcoNUj6Ij2P8fbRC7QOn3jzbTZFxoQpFGanGU9f+4DfZBH86PCADyKYH+ZpJPlYgrI+Jh4wKzF5y5YKKNrdrw==}
engines: {node: '>=20'}
'@cspell/filetypes@9.0.1':
resolution: {integrity: sha512-swZu3ra2AueyjEz/bPsvwFuHGYhjWZBx1K9FSvZA/yDIX5RVr6orQSuf9zvXNFui6Nyk0tudLnn3y9jT0LHk8A==}
'@cspell/filetypes@9.0.2':
resolution: {integrity: sha512-8KEIgptldoZT3pM+yhYV8nXq5T9Sz0YvZIqwDGEqKJ6j447K+I91QWS7RQDrvHkElMi/2g/h08Efg0RIT+QEaQ==}
engines: {node: '>=20'}
'@cspell/strong-weak-map@9.0.1':
resolution: {integrity: sha512-u87PWr1xACqs/F3HibZ4Eb0Za/ghWIa6WLvEKV9OaiLfEUQuczbrXPVgHmGr83H0XXWUKy8FvVbWGFmXwiw+gQ==}
'@cspell/strong-weak-map@9.0.2':
resolution: {integrity: sha512-SHTPUcu2e6aYxI5sr1L/9pzz68CArV6WzMvAio//5LbtKI6NtDp/7tARBwLi1G3A3C0289zDHbDKm3wc1lRNhQ==}
engines: {node: '>=20'}
'@cspell/url@9.0.1':
resolution: {integrity: sha512-8xaLrsQ742dmwXwS6tjreps3NpSQe6WEZFPQQT2DprVJXGZnfQR8ob0c+kPhD0hu9A6PwShJsRsfh3DQGKCqAw==}
'@cspell/url@9.0.2':
resolution: {integrity: sha512-KwCDL0ejgwVSZB8KTp8FhDe42UOaebTVIMi3O5GcYHi9Cut8B5QU4tbQOFGXP6E4pjimeO9yIkr9Z34kTljj/g==}
engines: {node: '>=20'}
'@cspotcode/source-map-support@0.8.1':
@ -2903,9 +2909,9 @@ packages:
resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==}
engines: {node: '>=8.0.0'}
commander@13.1.0:
resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
engines: {node: '>=18'}
commander@14.0.0:
resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==}
engines: {node: '>=20'}
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
@ -2998,42 +3004,42 @@ packages:
resolution: {integrity: sha512-KWjTXWwxFd6a94m5CdRGW/t82Tr8DoBc9dNnPCAbFI1EBweN6v1tv8y4Y1m7ndkp/nkIBRxUxAzpaBnR2k3bcQ==}
engines: {node: '>=14.16'}
cspell-config-lib@9.0.1:
resolution: {integrity: sha512-hbeyU6cY4NPKh69L4QpBZgGz00f7rLk10xPlCo6MxEmCqSOTuXXvDEUR51d2ED69G+GyFAeZi5VU9IdJ4jhvzQ==}
cspell-config-lib@9.0.2:
resolution: {integrity: sha512-8rCmGUEzlytnNeAazvbBdLeUoN18Cct8k6KLePiUS0GglYomSAvcPWsamSk9jeh947m0cu2dhjZPnKQlp11XBA==}
engines: {node: '>=20'}
cspell-dictionary@9.0.1:
resolution: {integrity: sha512-I9gjRpfV4djxN0i2p9OzWIrkjtUaGUyVE9atvRbkHUMeqDUhC2Qt0Mb9tnF8I7qnHeZt+U44vUa9Dg7yrJ+k4Q==}
cspell-dictionary@9.0.2:
resolution: {integrity: sha512-u1jLnqu+2IJiGKdUP9LF1/vseOrCh6hUACHZQ8JsCbHC2KU/DL68s4IgS5jDyK5lBcwPOWzQOiTuXQSEardpFQ==}
engines: {node: '>=20'}
cspell-gitignore@9.0.1:
resolution: {integrity: sha512-xjgOmeGbHEaeF0erRQ2QXwqxWqGDiI4mu+NjCL7ZHPoAM5y8PEO6IbxVNabIB1xC4QAborbtEQ/8ydDWLJcPoQ==}
cspell-gitignore@9.0.2:
resolution: {integrity: sha512-2CXpUYa+mf1I0oMH/V0qzT0zP95IqYzaS9BfEB7AcSmjrvuIgmiGLztUNrG5mMMBAlHk7sfI8gAEMMvr/Q7sTQ==}
engines: {node: '>=20'}
hasBin: true
cspell-glob@9.0.1:
resolution: {integrity: sha512-dQU/ln6J9Qe31zk1cLJnq/WNAjRrTUig1GG8WA2oK1jHZKY9VbyJLb5DUFnDUx35cI0jdOEnGSCWi8qNjHSc1Q==}
cspell-glob@9.0.2:
resolution: {integrity: sha512-trTskAU7tw9RpCb+/uPM4zWByZEavHh3SIrjz7Du/ritjZi85O80HItNw5O3ext4zSPfNNLL3kBT7fLLphFHrw==}
engines: {node: '>=20'}
cspell-grammar@9.0.1:
resolution: {integrity: sha512-FZ1z1p3pslfotZT/W/VRZjB4S+z0ETrTbNmQ5pGmhdY0nm7Slmg+8nIJluLEjBneBGTJIOcLjYykwS2vI6jzxw==}
cspell-grammar@9.0.2:
resolution: {integrity: sha512-3hrNZJYEgWSaCvH3rpFq43PX9pxdJt60+pFG3CTZAdpcI97DDsrdH3f7a6h8sNAb+pN59JnV2DtWexsAVL6vjA==}
engines: {node: '>=20'}
hasBin: true
cspell-io@9.0.1:
resolution: {integrity: sha512-L5fZY0glVeQb6nmt1WL1wKzZzoHJUkBQ9BGCrwqSXIrjZrYmBNSKixCjo6o9n2keRUwpNjsvZj1TQDKDV+FsXA==}
cspell-io@9.0.2:
resolution: {integrity: sha512-TO93FTgQjjp62nAn213885RdyOTsQwdjSHdeYaaNiaTBOBgj2jR8M8bi3+h2imGBlinlYERoVbPF9wghJEK2nw==}
engines: {node: '>=20'}
cspell-lib@9.0.1:
resolution: {integrity: sha512-F4vJG6GmAGVAuhgcepO12UtG7yev7Rcfa31MLIyYNTrd5NeORzM+GTHnL970FlEflwYPYjcSTGwkyowQ+ZbmDg==}
cspell-lib@9.0.2:
resolution: {integrity: sha512-uoPQ0f+umOGUQB/q0H+K/gWfd7xJMaPlt5rXMMTeKIPHLDRBE7lBx4mHVCmgevL+oTNSLpIE5FdqRDbr+Q+Awg==}
engines: {node: '>=20'}
cspell-trie-lib@9.0.1:
resolution: {integrity: sha512-gIupiHwLdsQun79biJgiqmXffKUGzFjGLFEeVptI2Zy5Oa3XhRJsHap4PyeleErONkpzxMG1tgpOWzhOqwl65Q==}
cspell-trie-lib@9.0.2:
resolution: {integrity: sha512-inXu6YEoJFLYnxgcXy3quCoGgSWYRye1kM4dj8kbYtNAQgUVD93hPFdmPWObwhVawsS3rQybckG3DSnmxBe9Fg==}
engines: {node: '>=20'}
cspell@9.0.1:
resolution: {integrity: sha512-AJqsX+3eSTz9GmIuyEZUzCCTbvCPw6+Nv7UYa4PCn7vNV3XEb5LHTp5i9y2i65fNaeNEcQXLrLYoY/JcBFmUSQ==}
cspell@9.0.2:
resolution: {integrity: sha512-VwPNTTivvv/NyovXUMcTYc7BaOgun7k8FhRWaVKxZPEsl/9r9WTLmQ1dNbHRq56LajH2b7wKGQYuRsfov3UWTg==}
engines: {node: '>=20'}
hasBin: true
@ -5507,6 +5513,11 @@ packages:
engines: {node: '>=10'}
hasBin: true
semver@7.7.2:
resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
engines: {node: '>=10'}
hasBin: true
seq@0.3.5:
resolution: {integrity: sha512-sisY2Ln1fj43KBkRtXkesnRHYNdswIkIibvNe/0UKm2GZxjMbqmccpiatoKr/k2qX5VKiLU8xm+tz/74LAho4g==}
@ -5925,38 +5936,38 @@ packages:
resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==}
engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'}
turbo-darwin-64@2.4.4:
resolution: {integrity: sha512-5kPvRkLAfmWI0MH96D+/THnDMGXlFNmjeqNRj5grLKiry+M9pKj3pRuScddAXPdlxjO5Ptz06UNaOQrrYGTx1g==}
turbo-darwin-64@2.5.3:
resolution: {integrity: sha512-YSItEVBUIvAGPUDpAB9etEmSqZI3T6BHrkBkeSErvICXn3dfqXUfeLx35LfptLDEbrzFUdwYFNmt8QXOwe9yaw==}
cpu: [x64]
os: [darwin]
turbo-darwin-arm64@2.4.4:
resolution: {integrity: sha512-/gtHPqbGQXDFhrmy+Q/MFW2HUTUlThJ97WLLSe4bxkDrKHecDYhAjbZ4rN3MM93RV9STQb3Tqy4pZBtsd4DfCw==}
turbo-darwin-arm64@2.5.3:
resolution: {integrity: sha512-5PefrwHd42UiZX7YA9m1LPW6x9YJBDErXmsegCkVp+GjmWrADfEOxpFrGQNonH3ZMj77WZB2PVE5Aw3gA+IOhg==}
cpu: [arm64]
os: [darwin]
turbo-linux-64@2.4.4:
resolution: {integrity: sha512-SR0gri4k0bda56hw5u9VgDXLKb1Q+jrw4lM7WAhnNdXvVoep4d6LmnzgMHQQR12Wxl3KyWPbkz9d1whL6NTm2Q==}
turbo-linux-64@2.5.3:
resolution: {integrity: sha512-M9xigFgawn5ofTmRzvjjLj3Lqc05O8VHKuOlWNUlnHPUltFquyEeSkpQNkE/vpPdOR14AzxqHbhhxtfS4qvb1w==}
cpu: [x64]
os: [linux]
turbo-linux-arm64@2.4.4:
resolution: {integrity: sha512-COXXwzRd3vslQIfJhXUklgEqlwq35uFUZ7hnN+AUyXx7hUOLIiD5NblL+ETrHnhY4TzWszrbwUMfe2BYWtaPQg==}
turbo-linux-arm64@2.5.3:
resolution: {integrity: sha512-auJRbYZ8SGJVqvzTikpg1bsRAsiI9Tk0/SDkA5Xgg0GdiHDH/BOzv1ZjDE2mjmlrO/obr19Dw+39OlMhwLffrw==}
cpu: [arm64]
os: [linux]
turbo-windows-64@2.4.4:
resolution: {integrity: sha512-PV9rYNouGz4Ff3fd6sIfQy5L7HT9a4fcZoEv8PKRavU9O75G7PoDtm8scpHU10QnK0QQNLbE9qNxOAeRvF0fJg==}
turbo-windows-64@2.5.3:
resolution: {integrity: sha512-arLQYohuHtIEKkmQSCU9vtrKUg+/1TTstWB9VYRSsz+khvg81eX6LYHtXJfH/dK7Ho6ck+JaEh5G+QrE1jEmCQ==}
cpu: [x64]
os: [win32]
turbo-windows-arm64@2.4.4:
resolution: {integrity: sha512-403sqp9t5sx6YGEC32IfZTVWkRAixOQomGYB8kEc6ZD+//LirSxzeCHCnM8EmSXw7l57U1G+Fb0kxgTcKPU/Lg==}
turbo-windows-arm64@2.5.3:
resolution: {integrity: sha512-3JPn66HAynJ0gtr6H+hjY4VHpu1RPKcEwGATvGUTmLmYSYBQieVlnGDRMMoYN066YfyPqnNGCfhYbXfH92Cm0g==}
cpu: [arm64]
os: [win32]
turbo@2.4.4:
resolution: {integrity: sha512-N9FDOVaY3yz0YCOhYIgOGYad7+m2ptvinXygw27WPLQvcZDl3+0Sa77KGVlLSiuPDChOUEnTKE9VJwLSi9BPGQ==}
turbo@2.5.3:
resolution: {integrity: sha512-iHuaNcq5GZZnr3XDZNuu2LSyCzAOPwDuo5Qt+q64DfsTP1i3T2bKfxJhni2ZQxsvAoxRbuUK5QetJki4qc5aYA==}
hasBin: true
type-check@0.4.0:
@ -6309,9 +6320,9 @@ packages:
yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
yaml@2.7.1:
resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==}
engines: {node: '>= 14'}
yaml@2.8.0:
resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==}
engines: {node: '>= 14.6'}
hasBin: true
yargs-parser@18.1.3:
@ -6838,7 +6849,7 @@ snapshots:
'@biomejs/cli-win32-x64@1.9.4':
optional: true
'@cspell/cspell-bundled-dicts@9.0.1':
'@cspell/cspell-bundled-dicts@9.0.2':
dependencies:
'@cspell/dict-ada': 4.1.0
'@cspell/dict-al': 1.1.0
@ -6856,15 +6867,15 @@ snapshots:
'@cspell/dict-dotnet': 5.0.9
'@cspell/dict-elixir': 4.0.7
'@cspell/dict-en-common-misspellings': 2.0.11
'@cspell/dict-en-gb-mit': 3.0.6
'@cspell/dict-en_us': 4.4.8
'@cspell/dict-en-gb-mit': 3.0.7
'@cspell/dict-en_us': 4.4.9
'@cspell/dict-filetypes': 3.0.12
'@cspell/dict-flutter': 1.1.0
'@cspell/dict-fonts': 4.0.4
'@cspell/dict-fsharp': 1.1.0
'@cspell/dict-fullstack': 3.2.6
'@cspell/dict-gaming-terms': 1.1.1
'@cspell/dict-git': 3.0.4
'@cspell/dict-git': 3.0.5
'@cspell/dict-golang': 6.0.21
'@cspell/dict-google': 1.0.8
'@cspell/dict-haskell': 4.0.5
@ -6881,7 +6892,7 @@ snapshots:
'@cspell/dict-markdown': 2.0.10(@cspell/dict-css@4.0.17)(@cspell/dict-html-symbol-entities@4.0.3)(@cspell/dict-html@4.0.11)(@cspell/dict-typescript@3.2.1)
'@cspell/dict-monkeyc': 1.0.10
'@cspell/dict-node': 5.0.7
'@cspell/dict-npm': 5.2.3
'@cspell/dict-npm': 5.2.4
'@cspell/dict-php': 4.0.14
'@cspell/dict-powershell': 5.0.14
'@cspell/dict-public-licenses': 2.0.13
@ -6891,7 +6902,7 @@ snapshots:
'@cspell/dict-rust': 4.0.11
'@cspell/dict-scala': 5.0.7
'@cspell/dict-shell': 1.1.0
'@cspell/dict-software-terms': 5.0.8
'@cspell/dict-software-terms': 5.0.10
'@cspell/dict-sql': 2.2.0
'@cspell/dict-svelte': 1.0.6
'@cspell/dict-swift': 2.0.5
@ -6899,19 +6910,19 @@ snapshots:
'@cspell/dict-typescript': 3.2.1
'@cspell/dict-vue': 3.0.4
'@cspell/cspell-json-reporter@9.0.1':
'@cspell/cspell-json-reporter@9.0.2':
dependencies:
'@cspell/cspell-types': 9.0.1
'@cspell/cspell-types': 9.0.2
'@cspell/cspell-pipe@9.0.1': {}
'@cspell/cspell-pipe@9.0.2': {}
'@cspell/cspell-resolver@9.0.1':
'@cspell/cspell-resolver@9.0.2':
dependencies:
global-directory: 4.0.1
'@cspell/cspell-service-bus@9.0.1': {}
'@cspell/cspell-service-bus@9.0.2': {}
'@cspell/cspell-types@9.0.1': {}
'@cspell/cspell-types@9.0.2': {}
'@cspell/dict-ada@4.1.0': {}
@ -6947,9 +6958,9 @@ snapshots:
'@cspell/dict-en-common-misspellings@2.0.11': {}
'@cspell/dict-en-gb-mit@3.0.6': {}
'@cspell/dict-en-gb-mit@3.0.7': {}
'@cspell/dict-en_us@4.4.8': {}
'@cspell/dict-en_us@4.4.9': {}
'@cspell/dict-filetypes@3.0.12': {}
@ -6963,7 +6974,7 @@ snapshots:
'@cspell/dict-gaming-terms@1.1.1': {}
'@cspell/dict-git@3.0.4': {}
'@cspell/dict-git@3.0.5': {}
'@cspell/dict-golang@6.0.21': {}
@ -7002,7 +7013,7 @@ snapshots:
'@cspell/dict-node@5.0.7': {}
'@cspell/dict-npm@5.2.3': {}
'@cspell/dict-npm@5.2.4': {}
'@cspell/dict-php@4.0.14': {}
@ -7024,7 +7035,7 @@ snapshots:
'@cspell/dict-shell@1.1.0': {}
'@cspell/dict-software-terms@5.0.8': {}
'@cspell/dict-software-terms@5.0.10': {}
'@cspell/dict-sql@2.2.0': {}
@ -7038,16 +7049,16 @@ snapshots:
'@cspell/dict-vue@3.0.4': {}
'@cspell/dynamic-import@9.0.1':
'@cspell/dynamic-import@9.0.2':
dependencies:
'@cspell/url': 9.0.1
'@cspell/url': 9.0.2
import-meta-resolve: 4.1.0
'@cspell/filetypes@9.0.1': {}
'@cspell/filetypes@9.0.2': {}
'@cspell/strong-weak-map@9.0.1': {}
'@cspell/strong-weak-map@9.0.2': {}
'@cspell/url@9.0.1': {}
'@cspell/url@9.0.2': {}
'@cspotcode/source-map-support@0.8.1':
dependencies:
@ -7474,14 +7485,14 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
'@liuli-util/vite-plugin-node@0.9.0(@types/node@22.15.19)(rollup@4.41.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.7.1))':
'@liuli-util/vite-plugin-node@0.9.0(@types/node@22.15.19)(rollup@4.41.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0))':
dependencies:
'@microsoft/api-extractor': 7.51.1(@types/node@22.15.19)
magic-string: 0.30.17
pathe: 1.1.2
rollup-plugin-node-externals: 7.1.3(rollup@4.41.0)
vite: 6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.7.1)
vite-plugin-dts: 3.9.1(@types/node@22.15.19)(rollup@4.41.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.7.1))
vite: 6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)
vite-plugin-dts: 3.9.1(@types/node@22.15.19)(rollup@4.41.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0))
transitivePeerDependencies:
- '@types/node'
- rollup
@ -8054,7 +8065,7 @@ snapshots:
'@types/glob@7.2.0':
dependencies:
'@types/minimatch': 5.1.2
'@types/node': 22.15.19
'@types/node': 22.15.3
'@types/graceful-fs@4.1.9':
dependencies:
@ -9014,7 +9025,7 @@ snapshots:
table-layout: 1.0.2
typical: 5.2.0
commander@13.1.0: {}
commander@14.0.0: {}
commander@2.20.3: {}
@ -9111,58 +9122,58 @@ snapshots:
dependencies:
type-fest: 2.19.0
cspell-config-lib@9.0.1:
cspell-config-lib@9.0.2:
dependencies:
'@cspell/cspell-types': 9.0.1
'@cspell/cspell-types': 9.0.2
comment-json: 4.2.5
yaml: 2.7.1
yaml: 2.8.0
cspell-dictionary@9.0.1:
cspell-dictionary@9.0.2:
dependencies:
'@cspell/cspell-pipe': 9.0.1
'@cspell/cspell-types': 9.0.1
cspell-trie-lib: 9.0.1
'@cspell/cspell-pipe': 9.0.2
'@cspell/cspell-types': 9.0.2
cspell-trie-lib: 9.0.2
fast-equals: 5.2.2
cspell-gitignore@9.0.1:
cspell-gitignore@9.0.2:
dependencies:
'@cspell/url': 9.0.1
cspell-glob: 9.0.1
cspell-io: 9.0.1
'@cspell/url': 9.0.2
cspell-glob: 9.0.2
cspell-io: 9.0.2
cspell-glob@9.0.1:
cspell-glob@9.0.2:
dependencies:
'@cspell/url': 9.0.1
'@cspell/url': 9.0.2
picomatch: 4.0.2
cspell-grammar@9.0.1:
cspell-grammar@9.0.2:
dependencies:
'@cspell/cspell-pipe': 9.0.1
'@cspell/cspell-types': 9.0.1
'@cspell/cspell-pipe': 9.0.2
'@cspell/cspell-types': 9.0.2
cspell-io@9.0.1:
cspell-io@9.0.2:
dependencies:
'@cspell/cspell-service-bus': 9.0.1
'@cspell/url': 9.0.1
'@cspell/cspell-service-bus': 9.0.2
'@cspell/url': 9.0.2
cspell-lib@9.0.1:
cspell-lib@9.0.2:
dependencies:
'@cspell/cspell-bundled-dicts': 9.0.1
'@cspell/cspell-pipe': 9.0.1
'@cspell/cspell-resolver': 9.0.1
'@cspell/cspell-types': 9.0.1
'@cspell/dynamic-import': 9.0.1
'@cspell/filetypes': 9.0.1
'@cspell/strong-weak-map': 9.0.1
'@cspell/url': 9.0.1
'@cspell/cspell-bundled-dicts': 9.0.2
'@cspell/cspell-pipe': 9.0.2
'@cspell/cspell-resolver': 9.0.2
'@cspell/cspell-types': 9.0.2
'@cspell/dynamic-import': 9.0.2
'@cspell/filetypes': 9.0.2
'@cspell/strong-weak-map': 9.0.2
'@cspell/url': 9.0.2
clear-module: 4.1.2
comment-json: 4.2.5
cspell-config-lib: 9.0.1
cspell-dictionary: 9.0.1
cspell-glob: 9.0.1
cspell-grammar: 9.0.1
cspell-io: 9.0.1
cspell-trie-lib: 9.0.1
cspell-config-lib: 9.0.2
cspell-dictionary: 9.0.2
cspell-glob: 9.0.2
cspell-grammar: 9.0.2
cspell-io: 9.0.2
cspell-trie-lib: 9.0.2
env-paths: 3.0.0
fast-equals: 5.2.2
gensequence: 7.0.0
@ -9172,30 +9183,30 @@ snapshots:
vscode-uri: 3.1.0
xdg-basedir: 5.1.0
cspell-trie-lib@9.0.1:
cspell-trie-lib@9.0.2:
dependencies:
'@cspell/cspell-pipe': 9.0.1
'@cspell/cspell-types': 9.0.1
'@cspell/cspell-pipe': 9.0.2
'@cspell/cspell-types': 9.0.2
gensequence: 7.0.0
cspell@9.0.1:
cspell@9.0.2:
dependencies:
'@cspell/cspell-json-reporter': 9.0.1
'@cspell/cspell-pipe': 9.0.1
'@cspell/cspell-types': 9.0.1
'@cspell/dynamic-import': 9.0.1
'@cspell/url': 9.0.1
'@cspell/cspell-json-reporter': 9.0.2
'@cspell/cspell-pipe': 9.0.2
'@cspell/cspell-types': 9.0.2
'@cspell/dynamic-import': 9.0.2
'@cspell/url': 9.0.2
chalk: 5.4.1
chalk-template: 1.1.0
commander: 13.1.0
cspell-dictionary: 9.0.1
cspell-gitignore: 9.0.1
cspell-glob: 9.0.1
cspell-io: 9.0.1
cspell-lib: 9.0.1
commander: 14.0.0
cspell-dictionary: 9.0.2
cspell-gitignore: 9.0.2
cspell-glob: 9.0.2
cspell-io: 9.0.2
cspell-lib: 9.0.2
fast-json-stable-stringify: 2.1.0
file-entry-cache: 9.1.0
semver: 7.7.1
semver: 7.7.2
tinyglobby: 0.2.13
cssesc@3.0.0: {}
@ -12190,6 +12201,8 @@ snapshots:
semver@7.7.1: {}
semver@7.7.2: {}
seq@0.3.5:
dependencies:
chainsaw: 0.0.9
@ -12675,32 +12688,32 @@ snapshots:
tunnel@0.0.6: {}
turbo-darwin-64@2.4.4:
turbo-darwin-64@2.5.3:
optional: true
turbo-darwin-arm64@2.4.4:
turbo-darwin-arm64@2.5.3:
optional: true
turbo-linux-64@2.4.4:
turbo-linux-64@2.5.3:
optional: true
turbo-linux-arm64@2.4.4:
turbo-linux-arm64@2.5.3:
optional: true
turbo-windows-64@2.4.4:
turbo-windows-64@2.5.3:
optional: true
turbo-windows-arm64@2.4.4:
turbo-windows-arm64@2.5.3:
optional: true
turbo@2.4.4:
turbo@2.5.3:
optionalDependencies:
turbo-darwin-64: 2.4.4
turbo-darwin-arm64: 2.4.4
turbo-linux-64: 2.4.4
turbo-linux-arm64: 2.4.4
turbo-windows-64: 2.4.4
turbo-windows-arm64: 2.4.4
turbo-darwin-64: 2.5.3
turbo-darwin-arm64: 2.5.3
turbo-linux-64: 2.5.3
turbo-linux-arm64: 2.5.3
turbo-windows-64: 2.5.3
turbo-windows-arm64: 2.5.3
type-check@0.4.0:
dependencies:
@ -12858,12 +12871,12 @@ snapshots:
validator@13.12.0: {}
vite-plugin-babel@1.3.1(@babel/core@7.27.1)(vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.7.1)):
vite-plugin-babel@1.3.1(@babel/core@7.27.1)(vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)):
dependencies:
'@babel/core': 7.27.1
vite: 6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.7.1)
vite: 6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)
vite-plugin-dts@3.9.1(@types/node@22.15.19)(rollup@4.41.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.7.1)):
vite-plugin-dts@3.9.1(@types/node@22.15.19)(rollup@4.41.0)(typescript@5.8.3)(vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)):
dependencies:
'@microsoft/api-extractor': 7.43.0(@types/node@22.15.19)
'@rollup/pluginutils': 5.1.4(rollup@4.41.0)
@ -12874,13 +12887,13 @@ snapshots:
typescript: 5.8.3
vue-tsc: 1.8.27(typescript@5.8.3)
optionalDependencies:
vite: 6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.7.1)
vite: 6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)
transitivePeerDependencies:
- '@types/node'
- rollup
- supports-color
vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.7.1):
vite@6.3.5(@types/node@22.15.19)(lightningcss@1.26.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0):
dependencies:
esbuild: 0.25.4
fdir: 6.4.4(picomatch@4.0.2)
@ -12894,7 +12907,7 @@ snapshots:
lightningcss: 1.26.0
terser: 5.39.2
tsx: 4.19.4
yaml: 2.7.1
yaml: 2.8.0
vscode-json-languageservice@4.2.1:
dependencies:
@ -13046,7 +13059,7 @@ snapshots:
yallist@4.0.0: {}
yaml@2.7.1: {}
yaml@2.8.0: {}
yargs-parser@18.1.3:
dependencies:

View File

@ -1,11 +1,10 @@
import { execRoot } from "admina"
import { hasApk, installApkPack } from "setup-alpine"
import { addAptKeyViaURL, installAptPack } from "setup-apt"
import { addAptKeyViaURL, hasAptGet, installAptPack } from "setup-apt"
import { installBrewPack } from "setup-brew"
import { getDebArch } from "../utils/env/arch.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { setupChocoPack } from "../utils/setup/setupChocoPack.js"
import { setupDnfPack } from "../utils/setup/setupDnfPack.js"
@ -28,7 +27,7 @@ export async function setupBazel(version: string, _setupDir: string, _arch: stri
await setupDnfPack([{ name: "dnf-plugins-core" }])
await execRoot("dnf", ["copr", "enable", "vbatts/bazel"])
return setupDnfPack([{ name: "bazel4" }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
// https://bazel.build/install/ubuntu
const keyFileName = await addAptKeyViaURL({
fileName: "bazel-archive-keyring.gpg",

View File

@ -1,9 +1,8 @@
import { hasApk, installApkPack } from "setup-alpine"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { installBrewPack } from "setup-brew"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { setupChocoPack } from "../utils/setup/setupChocoPack.js"
import { setupDnfPack } from "../utils/setup/setupDnfPack.js"
import { setupPacmanPack } from "../utils/setup/setupPacmanPack.js"
@ -22,7 +21,7 @@ export async function setupCcache(version: string, _setupDir: string, _arch: str
return setupPacmanPack("ccache", version)
} else if (hasDnf()) {
return setupDnfPack([{ name: "ccache", version }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
return installAptPack([{ name: "ccache", version }])
} else if (await hasApk()) {
return installApkPack([{ name: "ccache", version }])

View File

@ -1,11 +1,10 @@
import { addPath } from "envosman"
import { hasApk, installApkPack } from "setup-alpine"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { installBrewPack } from "setup-brew"
import { rcOptions } from "../options.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { setupChocoPack } from "../utils/setup/setupChocoPack.js"
import { setupDnfPack } from "../utils/setup/setupDnfPack.js"
import { setupPacmanPack } from "../utils/setup/setupPacmanPack.js"
@ -26,7 +25,7 @@ export async function setupCppcheck(version: string | undefined, _setupDir: stri
return setupPacmanPack("cppcheck", version)
} else if (hasDnf()) {
return setupDnfPack([{ name: "ccache", version }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
return installAptPack([{ name: "cppcheck", version }])
} else if (await hasApk()) {
return installApkPack([{ name: "cppcheck", version }])

View File

@ -5,14 +5,13 @@ import { pathExists } from "path-exists"
import { addExeExt } from "patha"
import retry from "retry-as-promised"
import { hasApk, installApkPack } from "setup-alpine"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { installBrewPack } from "setup-brew"
import { setupGraphviz } from "../graphviz/graphviz.js"
import { rcOptions } from "../options.js"
import { arm64 } from "../utils/env/arch.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { macosVersion } from "../utils/env/macos_version.js"
import { ubuntuVersion } from "../utils/env/ubuntu_version.js"
import { type PackageInfo, setupBin } from "../utils/setup/setupBin.js"
@ -109,7 +108,7 @@ async function setupLinuxDoxygen(version: string, setupDir: string, arch: string
return await setupPacmanPack("doxygen", version)
} else if (hasDnf()) {
return setupDnfPack([{ name: "doxygen", version }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
return await installAptPack([{ name: "doxygen", version, fallBackToLatest: arm64.includes(arch) }])
} else if (await hasApk()) {
return installApkPack([
@ -125,7 +124,7 @@ async function setupLinuxDoxygen(version: string, setupDir: string, arch: string
// fallback to setupBin if the installation failed
try {
const installationInfo = await setupBin("doxygen", version, getDoxygenPackageInfo, setupDir, arch)
if (isUbuntu()) {
if (hasAptGet()) {
try {
await installAptPack([{ name: "libclang-cpp-dev" }])
} catch (err) {

View File

@ -3,7 +3,7 @@ import { fileURLToPath } from "url"
import { execaSync } from "execa"
import { chmod } from "fs/promises"
import { addExeExt } from "patha"
import { isUbuntu } from "../../utils/env/isUbuntu.js"
import { hasAptGet } from "setup-apt"
import { ubuntuVersion } from "../../utils/env/ubuntu_version.js"
import { cleanupTmpDir, setupTmpDir, testBin } from "../../utils/tests/test-helpers.js"
import { getVersion } from "../../versions/versions.js"
@ -24,7 +24,7 @@ describe("setup-gcc", () => {
const installInfo = await setupGcc(version, directory, process.arch)
let gpp = "g++"
if (isUbuntu()) {
if (hasAptGet()) {
const ubuntuMajorVersion = ubuntuVersionOutput?.[0]
// https://packages.ubuntu.com/search?keywords=gcc
switch (ubuntuMajorVersion) {

View File

@ -11,13 +11,12 @@ import { pathExists } from "path-exists"
import { addExeExt } from "patha"
import semverMajor from "semver/functions/major"
import { hasApk, installApkPack } from "setup-alpine"
import { addUpdateAlternativesToRc, installAptPack } from "setup-apt"
import { addUpdateAlternativesToRc, hasAptGet, installAptPack } from "setup-apt"
import { installBrewPack } from "setup-brew"
import { setupMacOSSDK } from "../macos-sdk/macos-sdk.js"
import { rcOptions } from "../options.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import type { InstallationInfo } from "../utils/setup/setupBin.js"
import { setupDnfPack } from "../utils/setup/setupDnfPack.js"
import { setupPacmanPack } from "../utils/setup/setupPacmanPack.js"
@ -49,7 +48,7 @@ export async function setupGcc(version: string, setupDir: string, arch: string,
])
} else if (await hasApk()) {
installationInfo = await installApkPack([{ name: "gcc", version }, { name: "g++", version }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
if (version === "") {
// the default version
installationInfo = await installAptPack([{ name: "gcc" }, { name: "g++" }])
@ -156,7 +155,7 @@ async function activateGcc(givenVersion: string, binDir: string, priority: numbe
addEnv("CXX", gxxPath, rcOptions),
)
if (isUbuntu()) {
if (hasAptGet()) {
promises.push(
addUpdateAlternativesToRc("cc", gccPath, rcOptions, priority),
addUpdateAlternativesToRc("cxx", gxxPath, rcOptions, priority),

View File

@ -9,12 +9,11 @@ import { addExeExt } from "patha"
import semverCoerce from "semver/functions/coerce.js"
import semverSatisfies from "semver/functions/satisfies.js"
import { enableCommunityRepository, hasApk, installApkPack } from "setup-alpine"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { rcOptions } from "../options.js"
import { loadAssetList, matchAsset } from "../utils/asset/load-assets.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { extract7Zip } from "../utils/setup/extract.js"
import { type InstallationInfo, type PackageInfo, setupBin } from "../utils/setup/setupBin.js"
import { setupChocoPack } from "../utils/setup/setupChocoPack.js"
@ -44,7 +43,7 @@ export async function setupMingw(version: string, setupDir: string, arch: string
installationInfo = await setupPacmanPack("mingw-w64-gcc", version)
} else if (hasDnf()) {
installationInfo = await setupDnfPack([{ name: "mingw64-gcc", version }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
installationInfo = await installAptPack([{ name: "mingw-w64", version }])
} else if (await hasApk()) {
await enableCommunityRepository()

View File

@ -3,13 +3,12 @@ import { join } from "path"
import { info, warning } from "ci-log"
import { addPath } from "envosman"
import { hasApk, installApkPack } from "setup-alpine"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { installBrewPack } from "setup-brew"
import which from "which"
import { rcOptions } from "../options.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { setupChocoPack } from "../utils/setup/setupChocoPack.js"
import { setupDnfPack } from "../utils/setup/setupDnfPack.js"
import { setupPacmanPack } from "../utils/setup/setupPacmanPack.js"
@ -39,7 +38,7 @@ export async function setupGit(version: string, _setupDir: string, _arch: string
return setupPacmanPack("git", version)
} else if (hasDnf()) {
return setupDnfPack([{ name: "git", version }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
return installAptPack([{ name: "git", version }])
} else if (await hasApk()) {
return installApkPack([{ name: "git", version }])

View File

@ -1,11 +1,10 @@
import { addPath } from "envosman"
import { hasApk, installApkPack } from "setup-alpine"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { installBrewPack } from "setup-brew"
import { rcOptions } from "../options.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import type { InstallationInfo } from "../utils/setup/setupBin.js"
import { setupChocoPack } from "../utils/setup/setupChocoPack.js"
import { setupDnfPack } from "../utils/setup/setupDnfPack.js"
@ -26,7 +25,7 @@ export async function setupGraphviz(version: string, _setupDir: string, _arch: s
return setupPacmanPack("graphviz", version)
} else if (hasDnf()) {
return setupDnfPack([{ name: "graphviz", version }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
return installAptPack([{ name: "graphviz", version }])
} else if (await hasApk()) {
return installApkPack([{ name: "graphviz", version }])

View File

@ -1,5 +1,5 @@
import { info } from "ci-log"
import { isUbuntu } from "../../utils/env/isUbuntu.js"
import { hasAptGet } from "setup-apt"
import { ubuntuVersion } from "../../utils/env/ubuntu_version.js"
import { cleanupTmpDir, setupTmpDir, testBin } from "../../utils/tests/test-helpers.js"
import { getVersion } from "../../versions/versions.js"
@ -23,7 +23,7 @@ describe("setup-infer", () => {
it("should setup infer", async () => {
/* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
if (isUbuntu() && (await ubuntuVersion())?.[0]! <= 20) {
if (hasAptGet() && (await ubuntuVersion())?.[0]! <= 20) {
info("Skipping infer test on ubuntu 20 and below")
return
}

View File

@ -3,14 +3,13 @@ import { fileURLToPath } from "url"
import { info } from "ci-log"
import { execa } from "execa"
import { addExeExt } from "patha"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { untildifyUser } from "untildify-user"
import which from "which"
import { setupCmake } from "../cmake/cmake.js"
import { setupNinja } from "../ninja/ninja.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { ubuntuVersion } from "../utils/env/ubuntu_version.js"
import { extractTarByExe } from "../utils/setup/extract.js"
import { type InstallationInfo, type PackageInfo, setupBin } from "../utils/setup/setupBin.js"
@ -51,7 +50,7 @@ async function buildKcov(file: string, dest: string) {
await Promise.all([setupPacmanPack("libdwarf"), setupPacmanPack("libcurl-openssl")])
} else if (hasDnf()) {
await setupDnfPack([{ name: "libdwarf-devel" }, { name: "libcurl-devel" }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
await installAptPack([{ name: "libdw-dev" }, { name: "libcurl4-openssl-dev" }])
}
}
@ -119,7 +118,7 @@ export async function setupKcov(versionGiven: string, setupDir: string, arch: st
await setupPacmanPack("binutils")
} else if (hasDnf()) {
await setupDnfPack([{ name: "binutils" }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
await installAptPack([{ name: "libbinutils" }])
}
return installationInfo

View File

@ -7,11 +7,10 @@ import { addEnv } from "envosman"
import memoize from "memoizee"
import { pathExists } from "path-exists"
import { addExeExt } from "patha"
import { addUpdateAlternativesToRc } from "setup-apt"
import { addUpdateAlternativesToRc, hasAptGet } from "setup-apt"
import { setupGcc } from "../gcc/gcc.js"
import { setupMacOSSDK } from "../macos-sdk/macos-sdk.js"
import { rcOptions } from "../options.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { ubuntuVersion } from "../utils/env/ubuntu_version.js"
import type { InstallationInfo } from "../utils/setup/setupBin.js"
import { quoteIfHasSpace } from "../utils/std/index.js"
@ -108,7 +107,7 @@ export async function activateLLVM(directory: string, version: string) {
setupMacOSSDK(),
]
if (isUbuntu()) {
if (hasAptGet()) {
const priority = 60
actPromises.push(
addUpdateAlternativesToRc("cc", `${directory}/bin/clang`, rcOptions, priority),

View File

@ -6,10 +6,9 @@ import { execRoot, execRootSync } from "admina"
import { addPath } from "envosman"
import { chmod, readFile, writeFile } from "fs/promises"
import { DownloaderHelper } from "node-downloader-helper"
import { aptTimeout, hasNala, installAddAptRepo, installAptPack, isAptPackRegexInstalled } from "setup-apt"
import { aptTimeout, hasAptGet, hasNala, installAddAptRepo, installAptPack, isAptPackRegexInstalled } from "setup-apt"
import { DEFAULT_TIMEOUT } from "../installTool.js"
import { rcOptions } from "../options.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import type { InstallationInfo } from "../utils/setup/setupBin.js"
import { majorLLVMVersion } from "./utils.js"
const dirname = typeof __dirname === "string" ? __dirname : path.dirname(fileURLToPath(import.meta.url))
@ -33,7 +32,7 @@ export async function trySetupLLVMApt(
version: string,
packages: LLVMPackages = LLVMPackages.All,
): Promise<InstallationInfo | undefined> {
if (!isUbuntu()) {
if (!hasAptGet()) {
return undefined
}

View File

@ -4,11 +4,10 @@ import { execRootSync } from "admina"
import { info } from "ci-log"
import memoize from "memoizee"
import { DownloaderHelper } from "node-downloader-helper"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { getDebArch } from "../utils/env/arch.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { setupBin } from "../utils/setup/setupBin.js"
import { setupDnfPack } from "../utils/setup/setupDnfPack.js"
import { setupPacmanPack } from "../utils/setup/setupPacmanPack.js"
@ -22,7 +21,7 @@ export async function setupLLVMBin(version: string, setupDir: string, arch: stri
}
async function llvmBinaryDeps_(_majorVersion: number, arch: string) {
if (isUbuntu()) {
if (hasAptGet()) {
for (const dep of ["libtinfo5", "libtinfo6"]) {
/* eslint-disable no-await-in-loop */
try {

View File

@ -2,10 +2,10 @@ import path, { join } from "path"
import { fileURLToPath } from "url"
import { info } from "ci-log"
import { addExeExt } from "patha"
import { hasAptGet } from "setup-apt"
import { loadAssetList, matchAsset } from "../utils/asset/load-assets.js"
import { arm64, armv7, powerpc64le, sparc64, sparcv9, x86, x86_64 } from "../utils/env/arch.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { ubuntuVersion } from "../utils/env/ubuntu_version.js"
import { extractTarByExe, getArchiveType, getExtractFunction } from "../utils/setup/extract.js"
import type { PackageInfo } from "../utils/setup/setupBin.js"
@ -105,7 +105,7 @@ async function getAssetKeywords(platform: string, arch: string) {
case "linux": {
const osKeywordsChoice = ["linux", "Linux"]
if (isUbuntu()) {
if (hasAptGet()) {
optionalKeywords.push("ubuntu")
const ubuntuVer = await ubuntuVersion()

View File

@ -1,12 +1,11 @@
import { join } from "path"
import { addPath } from "envosman"
import { hasApk, installApkPack } from "setup-alpine"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { getBrewDir, installBrewPack } from "setup-brew"
import { rcOptions } from "../options.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { setupChocoPack } from "../utils/setup/setupChocoPack.js"
import { setupDnfPack } from "../utils/setup/setupDnfPack.js"
import { setupPacmanPack } from "../utils/setup/setupPacmanPack.js"
@ -29,7 +28,7 @@ export async function setupMake(version: string, _setupDir: string, _arch: strin
return setupPacmanPack("make", version)
} else if (hasDnf()) {
return setupDnfPack([{ name: "make", version }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
return installAptPack([{ name: "make", version }])
} else if (await hasApk()) {
return installApkPack([{ name: "make", version }])

View File

@ -3,12 +3,11 @@ import { error } from "ci-log"
import { addPath } from "envosman"
import { addExeExt } from "patha"
import { hasApk, installApkPack } from "setup-alpine"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { installBrewPack } from "setup-brew"
import { rcOptions } from "../options.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { ubuntuVersion } from "../utils/env/ubuntu_version.js"
import { type PackageInfo, setupBin } from "../utils/setup/setupBin.js"
import { setupChocoPack } from "../utils/setup/setupChocoPack.js"
@ -96,7 +95,7 @@ export async function setupPowershellSystem(version: string | undefined, _setupD
"curl https://packages.microsoft.com/config/rhel/8/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo",
])
return setupDnfPack([{ name: "powershell", version }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
await installAptPack([{ name: "curl" }])
const ubuntuVerSplitted = (await ubuntuVersion())!
const ubuntuVersionString = `${ubuntuVerSplitted[0]}.0${ubuntuVerSplitted[1]}`

View File

@ -11,13 +11,12 @@ import { readdir } from "fs/promises"
import { pathExists } from "path-exists"
import { addExeExt } from "patha"
import { hasApk, installApkPack } from "setup-alpine"
import { installAptPack, isAptPackInstalled } from "setup-apt"
import { hasAptGet, installAptPack, isAptPackInstalled } from "setup-apt"
import { installBrewPack } from "setup-brew"
import which from "which"
import { rcOptions } from "../options.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import type { InstallationInfo } from "../utils/setup/setupBin.js"
import { setupChocoPack } from "../utils/setup/setupChocoPack.js"
import { setupDnfPack } from "../utils/setup/setupDnfPack.js"
@ -123,7 +122,7 @@ async function hasVenv(foundPython: string): Promise<boolean> {
await execa(foundPython, ["-m", "venv", "-h"], { stdio: "ignore" })
// checking venv module is not enough on Ubuntu 20.04
if (isUbuntu()) {
if (hasAptGet()) {
return isAptPackInstalled("python3-venv")
}
@ -231,7 +230,7 @@ async function setupPythonSystem(setupDir: string, version: string) {
installInfo = await setupPacmanPack("python", version)
} else if (hasDnf()) {
installInfo = await setupDnfPack([{ name: "python3", version }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
installInfo = await installAptPack([{ name: "python3", version }, { name: "python-is-python3" }])
} else if (await hasApk()) {
installInfo = await installApkPack([{ name: "python3", version }])

View File

@ -1,5 +1,5 @@
import { hasAptGet } from "setup-apt"
import { getUbuntuVersion } from "ubuntu-version"
import { isUbuntu } from "../../utils/env/isUbuntu.js"
import type { InstallationInfo } from "../../utils/setup/setupBin.js"
import { testBin } from "../../utils/tests/test-helpers.js"
import { setupSccache } from "../sccache.js"
@ -7,7 +7,7 @@ import { setupSccache } from "../sccache.js"
jest.setTimeout(300000)
describe("setup-sccache", () => {
it("should setup sccache", async () => {
const ubuntuVersion = isUbuntu() ? await getUbuntuVersion() : undefined
const ubuntuVersion = hasAptGet() ? await getUbuntuVersion() : undefined
const ubuntuVersionMajor = ubuntuVersion?.[0] ?? 0
if (process.platform === "linux" && process.arch === "arm64" && ubuntuVersionMajor < 24) {
return

View File

@ -1,8 +1,7 @@
import { hasApk, installApkPack } from "setup-alpine"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { installBrewPack } from "setup-brew"
import { getUbuntuVersion } from "ubuntu-version"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { setupChocoPack } from "../utils/setup/setupChocoPack.js"
// eslint-disable-next-line @typescript-eslint/no-unused-vars
@ -12,7 +11,7 @@ export async function setupSccache(version: string, _setupDir: string, _arch: st
return setupChocoPack("sccache", version)
}
case "linux": {
if (isUbuntu()) {
if (hasAptGet()) {
const ubuntuVersion = await getUbuntuVersion()
if (ubuntuVersion[0] >= 24) {
return installAptPack([{ name: "sccache", version }])

View File

@ -126,7 +126,7 @@ All the available tools:
"build system": {
tools: "--cmake, --ninja, --meson, --make, --task, --bazel",
},
"package manager": { tools: "--vcpkg, --conan, --choco, --brew, --nala, --git, --setup-cpp" },
"package manager": { tools: "--vcpkg, --conan, --choco, --brew, --apt-fast, --nala, --git, --setup-cpp" },
"analyzer/linter": {
tools:
"--clang-tidy, --clang-format, --cppcheck, --cpplint, --flawfinder, --lizard, --infer, , --cmakelang, --cmake-lint, --cmake-format",

View File

@ -1,9 +1,8 @@
import { hasApk, installApkPack } from "setup-alpine"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { installBrewPack } from "setup-brew"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import { setupChocoPack } from "../utils/setup/setupChocoPack.js"
import { setupDnfPack } from "../utils/setup/setupDnfPack.js"
import { setupPacmanPack } from "../utils/setup/setupPacmanPack.js"
@ -25,7 +24,7 @@ export async function setupSevenZip(version: string, _setupDir: string, _arch: s
{ name: "p7zip", version },
{ name: "p7zip-plugins", version },
])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
return installAptPack([{ name: "p7zip-full", version }])
} else if (await hasApk()) {
return installApkPack([{ name: "p7zip", version }])

View File

@ -1,3 +1,4 @@
import { setupAptFast, setupNala } from "setup-apt"
import { setupBrew } from "setup-brew"
import { setupBazel } from "./bazel/bazel.js"
import { setupCcache } from "./ccache/ccache.js"
@ -22,7 +23,6 @@ import { setupClangFormat, setupClangTools, setupLLVM } from "./llvm/llvm.js"
import { setupMake } from "./make/make.js"
import { setupMeson } from "./meson/meson.js"
import { setupMSVC } from "./msvc/msvc.js"
import { setupNala } from "./nala/nala.js"
import { setupNinja } from "./ninja/ninja.js"
import { setupOpencppcoverage } from "./opencppcoverage/opencppcoverage.js"
import { setupPowershell } from "./powershell/powershell.js"
@ -61,8 +61,10 @@ export const llvmTools = ["llvm", "clang", "clang++", "clang-tidy", "clang-forma
/** The setup functions */
export const setups = {
git: setupGit,
"apt-fast": setupAptFast,
aptfast: setupAptFast,
nala: setupNala,
git: setupGit,
brew: setupBrew,
choco: setupChocolatey,
python: setupPython,

View File

@ -1,15 +0,0 @@
import which from "which"
let isUbuntuCache: undefined | boolean = undefined
export function isUbuntu(): boolean {
if (process.platform !== "linux") {
return false
}
if (isUbuntuCache === undefined) {
const apt = "apt-get"
isUbuntuCache = which.sync(apt, { nothrow: true }) !== null
}
return isUbuntuCache
}

View File

@ -1,14 +1,13 @@
import os from "os"
import { warning } from "ci-log"
import memoize from "memoizee"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { getUbuntuVersion } from "ubuntu-version"
import which from "which"
import { isUbuntu } from "./isUbuntu.js"
async function ubuntuVersion_(): Promise<number[] | null> {
try {
if (isUbuntu()) {
if (hasAptGet()) {
try {
if (which.sync("lsb_release", { nothrow: true }) === null) {
await installAptPack([{ name: "lsb-release" }])

View File

@ -5,12 +5,11 @@ import { execa } from "execa"
import { mkdirp, move } from "fs-extra"
import { rm } from "fs/promises"
import { hasApk, installApkPack } from "setup-alpine"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import which from "which"
import { setupSevenZip } from "../../sevenzip/sevenzip.js"
import { hasDnf } from "../env/hasDnf.js"
import { isArch } from "../env/isArch.js"
import { isUbuntu } from "../env/isUbuntu.js"
import { setupDnfPack } from "./setupDnfPack.js"
import { setupPacmanPack } from "./setupPacmanPack.js"
export { extractTar, extractXar } from "@actions/tool-cache"
@ -171,7 +170,7 @@ async function installTarDependencies(archiveType: ArchiveType) {
await setupPacmanPack("tar")
} else if (hasDnf()) {
await setupDnfPack([{ name: "gzip" }, { name: "tar" }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
await installAptPack([{ name: "gzip" }, { name: "tar" }])
} else if (await hasApk()) {
await installApkPack([{ name: "gzip" }, { name: "tar" }])
@ -186,7 +185,7 @@ async function installTarDependencies(archiveType: ArchiveType) {
await setupPacmanPack("tar")
} else if (hasDnf()) {
await setupDnfPack([{ name: "xz" }, { name: "tar" }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
await installAptPack([{ name: "xz-utils" }, { name: "tar" }])
} else if (await hasApk()) {
await installApkPack([{ name: "xz" }, { name: "tar" }])

View File

@ -9,7 +9,7 @@ import { mkdirp } from "mkdirp"
import { pathExists } from "path-exists"
import { addExeExt } from "patha"
import { hasApk, installApkPack } from "setup-alpine"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import { installBrewPack } from "setup-brew"
import { untildifyUser } from "untildify-user"
import which from "which"
@ -18,7 +18,6 @@ import { setupPython } from "../../python/python.js"
import { getVersion } from "../../versions/versions.js"
import { hasDnf } from "../env/hasDnf.js"
import { isArch } from "../env/isArch.js"
import { isUbuntu } from "../env/isUbuntu.js"
import { ubuntuVersion } from "../env/ubuntu_version.js"
import { unique } from "../std/index.js"
import type { InstallationInfo } from "./setupBin.js"
@ -292,7 +291,7 @@ export async function setupPipPackSystem(name: string, givenAddPythonPrefix?: bo
return setupPacmanPack(addPythonPrefix ? `python-${name}` : name)
} else if (hasDnf()) {
return setupDnfPack([{ name: addPythonPrefix ? `python3-${name}` : name }])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
return installAptPack([{ name: addPythonPrefix ? `python3-${name}` : name }])
} else if (await hasApk()) {
return installApkPack([{ name: addPythonPrefix ? `py3-${name}` : name }])

View File

@ -6,14 +6,13 @@ import { execa } from "execa"
import { pathExists } from "path-exists"
import { addShExt, addShRelativePrefix } from "patha"
import { hasApk, installApkPack } from "setup-alpine"
import { installAptPack } from "setup-apt"
import { hasAptGet, installAptPack } from "setup-apt"
import which from "which"
import { setupGit } from "../git/git.js"
import { rcOptions } from "../options.js"
import { arm64 } from "../utils/env/arch.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
import type { InstallationInfo } from "../utils/setup/setupBin.js"
import { setupDnfPack } from "../utils/setup/setupDnfPack.js"
import { setupPacmanPack } from "../utils/setup/setupPacmanPack.js"
@ -47,7 +46,7 @@ export async function setupVcpkg(version: string, setupDir: string, arch: string
{ name: "tar" },
{ name: "pkg-config" },
])
} else if (isUbuntu()) {
} else if (hasAptGet()) {
await installAptPack([
{ name: "curl" },
{ name: "zip" },

View File

@ -3,12 +3,12 @@ import path from "path"
import { fileURLToPath } from "url"
import memoize from "memoizee"
import { isAlpine } from "setup-alpine"
import { hasAptGet } from "setup-apt"
import type { CompilerInfo } from "../compilers.js"
import type { Opts } from "../options.js"
import type { Inputs, ToolName } from "../tool.js"
import { hasDnf } from "../utils/env/hasDnf.js"
import { isArch } from "../utils/env/isArch.js"
import { isUbuntu } from "../utils/env/isUbuntu.js"
export function getVersion(name: ToolName, version: string | undefined, distroVersion: number[] | null = null) {
if (isVersionDefault(version)) {
@ -67,7 +67,7 @@ export function getVersionDefault(
const distroMap = distroMapOrVersion
// check for distro-specific versions
const distro = isUbuntu()
const distro = hasAptGet()
? "ubuntu"
: isArch()
? "archlinux"

View File

@ -11,10 +11,13 @@
"cache": false
},
"lint.tsc": {
"dependsOn": ["build", "^lint.tsc"]
"dependsOn": ["build", "^lint.tsc", "lint.tsc.test"]
},
"lint.tsc.test": {
"dependsOn": ["^lint.tsc.test"]
},
"lint.eslint": {
"dependsOn": ["build", "^lint.eslint"]
"dependsOn": ["^lint.eslint"]
},
"lint": {
"dependsOn": ["lint.tsc", "lint.eslint"]

View File

@ -48,7 +48,7 @@ const viteConfig = defineConfig((configEnv) => {
: "es",
},
},
emptyOutDir: false,
emptyOutDir: true,
},
resolve: {
alias: aliasOpts,