mirror of https://github.com/aminya/setup-cpp
fix: print a warning if no tool was installed
This commit is contained in:
parent
5add80e442
commit
10770915e5
19
README.md
19
README.md
|
@ -37,7 +37,7 @@ The package can be used locally or from CI services like GitHub Actions.
|
|||
|
||||
# Usage
|
||||
|
||||
# From Terminal
|
||||
## From Terminal
|
||||
|
||||
You should download the executable file or the js file (if Nodejs installed), and run it with the available options.
|
||||
|
||||
|
@ -105,7 +105,7 @@ sudo node ./setup_cpp.js --compiler llvm --cmake true --ninja true --ccache true
|
|||
source ~/.profile # reload the environment
|
||||
```
|
||||
|
||||
# Inside GitHub Actions
|
||||
## Inside GitHub Actions
|
||||
|
||||
Here is a complete cross-platform example that tests llvm, gcc, and msvc. It also uses cmake, ninja, vcpkg, and cppcheck.
|
||||
|
||||
|
@ -157,14 +157,16 @@ jobs:
|
|||
uses: aminya/setup-cpp@v1
|
||||
with:
|
||||
compiler: ${{ matrix.compiler }}
|
||||
vcvarsall: ${{ contains(matrix.os, 'windows') }}
|
||||
cmake: true
|
||||
ninja: true
|
||||
vcpkg: true
|
||||
cppcheck: true # instead of `true`, which chooses the default version, you can pass a specific version.
|
||||
# add any tool that you need here...
|
||||
cppcheck: true
|
||||
clangtidy: true # instead of `true`, which chooses the default version, you can pass a specific version.
|
||||
# ...
|
||||
```
|
||||
|
||||
# Inside Docker
|
||||
## Inside Docker
|
||||
|
||||
Here is an example for using setup_cpp to make a builder image that has the Cpp tools you need.
|
||||
|
||||
|
@ -196,7 +198,7 @@ If you want to build the ones included, then run:
|
|||
docker build -f ./building/docker/debian.dockerfile -t setup_cpp .
|
||||
```
|
||||
|
||||
Where you should use the path to the docker after `-f`.
|
||||
Where you should use the path to the dockerfile after `-f`.
|
||||
|
||||
After build, run the following to start an interactive shell in your container
|
||||
|
||||
|
@ -204,7 +206,7 @@ After build, run the following to start an interactive shell in your container
|
|||
docker run -it setup_cpp
|
||||
```
|
||||
|
||||
# Inside Docker inside GitHub Actions
|
||||
## Inside Docker inside GitHub Actions
|
||||
|
||||
You can use the docker file discussed in the previous section inside GitHub Actions like the following:
|
||||
|
||||
|
@ -226,7 +228,7 @@ jobs:
|
|||
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
|
||||
```
|
||||
|
||||
# GitLab PipeLines
|
||||
## Inside GitLab pipelines
|
||||
|
||||
The following gives an example for setting up a C++ environment inside GitLab pipelines.
|
||||
|
||||
|
@ -289,6 +291,7 @@ test_linux_gcc:
|
|||
|
||||
# Usage Examples
|
||||
|
||||
- [cpp-best-practices starter project](https://github.com/cpp-best-practices/cpp_starter_project)
|
||||
- [libclang](https://github.com/atilaneves/libclang)
|
||||
- [dpp](https://github.com/atilaneves/dpp)
|
||||
- [d-tree-sitter](https://github.com/aminya/d-tree-sitter)
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
36
src/main.ts
36
src/main.ts
|
@ -21,7 +21,7 @@ import semverValid from "semver/functions/valid"
|
|||
import { getVersion } from "./default_versions"
|
||||
import { setupGcc } from "./gcc/gcc"
|
||||
import { InstallationInfo } from "./utils/setup/setupBin"
|
||||
import { error, success } from "./utils/io/io"
|
||||
import { error, success, warning } from "./utils/io/io"
|
||||
import { setupVcpkg } from "./vcpkg/vcpkg"
|
||||
import { join } from "path"
|
||||
import { setupVCVarsall } from "./vcvarsall/vcvarsall"
|
||||
|
@ -134,11 +134,7 @@ export async function main(args: string[]): Promise<number> {
|
|||
installationInfo = await setupFunction(getVersion(tool, value), join(setupCppDir, tool), arch)
|
||||
}
|
||||
// preparing a report string
|
||||
if (installationInfo !== undefined) {
|
||||
successMessages.push(getSuccessMessage(tool, installationInfo))
|
||||
} else {
|
||||
successMessages.push(`${tool} was successfully installed`)
|
||||
}
|
||||
successMessages.push(getSuccessMessage(tool, installationInfo))
|
||||
} catch (e) {
|
||||
// push error message to the logger
|
||||
error(e as string | Error)
|
||||
|
@ -158,14 +154,20 @@ export async function main(args: string[]): Promise<number> {
|
|||
case "llvm":
|
||||
case "clang":
|
||||
case "clang++": {
|
||||
await setupLLVM(getVersion("llvm", version) as string, join(setupCppDir, "llvm"), arch)
|
||||
const installationInfo = await setupLLVM(
|
||||
getVersion("llvm", version) as string,
|
||||
join(setupCppDir, "llvm"),
|
||||
arch
|
||||
)
|
||||
successMessages.push(getSuccessMessage("llvm", installationInfo))
|
||||
break
|
||||
}
|
||||
case "gcc":
|
||||
case "mingw":
|
||||
case "cygwin":
|
||||
case "msys": {
|
||||
await setupGcc(getVersion("gcc", version) as string, join(setupCppDir, "gcc"), arch)
|
||||
const installationInfo = await setupGcc(getVersion("gcc", version) as string, join(setupCppDir, "gcc"), arch)
|
||||
successMessages.push(getSuccessMessage("gcc", installationInfo))
|
||||
break
|
||||
}
|
||||
case "cl":
|
||||
|
@ -175,7 +177,12 @@ export async function main(args: string[]): Promise<number> {
|
|||
case "visualstudio":
|
||||
case "visualcpp":
|
||||
case "visualc++": {
|
||||
await setupMSVC(getVersion("msvc", version) as string, join(setupCppDir, "msvc"), arch)
|
||||
const installationInfo = await setupMSVC(
|
||||
getVersion("msvc", version) as string,
|
||||
join(setupCppDir, "msvc"),
|
||||
arch
|
||||
)
|
||||
successMessages.push(getSuccessMessage("msvc", installationInfo))
|
||||
break
|
||||
}
|
||||
case "appleclang":
|
||||
|
@ -183,6 +190,7 @@ export async function main(args: string[]): Promise<number> {
|
|||
core.info("Assuming apple-clang is already installed")
|
||||
addEnv("CC", "clang")
|
||||
addEnv("CXX", "clang++")
|
||||
successMessages.push(getSuccessMessage("apple-clang", undefined))
|
||||
break
|
||||
}
|
||||
default: {
|
||||
|
@ -195,6 +203,11 @@ export async function main(args: string[]): Promise<number> {
|
|||
errorMessages.push(`Failed to install the ${maybeCompiler}`)
|
||||
}
|
||||
|
||||
if (successMessages.length === 0 && errorMessages.length === 0) {
|
||||
warning("setup_cpp was called without any arguments. Nothing to do.")
|
||||
return 0
|
||||
}
|
||||
|
||||
// report the messages in the end
|
||||
successMessages.forEach((tool) => success(tool))
|
||||
errorMessages.forEach((tool) => error(tool))
|
||||
|
@ -292,8 +305,11 @@ function maybeGetInput(key: string) {
|
|||
return undefined // skip installation
|
||||
}
|
||||
|
||||
function getSuccessMessage(tool: string, installationInfo: InstallationInfo) {
|
||||
function getSuccessMessage(tool: string, installationInfo: InstallationInfo | undefined | void) {
|
||||
let msg = `${tool} was successfully installed`
|
||||
if (installationInfo === undefined) {
|
||||
return msg
|
||||
}
|
||||
if ("installDir" in installationInfo) {
|
||||
msg += `\nThe installation directory is ${installationInfo.installDir}`
|
||||
}
|
||||
|
|
|
@ -8,3 +8,7 @@ export function error(err: string | Error) {
|
|||
export function success(msg: string) {
|
||||
return isGitHubCI() ? core.info(msg) : console.log(`\x1b[32m${msg}\x1b[0m`)
|
||||
}
|
||||
|
||||
export function warning(msg: string) {
|
||||
return isGitHubCI() ? core.warning(msg) : console.log(`\x1b[33m${msg}\x1b[0m`)
|
||||
}
|
Loading…
Reference in New Issue