mirror of https://github.com/aminya/setup-cpp
Merge pull request #114 from aminya/monorepo [skip ci]
This commit is contained in:
commit
547d9b47ce
|
@ -11,11 +11,9 @@ temp-*
|
||||||
*.tsbuildinfo
|
*.tsbuildinfo
|
||||||
|
|
||||||
# Build directories
|
# Build directories
|
||||||
./dist/
|
packages/*/dist/
|
||||||
!./dist/setup_cpp.js
|
|
||||||
!./dist/setup_cpp.js.map
|
|
||||||
.parcel-cache
|
.parcel-cache
|
||||||
exe/
|
exe/
|
||||||
*.log
|
*.log
|
||||||
*.exe
|
*.exe
|
||||||
.cache/
|
.cache/
|
||||||
|
|
|
@ -14,13 +14,12 @@ words:
|
||||||
- applellvm
|
- applellvm
|
||||||
- bazel
|
- bazel
|
||||||
- bazelisk
|
- bazelisk
|
||||||
- copr
|
|
||||||
- vbatts
|
|
||||||
- buildtools
|
- buildtools
|
||||||
- caxa
|
- caxa
|
||||||
- ccache
|
- ccache
|
||||||
- choco
|
- choco
|
||||||
- cmake
|
- cmake
|
||||||
|
- copr
|
||||||
- CPATH
|
- CPATH
|
||||||
- Cppcheck
|
- Cppcheck
|
||||||
- CPPFLAGS
|
- CPPFLAGS
|
||||||
|
@ -38,6 +37,7 @@ words:
|
||||||
- ghes
|
- ghes
|
||||||
- Graphviz
|
- Graphviz
|
||||||
- isci
|
- isci
|
||||||
|
- isroot
|
||||||
- kcov
|
- kcov
|
||||||
- LDFLAGS
|
- LDFLAGS
|
||||||
- lefticus
|
- lefticus
|
||||||
|
@ -68,6 +68,7 @@ words:
|
||||||
- tsbuildinfo
|
- tsbuildinfo
|
||||||
- ucrt
|
- ucrt
|
||||||
- untildify
|
- untildify
|
||||||
|
- vbatts
|
||||||
- vcpkg
|
- vcpkg
|
||||||
- vcvarsall
|
- vcvarsall
|
||||||
- visualc
|
- visualc
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
<h1 align="center"><%= projectName %></h1>
|
||||||
|
<p>
|
||||||
|
<% if (isProjectOnNpm) { -%>
|
||||||
|
<a href="https://www.npmjs.com/package/<%= projectName %>" target="_blank">
|
||||||
|
<img alt="Version" src="https://img.shields.io/npm/v/<%= projectName %>.svg">
|
||||||
|
</a>
|
||||||
|
<% } -%>
|
||||||
|
<% if (projectVersion && !isProjectOnNpm) { -%>
|
||||||
|
<img alt="Version" src="https://img.shields.io/badge/version-<%= projectVersion %>-blue.svg?cacheSeconds=2592000" />
|
||||||
|
<% } -%>
|
||||||
|
<% if (projectPrerequisites) { -%>
|
||||||
|
<% projectPrerequisites.map(({ name, value }) => { -%>
|
||||||
|
<img src="https://img.shields.io/badge/<%= name %>-<%= encodeURIComponent(value) %>-blue.svg" />
|
||||||
|
<% }) -%>
|
||||||
|
<% } -%>
|
||||||
|
<% if (projectDocumentationUrl) { -%>
|
||||||
|
<a href="<%= projectDocumentationUrl %>" target="_blank">
|
||||||
|
<img alt="Documentation" src="https://img.shields.io/badge/documentation-yes-brightgreen.svg" />
|
||||||
|
</a>
|
||||||
|
<% } -%>
|
||||||
|
<% if (isGithubRepos) { -%>
|
||||||
|
<a href="<%= repositoryUrl %>/graphs/commit-activity" target="_blank">
|
||||||
|
<img alt="Maintenance" src="https://img.shields.io/badge/Maintained%3F-yes-green.svg" />
|
||||||
|
</a>
|
||||||
|
<% } -%>
|
||||||
|
<% if (licenseName) { -%>
|
||||||
|
<a href="<%= licenseUrl ? licenseUrl : '#' %>" target="_blank">
|
||||||
|
<img alt="License: <%= licenseName %>" src="https://img.shields.io/<%= isGithubRepos ? `github/license/${authorGithubUsername}/${projectName}` : `badge/License-${licenseName}-yellow.svg` %>" />
|
||||||
|
</a>
|
||||||
|
<% } -%>
|
||||||
|
<% if (authorTwitterUsername) { -%>
|
||||||
|
<a href="https://twitter.com/<%= authorTwitterUsername %>" target="_blank">
|
||||||
|
<img alt="Twitter: <%= authorTwitterUsername %>" src="https://img.shields.io/twitter/follow/<%= authorTwitterUsername %>.svg?style=social" />
|
||||||
|
</a>
|
||||||
|
<% } -%>
|
||||||
|
</p>
|
||||||
|
<% if (projectDescription) { -%>
|
||||||
|
|
||||||
|
> <%= projectDescription %>
|
||||||
|
> <% } -%>
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save <%= projectName %>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS START -->
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS END -->
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
You can sponsor my work here:
|
||||||
|
|
||||||
|
https://github.com/sponsors/aminya
|
||||||
|
|
||||||
|
Pull requests, issues and feature requests are welcome.
|
||||||
|
See the [Contributing guide](https://github.com/aminya/setup-cpp/blob/master/CONTRIBUTING.md).
|
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
19
package.json
19
package.json
|
@ -27,6 +27,7 @@
|
||||||
"clean": "shx rm -rf .parcel-cache dist exe",
|
"clean": "shx rm -rf .parcel-cache dist exe",
|
||||||
"copy.matchers": "shx cp ./src/gcc/gcc_matcher.json ./dist/ && shx cp ./src/msvc/msvc_matcher.json ./dist && shx cp ./src/python/python_matcher.json ./dist/ && shx cp ./src/llvm/llvm_matcher.json ./dist/ ",
|
"copy.matchers": "shx cp ./src/gcc/gcc_matcher.json ./dist/ && shx cp ./src/msvc/msvc_matcher.json ./dist && shx cp ./src/python/python_matcher.json ./dist/ && shx cp ./src/llvm/llvm_matcher.json ./dist/ ",
|
||||||
"dev": "cross-env NODE_ENV=development parcel watch",
|
"dev": "cross-env NODE_ENV=development parcel watch",
|
||||||
|
"docs": "shx rm -rf packages/*/README.md && pnpm -r exec readme --path ../../dev/readme/template.md -y && pnpm -r exec ts-readme",
|
||||||
"format": "run-s lint.prettier",
|
"format": "run-s lint.prettier",
|
||||||
"lint": "run-p --aggregate-output --continue-on-error lint.cspell lint.eslint lint.prettier lint.tsc",
|
"lint": "run-p --aggregate-output --continue-on-error lint.cspell lint.eslint lint.prettier lint.tsc",
|
||||||
"lint.cspell": "cspell lint --no-progress --show-suggestions",
|
"lint.cspell": "cspell lint --no-progress --show-suggestions",
|
||||||
|
@ -34,7 +35,7 @@
|
||||||
"lint.prettier": "prettier --write .",
|
"lint.prettier": "prettier --write .",
|
||||||
"lint.tsc": "tsc --noEmit | loose-ts-check",
|
"lint.tsc": "tsc --noEmit | loose-ts-check",
|
||||||
"pack.exe": "shx rm -rf ./dist/tsconfig.tsbuildinfo && node ./dev/scripts/pack-exe.js",
|
"pack.exe": "shx rm -rf ./dist/tsconfig.tsbuildinfo && node ./dev/scripts/pack-exe.js",
|
||||||
"prepare": "npm run build",
|
"prepare": "pnpm run -r build && pnpm run -w build",
|
||||||
"start.docker": "docker run -t setup_cpp .",
|
"start.docker": "docker run -t setup_cpp .",
|
||||||
"start.docker.arch": "docker run -t setup_cpp:arch .",
|
"start.docker.arch": "docker run -t setup_cpp:arch .",
|
||||||
"start.docker.fedora": "docker run -t setup_cpp:fedora .",
|
"start.docker.fedora": "docker run -t setup_cpp:fedora .",
|
||||||
|
@ -54,16 +55,22 @@
|
||||||
"@actions/exec": "^1.1.1",
|
"@actions/exec": "^1.1.1",
|
||||||
"@actions/io": "^1.1.2",
|
"@actions/io": "^1.1.2",
|
||||||
"@actions/tool-cache": "^2.0.1",
|
"@actions/tool-cache": "^2.0.1",
|
||||||
"escape-path-with-spaces": "^1.0.0",
|
"@npmcli/ci-detect": "github:aminya/ci-detect#37fe40075bebec96794ba0a7c4a6d5c70cbea00d",
|
||||||
|
"escape-path-with-spaces": "github:aminya/escape-path-with-spaces#d9f81ee649203ddc55783a2f96ada59df06118e3",
|
||||||
|
"exec-powershell": "workspace:*",
|
||||||
"execa": "^5.1.1",
|
"execa": "^5.1.1",
|
||||||
|
"extension-tools": "workspace:*",
|
||||||
|
"get-works": "workspace:*",
|
||||||
"mri": "^1.2.0",
|
"mri": "^1.2.0",
|
||||||
"msvc-dev-cmd": "github:aminya/msvc-dev-cmd#9f672c1",
|
"msvc-dev-cmd": "github:aminya/msvc-dev-cmd#9f672c1",
|
||||||
"numerous": "1.0.3",
|
"numerous": "1.0.3",
|
||||||
|
"root-tools": "workspace:*",
|
||||||
"semver": "7.3.7",
|
"semver": "7.3.7",
|
||||||
"setup-python": "github:actions/setup-python#c474c82340438924daab9282d07300bfe7e3692d",
|
"setup-python": "github:actions/setup-python#c474c82340438924daab9282d07300bfe7e3692d",
|
||||||
"time-delta": "github:aminya/time-delta#69d91a41cef28e569be9a2991129f5f7d1f0d00e",
|
"time-delta": "github:aminya/time-delta#69d91a41cef28e569be9a2991129f5f7d1f0d00e",
|
||||||
"ubuntu-version": "^2.0.0",
|
"ubuntu-version": "^2.0.0",
|
||||||
"untildify": "^4.0.0",
|
"untildify-user": "workspace:*",
|
||||||
|
"user-access": "workspace:*",
|
||||||
"which": "^2.0.2"
|
"which": "^2.0.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -79,6 +86,7 @@
|
||||||
"cspell": "^6.5.0",
|
"cspell": "^6.5.0",
|
||||||
"eslint": "^8.21.0",
|
"eslint": "^8.21.0",
|
||||||
"eslint-config-atomic": "^1.18.1",
|
"eslint-config-atomic": "^1.18.1",
|
||||||
|
"gen-readme": "^1.6.0",
|
||||||
"jest": "^28.1.3",
|
"jest": "^28.1.3",
|
||||||
"loose-ts-check": "^1.2.0",
|
"loose-ts-check": "^1.2.0",
|
||||||
"npm-check-updates": "^16.0.5",
|
"npm-check-updates": "^16.0.5",
|
||||||
|
@ -86,9 +94,11 @@
|
||||||
"parcel": "2.6.2",
|
"parcel": "2.6.2",
|
||||||
"prettier": "2.7.1",
|
"prettier": "2.7.1",
|
||||||
"prettier-config-atomic": "^3.0.10",
|
"prettier-config-atomic": "^3.0.10",
|
||||||
|
"readme-md-generator": "^1.0.0",
|
||||||
"shx": "0.3.4",
|
"shx": "0.3.4",
|
||||||
"terser-config-atomic": "^0.1.1",
|
"terser-config-atomic": "^0.1.1",
|
||||||
"ts-jest": "^28.0.7",
|
"ts-jest": "^28.0.7",
|
||||||
|
"ts-readme": "^1.1.3",
|
||||||
"typescript": "^4.7.4"
|
"typescript": "^4.7.4"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
@ -113,6 +123,9 @@
|
||||||
"ninja",
|
"ninja",
|
||||||
"meson"
|
"meson"
|
||||||
],
|
],
|
||||||
|
"alias": {
|
||||||
|
"electron": false
|
||||||
|
},
|
||||||
"pnpm": {
|
"pnpm": {
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"semver": "7.3.7",
|
"semver": "7.3.7",
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
<h1 align="center">exec-powershell</h1>
|
||||||
|
<p>
|
||||||
|
<img alt="Version" src="https://img.shields.io/badge/version-1.0.0-blue.svg?cacheSeconds=2592000" />
|
||||||
|
<a href="#" target="_blank">
|
||||||
|
<img alt="License: Apache--2.0" src="https://img.shields.io/badge/License-Apache--2.0-yellow.svg" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
> Run a powershell command.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save exec-powershell
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS START -->
|
||||||
|
|
||||||
|
### `execPowershell` (function)
|
||||||
|
|
||||||
|
Asynchronously execute a powershell command.
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
|
||||||
|
- command (`string`) - The powershell command to execute
|
||||||
|
- startupFlags (`string[]`) - The optional startup flags to be passed to powershell. Defaults to `["-NoProfile", "-NoLogo", "-NonInteractive"]`. This means that the Powershell profile is not sourced first.
|
||||||
|
- execOptions (`execa.Options`) - The options passed to `execa`. Defaults to `{ stdio: "inherit" }`
|
||||||
|
|
||||||
|
**returns:** execa.ExecaChildProcess<string>
|
||||||
|
|
||||||
|
### `execPowershellSync` (function)
|
||||||
|
|
||||||
|
Execute a powershell command.
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
|
||||||
|
- command (`string`) - The powershell command to execute
|
||||||
|
- startupFlags (`string[]`) - The optional startup flags to be passed to powershell. Defaults to `["-NoProfile", "-NoLogo", "-NonInteractive"]`. This means that the Powershell profile is not sourced first.
|
||||||
|
- execOptions (`execa.SyncOptions`) - The options passed to `execa`. Defaults to `{ stdio: "inherit" }`
|
||||||
|
|
||||||
|
**returns:** execa.ExecaSyncReturnValue<string>
|
||||||
|
|
||||||
|
### `getPowerShell` (function)
|
||||||
|
|
||||||
|
Get the path to the powershell executable.
|
||||||
|
|
||||||
|
**returns:** string
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS END -->
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
You can sponsor my work here:
|
||||||
|
|
||||||
|
https://github.com/sponsors/aminya
|
||||||
|
|
||||||
|
Pull requests, issues and feature requests are welcome.
|
||||||
|
See the [Contributing guide](https://github.com/aminya/setup-cpp/blob/master/CONTRIBUTING.md).
|
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
"name": "exec-powershell",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Run a powershell command.",
|
||||||
|
"homepage": "https://github.com/aminya/setup-cpp",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"author": "Amin Yahyaabadi",
|
||||||
|
"main": "./dist/index.js",
|
||||||
|
"source": "./src/index.ts",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"execa": "^5.1.1",
|
||||||
|
"which": "^2.0.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/which": "^2.0.1"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"powershell",
|
||||||
|
"pwsh",
|
||||||
|
"exec",
|
||||||
|
"execa",
|
||||||
|
"spawn",
|
||||||
|
"system",
|
||||||
|
"github-actions",
|
||||||
|
"github",
|
||||||
|
"actions",
|
||||||
|
"gitlab",
|
||||||
|
"ci"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
import execa from "execa"
|
||||||
|
import which from "which"
|
||||||
|
|
||||||
|
/** The cached powershell path */
|
||||||
|
let powershell: string | undefined
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asynchronously execute a powershell command.
|
||||||
|
*
|
||||||
|
* @param command The powershell command to execute
|
||||||
|
* @param startupFlags The optional startup flags to be passed to powershell. Defaults to `["-NoProfile", "-NoLogo",
|
||||||
|
* "-NonInteractive"]`. This means that the Powershell profile is not sourced first.
|
||||||
|
* @param execOptions The options passed to `execa`. Defaults to `{ stdio: "inherit" }`
|
||||||
|
* @returns A promise to the execution result
|
||||||
|
* @note It prefers `pwsh` over `powershell`
|
||||||
|
*/
|
||||||
|
export function execPowershell(
|
||||||
|
command: string,
|
||||||
|
startupFlags: string[] = ["-NoProfile", "-NoLogo", "-NonInteractive"],
|
||||||
|
execOptions: execa.Options = { stdio: "inherit" }
|
||||||
|
): execa.ExecaChildProcess<string> {
|
||||||
|
return execa(getPowerShell(), [...startupFlags, "-c", command], execOptions)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a powershell command.
|
||||||
|
*
|
||||||
|
* @param command The powershell command to execute
|
||||||
|
* @param startupFlags The optional startup flags to be passed to powershell. Defaults to `["-NoProfile", "-NoLogo",
|
||||||
|
* "-NonInteractive"]`. This means that the Powershell profile is not sourced first.
|
||||||
|
* @param execOptions The options passed to `execa`. Defaults to `{ stdio: "inherit" }`
|
||||||
|
* @returns The execution result
|
||||||
|
* @note It prefers `pwsh` over `powershell`
|
||||||
|
*/
|
||||||
|
export function execPowershellSync(
|
||||||
|
command: string,
|
||||||
|
startupFlags: string[] = ["-NoProfile", "-NoLogo", "-NonInteractive"],
|
||||||
|
execOptions: execa.SyncOptions = { stdio: "inherit" }
|
||||||
|
): execa.ExecaSyncReturnValue<string> {
|
||||||
|
return execa.sync(getPowerShell(), [...startupFlags, "-c", command], execOptions)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the path to the powershell executable.
|
||||||
|
*
|
||||||
|
* @note It prefers `pwsh` over `powershell`
|
||||||
|
* @note It caches the path for the subsequent calls to this function
|
||||||
|
*/
|
||||||
|
export function getPowerShell() {
|
||||||
|
if (powershell === undefined) {
|
||||||
|
const maybePwsh = which.sync("pwsh", { nothrow: true })
|
||||||
|
if (maybePwsh !== null) {
|
||||||
|
powershell = maybePwsh
|
||||||
|
}
|
||||||
|
const maybePowerShell = which.sync("powershell", { nothrow: true })
|
||||||
|
if (maybePowerShell !== null) {
|
||||||
|
powershell = maybePowerShell
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (powershell === undefined) {
|
||||||
|
throw new Error("Could not find powershell")
|
||||||
|
}
|
||||||
|
return powershell
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "./dist"
|
||||||
|
},
|
||||||
|
"include": ["./src"]
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
<h1 align="center">extension-tools</h1>
|
||||||
|
<p>
|
||||||
|
<a href="https://www.npmjs.com/package/extension-tools" target="_blank">
|
||||||
|
<img alt="Version" src="https://img.shields.io/npm/v/extension-tools.svg">
|
||||||
|
</a>
|
||||||
|
<a href="#" target="_blank">
|
||||||
|
<img alt="License: Apache--2.0" src="https://img.shields.io/badge/License-Apache--2.0-yellow.svg" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
> Tools for working with file extensions such as getting the binary and shell extension on different platforms.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save extension-tools
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS START -->
|
||||||
|
|
||||||
|
### `addBinExtension` (function)
|
||||||
|
|
||||||
|
Add bin extension to the given binary name.
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
|
||||||
|
- name (`string`) - The name you want to add the shell extension to
|
||||||
|
- win_ext (`string`) - `.exe` on Windows
|
||||||
|
- unix_ext (`string`) - `""` On unix.
|
||||||
|
|
||||||
|
**returns:** string
|
||||||
|
|
||||||
|
### `addShellExtension` (function)
|
||||||
|
|
||||||
|
Add native shell extension to the given name
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
|
||||||
|
- name (`string`) - The name you want to add the shell extension to
|
||||||
|
- win_ext (`string`) - `.bat` on Windows
|
||||||
|
- unix_ext (`string`) - `.sh` On unix.
|
||||||
|
|
||||||
|
**returns:** string
|
||||||
|
|
||||||
|
### `addShellHere` (function)
|
||||||
|
|
||||||
|
Prefix a `./` for unix shell and nothing for the cmd shell
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
|
||||||
|
- name (`string`)
|
||||||
|
|
||||||
|
**returns:** string
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS END -->
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
You can sponsor my work here:
|
||||||
|
|
||||||
|
https://github.com/sponsors/aminya
|
||||||
|
|
||||||
|
Pull requests, issues and feature requests are welcome.
|
||||||
|
See the [Contributing guide](https://github.com/aminya/setup-cpp/blob/master/CONTRIBUTING.md).
|
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
"name": "extension-tools",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Tools for working with file extensions such as getting the binary and shell extension on different platforms.",
|
||||||
|
"homepage": "https://github.com/aminya/setup-cpp",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"author": "Amin Yahyaabadi",
|
||||||
|
"main": "./dist/index.js",
|
||||||
|
"source": "./src/index.ts",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"extension",
|
||||||
|
"shell",
|
||||||
|
"bin",
|
||||||
|
"windows",
|
||||||
|
"sh",
|
||||||
|
"cmd",
|
||||||
|
"bat",
|
||||||
|
"exec",
|
||||||
|
"execa",
|
||||||
|
"spawn",
|
||||||
|
"system",
|
||||||
|
"unix",
|
||||||
|
"linux",
|
||||||
|
"github-actions",
|
||||||
|
"github",
|
||||||
|
"actions",
|
||||||
|
"gitlab",
|
||||||
|
"ci"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
/**
|
||||||
|
* Add bin extension to the given binary name.
|
||||||
|
*
|
||||||
|
* @param name The name you want to add the shell extension to
|
||||||
|
* @param win_ext `.exe` on Windows
|
||||||
|
* @param unix_ext `""` On unix.
|
||||||
|
*/
|
||||||
|
export function addBinExtension(name: string, win_ext = ".exe", unix_ext = "") {
|
||||||
|
if (process.platform === "win32") {
|
||||||
|
return `${name}${win_ext}`
|
||||||
|
}
|
||||||
|
return `${name}${unix_ext}`
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add native shell extension to the given name
|
||||||
|
*
|
||||||
|
* @param name The name you want to add the shell extension to
|
||||||
|
* @param win_ext `.bat` on Windows
|
||||||
|
* @param unix_ext `.sh` On unix.
|
||||||
|
*/
|
||||||
|
export function addShellExtension(name: string, win_ext = ".bat", unix_ext = ".sh") {
|
||||||
|
if (process.platform === "win32") {
|
||||||
|
return `${name}${win_ext}`
|
||||||
|
}
|
||||||
|
return `${name}${unix_ext}`
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Prefix a `./` for unix shell and nothing for the cmd shell */
|
||||||
|
export function addShellHere(name: string) {
|
||||||
|
if (process.platform === "win32") {
|
||||||
|
return name
|
||||||
|
}
|
||||||
|
return `./${name}`
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "./dist"
|
||||||
|
},
|
||||||
|
"include": ["./src"]
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
<h1 align="center">get-works</h1>
|
||||||
|
<p>
|
||||||
|
<img alt="Version" src="https://img.shields.io/badge/version-1.0.0-blue.svg?cacheSeconds=2592000" />
|
||||||
|
<a href="#" target="_blank">
|
||||||
|
<img alt="License: Apache--2.0" src="https://img.shields.io/badge/License-Apache--2.0-yellow.svg" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
> Check if the GET request for the given URL works
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save get-works
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS START -->
|
||||||
|
|
||||||
|
### `getWorks` (function)
|
||||||
|
|
||||||
|
Check if the GET request for the given URL works
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
|
||||||
|
- url (`string`) - The given URL
|
||||||
|
|
||||||
|
**returns:** Promise<boolean>
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS END -->
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
You can sponsor my work here:
|
||||||
|
|
||||||
|
https://github.com/sponsors/aminya
|
||||||
|
|
||||||
|
Pull requests, issues and feature requests are welcome.
|
||||||
|
See the [Contributing guide](https://github.com/aminya/setup-cpp/blob/master/CONTRIBUTING.md).
|
|
@ -0,0 +1,26 @@
|
||||||
|
{
|
||||||
|
"name": "get-works",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Check if the GET request for the given URL works",
|
||||||
|
"homepage": "https://github.com/aminya/setup-cpp",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"author": "Amin Yahyaabadi",
|
||||||
|
"main": "./dist/index.js",
|
||||||
|
"source": "./src/index.ts",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"root-tools": "workspace:*"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"url",
|
||||||
|
"link",
|
||||||
|
"uri",
|
||||||
|
"working",
|
||||||
|
"check",
|
||||||
|
"alive",
|
||||||
|
"ok",
|
||||||
|
"broken"
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,6 +1,12 @@
|
||||||
import * as https from "https"
|
import * as https from "https"
|
||||||
|
|
||||||
export function isValidUrl(url: string) {
|
/**
|
||||||
|
* Check if the GET request for the given URL works
|
||||||
|
*
|
||||||
|
* @param url The given URL
|
||||||
|
* @returns A promise that resolves to a boolean indicating if the URL works
|
||||||
|
*/
|
||||||
|
export function getWorks(url: string): Promise<boolean> {
|
||||||
return new Promise<boolean>((resolve) => {
|
return new Promise<boolean>((resolve) => {
|
||||||
https.get(url, (res) => {
|
https.get(url, (res) => {
|
||||||
if (res.statusCode !== undefined && res.statusCode >= 200 && res.statusCode <= 399) {
|
if (res.statusCode !== undefined && res.statusCode >= 200 && res.statusCode <= 399) {
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "./dist"
|
||||||
|
},
|
||||||
|
"include": ["./src"]
|
||||||
|
}
|
|
@ -0,0 +1,76 @@
|
||||||
|
<h1 align="center">root-tools</h1>
|
||||||
|
<p>
|
||||||
|
<img alt="Version" src="https://img.shields.io/badge/version-1.0.0-blue.svg?cacheSeconds=2592000" />
|
||||||
|
<a href="#" target="_blank">
|
||||||
|
<img alt="License: Apache--2.0" src="https://img.shields.io/badge/License-Apache--2.0-yellow.svg" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
> Tools for working with root and sudo such as executing command as root, detecting root, etc.
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save root-tools
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS START -->
|
||||||
|
|
||||||
|
### `isSudo` (function)
|
||||||
|
|
||||||
|
Detect if sudo is available and the user has root privileges
|
||||||
|
|
||||||
|
**returns:** boolean
|
||||||
|
|
||||||
|
### `isRoot` (function)
|
||||||
|
|
||||||
|
Detect if the process has root privileges
|
||||||
|
|
||||||
|
**returns:** boolean
|
||||||
|
|
||||||
|
### `prependSudo` (function)
|
||||||
|
|
||||||
|
Prepend `sudo` to the command if sudo is available
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
|
||||||
|
- command (`string`)
|
||||||
|
|
||||||
|
**returns:** string
|
||||||
|
|
||||||
|
### `execRootSync` (function)
|
||||||
|
|
||||||
|
Execute a command as root if sudo is available. Otherwise executes the command normally without sudo.
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
|
||||||
|
- program (`string`) - The program to spawn
|
||||||
|
- args (`string[]`) - The command arguments
|
||||||
|
- execOptions (`execa.SyncOptions`) - The options passed to `execa`. Defaults to `{ stdio: "inherit", shell: true }`
|
||||||
|
|
||||||
|
**returns:** execa.ExecaSyncReturnValue<string>
|
||||||
|
|
||||||
|
### `execRoot` (function)
|
||||||
|
|
||||||
|
Asynchronously execute a command as root if sudo is available. Otherwise executes the command normally without sudo.
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
|
||||||
|
- program (`string`) - The program to spawn
|
||||||
|
- args (`string[]`) - The command arguments
|
||||||
|
- execOptions (`execa.Options`) - The options passed to `execa`. Defaults to `{ stdio: "inherit", shell: true }`
|
||||||
|
|
||||||
|
**returns:** execa.ExecaChildProcess<string>
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS END -->
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
You can sponsor my work here:
|
||||||
|
|
||||||
|
https://github.com/sponsors/aminya
|
||||||
|
|
||||||
|
Pull requests, issues and feature requests are welcome.
|
||||||
|
See the [Contributing guide](https://github.com/aminya/setup-cpp/blob/master/CONTRIBUTING.md).
|
|
@ -0,0 +1,41 @@
|
||||||
|
{
|
||||||
|
"name": "root-tools",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Tools for working with root and sudo such as executing command as root, detecting root, etc.",
|
||||||
|
"homepage": "https://github.com/aminya/setup-cpp",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"author": "Amin Yahyaabadi",
|
||||||
|
"main": "./dist/index.js",
|
||||||
|
"source": "./src/index.ts",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"execa": "^5.1.1",
|
||||||
|
"which": "^2.0.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/which": "^2.0.1"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"sudo",
|
||||||
|
"root",
|
||||||
|
"is-root",
|
||||||
|
"is-sudo",
|
||||||
|
"exec-sudo",
|
||||||
|
"exec-root",
|
||||||
|
"isroot",
|
||||||
|
"issudo",
|
||||||
|
"exec",
|
||||||
|
"execa",
|
||||||
|
"spawn",
|
||||||
|
"system",
|
||||||
|
"unix",
|
||||||
|
"linux",
|
||||||
|
"github-actions",
|
||||||
|
"github",
|
||||||
|
"actions",
|
||||||
|
"gitlab",
|
||||||
|
"ci"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
import which from "which"
|
||||||
|
import execa from "execa"
|
||||||
|
|
||||||
|
/** Detect if sudo is available and the user has root privileges */
|
||||||
|
export function isSudo(): boolean {
|
||||||
|
return (Boolean(process.env.CI) || isRoot()) && which.sync("sudo", { nothrow: true }) !== null
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Detect if the process has root privileges */
|
||||||
|
export function isRoot(): boolean {
|
||||||
|
return process.getuid?.() === 0
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Prepend `sudo` to the command if sudo is available */
|
||||||
|
export function prependSudo(command: string) {
|
||||||
|
if (isSudo()) {
|
||||||
|
return `sudo ${command}`
|
||||||
|
}
|
||||||
|
return command
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a command as root if sudo is available. Otherwise executes the command normally without sudo.
|
||||||
|
*
|
||||||
|
* @param program The program to spawn
|
||||||
|
* @param args The command arguments
|
||||||
|
* @param execOptions The options passed to `execa`. Defaults to `{ stdio: "inherit", shell: true }`
|
||||||
|
* @returns The execution result
|
||||||
|
*/
|
||||||
|
export function execRootSync(
|
||||||
|
program: string,
|
||||||
|
args: string[] = [],
|
||||||
|
execOptions: execa.SyncOptions = { stdio: "inherit", shell: true }
|
||||||
|
): execa.ExecaSyncReturnValue<string> {
|
||||||
|
if (isSudo()) {
|
||||||
|
return execa.commandSync(`sudo ${[program, ...args].map((arg) => `'${arg}'`).join(" ")}`, execOptions)
|
||||||
|
} else {
|
||||||
|
return execa.sync(program, args, execOptions)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asynchronously execute a command as root if sudo is available. Otherwise executes the command normally without sudo.
|
||||||
|
*
|
||||||
|
* @param program The program to spawn
|
||||||
|
* @param args The command arguments
|
||||||
|
* @param execOptions The options passed to `execa`. Defaults to `{ stdio: "inherit", shell: true }`
|
||||||
|
* @returns A promise to the execution result
|
||||||
|
*/
|
||||||
|
export function execRoot(
|
||||||
|
program: string,
|
||||||
|
args: string[] = [],
|
||||||
|
execOptions: execa.Options = { stdio: "inherit", shell: true }
|
||||||
|
): execa.ExecaChildProcess<string> {
|
||||||
|
if (isSudo()) {
|
||||||
|
return execa.command(`sudo ${[program, ...args].map((arg) => `'${arg}'`).join(" ")}`, execOptions)
|
||||||
|
} else {
|
||||||
|
return execa(program, args, execOptions)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "./dist"
|
||||||
|
},
|
||||||
|
"include": ["./src"]
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
<h1 align="center">untildify-user</h1>
|
||||||
|
<p>
|
||||||
|
<img alt="Version" src="https://img.shields.io/badge/version-1.0.0-blue.svg?cacheSeconds=2592000" />
|
||||||
|
<a href="#" target="_blank">
|
||||||
|
<img alt="License: Apache--2.0" src="https://img.shields.io/badge/License-Apache--2.0-yellow.svg" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
> Untildify a path for the current user even if it is root
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save untildify-user
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS START -->
|
||||||
|
|
||||||
|
### `untildifyUser` (function)
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
|
||||||
|
- path (`string`)
|
||||||
|
|
||||||
|
**returns:** any
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS END -->
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
You can sponsor my work here:
|
||||||
|
|
||||||
|
https://github.com/sponsors/aminya
|
||||||
|
|
||||||
|
Pull requests, issues and feature requests are welcome.
|
||||||
|
See the [Contributing guide](https://github.com/aminya/setup-cpp/blob/master/CONTRIBUTING.md).
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"name": "untildify-user",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Untildify a path for the current user even if it is root",
|
||||||
|
"homepage": "https://github.com/aminya/setup-cpp",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"author": "Amin Yahyaabadi",
|
||||||
|
"main": "./dist/index.js",
|
||||||
|
"source": "./src/index.ts",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"root-tools": "workspace:*",
|
||||||
|
"untildify": "^4.0.0"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"tilde",
|
||||||
|
"expansion",
|
||||||
|
"expand",
|
||||||
|
"untildify",
|
||||||
|
"path",
|
||||||
|
"home",
|
||||||
|
"directory",
|
||||||
|
"user",
|
||||||
|
"shell",
|
||||||
|
"bash"
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,9 +1,9 @@
|
||||||
import { join } from "path"
|
import { join } from "path"
|
||||||
import untildify from "untildify"
|
import untildify from "untildify"
|
||||||
import { isRoot } from "../env/sudo"
|
import { isSudo } from "root-tools"
|
||||||
|
|
||||||
export function untildify_user(path: string) {
|
export function untildifyUser(path: string) {
|
||||||
if (isRoot() && typeof process.env.SUDO_USER === "string") {
|
if (isSudo() && typeof process.env.SUDO_USER === "string") {
|
||||||
// use the user profile even if root
|
// use the user profile even if root
|
||||||
if (process.platform === "darwin") {
|
if (process.platform === "darwin") {
|
||||||
return join("/Users/", process.env.SUDO_USER, path)
|
return join("/Users/", process.env.SUDO_USER, path)
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "./dist"
|
||||||
|
},
|
||||||
|
"include": ["./src"]
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
<h1 align="center">user-access</h1>
|
||||||
|
<p>
|
||||||
|
<img alt="Version" src="https://img.shields.io/badge/version-1.0.0-blue.svg?cacheSeconds=2592000" />
|
||||||
|
<a href="#" target="_blank">
|
||||||
|
<img alt="License: Apache--2.0" src="https://img.shields.io/badge/License-Apache--2.0-yellow.svg" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
> Give user access to the given path
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save user-access
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS START -->
|
||||||
|
|
||||||
|
### `giveUserAccess` (function)
|
||||||
|
|
||||||
|
Give the user access to the given path and its sub-directories. It changes the owner to the SUDO_USER. This allows
|
||||||
|
the user to use the folder without sudo
|
||||||
|
|
||||||
|
**Parameters:**
|
||||||
|
|
||||||
|
- path (`string`) - The path to give the user access to
|
||||||
|
|
||||||
|
**returns:** void
|
||||||
|
|
||||||
|
<!-- INSERT GENERATED DOCS END -->
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
You can sponsor my work here:
|
||||||
|
|
||||||
|
https://github.com/sponsors/aminya
|
||||||
|
|
||||||
|
Pull requests, issues and feature requests are welcome.
|
||||||
|
See the [Contributing guide](https://github.com/aminya/setup-cpp/blob/master/CONTRIBUTING.md).
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"name": "user-access",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Give user access to the given path",
|
||||||
|
"homepage": "https://github.com/aminya/setup-cpp",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"author": "Amin Yahyaabadi",
|
||||||
|
"main": "./dist/index.js",
|
||||||
|
"source": "./src/index.ts",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"root-tools": "workspace:*"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"chown",
|
||||||
|
"recursive",
|
||||||
|
"user-access",
|
||||||
|
"user",
|
||||||
|
"access",
|
||||||
|
"path",
|
||||||
|
"fs",
|
||||||
|
"home",
|
||||||
|
"directory",
|
||||||
|
"shell",
|
||||||
|
"bash"
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
import { isSudo, execRootSync } from "root-tools"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Give the user access to the given path and its sub-directories. It changes the owner to the SUDO_USER. This allows
|
||||||
|
* the user to use the folder without sudo
|
||||||
|
*
|
||||||
|
* @param path The path to give the user access to
|
||||||
|
*/
|
||||||
|
export function giveUserAccess(path: string) {
|
||||||
|
if (
|
||||||
|
(process.platform === "linux" || process.platform === "darwin") &&
|
||||||
|
isSudo() &&
|
||||||
|
process.env.SUDO_USER !== undefined
|
||||||
|
) {
|
||||||
|
execRootSync("chown", ["-R", process.env.SUDO_USER, path], { cwd: path, stdio: "inherit", shell: true })
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "./dist"
|
||||||
|
},
|
||||||
|
"include": ["./src"]
|
||||||
|
}
|
1223
pnpm-lock.yaml
1223
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,3 @@
|
||||||
|
packages:
|
||||||
|
- "./"
|
||||||
|
- "packages/*"
|
|
@ -5,7 +5,7 @@ import { isArch } from "../utils/env/isArch"
|
||||||
import { hasDnf } from "../utils/env/hasDnf"
|
import { hasDnf } from "../utils/env/hasDnf"
|
||||||
import { setupDnfPack } from "../utils/setup/setupDnfPack"
|
import { setupDnfPack } from "../utils/setup/setupDnfPack"
|
||||||
import { isUbuntu } from "../utils/env/isUbuntu"
|
import { isUbuntu } from "../utils/env/isUbuntu"
|
||||||
import { execSudo } from "../utils/exec/sudo"
|
import { execRootSync } from "root-tools"
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
export async function setupBazel(version: string, _setupDir: string, _arch: string) {
|
export async function setupBazel(version: string, _setupDir: string, _arch: string) {
|
||||||
|
@ -24,7 +24,7 @@ export async function setupBazel(version: string, _setupDir: string, _arch: stri
|
||||||
} else if (hasDnf()) {
|
} else if (hasDnf()) {
|
||||||
// https://bazel.build/install/redhat
|
// https://bazel.build/install/redhat
|
||||||
setupDnfPack("dnf-plugins-core", undefined)
|
setupDnfPack("dnf-plugins-core", undefined)
|
||||||
execSudo("dnf", ["copr", "enable", "vbatts/bazel"])
|
execRootSync("dnf", ["copr", "enable", "vbatts/bazel"])
|
||||||
return setupDnfPack("bazel4", undefined)
|
return setupDnfPack("bazel4", undefined)
|
||||||
} else if (isUbuntu()) {
|
} else if (isUbuntu()) {
|
||||||
// https://bazel.build/install/ubuntu
|
// https://bazel.build/install/ubuntu
|
||||||
|
@ -32,7 +32,7 @@ export async function setupBazel(version: string, _setupDir: string, _arch: stri
|
||||||
"bazel-archive-keyring.gpg",
|
"bazel-archive-keyring.gpg",
|
||||||
"https://bazel.build/bazel-release.pub.gpg"
|
"https://bazel.build/bazel-release.pub.gpg"
|
||||||
)
|
)
|
||||||
execSudo("bash", [
|
execRootSync("bash", [
|
||||||
"-c",
|
"-c",
|
||||||
`echo "deb [arch=amd64 signed-by=${keyFileName}] https://storage.googleapis.com/bazel-apt stable jdk1.8" | tee /etc/apt/sources.list.d/bazel.list`,
|
`echo "deb [arch=amd64 signed-by=${keyFileName}] https://storage.googleapis.com/bazel-apt stable jdk1.8" | tee /etc/apt/sources.list.d/bazel.list`,
|
||||||
])
|
])
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { setupCmake } from "../cmake"
|
import { setupCmake } from "../cmake"
|
||||||
import { setupTmpDir, cleanupTmpDir, testBin } from "../../utils/tests/test-helpers"
|
import { setupTmpDir, cleanupTmpDir, testBin } from "../../utils/tests/test-helpers"
|
||||||
import { isGitHubCI } from "../../utils/env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import { getVersion } from "../../default_versions"
|
import { getVersion } from "../../default_versions"
|
||||||
|
|
||||||
jest.setTimeout(300000)
|
jest.setTimeout(300000)
|
||||||
|
@ -19,7 +19,7 @@ describe("setup-cmake", () => {
|
||||||
it("should find CMake in the cache", async () => {
|
it("should find CMake in the cache", async () => {
|
||||||
const { binDir } = await setupCmake(getVersion("cmake", "true"), directory, process.arch)
|
const { binDir } = await setupCmake(getVersion("cmake", "true"), directory, process.arch)
|
||||||
await testBin("cmake", ["--version"], binDir)
|
await testBin("cmake", ["--version"], binDir)
|
||||||
if (isGitHubCI()) {
|
if (ciDetect() === "github-actions") {
|
||||||
expect(binDir).toMatch(process.env.RUNNER_TOOL_CACHE ?? "hostedtoolcache")
|
expect(binDir).toMatch(process.env.RUNNER_TOOL_CACHE ?? "hostedtoolcache")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { extractTar } from "@actions/tool-cache"
|
||||||
import semverLte from "semver/functions/lte"
|
import semverLte from "semver/functions/lte"
|
||||||
import semverCoerce from "semver/functions/coerce"
|
import semverCoerce from "semver/functions/coerce"
|
||||||
import { setupBin, PackageInfo, InstallationInfo } from "../utils/setup/setupBin"
|
import { setupBin, PackageInfo, InstallationInfo } from "../utils/setup/setupBin"
|
||||||
import { addBinExtension } from "../utils/extension/extension"
|
import { addBinExtension } from "extension-tools"
|
||||||
import { extractZip } from "../utils/setup/extract"
|
import { extractZip } from "../utils/setup/extract"
|
||||||
|
|
||||||
/** Get the platform data for cmake */
|
/** Get the platform data for cmake */
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { setupPacmanPack } from "../utils/setup/setupPacmanPack"
|
||||||
import { InstallationInfo, PackageInfo, setupBin } from "../utils/setup/setupBin"
|
import { InstallationInfo, PackageInfo, setupBin } from "../utils/setup/setupBin"
|
||||||
import { setupBrewPack } from "../utils/setup/setupBrewPack"
|
import { setupBrewPack } from "../utils/setup/setupBrewPack"
|
||||||
import { setupChocoPack } from "../utils/setup/setupChocoPack"
|
import { setupChocoPack } from "../utils/setup/setupChocoPack"
|
||||||
import { addBinExtension } from "../utils/extension/extension"
|
import { addBinExtension } from "extension-tools"
|
||||||
import { extractTar, extractZip } from "../utils/setup/extract"
|
import { extractTar, extractZip } from "../utils/setup/extract"
|
||||||
import { notice } from "../utils/io/io"
|
import { notice } from "../utils/io/io"
|
||||||
import { setupGraphviz } from "../graphviz/graphviz"
|
import { setupGraphviz } from "../graphviz/graphviz"
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { setupGcc } from "../gcc"
|
||||||
import { getVersion } from "../../default_versions"
|
import { getVersion } from "../../default_versions"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
import execa from "execa"
|
import execa from "execa"
|
||||||
import { addBinExtension } from "../../utils/extension/extension"
|
import { addBinExtension } from "extension-tools"
|
||||||
import { chmodSync } from "fs"
|
import { chmodSync } from "fs"
|
||||||
|
|
||||||
jest.setTimeout(3000000)
|
jest.setTimeout(3000000)
|
||||||
|
|
|
@ -9,8 +9,8 @@ import semverCoerce from "semver/functions/coerce"
|
||||||
import { setupMacOSSDK } from "../macos-sdk/macos-sdk"
|
import { setupMacOSSDK } from "../macos-sdk/macos-sdk"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
import { warning, info } from "../utils/io/io"
|
import { warning, info } from "../utils/io/io"
|
||||||
import { isGitHubCI } from "../utils/env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import { addBinExtension } from "../utils/extension/extension"
|
import { addBinExtension } from "extension-tools"
|
||||||
import { InstallationInfo, PackageInfo, setupBin } from "../utils/setup/setupBin"
|
import { InstallationInfo, PackageInfo, setupBin } from "../utils/setup/setupBin"
|
||||||
import { extract7Zip } from "../utils/setup/extract"
|
import { extract7Zip } from "../utils/setup/extract"
|
||||||
import { isArch } from "../utils/env/isArch"
|
import { isArch } from "../utils/env/isArch"
|
||||||
|
@ -186,7 +186,7 @@ async function activateGcc(version: string, binDir: string) {
|
||||||
|
|
||||||
promises.push(setupMacOSSDK())
|
promises.push(setupMacOSSDK())
|
||||||
|
|
||||||
if (isGitHubCI()) {
|
if (ciDetect() === "github-actions") {
|
||||||
addGccLoggingMatcher()
|
addGccLoggingMatcher()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ describe("setup-Kcov", () => {
|
||||||
|
|
||||||
// it("should find Kcov in the cache", async () => {
|
// it("should find Kcov in the cache", async () => {
|
||||||
// const binDir = await testKcov("v39", directory)
|
// const binDir = await testKcov("v39", directory)
|
||||||
// if (isGitHubCI()) {
|
// if (ciDetect() === "github-actions") {
|
||||||
// expect(binDir).toMatch(process.env.RUNNER_TOOL_CACHE ?? "hostedtoolcache")
|
// expect(binDir).toMatch(process.env.RUNNER_TOOL_CACHE ?? "hostedtoolcache")
|
||||||
// }
|
// }
|
||||||
// await cleanupTmpDir("kcov-v39")
|
// await cleanupTmpDir("kcov-v39")
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { join } from "path"
|
||||||
import which from "which"
|
import which from "which"
|
||||||
import { setupCmake } from "../cmake/cmake"
|
import { setupCmake } from "../cmake/cmake"
|
||||||
import { getVersion } from "../default_versions"
|
import { getVersion } from "../default_versions"
|
||||||
import { addBinExtension } from "../utils/extension/extension"
|
import { addBinExtension } from "extension-tools"
|
||||||
import { extractTarByExe } from "../utils/setup/extract"
|
import { extractTarByExe } from "../utils/setup/extract"
|
||||||
import { setupAptPack } from "../utils/setup/setupAptPack"
|
import { setupAptPack } from "../utils/setup/setupAptPack"
|
||||||
import { setupPacmanPack } from "../utils/setup/setupPacmanPack"
|
import { setupPacmanPack } from "../utils/setup/setupPacmanPack"
|
||||||
|
@ -14,7 +14,7 @@ import { setupDnfPack } from "../utils/setup/setupDnfPack"
|
||||||
import { isUbuntu } from "../utils/env/isUbuntu"
|
import { isUbuntu } from "../utils/env/isUbuntu"
|
||||||
import { addVPrefix, removeVPrefix } from "../utils/setup/version"
|
import { addVPrefix, removeVPrefix } from "../utils/setup/version"
|
||||||
import { info } from "../utils/io/io"
|
import { info } from "../utils/io/io"
|
||||||
import { untildify_user } from "../utils/path/untildify"
|
import { untildifyUser } from "untildify-user"
|
||||||
import { setupNinja } from "../ninja/ninja"
|
import { setupNinja } from "../ninja/ninja"
|
||||||
|
|
||||||
function getDownloadKcovPackageInfo(version: string): PackageInfo {
|
function getDownloadKcovPackageInfo(version: string): PackageInfo {
|
||||||
|
@ -61,7 +61,7 @@ async function buildKcov(file: string, dest: string) {
|
||||||
stdio: "inherit",
|
stdio: "inherit",
|
||||||
})
|
})
|
||||||
await execa(cmake, ["--build", buildDir, "--config", "Release"], { cwd: out, stdio: "inherit" })
|
await execa(cmake, ["--build", buildDir, "--config", "Release"], { cwd: out, stdio: "inherit" })
|
||||||
// execSudo(cmake, ["--install", buildDir], out)
|
// execRootSync(cmake, ["--install", buildDir], out)
|
||||||
// return "user/local/bin" // the cmake install prefix
|
// return "user/local/bin" // the cmake install prefix
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
|
@ -69,12 +69,12 @@ async function buildKcov(file: string, dest: string) {
|
||||||
async function getCmake() {
|
async function getCmake() {
|
||||||
let cmake = which.sync("cmake", { nothrow: true })
|
let cmake = which.sync("cmake", { nothrow: true })
|
||||||
if (cmake === null) {
|
if (cmake === null) {
|
||||||
const { binDir } = await setupCmake(getVersion("cmake", undefined), join(untildify_user(""), "cmake"), "")
|
const { binDir } = await setupCmake(getVersion("cmake", undefined), join(untildifyUser(""), "cmake"), "")
|
||||||
cmake = join(binDir, "cmake")
|
cmake = join(binDir, "cmake")
|
||||||
}
|
}
|
||||||
const ninja = which.sync("ninja", { nothrow: true })
|
const ninja = which.sync("ninja", { nothrow: true })
|
||||||
if (ninja === null) {
|
if (ninja === null) {
|
||||||
await setupNinja(getVersion("ninja", undefined), join(untildify_user(""), "ninja"), "")
|
await setupNinja(getVersion("ninja", undefined), join(untildifyUser(""), "ninja"), "")
|
||||||
}
|
}
|
||||||
return cmake
|
return cmake
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
import { setupLLVM, VERSIONS, getUrl, setupClangTools, getLinuxUrl } from "../llvm"
|
import { setupLLVM, VERSIONS, getUrl, setupClangTools, getLinuxUrl } from "../llvm"
|
||||||
import { getSpecificVersionAndUrl } from "../../utils/setup/version"
|
import { getSpecificVersionAndUrl } from "../../utils/setup/version"
|
||||||
import { isValidUrl } from "../../utils/http/validate_url"
|
import { getWorks } from "get-works"
|
||||||
import { setupTmpDir, cleanupTmpDir, testBin } from "../../utils/tests/test-helpers"
|
import { setupTmpDir, cleanupTmpDir, testBin } from "../../utils/tests/test-helpers"
|
||||||
import { isGitHubCI } from "../../utils/env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import execa from "execa"
|
import execa from "execa"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
import { addBinExtension } from "../../utils/extension/extension"
|
import { addBinExtension } from "extension-tools"
|
||||||
import { chmodSync } from "fs"
|
import { chmodSync } from "fs"
|
||||||
import { getVersion } from "../../default_versions"
|
import { getVersion } from "../../default_versions"
|
||||||
import { ubuntuVersion } from "../../utils/env/ubuntu_version"
|
import { ubuntuVersion } from "../../utils/env/ubuntu_version"
|
||||||
|
@ -14,7 +14,7 @@ jest.setTimeout(400000)
|
||||||
async function testUrl(version: string) {
|
async function testUrl(version: string) {
|
||||||
const [specificVersion, url] = await getSpecificVersionAndUrl(VERSIONS, process.platform, version, getUrl)
|
const [specificVersion, url] = await getSpecificVersionAndUrl(VERSIONS, process.platform, version, getUrl)
|
||||||
|
|
||||||
if (!(await isValidUrl(url))) {
|
if (!(await getWorks(url))) {
|
||||||
throw new Error(`Failed to install Version: ${version} => ${specificVersion} \n URL: ${url}`)
|
throw new Error(`Failed to install Version: ${version} => ${specificVersion} \n URL: ${url}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ describe("setup-llvm", () => {
|
||||||
const { binDir } = await setupLLVM(getVersion("llvm", "true", osVersion), directory, process.arch)
|
const { binDir } = await setupLLVM(getVersion("llvm", "true", osVersion), directory, process.arch)
|
||||||
await testBin("clang++", ["--version"], binDir)
|
await testBin("clang++", ["--version"], binDir)
|
||||||
|
|
||||||
if (isGitHubCI() && process.platform !== "linux") {
|
if (ciDetect() === "github-actions" && process.platform !== "linux") {
|
||||||
expect(binDir).toMatch(process.env.RUNNER_TOOL_CACHE ?? "hostedtoolcache")
|
expect(binDir).toMatch(process.env.RUNNER_TOOL_CACHE ?? "hostedtoolcache")
|
||||||
// TODO returns the install dir on linux
|
// TODO returns the install dir on linux
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ describe("setup-llvm", () => {
|
||||||
expect(process.env.CC?.includes("clang")).toBeTruthy()
|
expect(process.env.CC?.includes("clang")).toBeTruthy()
|
||||||
expect(process.env.CXX?.includes("clang++")).toBeTruthy()
|
expect(process.env.CXX?.includes("clang++")).toBeTruthy()
|
||||||
|
|
||||||
if (isGitHubCI() && process.platform !== "linux") {
|
if (ciDetect() === "github-actions" && process.platform !== "linux") {
|
||||||
expect(process.env.CC).toMatch("hostedtoolcache")
|
expect(process.env.CC).toMatch("hostedtoolcache")
|
||||||
expect(process.env.CXX).toMatch("hostedtoolcache")
|
expect(process.env.CXX).toMatch("hostedtoolcache")
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import * as path from "path"
|
import * as path from "path"
|
||||||
import semverLte from "semver/functions/lte"
|
import semverLte from "semver/functions/lte"
|
||||||
import semverMajor from "semver/functions/major"
|
import semverMajor from "semver/functions/major"
|
||||||
import { isValidUrl } from "../utils/http/validate_url"
|
import { getWorks } from "get-works"
|
||||||
import { InstallationInfo, PackageInfo, setupBin } from "../utils/setup/setupBin"
|
import { InstallationInfo, PackageInfo, setupBin } from "../utils/setup/setupBin"
|
||||||
import { extractExe, extractTarByExe } from "../utils/setup/extract"
|
import { extractExe, extractTarByExe } from "../utils/setup/extract"
|
||||||
import {
|
import {
|
||||||
|
@ -11,13 +11,13 @@ import {
|
||||||
semverCoerceIfInvalid,
|
semverCoerceIfInvalid,
|
||||||
} from "../utils/setup/version"
|
} from "../utils/setup/version"
|
||||||
import { setupMacOSSDK } from "../macos-sdk/macos-sdk"
|
import { setupMacOSSDK } from "../macos-sdk/macos-sdk"
|
||||||
import { addBinExtension } from "../utils/extension/extension"
|
import { addBinExtension } from "extension-tools"
|
||||||
import { addEnv } from "../utils/env/addEnv"
|
import { addEnv } from "../utils/env/addEnv"
|
||||||
import { setOutput } from "@actions/core"
|
import { setOutput } from "@actions/core"
|
||||||
import { setupAptPack, updateAptAlternatives } from "../utils/setup/setupAptPack"
|
import { setupAptPack, updateAptAlternatives } from "../utils/setup/setupAptPack"
|
||||||
import { info, warning } from "../utils/io/io"
|
import { info, warning } from "../utils/io/io"
|
||||||
import { existsSync } from "fs"
|
import { existsSync } from "fs"
|
||||||
import { isGitHubCI } from "../utils/env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import { setupGcc } from "../gcc/gcc"
|
import { setupGcc } from "../gcc/gcc"
|
||||||
import { getVersion } from "../default_versions"
|
import { getVersion } from "../default_versions"
|
||||||
import { isArch } from "../utils/env/isArch"
|
import { isArch } from "../utils/env/isArch"
|
||||||
|
@ -231,7 +231,7 @@ async function getWin32Url(version: string): Promise<string | null> {
|
||||||
let fallback = false
|
let fallback = false
|
||||||
if (olderThan9_1) {
|
if (olderThan9_1) {
|
||||||
url = getReleaseUrl(version, prefix, suffix)
|
url = getReleaseUrl(version, prefix, suffix)
|
||||||
if (!(await isValidUrl(url))) {
|
if (!(await getWorks(url))) {
|
||||||
fallback = true // fallback to github
|
fallback = true // fallback to github
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -353,7 +353,7 @@ export async function activateLLVM(directory: string, versionGiven: string) {
|
||||||
updateAptAlternatives("llvm-ar", `${directory}/bin/llvm-ar`)
|
updateAptAlternatives("llvm-ar", `${directory}/bin/llvm-ar`)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isGitHubCI()) {
|
if (ciDetect() === "github-actions") {
|
||||||
addLLVMLoggingMatcher()
|
addLLVMLoggingMatcher()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,7 +362,7 @@ export async function activateLLVM(directory: string, versionGiven: string) {
|
||||||
|
|
||||||
/** Setup llvm tools (clang tidy, clang format, etc) without activating llvm and using it as the compiler */
|
/** Setup llvm tools (clang tidy, clang format, etc) without activating llvm and using it as the compiler */
|
||||||
export function setupClangTools(version: string, setupDir: string, arch: string): Promise<InstallationInfo> {
|
export function setupClangTools(version: string, setupDir: string, arch: string): Promise<InstallationInfo> {
|
||||||
if (isGitHubCI()) {
|
if (ciDetect() === "github-actions") {
|
||||||
addLLVMLoggingMatcher()
|
addLLVMLoggingMatcher()
|
||||||
}
|
}
|
||||||
return _setupLLVM(version, setupDir, arch)
|
return _setupLLVM(version, setupDir, arch)
|
||||||
|
|
10
src/main.ts
10
src/main.ts
|
@ -16,8 +16,8 @@ import { setupNinja } from "./ninja/ninja"
|
||||||
import { setupOpencppcoverage } from "./opencppcoverage/opencppcoverage"
|
import { setupOpencppcoverage } from "./opencppcoverage/opencppcoverage"
|
||||||
import { setupPython } from "./python/python"
|
import { setupPython } from "./python/python"
|
||||||
import mri from "mri"
|
import mri from "mri"
|
||||||
import { untildify_user as untildify } from "./utils/path/untildify"
|
import { untildifyUser } from "untildify-user"
|
||||||
import { isGitHubCI } from "./utils/env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import * as timeDelta from "time-delta"
|
import * as timeDelta from "time-delta"
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
@ -113,7 +113,7 @@ const inputs: Array<Inputs> = ["compiler", "architecture", ...tools]
|
||||||
|
|
||||||
/** The main entry function */
|
/** The main entry function */
|
||||||
export async function main(args: string[]): Promise<number> {
|
export async function main(args: string[]): Promise<number> {
|
||||||
if (!isGitHubCI()) {
|
if (ciDetect() !== "github-actions") {
|
||||||
process.env.ACTIONS_ALLOW_UNSECURE_COMMANDS = "true"
|
process.env.ACTIONS_ALLOW_UNSECURE_COMMANDS = "true"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,7 +129,7 @@ export async function main(args: string[]): Promise<number> {
|
||||||
const arch = opts.architecture ?? process.arch
|
const arch = opts.architecture ?? process.arch
|
||||||
|
|
||||||
// the installation dir for the tools that are downloaded directly
|
// the installation dir for the tools that are downloaded directly
|
||||||
const setupCppDir = process.env.SETUP_CPP_DIR ?? untildify("")
|
const setupCppDir = process.env.SETUP_CPP_DIR ?? untildifyUser("")
|
||||||
|
|
||||||
// report messages
|
// report messages
|
||||||
const successMessages: string[] = []
|
const successMessages: string[] = []
|
||||||
|
@ -281,7 +281,7 @@ export async function main(args: string[]): Promise<number> {
|
||||||
|
|
||||||
info("setup_cpp finished")
|
info("setup_cpp finished")
|
||||||
|
|
||||||
if (!isGitHubCI()) {
|
if (ciDetect() !== "github-actions") {
|
||||||
switch (process.platform) {
|
switch (process.platform) {
|
||||||
case "win32": {
|
case "win32": {
|
||||||
warning("Run `RefreshEnv.cmd` or restart your shell to update the environment.")
|
warning("Run `RefreshEnv.cmd` or restart your shell to update the environment.")
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { setupVCVarsall } from "../vcvarsall/vcvarsall"
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import { vsversion_to_versionnumber, findVcvarsall } from "msvc-dev-cmd/lib.js"
|
import { vsversion_to_versionnumber, findVcvarsall } from "msvc-dev-cmd/lib.js"
|
||||||
import { isGitHubCI } from "../utils/env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
import { existsSync } from "fs"
|
import { existsSync } from "fs"
|
||||||
import { error, info, warning } from "../utils/io/io"
|
import { error, info, warning } from "../utils/io/io"
|
||||||
|
@ -65,7 +65,7 @@ export async function setupMSVC(
|
||||||
// run vcvarsall.bat environment variables
|
// run vcvarsall.bat environment variables
|
||||||
await setupVCVarsall(version, VCTargetsPath, arch, toolset, sdk, uwp, spectre)
|
await setupVCVarsall(version, VCTargetsPath, arch, toolset, sdk, uwp, spectre)
|
||||||
|
|
||||||
if (isGitHubCI()) {
|
if (ciDetect() === "github-actions") {
|
||||||
addMSVCLoggingMatcher()
|
addMSVCLoggingMatcher()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { dirname } from "path"
|
import { dirname } from "path"
|
||||||
import which from "which"
|
import which from "which"
|
||||||
import { isUbuntu } from "../utils/env/isUbuntu"
|
import { isUbuntu } from "../utils/env/isUbuntu"
|
||||||
import { execSudo } from "../utils/exec/sudo"
|
import { execRootSync } from "root-tools"
|
||||||
import { addAptKeyViaDownload, setupAptPack } from "../utils/setup/setupAptPack"
|
import { addAptKeyViaDownload, setupAptPack } from "../utils/setup/setupAptPack"
|
||||||
|
|
||||||
let binDir: string | undefined
|
let binDir: string | undefined
|
||||||
|
@ -26,7 +26,7 @@ export async function setupNala(version: string, _setupDir: string, _arch: strin
|
||||||
"volian-archive-scar-unstable.gpg",
|
"volian-archive-scar-unstable.gpg",
|
||||||
"https://deb.volian.org/volian/scar.key"
|
"https://deb.volian.org/volian/scar.key"
|
||||||
)
|
)
|
||||||
execSudo("/bin/bash", [
|
execRootSync("/bin/bash", [
|
||||||
"-c",
|
"-c",
|
||||||
`echo "deb [signed-by=${keyFileName}] http://deb.volian.org/volian/ scar main" | tee /etc/apt/sources.list.d/volian-archive-scar-unstable.list`,
|
`echo "deb [signed-by=${keyFileName}] http://deb.volian.org/volian/ scar main" | tee /etc/apt/sources.list.d/volian-archive-scar-unstable.list`,
|
||||||
])
|
])
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { setupNinja } from "../ninja"
|
import { setupNinja } from "../ninja"
|
||||||
import { setupTmpDir, cleanupTmpDir, testBin } from "../../utils/tests/test-helpers"
|
import { setupTmpDir, cleanupTmpDir, testBin } from "../../utils/tests/test-helpers"
|
||||||
import { isGitHubCI } from "../../utils/env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import { getVersion } from "../../default_versions"
|
import { getVersion } from "../../default_versions"
|
||||||
|
|
||||||
jest.setTimeout(300000)
|
jest.setTimeout(300000)
|
||||||
|
@ -22,7 +22,7 @@ describe("setup-ninja", () => {
|
||||||
|
|
||||||
it("should find Ninja in the cache", async () => {
|
it("should find Ninja in the cache", async () => {
|
||||||
const binDir = await testNinja(directory)
|
const binDir = await testNinja(directory)
|
||||||
if (isGitHubCI()) {
|
if (ciDetect() === "github-actions") {
|
||||||
expect(binDir).toMatch(process.env.RUNNER_TOOL_CACHE ?? "hostedtoolcache")
|
expect(binDir).toMatch(process.env.RUNNER_TOOL_CACHE ?? "hostedtoolcache")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { addBinExtension } from "../utils/extension/extension"
|
import { addBinExtension } from "extension-tools"
|
||||||
import { extractZip } from "../utils/setup/extract"
|
import { extractZip } from "../utils/setup/extract"
|
||||||
import { setupBin, PackageInfo, InstallationInfo } from "../utils/setup/setupBin"
|
import { setupBin, PackageInfo, InstallationInfo } from "../utils/setup/setupBin"
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { setupPython } from "../python"
|
||||||
import { cleanupTmpDir, setupTmpDir, testBin } from "../../utils/tests/test-helpers"
|
import { cleanupTmpDir, setupTmpDir, testBin } from "../../utils/tests/test-helpers"
|
||||||
import { getVersion } from "../../default_versions"
|
import { getVersion } from "../../default_versions"
|
||||||
import { ubuntuVersion } from "../../utils/env/ubuntu_version"
|
import { ubuntuVersion } from "../../utils/env/ubuntu_version"
|
||||||
import { isGitHubCI } from "../../utils/env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import { info } from "../../utils/io/io"
|
import { info } from "../../utils/io/io"
|
||||||
|
|
||||||
jest.setTimeout(300000)
|
jest.setTimeout(300000)
|
||||||
|
@ -13,7 +13,7 @@ describe("setup-python", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
it("should setup python in GitHub Actions", async () => {
|
it("should setup python in GitHub Actions", async () => {
|
||||||
if (isGitHubCI()) {
|
if (ciDetect() === "github-actions") {
|
||||||
info("Installing python in GitHub Actions")
|
info("Installing python in GitHub Actions")
|
||||||
const { setupActionsPython } = await import("../actions_python")
|
const { setupActionsPython } = await import("../actions_python")
|
||||||
await setupActionsPython(getVersion("python", "true", await ubuntuVersion()), directory, process.arch)
|
await setupActionsPython(getVersion("python", "true", await ubuntuVersion()), directory, process.arch)
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { existsSync } from "fs"
|
||||||
import { info, warning } from "../utils/io/io"
|
import { info, warning } from "../utils/io/io"
|
||||||
import { debug } from "@actions/core"
|
import { debug } from "@actions/core"
|
||||||
import path from "path"
|
import path from "path"
|
||||||
import { isGitHubCI } from "../utils/env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import { isCacheFeatureAvailable, IS_LINUX, IS_WINDOWS } from "setup-python/src/utils"
|
import { isCacheFeatureAvailable, IS_LINUX, IS_WINDOWS } from "setup-python/src/utils"
|
||||||
import { getCacheDistributor } from "setup-python/src/cache-distributions/cache-factory"
|
import { getCacheDistributor } from "setup-python/src/cache-distributions/cache-factory"
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ export async function setupActionsPython(version: string, _setupDir: string, arc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isGitHubCI()) {
|
if (ciDetect() === "github-actions") {
|
||||||
addPythonLoggingMatcher()
|
addPythonLoggingMatcher()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { setupAptPack } from "../utils/setup/setupAptPack"
|
||||||
import { setupPacmanPack } from "../utils/setup/setupPacmanPack"
|
import { setupPacmanPack } from "../utils/setup/setupPacmanPack"
|
||||||
import { setupBrewPack } from "../utils/setup/setupBrewPack"
|
import { setupBrewPack } from "../utils/setup/setupBrewPack"
|
||||||
import { setupChocoPack } from "../utils/setup/setupChocoPack"
|
import { setupChocoPack } from "../utils/setup/setupChocoPack"
|
||||||
import { isGitHubCI } from "../utils/env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import { warning, info } from "../utils/io/io"
|
import { warning, info } from "../utils/io/io"
|
||||||
import { isArch } from "../utils/env/isArch"
|
import { isArch } from "../utils/env/isArch"
|
||||||
import which from "which"
|
import which from "which"
|
||||||
|
@ -14,7 +14,7 @@ import { setupDnfPack } from "../utils/setup/setupDnfPack"
|
||||||
import { isUbuntu } from "../utils/env/isUbuntu"
|
import { isUbuntu } from "../utils/env/isUbuntu"
|
||||||
|
|
||||||
export async function setupPython(version: string, setupDir: string, arch: string) {
|
export async function setupPython(version: string, setupDir: string, arch: string) {
|
||||||
if (!isGitHubCI()) {
|
if (ciDetect() !== "github-actions") {
|
||||||
// TODO parse version
|
// TODO parse version
|
||||||
return setupPythonViaSystem(version, setupDir, arch)
|
return setupPythonViaSystem(version, setupDir, arch)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { setupTask } from "../task"
|
import { setupTask } from "../task"
|
||||||
import { cleanupTmpDir, setupTmpDir, testBin } from "../../utils/tests/test-helpers"
|
import { cleanupTmpDir, setupTmpDir, testBin } from "../../utils/tests/test-helpers"
|
||||||
import { isGitHubCI } from "../../utils/env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import { getVersion } from "../../default_versions"
|
import { getVersion } from "../../default_versions"
|
||||||
|
|
||||||
jest.setTimeout(300000)
|
jest.setTimeout(300000)
|
||||||
|
@ -18,7 +18,7 @@ describe("setup-task", () => {
|
||||||
|
|
||||||
it("should find task in the cache", async () => {
|
it("should find task in the cache", async () => {
|
||||||
const { binDir } = await setupTask(getVersion("task", "true"), directory, process.arch)
|
const { binDir } = await setupTask(getVersion("task", "true"), directory, process.arch)
|
||||||
if (isGitHubCI()) {
|
if (ciDetect() === "github-actions") {
|
||||||
expect(binDir).toMatch(process.env.RUNNER_TOOL_CACHE ?? "hostedtoolcache")
|
expect(binDir).toMatch(process.env.RUNNER_TOOL_CACHE ?? "hostedtoolcache")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { addBinExtension } from "../utils/extension/extension"
|
import { addBinExtension } from "extension-tools"
|
||||||
import { extractTarByExe, extractZip } from "../utils/setup/extract"
|
import { extractTarByExe, extractZip } from "../utils/setup/extract"
|
||||||
import { setupBin, PackageInfo, InstallationInfo } from "../utils/setup/setupBin"
|
import { setupBin, PackageInfo, InstallationInfo } from "../utils/setup/setupBin"
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,21 @@
|
||||||
import { exportVariable, addPath as ghAddPath, info, setFailed } from "@actions/core"
|
import { exportVariable, addPath as ghAddPath, info, setFailed } from "@actions/core"
|
||||||
import { isGitHubCI } from "./isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import { untildify_user as untildify } from "../path/untildify"
|
import { untildifyUser } from "untildify-user"
|
||||||
import { appendFileSync, existsSync, readFileSync } from "fs"
|
import { appendFileSync, existsSync, readFileSync } from "fs"
|
||||||
import { error, warning } from "../io/io"
|
import { error, warning } from "../io/io"
|
||||||
import { execPowershell } from "../exec/powershell"
|
import { execPowershell } from "exec-powershell"
|
||||||
import { delimiter } from "path"
|
import { delimiter } from "path"
|
||||||
import { escapeSpace } from "../path/escape_space"
|
import escapeSpace from "escape-path-with-spaces"
|
||||||
|
|
||||||
/** An add path function that works locally or inside GitHub Actions */
|
/**
|
||||||
|
* Add an environment variable.
|
||||||
|
*
|
||||||
|
* This function is cross-platforms and works in all the local or CI systems.
|
||||||
|
*/
|
||||||
export async function addEnv(name: string, valGiven: string | undefined, shouldEscapeSpace: boolean = false) {
|
export async function addEnv(name: string, valGiven: string | undefined, shouldEscapeSpace: boolean = false) {
|
||||||
const val = shouldEscapeSpace ? escapeSpace(valGiven) : valGiven
|
const val = shouldEscapeSpace ? escapeSpace(valGiven ?? "") : valGiven
|
||||||
try {
|
try {
|
||||||
if (isGitHubCI()) {
|
if (ciDetect() === "github-actions") {
|
||||||
try {
|
try {
|
||||||
exportVariable(name, val)
|
exportVariable(name, val)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -27,11 +31,15 @@ export async function addEnv(name: string, valGiven: string | undefined, shouldE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** An add path function that works locally or inside GitHub Actions */
|
/**
|
||||||
|
* Add a path to the PATH environment variable.
|
||||||
|
*
|
||||||
|
* This function is cross-platforms and works in all the local or CI systems.
|
||||||
|
*/
|
||||||
export async function addPath(path: string) {
|
export async function addPath(path: string) {
|
||||||
process.env.PATH = `${path}${delimiter}${process.env.PATH}`
|
process.env.PATH = `${path}${delimiter}${process.env.PATH}`
|
||||||
try {
|
try {
|
||||||
if (isGitHubCI()) {
|
if (ciDetect() === "github-actions") {
|
||||||
try {
|
try {
|
||||||
ghAddPath(path)
|
ghAddPath(path)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -47,7 +55,7 @@ export async function addPath(path: string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const cpprc_path = untildify(".cpprc")
|
export const cpprc_path = untildifyUser(".cpprc")
|
||||||
|
|
||||||
async function addEnvSystem(name: string, valGiven: string | undefined) {
|
async function addEnvSystem(name: string, valGiven: string | undefined) {
|
||||||
const val = valGiven ?? ""
|
const val = valGiven ?? ""
|
||||||
|
@ -121,12 +129,12 @@ export function setupCppInProfile() {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// source cpprc in .profile
|
// source cpprc in .profile
|
||||||
const profile_path = untildify(".profile")
|
const profile_path = untildifyUser(".profile")
|
||||||
appendFileSync(profile_path, source_cpprc_string)
|
appendFileSync(profile_path, source_cpprc_string)
|
||||||
info(`${source_cpprc_string} was added to ${profile_path}`)
|
info(`${source_cpprc_string} was added to ${profile_path}`)
|
||||||
|
|
||||||
// source cpprc in .bashrc too
|
// source cpprc in .bashrc too
|
||||||
const bashrc_path = untildify(".bashrc")
|
const bashrc_path = untildifyUser(".bashrc")
|
||||||
appendFileSync(bashrc_path, source_cpprc_string)
|
appendFileSync(bashrc_path, source_cpprc_string)
|
||||||
info(`${source_cpprc_string} was added to ${bashrc_path}`)
|
info(`${source_cpprc_string} was added to ${bashrc_path}`)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
export function isCI() {
|
|
||||||
return process.env.CI === "true"
|
|
||||||
}
|
|
||||||
|
|
||||||
export function isGitHubCI() {
|
|
||||||
return isCI() && process.env.GITHUB_ACTIONS === "true"
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
import which from "which"
|
|
||||||
|
|
||||||
let _issudo: boolean | undefined = undefined
|
|
||||||
|
|
||||||
export function isRoot(): boolean {
|
|
||||||
if (_issudo !== undefined) {
|
|
||||||
return _issudo
|
|
||||||
}
|
|
||||||
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions, @typescript-eslint/no-unnecessary-condition
|
|
||||||
_issudo = (Boolean(process.env.CI) || process.getuid?.() === 0) && which.sync("sudo", { nothrow: true }) !== null
|
|
||||||
return _issudo
|
|
||||||
}
|
|
||||||
|
|
||||||
export function mightSudo(command: string) {
|
|
||||||
if (isRoot()) {
|
|
||||||
return `sudo ${command}`
|
|
||||||
}
|
|
||||||
return command
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
import execa from "execa"
|
|
||||||
import which from "which"
|
|
||||||
|
|
||||||
let powershell: string | undefined
|
|
||||||
|
|
||||||
export function execPowershell(command: string, startupFlags: string[] = ["-NoProfile", "-NoLogo", "-NonInteractive"]) {
|
|
||||||
return execa(getPowerShell(), [...startupFlags, "-c", command], { stdio: "inherit" })
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPowerShell() {
|
|
||||||
if (powershell === undefined) {
|
|
||||||
const maybePwsh = which.sync("pwsh", { nothrow: true })
|
|
||||||
if (maybePwsh !== null) {
|
|
||||||
powershell = maybePwsh
|
|
||||||
}
|
|
||||||
const maybePowerShell = which.sync("powershell", { nothrow: true })
|
|
||||||
if (maybePowerShell !== null) {
|
|
||||||
powershell = maybePowerShell
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (powershell === undefined) {
|
|
||||||
throw new Error("Could not find powershell")
|
|
||||||
}
|
|
||||||
return powershell
|
|
||||||
}
|
|
|
@ -1,14 +0,0 @@
|
||||||
import execa from "execa"
|
|
||||||
import { isRoot } from "../env/sudo"
|
|
||||||
|
|
||||||
export function execSudo(file: string, args: string[], cwd?: string) {
|
|
||||||
if (isRoot()) {
|
|
||||||
return execa.commandSync(`sudo ${[file, ...args].map((arg) => `'${arg}'`).join(" ")}`, {
|
|
||||||
shell: true,
|
|
||||||
cwd,
|
|
||||||
stdio: "inherit",
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
return execa.sync(file, args, { stdio: "inherit" })
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
/** Add bin extension to a binary. This will be `.exe` on Windows. */
|
|
||||||
export function addBinExtension(name: string) {
|
|
||||||
if (process.platform === "win32") {
|
|
||||||
return `${name}.exe`
|
|
||||||
}
|
|
||||||
return name
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Add native shell extension. This will be `.bat` on Windows and `sh` on unix. */
|
|
||||||
export function addShellExtension(name: string) {
|
|
||||||
if (process.platform === "win32") {
|
|
||||||
return `${name}.bat`
|
|
||||||
}
|
|
||||||
return `${name}.sh`
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Add ./ for unix shell */
|
|
||||||
export function addShellHere(name: string) {
|
|
||||||
if (process.platform === "win32") {
|
|
||||||
return name
|
|
||||||
}
|
|
||||||
return `./${name}`
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
import { isRoot } from "../env/sudo"
|
|
||||||
import { execSudo } from "../exec/sudo"
|
|
||||||
|
|
||||||
/// change the owner to the SUDO_USER. This is required so the user can use the folder without sudo
|
|
||||||
export function folderUserAccess(folder: string) {
|
|
||||||
if (
|
|
||||||
(process.platform === "linux" || process.platform === "darwin") &&
|
|
||||||
isRoot() &&
|
|
||||||
process.env.SUDO_USER !== undefined
|
|
||||||
) {
|
|
||||||
execSudo("chown", ["-R", process.env.SUDO_USER, folder], folder)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,8 +1,8 @@
|
||||||
import * as core from "@actions/core"
|
import * as core from "@actions/core"
|
||||||
import { isGitHubCI } from "../env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
|
|
||||||
export function error(err: string | Error) {
|
export function error(err: string | Error) {
|
||||||
return isGitHubCI() ? core.error(err) : console.log(`\x1b[31m${err}\x1b[0m`)
|
return ciDetect() === "github-actions" ? core.error(err) : console.log(`\x1b[31m${err}\x1b[0m`)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function success(msg: string) {
|
export function success(msg: string) {
|
||||||
|
@ -10,13 +10,13 @@ export function success(msg: string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function warning(msg: string) {
|
export function warning(msg: string) {
|
||||||
return isGitHubCI() ? core.warning(msg) : console.log(`\x1b[33m${msg}\x1b[0m`)
|
return ciDetect() === "github-actions" ? core.warning(msg) : console.log(`\x1b[33m${msg}\x1b[0m`)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function notice(msg: string) {
|
export function notice(msg: string) {
|
||||||
return isGitHubCI() ? core.notice(msg) : console.log(`\x1b[94m${msg}\x1b[0m`)
|
return ciDetect() === "github-actions" ? core.notice(msg) : console.log(`\x1b[94m${msg}\x1b[0m`)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function info(msg: string) {
|
export function info(msg: string) {
|
||||||
return isGitHubCI() ? core.info(msg) : console.log(msg)
|
return ciDetect() === "github-actions" ? core.info(msg) : console.log(msg)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
||||||
// @ts-ignore
|
|
||||||
import escape from "escape-path-with-spaces"
|
|
||||||
|
|
||||||
/// Escape the spaces in the given path
|
|
||||||
export function escapeSpace(path: string | undefined): string {
|
|
||||||
if (path === undefined) {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return escape(path)
|
|
||||||
}
|
|
|
@ -3,7 +3,7 @@ import { mkdirP } from "@actions/io"
|
||||||
import which from "which"
|
import which from "which"
|
||||||
import { setupSevenZip } from "../../sevenzip/sevenzip"
|
import { setupSevenZip } from "../../sevenzip/sevenzip"
|
||||||
import { warning } from "../io/io"
|
import { warning } from "../io/io"
|
||||||
import { folderUserAccess } from "../fs/userAccess"
|
import { giveUserAccess } from "user-access"
|
||||||
export { extractTar, extractXar } from "@actions/tool-cache"
|
export { extractTar, extractXar } from "@actions/tool-cache"
|
||||||
|
|
||||||
let sevenZip: string | undefined
|
let sevenZip: string | undefined
|
||||||
|
@ -11,7 +11,7 @@ let sevenZip: string | undefined
|
||||||
/// Extract 7z using 7z
|
/// Extract 7z using 7z
|
||||||
export async function extract7Zip(file: string, dest: string) {
|
export async function extract7Zip(file: string, dest: string) {
|
||||||
await execa(await getSevenZip(), ["x", file, `-o${dest}`, "-y"], { stdio: "inherit" })
|
await execa(await getSevenZip(), ["x", file, `-o${dest}`, "-y"], { stdio: "inherit" })
|
||||||
folderUserAccess(dest)
|
giveUserAccess(dest)
|
||||||
return dest
|
return dest
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +55,6 @@ export async function extractTarByExe(file: string, dest: string, flags = ["--st
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
folderUserAccess(dest)
|
giveUserAccess(dest)
|
||||||
return dest
|
return dest
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
/* eslint-disable require-atomic-updates */
|
/* eslint-disable require-atomic-updates */
|
||||||
import { InstallationInfo } from "./setupBin"
|
import { InstallationInfo } from "./setupBin"
|
||||||
import { execSudo } from "../exec/sudo"
|
import { execRootSync } from "root-tools"
|
||||||
import { info } from "@actions/core"
|
import { info } from "@actions/core"
|
||||||
import { isGitHubCI } from "../env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import { addEnv, cpprc_path, setupCppInProfile } from "../env/addEnv"
|
import { addEnv, cpprc_path, setupCppInProfile } from "../env/addEnv"
|
||||||
import { appendFileSync, existsSync } from "fs"
|
import { appendFileSync, existsSync } from "fs"
|
||||||
import which from "which"
|
import which from "which"
|
||||||
|
@ -36,19 +36,19 @@ export async function setupAptPack(
|
||||||
if (Array.isArray(repositories) && repositories.length !== 0) {
|
if (Array.isArray(repositories) && repositories.length !== 0) {
|
||||||
for (const repo of repositories) {
|
for (const repo of repositories) {
|
||||||
// eslint-disable-next-line no-await-in-loop
|
// eslint-disable-next-line no-await-in-loop
|
||||||
execSudo("add-apt-repository", ["--update", "-y", repo])
|
execRootSync("add-apt-repository", ["--update", "-y", repo])
|
||||||
}
|
}
|
||||||
updateRepos(apt)
|
updateRepos(apt)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version !== undefined && version !== "") {
|
if (version !== undefined && version !== "") {
|
||||||
try {
|
try {
|
||||||
execSudo(apt, ["install", "--fix-broken", "-y", `${name}=${version}`])
|
execRootSync(apt, ["install", "--fix-broken", "-y", `${name}=${version}`])
|
||||||
} catch {
|
} catch {
|
||||||
execSudo(apt, ["install", "--fix-broken", "-y", `${name}-${version}`])
|
execRootSync(apt, ["install", "--fix-broken", "-y", `${name}-${version}`])
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
execSudo(apt, ["install", "--fix-broken", "-y", name])
|
execRootSync(apt, ["install", "--fix-broken", "-y", name])
|
||||||
}
|
}
|
||||||
|
|
||||||
return { binDir: "/usr/bin/" }
|
return { binDir: "/usr/bin/" }
|
||||||
|
@ -65,12 +65,12 @@ function getApt() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateRepos(apt: string) {
|
function updateRepos(apt: string) {
|
||||||
execSudo(apt, apt !== "nala" ? ["update", "-y"] : ["update"])
|
execRootSync(apt, apt !== "nala" ? ["update", "-y"] : ["update"])
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Install apt utils and certificates (usually missing from docker containers) */
|
/** Install apt utils and certificates (usually missing from docker containers) */
|
||||||
async function initApt(apt: string) {
|
async function initApt(apt: string) {
|
||||||
execSudo(apt, [
|
execRootSync(apt, [
|
||||||
"install",
|
"install",
|
||||||
"--fix-broken",
|
"--fix-broken",
|
||||||
"-y",
|
"-y",
|
||||||
|
@ -89,7 +89,7 @@ async function initApt(apt: string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function initGpg() {
|
function initGpg() {
|
||||||
execSudo("gpg", ["-k"])
|
execRootSync("gpg", ["-k"])
|
||||||
}
|
}
|
||||||
|
|
||||||
export function addAptKeyViaServer(keys: string[], name: string, server = "keyserver.ubuntu.com") {
|
export function addAptKeyViaServer(keys: string[], name: string, server = "keyserver.ubuntu.com") {
|
||||||
|
@ -97,7 +97,7 @@ export function addAptKeyViaServer(keys: string[], name: string, server = "keyse
|
||||||
if (!existsSync(fileName)) {
|
if (!existsSync(fileName)) {
|
||||||
initGpg()
|
initGpg()
|
||||||
for (const key of keys) {
|
for (const key of keys) {
|
||||||
execSudo("gpg", [
|
execRootSync("gpg", [
|
||||||
"--no-default-keyring",
|
"--no-default-keyring",
|
||||||
"--keyring",
|
"--keyring",
|
||||||
`gnupg-ring:${fileName}`,
|
`gnupg-ring:${fileName}`,
|
||||||
|
@ -106,7 +106,7 @@ export function addAptKeyViaServer(keys: string[], name: string, server = "keyse
|
||||||
"--recv-keys",
|
"--recv-keys",
|
||||||
key,
|
key,
|
||||||
])
|
])
|
||||||
execSudo("chmod", ["644", fileName])
|
execRootSync("chmod", ["644", fileName])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return fileName
|
return fileName
|
||||||
|
@ -117,15 +117,15 @@ export async function addAptKeyViaDownload(name: string, url: string) {
|
||||||
if (!existsSync(fileName)) {
|
if (!existsSync(fileName)) {
|
||||||
initGpg()
|
initGpg()
|
||||||
await setupAptPack("curl", undefined)
|
await setupAptPack("curl", undefined)
|
||||||
execSudo("bash", ["-c", `curl -s ${url} | gpg --no-default-keyring --keyring gnupg-ring:${fileName} --import`])
|
execRootSync("bash", ["-c", `curl -s ${url} | gpg --no-default-keyring --keyring gnupg-ring:${fileName} --import`])
|
||||||
execSudo("chmod", ["644", fileName])
|
execRootSync("chmod", ["644", fileName])
|
||||||
}
|
}
|
||||||
return fileName
|
return fileName
|
||||||
}
|
}
|
||||||
|
|
||||||
export function updateAptAlternatives(name: string, path: string) {
|
export function updateAptAlternatives(name: string, path: string) {
|
||||||
if (isGitHubCI()) {
|
if (ciDetect() === "github-actions") {
|
||||||
return execSudo("update-alternatives", ["--install", `/usr/bin/${name}`, name, path, "40"])
|
return execRootSync("update-alternatives", ["--install", `/usr/bin/${name}`, name, path, "40"])
|
||||||
} else {
|
} else {
|
||||||
setupCppInProfile()
|
setupCppInProfile()
|
||||||
return appendFileSync(
|
return appendFileSync(
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { addPath } from "../env/addEnv"
|
||||||
import { join } from "path"
|
import { join } from "path"
|
||||||
import { existsSync } from "fs"
|
import { existsSync } from "fs"
|
||||||
import { tmpdir } from "os"
|
import { tmpdir } from "os"
|
||||||
import { isGitHubCI } from "../env/isCI"
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
import { setupAptPack } from "./setupAptPack"
|
import { setupAptPack } from "./setupAptPack"
|
||||||
import { setupPacmanPack } from "./setupPacmanPack"
|
import { setupPacmanPack } from "./setupPacmanPack"
|
||||||
import { isArch } from "../env/isArch"
|
import { isArch } from "../env/isArch"
|
||||||
|
@ -64,7 +64,7 @@ export async function setupBin(
|
||||||
)
|
)
|
||||||
|
|
||||||
// Restore from cache (if found).
|
// Restore from cache (if found).
|
||||||
if (isGitHubCI()) {
|
if (ciDetect() === "github-actions") {
|
||||||
try {
|
try {
|
||||||
const dir = find(name, version)
|
const dir = find(name, version)
|
||||||
if (dir) {
|
if (dir) {
|
||||||
|
@ -129,7 +129,7 @@ export async function setupBin(
|
||||||
await addPath(binDir)
|
await addPath(binDir)
|
||||||
|
|
||||||
// check if inside Github Actions. If so, cache the installation
|
// check if inside Github Actions. If so, cache the installation
|
||||||
if (isGitHubCI() && typeof process.env.RUNNER_TOOL_CACHE === "string") {
|
if (ciDetect() === "github-actions" && typeof process.env.RUNNER_TOOL_CACHE === "string") {
|
||||||
await cacheDir(setupDir, name, version)
|
await cacheDir(setupDir, name, version)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* eslint-disable require-atomic-updates */
|
/* eslint-disable require-atomic-updates */
|
||||||
import { InstallationInfo } from "./setupBin"
|
import { InstallationInfo } from "./setupBin"
|
||||||
import { execSudo } from "../exec/sudo"
|
import { execRootSync } from "root-tools"
|
||||||
import { info, warning } from "../io/io"
|
import { info, warning } from "../io/io"
|
||||||
|
|
||||||
// let didUpdate: boolean = false
|
// let didUpdate: boolean = false
|
||||||
|
@ -12,19 +12,19 @@ export function setupDnfPack(name: string, version?: string): InstallationInfo {
|
||||||
const dnf = "dnf"
|
const dnf = "dnf"
|
||||||
|
|
||||||
// if (!didUpdate) {
|
// if (!didUpdate) {
|
||||||
// execSudo(dnf, ["-y", "check-update"])
|
// execRootSync(dnf, ["-y", "check-update"])
|
||||||
// didUpdate = true
|
// didUpdate = true
|
||||||
// }
|
// }
|
||||||
|
|
||||||
if (version !== undefined && version !== "") {
|
if (version !== undefined && version !== "") {
|
||||||
try {
|
try {
|
||||||
execSudo(dnf, ["-y", "install", `${name}-${version}`])
|
execRootSync(dnf, ["-y", "install", `${name}-${version}`])
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
warning(`${(err as Error).toString()}\nInstalling the default version available via dnf`)
|
warning(`${(err as Error).toString()}\nInstalling the default version available via dnf`)
|
||||||
execSudo(dnf, ["-y", "install", name])
|
execRootSync(dnf, ["-y", "install", name])
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
execSudo(dnf, ["-y", "install", name])
|
execRootSync(dnf, ["-y", "install", name])
|
||||||
}
|
}
|
||||||
|
|
||||||
return { binDir: "/usr/bin/" }
|
return { binDir: "/usr/bin/" }
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* eslint-disable require-atomic-updates */
|
/* eslint-disable require-atomic-updates */
|
||||||
import { InstallationInfo } from "./setupBin"
|
import { InstallationInfo } from "./setupBin"
|
||||||
import { execSudo } from "../exec/sudo"
|
import { execRootSync } from "root-tools"
|
||||||
import { info } from "../io/io"
|
import { info } from "../io/io"
|
||||||
|
|
||||||
let didUpdate: boolean = false
|
let didUpdate: boolean = false
|
||||||
|
@ -13,24 +13,24 @@ export function setupPacmanPack(name: string, version?: string, aur?: string): I
|
||||||
const pacman = "pacman"
|
const pacman = "pacman"
|
||||||
|
|
||||||
if (!didUpdate) {
|
if (!didUpdate) {
|
||||||
execSudo(pacman, ["-Syuu", "--noconfirm"])
|
execRootSync(pacman, ["-Syuu", "--noconfirm"])
|
||||||
didUpdate = true
|
didUpdate = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!didInit) {
|
if (!didInit) {
|
||||||
// install base-devel
|
// install base-devel
|
||||||
execSudo(pacman, ["-Sy", "--noconfirm", "base-devel"])
|
execRootSync(pacman, ["-Sy", "--noconfirm", "base-devel"])
|
||||||
didInit = true
|
didInit = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if (version !== undefined && version !== "") {
|
if (version !== undefined && version !== "") {
|
||||||
try {
|
try {
|
||||||
execSudo(aur ?? pacman, ["-S", "--noconfirm", `${name}=${version}`])
|
execRootSync(aur ?? pacman, ["-S", "--noconfirm", `${name}=${version}`])
|
||||||
} catch {
|
} catch {
|
||||||
execSudo(aur ?? pacman, ["-S", "--noconfirm", `${name}${version}`])
|
execRootSync(aur ?? pacman, ["-S", "--noconfirm", `${name}${version}`])
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
execSudo(aur ?? pacman, ["-S", "--noconfirm", name])
|
execRootSync(aur ?? pacman, ["-S", "--noconfirm", name])
|
||||||
}
|
}
|
||||||
|
|
||||||
return { binDir: "/usr/bin/" }
|
return { binDir: "/usr/bin/" }
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { isValidUrl } from "../http/validate_url"
|
import { getWorks } from "get-works"
|
||||||
import semverCompare from "semver/functions/compare"
|
import semverCompare from "semver/functions/compare"
|
||||||
import semverCoerce from "semver/functions/coerce"
|
import semverCoerce from "semver/functions/coerce"
|
||||||
import semverValid from "semver/functions/valid"
|
import semverValid from "semver/functions/valid"
|
||||||
|
@ -42,7 +42,7 @@ export async function getSpecificVersionAndUrl(
|
||||||
if (platform === "linux" && version.includes("ubuntu")) {
|
if (platform === "linux" && version.includes("ubuntu")) {
|
||||||
const url = await getUrl(platform, version)
|
const url = await getUrl(platform, version)
|
||||||
// eslint-disable-next-line no-await-in-loop
|
// eslint-disable-next-line no-await-in-loop
|
||||||
if (url !== null && (await isValidUrl(url))) {
|
if (url !== null && (await getWorks(url))) {
|
||||||
return [version, url]
|
return [version, url]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ export async function getSpecificVersionAndUrl(
|
||||||
// eslint-disable-next-line no-await-in-loop
|
// eslint-disable-next-line no-await-in-loop
|
||||||
const url = await getUrl(platform, specificVersion)
|
const url = await getUrl(platform, specificVersion)
|
||||||
// eslint-disable-next-line no-await-in-loop
|
// eslint-disable-next-line no-await-in-loop
|
||||||
if (url !== null && (await isValidUrl(url))) {
|
if (url !== null && (await getWorks(url))) {
|
||||||
return [specificVersion, url]
|
return [specificVersion, url]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import * as io from "@actions/io"
|
import * as io from "@actions/io"
|
||||||
import { tmpdir } from "os"
|
import { tmpdir } from "os"
|
||||||
import * as path from "path"
|
import * as path from "path"
|
||||||
import { addBinExtension } from "../extension/extension"
|
import { addBinExtension } from "extension-tools"
|
||||||
import { join } from "path"
|
import { join } from "path"
|
||||||
import spawn from "cross-spawn"
|
import spawn from "cross-spawn"
|
||||||
import { existsSync } from "fs"
|
import { existsSync } from "fs"
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { existsSync } from "fs"
|
||||||
import { dirname, join } from "path"
|
import { dirname, join } from "path"
|
||||||
import which from "which"
|
import which from "which"
|
||||||
import { addPath } from "../utils/env/addEnv"
|
import { addPath } from "../utils/env/addEnv"
|
||||||
import { addShellExtension, addShellHere } from "../utils/extension/extension"
|
import { addShellExtension, addShellHere } from "extension-tools"
|
||||||
import { notice } from "../utils/io/io"
|
import { notice } from "../utils/io/io"
|
||||||
import { setupAptPack } from "../utils/setup/setupAptPack"
|
import { setupAptPack } from "../utils/setup/setupAptPack"
|
||||||
import { setupPacmanPack } from "../utils/setup/setupPacmanPack"
|
import { setupPacmanPack } from "../utils/setup/setupPacmanPack"
|
||||||
|
@ -12,7 +12,7 @@ import { isArch } from "../utils/env/isArch"
|
||||||
import { hasDnf } from "../utils/env/hasDnf"
|
import { hasDnf } from "../utils/env/hasDnf"
|
||||||
import { setupDnfPack } from "../utils/setup/setupDnfPack"
|
import { setupDnfPack } from "../utils/setup/setupDnfPack"
|
||||||
import { isUbuntu } from "../utils/env/isUbuntu"
|
import { isUbuntu } from "../utils/env/isUbuntu"
|
||||||
import { folderUserAccess } from "../utils/fs/userAccess"
|
import { giveUserAccess } from "user-access"
|
||||||
|
|
||||||
let hasVCPKG = false
|
let hasVCPKG = false
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ export async function setupVcpkg(_version: string, setupDir: string, _arch: stri
|
||||||
|
|
||||||
execa.sync(addShellExtension(addShellHere("bootstrap-vcpkg")), { cwd: setupDir, shell: true, stdio: "inherit" })
|
execa.sync(addShellExtension(addShellHere("bootstrap-vcpkg")), { cwd: setupDir, shell: true, stdio: "inherit" })
|
||||||
|
|
||||||
folderUserAccess(setupDir)
|
giveUserAccess(setupDir)
|
||||||
|
|
||||||
await addPath(setupDir)
|
await addPath(setupDir)
|
||||||
// eslint-disable-next-line require-atomic-updates
|
// eslint-disable-next-line require-atomic-updates
|
||||||
|
|
|
@ -17,8 +17,8 @@
|
||||||
"preserveSymlinks": true,
|
"preserveSymlinks": true,
|
||||||
"removeComments": false,
|
"removeComments": false,
|
||||||
"skipLibCheck": false,
|
"skipLibCheck": false,
|
||||||
"lib": ["ES2018", "dom"],
|
"lib": ["ES2020", "dom"],
|
||||||
"target": "ES2018",
|
"target": "ES2020",
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
|
@ -28,5 +28,5 @@
|
||||||
"outDir": "./dist"
|
"outDir": "./dist"
|
||||||
},
|
},
|
||||||
"compileOnSave": false,
|
"compileOnSave": false,
|
||||||
"include": ["./src"]
|
"include": ["./src", "packages/untildify-user/untildify.ts"]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue