mirror of https://github.com/aminya/setup-cpp
Merge branch 'master' into feature/cross-mingw
This commit is contained in:
parent
ae58022c4b
commit
a2d7d8fb1b
|
@ -103,16 +103,16 @@ jobs:
|
||||||
gzip: folders
|
gzip: folders
|
||||||
draft: true
|
draft: true
|
||||||
files: >
|
files: >
|
||||||
./exe/setup_cpp_windows.exe
|
./exe/setup-cpp-x64-windows.exe
|
||||||
./exe/setup_cpp_linux
|
./exe/setup-cpp-x64-linux
|
||||||
./exe/setup_cpp_mac
|
./exe/setup-cpp-x64-macos
|
||||||
./dist/node12/setup_cpp.js
|
./dist/node12/setup-cpp.js
|
||||||
./dist/node12/setup_cpp.js.map
|
./dist/node12/setup-cpp.js.map
|
||||||
./dist/node12/
|
./dist/node12/
|
||||||
./dist/node16/
|
./dist/node16/
|
||||||
|
|
||||||
Docker:
|
Docker:
|
||||||
if: ${{ !contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[skip docker]') }}
|
if: ${{ !contains(github.event.head_commit.message, '[skip ci]') && !contains(github.event.head_commit.message, '[skip test]') }}
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
@ -166,4 +166,4 @@ jobs:
|
||||||
- name: Build
|
- name: Build
|
||||||
id: docker_build
|
id: docker_build
|
||||||
run: |
|
run: |
|
||||||
docker build -f ./dev/docker/${{ matrix.container }} -t setup_cpp .
|
docker build -f ./dev/docker/${{ matrix.container }} -t setup-cpp .
|
||||||
|
|
|
@ -7,3 +7,4 @@ stats.html
|
||||||
src/python/setup-python/
|
src/python/setup-python/
|
||||||
src/msvc/msvc-dev-cmd/
|
src/msvc/msvc-dev-cmd/
|
||||||
dev/cpp_vcpkg_project
|
dev/cpp_vcpkg_project
|
||||||
|
package.json
|
||||||
|
|
109
README.md
109
README.md
|
@ -30,69 +30,64 @@ Setting up a **cross-platform** environment for building and testing C++/C proje
|
||||||
|
|
||||||
### From Terminal
|
### From Terminal
|
||||||
|
|
||||||
You should download the executable file or the js file (if Nodejs installed), and run it with the available options.
|
#### With npm and Nodejs
|
||||||
|
|
||||||
Tip: You can automate downloading using `wget`, `curl`, or other similar tools.
|
Install setup-cpp with npm:
|
||||||
|
|
||||||
#### Executable
|
```shell
|
||||||
|
npm install -g setup-cpp
|
||||||
Download the executable for your platform from [here](https://github.com/aminya/setup-cpp/releases/tag/v0.24.1), and run it with the available options.
|
|
||||||
|
|
||||||
An example that installs llvm, cmake, ninja, ccache, and vcpkg:
|
|
||||||
|
|
||||||
```ps1
|
|
||||||
# windows example (open shell as admin)
|
|
||||||
curl.exe -LJO "https://github.com/aminya/setup-cpp/releases/download/v0.24.1/setup_cpp_windows.exe"
|
|
||||||
.\setup_cpp_windows --compiler llvm --cmake true --ninja true --ccache true --vcpkg true
|
|
||||||
|
|
||||||
RefreshEnv.cmd # activate cpp environment variables
|
|
||||||
```
|
```
|
||||||
|
|
||||||
```ps1
|
Then run `setup-cpp` with the available options.
|
||||||
# linux example
|
|
||||||
wget "https://github.com/aminya/setup-cpp/releases/download/v0.24.1/setup_cpp_linux"
|
|
||||||
chmod +x setup_cpp_linux
|
|
||||||
sudo ./setup_cpp_linux --compiler llvm --cmake true --ninja true --ccache true --vcpkg true
|
|
||||||
|
|
||||||
source ~/.cpprc # activate cpp environment variables
|
```shell
|
||||||
|
# windows example (open PowerShell as admin)
|
||||||
|
setup-cpp --compiler llvm --cmake true --ninja true --ccache true --vcpkg true
|
||||||
|
|
||||||
|
RefreshEnv.cmd # activate the environment
|
||||||
```
|
```
|
||||||
|
|
||||||
```ps1
|
```shell
|
||||||
# mac example
|
# linux/macos example
|
||||||
wget "https://github.com/aminya/setup-cpp/releases/download/v0.24.1/setup_cpp_mac"
|
sudo setup-cpp --compiler llvm --cmake true --ninja true --ccache true --vcpkg true
|
||||||
chmod +x setup_cpp_mac
|
|
||||||
sudo ./setup_cpp_mac --compiler llvm --cmake true --ninja true --ccache true --vcpkg true
|
|
||||||
|
|
||||||
source ~/.cpprc # activate cpp environment variables
|
source ~/.cpprc
|
||||||
```
|
```
|
||||||
|
|
||||||
NOTE: In the `compiler` entry, you can specify the version after `-` like `llvm-11.0.0`. For the tools, you can pass a specific version instead of `true` that chooses the default version
|
NOTE: In the `compiler` entry, you can specify the version after `-` like `llvm-11.0.0`. For the tools, you can pass a specific version instead of `true` that chooses the default version
|
||||||
|
|
||||||
NOTE: On Unix systems, when `setup-cpp` is used locally or in other CI services like GitLab, the environment variables are added to `~/.cpprc`. You should run `source ~/.cpprc` to immediately activate the environment variables. This file is automatically sourced in the next shell restart from `~/.bashrc` or `~/.profile` if `SOURCE_CPPRC` is not set to `0`. To deactivate `.cpprc` in the next shell restart, rename/remove `~/.cpprc`.
|
NOTE: On Unix systems, when `setup-cpp` is used locally or in other CI services like GitLab, the environment variables are added to `~/.cpprc`. You should run `source ~/.cpprc` to immediately activate the environment variables. This file is automatically sourced in the next shell restart from `~/.bashrc` or `~/.profile` if `SOURCE_CPPRC` is not set to `0`. To deactivate `.cpprc` in the next shell restart, rename/remove `~/.cpprc`.
|
||||||
|
|
||||||
NOTE: On Unix systems, you will not need `sudo` if you are already a root user (e.g., in a GitLab runner or Docker).
|
NOTE: On Unix systems, if you are already a root user (e.g., in a GitLab runner or Docker), you will not need to use `sudo`.
|
||||||
|
|
||||||
#### With Nodejs
|
#### With executable
|
||||||
|
|
||||||
Download the `setup_cpp.js` file form [here](https://github.com/aminya/setup-cpp/releases/download/v0.24.1/setup_cpp.js), and run it with the available options.
|
Download the executable for your platform from [here](https://github.com/aminya/setup-cpp/releases/tag/v0.26.2), and run it with the available options. You can also automate downloading using `wget`, `curl`, or other similar tools.
|
||||||
|
|
||||||
On Windows:
|
An example that installs llvm, cmake, ninja, ccache, and vcpkg:
|
||||||
|
|
||||||
Open the shell as admin, download via `curl`, then install
|
```shell
|
||||||
|
# windows example (open PowerShell as admin)
|
||||||
```ps1
|
curl -LJO "https://github.com/aminya/setup-cpp/releases/download/v0.26.2/setup-cpp-x64-windows.exe"
|
||||||
# open shell as admin
|
./setup-cpp-x64-windows --compiler llvm --cmake true --ninja true --ccache true --vcpkg true
|
||||||
curl.exe -LJO "https://github.com/aminya/setup-cpp/releases/download/v0.24.1/setup_cpp.js"
|
|
||||||
node ./setup_cpp.js --compiler llvm --cmake true --ninja true --ccache true --vcpkg true
|
|
||||||
|
|
||||||
RefreshEnv.cmd # activate cpp environment variables
|
RefreshEnv.cmd # activate cpp environment variables
|
||||||
```
|
```
|
||||||
|
|
||||||
On Linux or Mac:
|
```shell
|
||||||
|
# linux example
|
||||||
|
wget "https://github.com/aminya/setup-cpp/releases/download/v0.26.2/setup-cpp-x64-linux"
|
||||||
|
chmod +x ./setup-cpp-x64-linux
|
||||||
|
sudo ./setup-cpp-x64-linux --compiler llvm --cmake true --ninja true --ccache true --vcpkg true
|
||||||
|
|
||||||
```ps1
|
source ~/.cpprc # activate cpp environment variables
|
||||||
wget "https://github.com/aminya/setup-cpp/releases/download/v0.24.1/setup_cpp.js"
|
```
|
||||||
sudo node ./setup_cpp.js --compiler llvm --cmake true --ninja true --ccache true --vcpkg true
|
|
||||||
|
```shell
|
||||||
|
# macos example
|
||||||
|
wget "https://github.com/aminya/setup-cpp/releases/download/v0.26.2/setup-cpp-x64-macos"
|
||||||
|
chmod +x ./setup-cpp-x64-macos
|
||||||
|
sudo ./setup-cpp-x64-macos --compiler llvm --cmake true --ninja true --ccache true --vcpkg true
|
||||||
|
|
||||||
source ~/.cpprc # activate cpp environment variables
|
source ~/.cpprc # activate cpp environment variables
|
||||||
```
|
```
|
||||||
|
@ -160,21 +155,19 @@ jobs:
|
||||||
|
|
||||||
### Inside Docker
|
### Inside Docker
|
||||||
|
|
||||||
Here is an example for using setup_cpp to make a builder image that has the Cpp tools you need.
|
Here is an example for using setup-cpp to make a builder image that has the Cpp tools you need.
|
||||||
|
|
||||||
```dockerfile
|
```dockerfile
|
||||||
#### Base Image
|
#### Base Image
|
||||||
FROM ubuntu:22.04 AS base
|
FROM ubuntu:22.04 AS base
|
||||||
|
|
||||||
# add setup_cpp
|
# add setup-cpp
|
||||||
WORKDIR "/"
|
|
||||||
RUN apt-get update -qq
|
RUN apt-get update -qq
|
||||||
RUN apt-get install -y --no-install-recommends wget
|
RUN apt-get install -y --no-install-recommends npm
|
||||||
RUN wget --no-verbose "https://github.com/aminya/setup-cpp/releases/download/v0.24.1/setup_cpp_linux"
|
RUN npm install -g setup-cpp
|
||||||
RUN chmod +x ./setup_cpp_linux
|
|
||||||
|
|
||||||
# install llvm, cmake, ninja, and ccache
|
# install llvm, cmake, ninja, and ccache
|
||||||
RUN ./setup_cpp_linux --compiler llvm --cmake true --ninja true --ccache true --vcpkg true --make true
|
RUN setup-cpp --compiler llvm --cmake true --ninja true --ccache true --vcpkg true --make true
|
||||||
|
|
||||||
CMD source ~/.cpprc
|
CMD source ~/.cpprc
|
||||||
ENTRYPOINT [ "/bin/bash" ]
|
ENTRYPOINT [ "/bin/bash" ]
|
||||||
|
@ -199,18 +192,18 @@ See [this folder](https://github.com/aminya/setup-cpp/tree/master/dev/docker), f
|
||||||
|
|
||||||
If you want to build the ones included, then run:
|
If you want to build the ones included, then run:
|
||||||
|
|
||||||
```ps1
|
```shell
|
||||||
git clone --recurse-submodules https://github.com/aminya/setup-cpp
|
git clone --recurse-submodules https://github.com/aminya/setup-cpp
|
||||||
cd ./setup-cpp
|
cd ./setup-cpp
|
||||||
docker build -f ./dev/docker/ubuntu.dockerfile -t setup_cpp .
|
docker build -f ./dev/docker/ubuntu.dockerfile -t setup-cpp .
|
||||||
```
|
```
|
||||||
|
|
||||||
Where you should use the path to the dockerfile 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
|
After build, run the following to start an interactive shell in your container
|
||||||
|
|
||||||
```ps1
|
```shell
|
||||||
docker run -it setup_cpp
|
docker run -it setup-cpp
|
||||||
```
|
```
|
||||||
|
|
||||||
### Inside Docker inside GitHub Actions
|
### Inside Docker inside GitHub Actions
|
||||||
|
@ -230,7 +223,7 @@ jobs:
|
||||||
- name: Build
|
- name: Build
|
||||||
id: docker_build
|
id: docker_build
|
||||||
run: |
|
run: |
|
||||||
docker build -f ./dev/docker/debian.dockerfile -t setup_cpp .
|
docker build -f ./dev/docker/debian.dockerfile -t setup-cpp .
|
||||||
```
|
```
|
||||||
|
|
||||||
### Inside GitLab pipelines
|
### Inside GitLab pipelines
|
||||||
|
@ -261,10 +254,10 @@ stages:
|
||||||
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
|
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5
|
||||||
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1E9377A2BA9EF27F
|
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1E9377A2BA9EF27F
|
||||||
|
|
||||||
.setup_cpp: &setup_cpp |
|
.setup-cpp: &setup-cpp |
|
||||||
curl -LJO "https://github.com/aminya/setup-cpp/releases/download/v0.24.1/setup_cpp_linux"
|
curl -LJO "https://github.com/aminya/setup-cpp/releases/download/v0.26.2/setup-cpp-x64-linux"
|
||||||
chmod +x setup_cpp_linux
|
chmod +x setup-cpp-x64-linux
|
||||||
./setup_cpp_linux --compiler $compiler --cmake true --ninja true --ccache true --vcpkg true
|
./setup-cpp-x64-linux --compiler $compiler --cmake true --ninja true --ccache true --vcpkg true
|
||||||
source ~/.cpprc
|
source ~/.cpprc
|
||||||
|
|
||||||
.test: &test |
|
.test: &test |
|
||||||
|
@ -277,7 +270,7 @@ test_linux_llvm:
|
||||||
compiler: llvm
|
compiler: llvm
|
||||||
script:
|
script:
|
||||||
- *setup_linux
|
- *setup_linux
|
||||||
- *setup_cpp
|
- *setup-cpp
|
||||||
- *test
|
- *test
|
||||||
|
|
||||||
test_linux_gcc:
|
test_linux_gcc:
|
||||||
|
@ -286,7 +279,7 @@ test_linux_gcc:
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
script:
|
script:
|
||||||
- *setup_linux
|
- *setup_linux
|
||||||
- *setup_cpp
|
- *setup-cpp
|
||||||
- *test
|
- *test
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -81,10 +81,13 @@ inputs:
|
||||||
nala:
|
nala:
|
||||||
description: 'The nala version to install ("" or "legacy").'
|
description: 'The nala version to install ("" or "legacy").'
|
||||||
required: false
|
required: false
|
||||||
|
powershell:
|
||||||
|
description: "The powershell version to install."
|
||||||
|
required: false
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: "node16"
|
using: "node16"
|
||||||
main: "dist/node16/setup_cpp.js"
|
main: "dist/node16/setup-cpp.js"
|
||||||
|
|
||||||
branding:
|
branding:
|
||||||
icon: "award"
|
icon: "award"
|
||||||
|
|
|
@ -10,30 +10,28 @@ RUN pacman -S --noconfirm --needed nodejs
|
||||||
# curl for downloading setup-cpp
|
# curl for downloading setup-cpp
|
||||||
RUN pacman -S --noconfirm --needed curl
|
RUN pacman -S --noconfirm --needed curl
|
||||||
|
|
||||||
# add setup_cpp.js
|
# add setup-cpp.js
|
||||||
COPY "./dist/node12" "/"
|
COPY "./dist/node12" "/"
|
||||||
WORKDIR "/"
|
WORKDIR "/"
|
||||||
|
|
||||||
# run installation
|
# run installation
|
||||||
RUN node ./setup_cpp.js --compiler llvm --cmake true --ninja true --cppcheck true --ccache true --vcpkg true --doxygen true --gcovr true --task true
|
RUN node ./setup-cpp.js --compiler llvm --cmake true --ninja true --cppcheck true --ccache true --vcpkg true --doxygen true --gcovr true --task true
|
||||||
|
|
||||||
# clean up
|
CMD ["source", "~/.cpprc"]
|
||||||
RUN pacman -Scc --noconfirm
|
ENTRYPOINT ["/bin/bash"]
|
||||||
RUN rm -rf /tmp/*
|
|
||||||
|
|
||||||
CMD source ~/.cpprc
|
|
||||||
ENTRYPOINT [ "/bin/bash" ]
|
|
||||||
|
|
||||||
#### Building
|
#### Building
|
||||||
FROM base AS builder
|
FROM base as builder
|
||||||
COPY ./dev/cpp_vcpkg_project /home/app
|
COPY ./dev/cpp_vcpkg_project /home/app
|
||||||
WORKDIR /home/app
|
WORKDIR /home/app
|
||||||
RUN bash -c 'source ~/.cpprc \
|
RUN bash -c 'source ~/.cpprc \
|
||||||
&& task build'
|
&& task build'
|
||||||
|
|
||||||
|
|
||||||
### Running environment
|
### Running environment
|
||||||
# use a distroless image or ubuntu:22.04 if you wish
|
# use a distroless image or ubuntu:22.04 if you wish
|
||||||
FROM gcr.io/distroless/cc
|
FROM gcr.io/distroless/cc as runner
|
||||||
# copy the built binaries and their runtime dependencies
|
# copy the built binaries and their runtime dependencies
|
||||||
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
||||||
WORKDIR /home/app/
|
WORKDIR /home/app/
|
||||||
|
|
|
@ -1,35 +1,31 @@
|
||||||
## base image
|
## base image
|
||||||
FROM fedora as base
|
FROM fedora as base
|
||||||
|
|
||||||
# nodejs
|
# nodejs and curl for downloading setup-cpp
|
||||||
RUN dnf -y install nodejs
|
RUN dnf -y install nodejs curl
|
||||||
|
|
||||||
# curl for downloading setup-cpp
|
# add setup-cpp.js
|
||||||
RUN dnf -y install curl
|
|
||||||
|
|
||||||
# add setup_cpp.js
|
|
||||||
COPY "./dist/node12" "/"
|
COPY "./dist/node12" "/"
|
||||||
WORKDIR "/"
|
WORKDIR "/"
|
||||||
|
|
||||||
# run installation
|
# run installation
|
||||||
RUN node ./setup_cpp.js --compiler llvm --cmake true --ninja true --cppcheck true --ccache true --vcpkg true --doxygen true --gcovr true --task true --powershell true
|
RUN node ./setup-cpp.js --compiler llvm --cmake true --ninja true --cppcheck true --ccache true --vcpkg true --doxygen true --gcovr true --task true --powershell true
|
||||||
|
|
||||||
# clean up
|
CMD ["source", "~/.cpprc"]
|
||||||
RUN rm -rf /tmp/*
|
|
||||||
|
|
||||||
CMD source ~/.cpprc
|
|
||||||
ENTRYPOINT [ "/bin/bash" ]
|
ENTRYPOINT [ "/bin/bash" ]
|
||||||
|
|
||||||
|
|
||||||
#### Building
|
#### Building
|
||||||
FROM base AS builder
|
FROM base as builder
|
||||||
COPY ./dev/cpp_vcpkg_project /home/app
|
COPY ./dev/cpp_vcpkg_project /home/app
|
||||||
WORKDIR /home/app
|
WORKDIR /home/app
|
||||||
RUN bash -c 'source ~/.cpprc \
|
RUN bash -c 'source ~/.cpprc \
|
||||||
&& task build'
|
&& task build'
|
||||||
|
|
||||||
|
|
||||||
### Running environment
|
### Running environment
|
||||||
# use a distroless image or ubuntu:22.04 if you wish
|
# use a distroless image or ubuntu:22.04 if you wish
|
||||||
FROM gcr.io/distroless/cc
|
FROM gcr.io/distroless/cc as runner
|
||||||
# copy the built binaries and their runtime dependencies
|
# copy the built binaries and their runtime dependencies
|
||||||
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
||||||
WORKDIR /home/app/
|
WORKDIR /home/app/
|
||||||
|
|
|
@ -1,29 +1,29 @@
|
||||||
#### Base Image
|
#### Base Image
|
||||||
FROM ubuntu:22.04 AS base
|
FROM ubuntu:22.04 as base
|
||||||
|
|
||||||
# add setup_cpp
|
# install setup-cpp
|
||||||
WORKDIR "/"
|
|
||||||
RUN apt-get update -qq
|
RUN apt-get update -qq
|
||||||
RUN apt-get install -y --no-install-recommends wget
|
RUN apt-get install -y --no-install-recommends npm
|
||||||
RUN wget --no-verbose "https://github.com/aminya/setup-cpp/releases/download/v0.24.1/setup_cpp_linux"
|
RUN npm install -g setup-cpp
|
||||||
RUN chmod +x ./setup_cpp_linux
|
|
||||||
|
|
||||||
# install llvm, cmake, ninja, and ccache
|
# install llvm, cmake, ninja, and ccache
|
||||||
RUN ./setup_cpp_linux --compiler llvm --cmake true --ninja true --ccache true --vcpkg true --task true
|
RUN setup-cpp --compiler llvm --cmake true --ninja true --ccache true --vcpkg true --task true
|
||||||
|
|
||||||
|
CMD ["source", "~/.cpprc"]
|
||||||
|
ENTRYPOINT ["/bin/bash"]
|
||||||
|
|
||||||
CMD source ~/.cpprc
|
|
||||||
ENTRYPOINT [ "/bin/bash" ]
|
|
||||||
|
|
||||||
#### Building
|
#### Building
|
||||||
FROM base AS builder
|
FROM base as builder
|
||||||
ADD ./dev/cpp_vcpkg_project /home/app
|
COPY ./dev/cpp_vcpkg_project /home/app
|
||||||
WORKDIR /home/app
|
WORKDIR /home/app
|
||||||
RUN bash -c 'source ~/.cpprc \
|
RUN bash -c 'source ~/.cpprc \
|
||||||
&& task build'
|
&& task build'
|
||||||
|
|
||||||
|
|
||||||
### Running environment
|
### Running environment
|
||||||
# use a distroless image or ubuntu:22.04 if you wish
|
# use a distroless image or ubuntu:22.04 if you wish
|
||||||
FROM gcr.io/distroless/cc
|
FROM gcr.io/distroless/cc as runner
|
||||||
# copy the built binaries and their runtime dependencies
|
# copy the built binaries and their runtime dependencies
|
||||||
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
||||||
WORKDIR /home/app/
|
WORKDIR /home/app/
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
FROM ubuntu:20.04 AS base
|
FROM ubuntu:20.04 as base
|
||||||
|
|
||||||
# set time-zone
|
# set time-zone
|
||||||
ENV TZ=Canada/Pacific
|
ENV TZ=Canada/Pacific
|
||||||
|
@ -8,29 +8,31 @@ RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
RUN apt-get update -qq
|
RUN apt-get update -qq
|
||||||
RUN apt-get install -y --no-install-recommends curl gnupg ca-certificates
|
RUN apt-get install -y --no-install-recommends curl gnupg ca-certificates
|
||||||
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
|
RUN ["/bin/bash", "-c", "set -o pipefail && curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -"]
|
||||||
RUN apt-get install -y --no-install-recommends nodejs
|
RUN apt-get install -y --no-install-recommends nodejs
|
||||||
|
|
||||||
# add setup_cpp.js
|
# add setup-cpp.js
|
||||||
COPY "./dist/node12" "/"
|
COPY "./dist/node12" "/"
|
||||||
WORKDIR "/"
|
WORKDIR "/"
|
||||||
|
|
||||||
# run installation
|
# run installation
|
||||||
RUN node ./setup_cpp.js --compiler llvm --cmake true --ninja true --cppcheck true --ccache true --vcpkg true --doxygen true --gcovr true --task true
|
RUN node ./setup-cpp.js --compiler llvm --cmake true --ninja true --cppcheck true --ccache true --vcpkg true --doxygen true --gcovr true --task true
|
||||||
|
|
||||||
|
CMD ["source", "~/.cpprc"]
|
||||||
|
ENTRYPOINT ["/bin/bash"]
|
||||||
|
|
||||||
CMD source ~/.cpprc
|
|
||||||
ENTRYPOINT [ "/bin/bash" ]
|
|
||||||
|
|
||||||
#### Building
|
#### Building
|
||||||
FROM base AS builder
|
FROM base as builder
|
||||||
ADD ./dev/cpp_vcpkg_project /home/app
|
COPY ./dev/cpp_vcpkg_project /home/app
|
||||||
WORKDIR /home/app
|
WORKDIR /home/app
|
||||||
RUN bash -c 'source ~/.cpprc \
|
RUN bash -c 'source ~/.cpprc \
|
||||||
&& task build'
|
&& task build'
|
||||||
|
|
||||||
|
|
||||||
### Running environment
|
### Running environment
|
||||||
# use a distroless image or ubuntu:20.04 if you wish
|
# use a distroless image or ubuntu:20.04 if you wish
|
||||||
FROM gcr.io/distroless/cc
|
FROM gcr.io/distroless/cc as runner
|
||||||
# copy the built binaries and their runtime dependencies
|
# copy the built binaries and their runtime dependencies
|
||||||
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
||||||
WORKDIR /home/app/
|
WORKDIR /home/app/
|
||||||
|
|
|
@ -3,20 +3,17 @@ FROM ubuntu:22.04 AS base
|
||||||
RUN apt-get update -qq
|
RUN apt-get update -qq
|
||||||
RUN apt-get install -y --no-install-recommends nodejs
|
RUN apt-get install -y --no-install-recommends nodejs
|
||||||
|
|
||||||
# add setup_cpp.js
|
# add setup-cpp.js
|
||||||
COPY "./dist/node12" "/"
|
COPY "./dist/node12" "/"
|
||||||
WORKDIR "/"
|
WORKDIR "/"
|
||||||
|
|
||||||
# run installation
|
# run installation
|
||||||
RUN node ./setup_cpp.js --compiler llvm --cmake true --ninja true --cppcheck true --ccache true --vcpkg true --doxygen true --gcovr true --task true --powershell true
|
RUN node ./setup-cpp.js --compiler llvm --cmake true --ninja true --cppcheck true --ccache true --vcpkg true --doxygen true --gcovr true --task true --powershell true
|
||||||
|
|
||||||
# clean up
|
CMD ["source", "~/.cpprc"]
|
||||||
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
||||||
RUN rm -rf /tmp/*
|
|
||||||
|
|
||||||
CMD source ~/.cpprc
|
|
||||||
ENTRYPOINT [ "/bin/bash" ]
|
ENTRYPOINT [ "/bin/bash" ]
|
||||||
|
|
||||||
|
|
||||||
#### Building
|
#### Building
|
||||||
FROM base AS builder
|
FROM base AS builder
|
||||||
COPY ./dev/cpp_vcpkg_project /home/app
|
COPY ./dev/cpp_vcpkg_project /home/app
|
||||||
|
@ -24,9 +21,10 @@ WORKDIR /home/app
|
||||||
RUN bash -c 'source ~/.cpprc \
|
RUN bash -c 'source ~/.cpprc \
|
||||||
&& task build'
|
&& task build'
|
||||||
|
|
||||||
|
|
||||||
### Running environment
|
### Running environment
|
||||||
# use a distroless image or ubuntu:22.04 if you wish
|
# use a distroless image or ubuntu:22.04 if you wish
|
||||||
FROM gcr.io/distroless/cc
|
FROM gcr.io/distroless/cc as runner
|
||||||
# copy the built binaries and their runtime dependencies
|
# copy the built binaries and their runtime dependencies
|
||||||
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
COPY --from=builder /home/app/build/my_exe/Release/ /home/app/
|
||||||
WORKDIR /home/app/
|
WORKDIR /home/app/
|
||||||
|
|
|
@ -5,7 +5,7 @@ const { join, dirname } = require("path")
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
console.log("Disabling debug messages inside @actions/core")
|
console.log("Disabling debug messages inside @actions/core")
|
||||||
const file = join(dirname(__dirname), "dist", "setup_cpp.js")
|
const file = join(dirname(__dirname), "dist", "setup-cpp.js")
|
||||||
const { code, map } = await minify(readFileSync(file, "utf8"), { sourceMap: true, ...require("../.terserrc.js") })
|
const { code, map } = await minify(readFileSync(file, "utf8"), { sourceMap: true, ...require("../.terserrc.js") })
|
||||||
|
|
||||||
writeFileSync(file, code)
|
writeFileSync(file, code)
|
||||||
|
|
|
@ -7,7 +7,7 @@ function getPlatformName() {
|
||||||
return "windows"
|
return "windows"
|
||||||
}
|
}
|
||||||
case "darwin": {
|
case "darwin": {
|
||||||
return "mac"
|
return "macos"
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
return process.platform
|
return process.platform
|
||||||
|
@ -31,10 +31,10 @@ function main() {
|
||||||
"--input",
|
"--input",
|
||||||
"./dist/node16",
|
"./dist/node16",
|
||||||
"--output",
|
"--output",
|
||||||
`./exe/setup_cpp_${getPlatformName()}${exe}`,
|
`./exe/setup-cpp-${process.arch}-${getPlatformName()}${exe}`,
|
||||||
"--",
|
"--",
|
||||||
`{{caxa}}/node_modules/.bin/node${exe}`,
|
`{{caxa}}/node_modules/.bin/node${exe}`,
|
||||||
`{{caxa}}/setup_cpp.js`,
|
`{{caxa}}/setup-cpp.js`,
|
||||||
])
|
])
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
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
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
94
package.json
94
package.json
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "setup-cpp",
|
"name": "setup-cpp",
|
||||||
"version": "0.24.1",
|
"version": "0.26.2",
|
||||||
"description": "Install all the tools required for building and testing C++/C projects.",
|
"description": "Install all the tools required for building and testing C++/C projects.",
|
||||||
"repository": "https://github.com/aminya/setup-cpp",
|
"repository": "https://github.com/aminya/setup-cpp",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
|
@ -9,20 +9,29 @@
|
||||||
"import": "./dist/node12/setup-cpp.mjs",
|
"import": "./dist/node12/setup-cpp.mjs",
|
||||||
"require": "./dist/node12/setup-cpp.js"
|
"require": "./dist/node12/setup-cpp.js"
|
||||||
},
|
},
|
||||||
"main": "./dist/node12/setup_cpp.js",
|
"main": "./dist/node12/setup-cpp.js",
|
||||||
"source": "./src/main.ts",
|
"source": "./src/main.ts",
|
||||||
"bin": {
|
"bin": {
|
||||||
"setup-cpp": "./dist/node12/setup_cpp.js",
|
"setup-cpp": "./dist/node12/setup-cpp.js"
|
||||||
"setup_cpp": "./dist/node12/setup_cpp.js"
|
|
||||||
},
|
},
|
||||||
|
"files": [
|
||||||
|
"dist",
|
||||||
|
"src",
|
||||||
|
"packages",
|
||||||
|
"dev",
|
||||||
|
"README.md",
|
||||||
|
"LICENSE.txt",
|
||||||
|
"LICENSE.dependencies.txt",
|
||||||
|
"package.json",
|
||||||
|
"tsconfig.json"
|
||||||
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "shx rm -rf dist/ && shx mkdir -p ./dist/node12 ./dist/node16 && run-p lint.tsc build.parcel copy.matchers",
|
"build": "shx rm -rf dist/ && shx mkdir -p ./dist/node12 ./dist/node16 && run-p lint.tsc build.parcel copy.matchers",
|
||||||
"build.docker": "pnpm build && docker build -f ./dev/docker/ubuntu_node.dockerfile -t setup_cpp .",
|
"build.docker": "pnpm build && docker build -f ./dev/docker/ubuntu_node.dockerfile -t setup-cpp .",
|
||||||
"build.docker.arch": "pnpm build && docker build -f ./dev/docker/arch_node.dockerfile -t setup_cpp:arch .",
|
"build.docker.arch": "pnpm build && docker build -f ./dev/docker/arch_node.dockerfile -t setup-cpp:arch .",
|
||||||
"build.docker.arch.mingw": "pnpm build && docker build -f ./dev/docker/arch_node.mingw.dockerfile -t setup_cpp:arch-mingw .",
|
"build.docker.fedora": "pnpm build && docker build -f ./dev/docker/fedora_node.dockerfile -t setup-cpp:fedora .",
|
||||||
"build.docker.fedora": "pnpm build && docker build -f ./dev/docker/fedora_node.dockerfile -t setup_cpp:fedora .",
|
|
||||||
"build.docker.fedora.mingw": "pnpm build && docker build -f ./dev/docker/fedora_node.mingw.dockerfile -t setup_cpp:fedora-mingw .",
|
"build.docker.fedora.mingw": "pnpm build && docker build -f ./dev/docker/fedora_node.mingw.dockerfile -t setup_cpp:fedora-mingw .",
|
||||||
"build.docker.ubuntu": "pnpm build && docker build -f ./dev/docker/ubuntu_node.dockerfile -t setup_cpp:ubuntu .",
|
"build.docker.ubuntu": "pnpm build && docker build -f ./dev/docker/ubuntu_node.dockerfile -t setup-cpp:ubuntu .",
|
||||||
"build.docker.ubuntu.mingw": "pnpm build && docker build -f ./dev/docker/ubuntu_node.mingw.dockerfile -t setup_cpp:ubuntu-mingw .",
|
"build.docker.ubuntu.mingw": "pnpm build && docker build -f ./dev/docker/ubuntu_node.mingw.dockerfile -t setup_cpp:ubuntu-mingw .",
|
||||||
"build.docker.ubuntu.node16": "pnpm build && docker build -f ./dev/docker/ubuntu_node_16.dockerfile -t setup_cpp:ubuntu-node16 .",
|
"build.docker.ubuntu.node16": "pnpm build && docker build -f ./dev/docker/ubuntu_node_16.dockerfile -t setup_cpp:ubuntu-node16 .",
|
||||||
"build.parcel": "cross-env NODE_ENV=production parcel build",
|
"build.parcel": "cross-env NODE_ENV=production parcel build",
|
||||||
|
@ -41,82 +50,73 @@
|
||||||
"prepare": "pnpm run -r build && pnpm run -w 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.arch.mingw": "docker run -t setup_cpp:arch-mingw .",
|
|
||||||
"start.docker.fedora": "docker run -t setup_cpp:fedora .",
|
"start.docker.fedora": "docker run -t setup_cpp:fedora .",
|
||||||
"start.docker.fedora.mingw": "docker run -t setup_cpp:fedora-mingw .",
|
|
||||||
"start.docker.ubuntu": "docker run -t setup_cpp:ubuntu .",
|
"start.docker.ubuntu": "docker run -t setup_cpp:ubuntu .",
|
||||||
"start.docker.ubuntu.mingw": "docker run -t setup_cpp:ubuntu-mingw .",
|
|
||||||
"test": "run-p --continue-on-error test.lint test.unit",
|
"test": "run-p --continue-on-error test.lint test.unit",
|
||||||
"test.docker.arch": "docker build -f ./dev/docker/arch_node.dockerfile --target base -t setup_cpp:arch-base . && container-structure-test test --image setup_cpp:arch-base --config ./dev/container-tests/arch.yml",
|
"test.docker.arch": "docker build -f ./dev/docker/arch_node.dockerfile --target base -t setup_cpp:arch-base . && container-structure-test test --image setup_cpp:arch-base --config ./dev/container-tests/arch.yml",
|
||||||
"test.docker.arch.mingw": "docker build -f ./dev/docker/arch_node.mingw.dockerfile --target base -t setup_cpp:arch-mingw . && container-structure-test test --image setup_cpp:arch-mingw --config ./dev/container-tests/arch.mingw.yml",
|
|
||||||
"test.docker.fedora": "docker build -f ./dev/docker/fedora_node.dockerfile --target base -t setup_cpp:fedora-base . && container-structure-test test --image setup_cpp:fedora-base --config ./dev/container-tests/fedora.yml",
|
"test.docker.fedora": "docker build -f ./dev/docker/fedora_node.dockerfile --target base -t setup_cpp:fedora-base . && container-structure-test test --image setup_cpp:fedora-base --config ./dev/container-tests/fedora.yml",
|
||||||
"test.docker.fedora.mingw": "docker build -f ./dev/docker/fedora_node.mingw.dockerfile --target base -t setup_cpp:fedora-mingw . && container-structure-test test --image setup_cpp:fedora-mingw --config ./dev/container-tests/fedora.mingw.yml",
|
|
||||||
"test.docker.ubuntu": "docker build -f ./dev/docker/ubuntu_node.dockerfile --target base -t setup_cpp:ubuntu-base . && container-structure-test test --image setup_cpp:ubuntu-base --config ./dev/container-tests/ubuntu.yml",
|
"test.docker.ubuntu": "docker build -f ./dev/docker/ubuntu_node.dockerfile --target base -t setup_cpp:ubuntu-base . && container-structure-test test --image setup_cpp:ubuntu-base --config ./dev/container-tests/ubuntu.yml",
|
||||||
"test.docker.ubuntu.mingw": "docker build -f ./dev/docker/ubuntu_node.mingw.dockerfile --target base -t setup_cpp:ubuntu-mingw . && container-structure-test test --image setup_cpp:ubuntu-mingw --config ./dev/container-tests/ubuntu.mingw.yml",
|
|
||||||
"test.docker.ubuntu.node16": "docker build -f ./dev/docker/ubuntu_node_16.dockerfile --target base -t setup_cpp:ubuntu-node16 . && container-structure-test test --image setup_cpp:ubuntu-node16 --config ./dev/container-tests/ubuntu.node16.yml",
|
|
||||||
"test.lint": "run-p --aggregate-output --continue-on-error lint.cspell test.lint.eslint test.lint.prettier lint.tsc",
|
"test.lint": "run-p --aggregate-output --continue-on-error lint.cspell test.lint.eslint test.lint.prettier lint.tsc",
|
||||||
"test.lint.eslint": "eslint **/*.{ts,tsx,js,jsx,cjs,mjs,json,yaml} --no-error-on-unmatched-pattern --cache --cache-location ./.cache/eslint/",
|
"test.lint.eslint": "eslint **/*.{ts,tsx,js,jsx,cjs,mjs,json,yaml} --no-error-on-unmatched-pattern --cache --cache-location ./.cache/eslint/",
|
||||||
"test.lint.prettier": "prettier . --check",
|
"test.lint.prettier": "prettier . --check",
|
||||||
"test.unit": "jest --runInBand"
|
"test.unit": "jest --runInBand"
|
||||||
},
|
},
|
||||||
"prettier": "prettier-config-atomic",
|
"prettier": "prettier-config-atomic",
|
||||||
"dependencies": {
|
"devDependencies": {
|
||||||
"@actions/core": "^1.10.0",
|
"@actions/core": "^1.10.0",
|
||||||
"@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",
|
||||||
"@npmcli/ci-detect": "github:aminya/ci-detect#37fe40075bebec96794ba0a7c4a6d5c70cbea00d",
|
"@npmcli/ci-detect": "github:aminya/ci-detect#37fe40075bebec96794ba0a7c4a6d5c70cbea00d",
|
||||||
|
"@types/cross-spawn": "^6.0.2",
|
||||||
|
"@types/jest": "^29.2.6",
|
||||||
|
"@types/mri": "^1.1.1",
|
||||||
|
"@types/node": "^18.11.18",
|
||||||
|
"@types/semver": "^7.3.13",
|
||||||
|
"@types/which": "^2.0.1",
|
||||||
"admina": "^0.1.3",
|
"admina": "^0.1.3",
|
||||||
|
"caxa": "^3.0.1",
|
||||||
"ci-log": "workspace:1.0.0",
|
"ci-log": "workspace:1.0.0",
|
||||||
|
"cross-env": "7.0.3",
|
||||||
|
"cross-spawn": "^7.0.3",
|
||||||
|
"cspell": "^6.19.2",
|
||||||
"escape-path-with-spaces": "github:aminya/escape-path-with-spaces#d9f81ee649203ddc55783a2f96ada59df06118e3",
|
"escape-path-with-spaces": "github:aminya/escape-path-with-spaces#d9f81ee649203ddc55783a2f96ada59df06118e3",
|
||||||
"escape-quotes": "^1.0.2",
|
"escape-quotes": "^1.0.2",
|
||||||
"escape-string-regexp": "^5.0.0",
|
"escape-string-regexp": "^5.0.0",
|
||||||
|
"eslint": "^8.32.0",
|
||||||
|
"eslint-config-atomic": "^1.18.2",
|
||||||
"exec-powershell": "workspace:1.0.0",
|
"exec-powershell": "workspace:1.0.0",
|
||||||
"execa": "^5.1.1",
|
"execa": "^5.1.1",
|
||||||
|
"gen-readme": "^1.6.0",
|
||||||
"is-url-online": "^1.5.0",
|
"is-url-online": "^1.5.0",
|
||||||
|
"jest": "^29.3.1",
|
||||||
"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",
|
||||||
|
"npm-check-updates": "^16.6.2",
|
||||||
|
"npm-run-all2": "^6.0.4",
|
||||||
"numerous": "1.0.3",
|
"numerous": "1.0.3",
|
||||||
|
"parcel": "2.8.3",
|
||||||
"path-exists": "^4.0.0",
|
"path-exists": "^4.0.0",
|
||||||
"patha": "^0.4.1",
|
"patha": "^0.4.1",
|
||||||
|
"prettier": "2.7.1",
|
||||||
|
"prettier-config-atomic": "^3.1.0",
|
||||||
"quote-unquote": "^1.0.0",
|
"quote-unquote": "^1.0.0",
|
||||||
|
"readme-md-generator": "^1.0.0",
|
||||||
"retry-as-promised": "^7.0.3",
|
"retry-as-promised": "^7.0.3",
|
||||||
"semver": "7.3.8",
|
"semver": "7.3.8",
|
||||||
"setup-python": "github:actions/setup-python#v4.3.1",
|
"setup-python": "github:actions/setup-python#v4.5.0",
|
||||||
|
"shx": "0.3.4",
|
||||||
|
"terser-config-atomic": "^0.1.1",
|
||||||
"time-delta": "github:aminya/time-delta#69d91a41cef28e569be9a2991129f5f7d1f0d00e",
|
"time-delta": "github:aminya/time-delta#69d91a41cef28e569be9a2991129f5f7d1f0d00e",
|
||||||
|
"ts-jest": "^29.0.5",
|
||||||
|
"ts-node": "^10.9.1",
|
||||||
|
"ts-readme": "^1.1.3",
|
||||||
|
"typescript": "^4.9.4",
|
||||||
"ubuntu-version": "^2.0.0",
|
"ubuntu-version": "^2.0.0",
|
||||||
"untildify-user": "workspace:1.0.0",
|
"untildify-user": "workspace:1.0.0",
|
||||||
"user-access": "workspace:1.0.0",
|
"user-access": "workspace:1.0.0",
|
||||||
"which": "^3.0.0"
|
"which": "^3.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
|
||||||
"@types/cross-spawn": "^6.0.2",
|
|
||||||
"@types/jest": "^29.2.4",
|
|
||||||
"@types/mri": "^1.1.1",
|
|
||||||
"@types/node": "^18.11.15",
|
|
||||||
"@types/semver": "^7.3.13",
|
|
||||||
"@types/which": "^2.0.1",
|
|
||||||
"caxa": "^3.0.1",
|
|
||||||
"cross-env": "7.0.3",
|
|
||||||
"cross-spawn": "^7.0.3",
|
|
||||||
"cspell": "^6.17.0",
|
|
||||||
"eslint": "^8.29.0",
|
|
||||||
"eslint-config-atomic": "^1.18.1",
|
|
||||||
"gen-readme": "^1.6.0",
|
|
||||||
"jest": "^29.3.1",
|
|
||||||
"npm-check-updates": "^16.6.0",
|
|
||||||
"npm-run-all2": "^6.0.4",
|
|
||||||
"parcel": "2.8.1",
|
|
||||||
"prettier": "2.7.1",
|
|
||||||
"prettier-config-atomic": "^3.1.0",
|
|
||||||
"readme-md-generator": "^1.0.0",
|
|
||||||
"shx": "0.3.4",
|
|
||||||
"terser-config-atomic": "^0.1.1",
|
|
||||||
"ts-jest": "^29.0.3",
|
|
||||||
"ts-node": "^10.9.1",
|
|
||||||
"ts-readme": "^1.1.3",
|
|
||||||
"typescript": "^4.9.4"
|
|
||||||
},
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=12.x"
|
"node": ">=12.x"
|
||||||
},
|
},
|
||||||
|
@ -143,7 +143,7 @@
|
||||||
"electron": false,
|
"electron": false,
|
||||||
"patha": "patha/dist/index.node.mjs"
|
"patha": "patha/dist/index.node.mjs"
|
||||||
},
|
},
|
||||||
"main.actions": "./dist/node16/setup_cpp.js",
|
"main.actions": "./dist/node16/setup-cpp.js",
|
||||||
"pnpm": {
|
"pnpm": {
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"semver": "7.3.8",
|
"semver": "7.3.8",
|
||||||
|
|
2525
pnpm-lock.yaml
2525
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
|
@ -29,9 +29,22 @@ describe("syncVersion", () => {
|
||||||
expect(syncVersions(parseArgs(["--llvm", "13.0.0", "--clangtidy", "true"]), llvmTools)).toBe(true)
|
expect(syncVersions(parseArgs(["--llvm", "13.0.0", "--clangtidy", "true"]), llvmTools)).toBe(true)
|
||||||
expect(syncVersions(parseArgs(["--llvm", "13.0.0", "--clangtidy", "12.0.0"]), llvmTools)).toBe(false)
|
expect(syncVersions(parseArgs(["--llvm", "13.0.0", "--clangtidy", "12.0.0"]), llvmTools)).toBe(false)
|
||||||
|
|
||||||
const opts = parseArgs(["--llvm", "14.0.0", "--clangtidy", "true"])
|
const opts1 = parseArgs(["--llvm", "14.0.0", "--clangtidy", "true"])
|
||||||
expect(syncVersions(opts, llvmTools)).toBe(true)
|
expect(syncVersions(opts1, llvmTools)).toBe(true)
|
||||||
expect(opts.llvm).toBe(opts.clangtidy)
|
expect(opts1.llvm).toBe(opts1.clangtidy)
|
||||||
|
expect(opts1.clangformat).toBe(undefined)
|
||||||
|
|
||||||
|
const opts2 = parseArgs(["--clangtidy", "15.0.0", "--clangformat", "true"])
|
||||||
|
expect(syncVersions(opts2, llvmTools)).toBe(true)
|
||||||
|
expect(opts2.llvm).toBe(undefined)
|
||||||
|
expect(opts2.clangtidy).toBe("15.0.0")
|
||||||
|
expect(opts2.clangformat).toBe("15.0.0")
|
||||||
|
|
||||||
|
const opts3 = parseArgs(["--llvm", "true", "--clangformat", "true"])
|
||||||
|
expect(syncVersions(opts3, llvmTools)).toBe(true)
|
||||||
|
expect(opts3.llvm).toBe("true")
|
||||||
|
expect(opts3.clangtidy).toBe(undefined)
|
||||||
|
expect(opts3.clangformat).toBe("true")
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ export async function setupBrew(_version: string, _setupDir: string, _arch: stri
|
||||||
}
|
}
|
||||||
|
|
||||||
// brew is not thread-safe
|
// brew is not thread-safe
|
||||||
const brewTempDirectory = path.join(tmpdir(), "setup_cpp", "brew")
|
const brewTempDirectory = path.join(tmpdir(), "setup-cpp", "brew")
|
||||||
await mkdirP(brewTempDirectory)
|
await mkdirP(brewTempDirectory)
|
||||||
|
|
||||||
execa.sync("curl", ["-LJO", "https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh"], {
|
execa.sync("curl", ["-LJO", "https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh"], {
|
||||||
|
|
|
@ -253,7 +253,7 @@ async function activateGcc(version: string, binDir: string) {
|
||||||
async function addGccLoggingMatcher() {
|
async function addGccLoggingMatcher() {
|
||||||
const matcherPath = join(__dirname, "gcc_matcher.json")
|
const matcherPath = join(__dirname, "gcc_matcher.json")
|
||||||
if (!(await pathExists(matcherPath))) {
|
if (!(await pathExists(matcherPath))) {
|
||||||
return warning("the gcc_matcher.json file does not exist in the same folder as setup_cpp.js")
|
return warning("the gcc_matcher.json file does not exist in the same folder as setup-cpp.js")
|
||||||
}
|
}
|
||||||
info(`::add-matcher::${matcherPath}`)
|
info(`::add-matcher::${matcherPath}`)
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,7 +132,7 @@ export async function setupClangTools(version: string, setupDir: string, arch: s
|
||||||
async function addLLVMLoggingMatcher() {
|
async function addLLVMLoggingMatcher() {
|
||||||
const matcherPath = join(__dirname, "llvm_matcher.json")
|
const matcherPath = join(__dirname, "llvm_matcher.json")
|
||||||
if (!(await pathExists(matcherPath))) {
|
if (!(await pathExists(matcherPath))) {
|
||||||
return warning("the llvm_matcher.json file does not exist in the same folder as setup_cpp.js")
|
return warning("the llvm_matcher.json file does not exist in the same folder as setup-cpp.js")
|
||||||
}
|
}
|
||||||
info(`::add-matcher::${matcherPath}`)
|
info(`::add-matcher::${matcherPath}`)
|
||||||
}
|
}
|
||||||
|
|
79
src/main.ts
79
src/main.ts
|
@ -1,53 +1,50 @@
|
||||||
import { getInput, endGroup, startGroup, notice } from "@actions/core"
|
#!/usr/bin/env node
|
||||||
|
/* eslint-disable node/shebang */
|
||||||
|
|
||||||
|
import { endGroup, getInput, notice, startGroup } from "@actions/core"
|
||||||
|
import ciDetect from "@npmcli/ci-detect"
|
||||||
|
import { error, info, success, warning } from "ci-log"
|
||||||
|
import mri from "mri"
|
||||||
|
import * as numerous from "numerous"
|
||||||
|
import numerousLocale from "numerous/locales/en.js"
|
||||||
|
import { join } from "patha"
|
||||||
|
import semverValid from "semver/functions/valid"
|
||||||
|
import * as timeDelta from "time-delta"
|
||||||
|
import timeDeltaLocale from "time-delta/locales/en.js"
|
||||||
|
import { untildifyUser } from "untildify-user"
|
||||||
|
|
||||||
|
import { setupBazel } from "./bazel/bazel"
|
||||||
import { setupBrew } from "./brew/brew"
|
import { setupBrew } from "./brew/brew"
|
||||||
import { setupCcache } from "./ccache/ccache"
|
import { setupCcache } from "./ccache/ccache"
|
||||||
import { setupMake } from "./make/make"
|
|
||||||
import { setupTask } from "./task/task"
|
|
||||||
import { setupChocolatey } from "./chocolatey/chocolatey"
|
import { setupChocolatey } from "./chocolatey/chocolatey"
|
||||||
import { setupCmake } from "./cmake/cmake"
|
import { setupCmake } from "./cmake/cmake"
|
||||||
import { setupConan } from "./conan/conan"
|
import { setupConan } from "./conan/conan"
|
||||||
import { setupCppcheck } from "./cppcheck/cppcheck"
|
import { setupCppcheck } from "./cppcheck/cppcheck"
|
||||||
import { setupDoxygen } from "./doxygen/doxygen"
|
import { setupDoxygen } from "./doxygen/doxygen"
|
||||||
|
import { setupGcc, setupMingw } from "./gcc/gcc"
|
||||||
import { activateGcovGCC, activateGcovLLVM, setupGcovr } from "./gcovr/gcovr"
|
import { activateGcovGCC, activateGcovLLVM, setupGcovr } from "./gcovr/gcovr"
|
||||||
import { setupLLVM, setupClangTools } from "./llvm/llvm"
|
import { setupGraphviz } from "./graphviz/graphviz"
|
||||||
|
import { setupKcov } from "./kcov/kcov"
|
||||||
|
import { setupClangTools, setupLLVM } from "./llvm/llvm"
|
||||||
|
import { setupMake } from "./make/make"
|
||||||
import { setupMeson } from "./meson/meson"
|
import { setupMeson } from "./meson/meson"
|
||||||
import { setupMSVC } from "./msvc/msvc"
|
import { setupMSVC } from "./msvc/msvc"
|
||||||
|
import { setupNala } from "./nala/nala"
|
||||||
import { setupNinja } from "./ninja/ninja"
|
import { setupNinja } from "./ninja/ninja"
|
||||||
import { setupOpencppcoverage } from "./opencppcoverage/opencppcoverage"
|
import { setupOpencppcoverage } from "./opencppcoverage/opencppcoverage"
|
||||||
import { setupPython } from "./python/python"
|
|
||||||
import mri from "mri"
|
|
||||||
import { untildifyUser } from "untildify-user"
|
|
||||||
import ciDetect from "@npmcli/ci-detect"
|
|
||||||
import * as timeDelta from "time-delta"
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
||||||
// @ts-ignore
|
|
||||||
import timeDeltaLocale from "time-delta/locales/en.js"
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
||||||
// @ts-ignore
|
|
||||||
import * as numerous from "numerous"
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
||||||
// @ts-ignore
|
|
||||||
import numerousLocale from "numerous/locales/en.js"
|
|
||||||
import { ubuntuVersion } from "./utils/env/ubuntu_version"
|
|
||||||
|
|
||||||
import semverValid from "semver/functions/valid"
|
|
||||||
import { getVersion, syncVersions } from "./versions/versions"
|
|
||||||
import { setupGcc, setupMingw } from "./gcc/gcc"
|
|
||||||
import { InstallationInfo } from "./utils/setup/setupBin"
|
|
||||||
import { error, info, success, warning } from "ci-log"
|
|
||||||
import { setupVcpkg } from "./vcpkg/vcpkg"
|
|
||||||
import { join } from "patha"
|
|
||||||
import { setupVCVarsall } from "./vcvarsall/vcvarsall"
|
|
||||||
import { setupKcov } from "./kcov/kcov"
|
|
||||||
import { addEnv, finalizeCpprc } from "./utils/env/addEnv"
|
|
||||||
import { setupSevenZip } from "./sevenzip/sevenzip"
|
|
||||||
import { setupGraphviz } from "./graphviz/graphviz"
|
|
||||||
import { setupNala } from "./nala/nala"
|
|
||||||
import { setupBazel } from "./bazel/bazel"
|
|
||||||
import { setupPowershell } from "./powershell/powershell"
|
import { setupPowershell } from "./powershell/powershell"
|
||||||
import { isArch } from "./utils/env/isArch"
|
import { setupPython } from "./python/python"
|
||||||
import { setupPacmanPack } from "./utils/setup/setupPacmanPack"
|
|
||||||
import { setupSccache } from "./sccache/sccache"
|
import { setupSccache } from "./sccache/sccache"
|
||||||
|
import { setupSevenZip } from "./sevenzip/sevenzip"
|
||||||
|
import { setupTask } from "./task/task"
|
||||||
|
import { addEnv, finalizeCpprc } from "./utils/env/addEnv"
|
||||||
|
import { isArch } from "./utils/env/isArch"
|
||||||
|
import { ubuntuVersion } from "./utils/env/ubuntu_version"
|
||||||
|
import { InstallationInfo } from "./utils/setup/setupBin"
|
||||||
|
import { setupPacmanPack } from "./utils/setup/setupPacmanPack"
|
||||||
|
import { setupVcpkg } from "./vcpkg/vcpkg"
|
||||||
|
import { setupVCVarsall } from "./vcvarsall/vcvarsall"
|
||||||
|
import { getVersion, syncVersions } from "./versions/versions"
|
||||||
|
|
||||||
/** The setup functions */
|
/** The setup functions */
|
||||||
const setups = {
|
const setups = {
|
||||||
|
@ -117,7 +114,7 @@ export async function main(args: string[]): Promise<number> {
|
||||||
|
|
||||||
const timeFormatter = timeDelta.create({ autoloadLocales: true })
|
const timeFormatter = timeDelta.create({ autoloadLocales: true })
|
||||||
timeDelta.addLocale(timeDeltaLocale as timeDelta.Locale)
|
timeDelta.addLocale(timeDeltaLocale as timeDelta.Locale)
|
||||||
numerous.addLocale(numerousLocale)
|
numerous.addLocale(numerousLocale as numerous.Locale)
|
||||||
let time1: number
|
let time1: number
|
||||||
let time2: number
|
let time2: number
|
||||||
|
|
||||||
|
@ -279,7 +276,7 @@ export async function main(args: string[]): Promise<number> {
|
||||||
await finalizeCpprc()
|
await finalizeCpprc()
|
||||||
|
|
||||||
if (successMessages.length === 0 && errorMessages.length === 0) {
|
if (successMessages.length === 0 && errorMessages.length === 0) {
|
||||||
warning("setup_cpp was called without any arguments. Nothing to do.")
|
warning("setup-cpp was called without any arguments. Nothing to do.")
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -287,7 +284,7 @@ export async function main(args: string[]): Promise<number> {
|
||||||
successMessages.forEach((tool) => success(tool))
|
successMessages.forEach((tool) => success(tool))
|
||||||
errorMessages.forEach((tool) => error(tool))
|
errorMessages.forEach((tool) => error(tool))
|
||||||
|
|
||||||
info("setup_cpp finished")
|
info("setup-cpp finished")
|
||||||
|
|
||||||
if (ciDetect() !== "github-actions") {
|
if (ciDetect() !== "github-actions") {
|
||||||
switch (process.platform) {
|
switch (process.platform) {
|
||||||
|
@ -352,8 +349,8 @@ export function getCompilerInfo(maybeCompiler: string) {
|
||||||
|
|
||||||
function printHelp() {
|
function printHelp() {
|
||||||
info(`
|
info(`
|
||||||
setup_cpp [options]
|
setup-cpp [options]
|
||||||
setup_cpp --compiler llvm --cmake true --ninja true --ccache true --vcpkg true
|
setup-cpp --compiler llvm --cmake true --ninja true --ccache true --vcpkg true
|
||||||
|
|
||||||
Install all the tools required for building and testing C++/C projects.
|
Install all the tools required for building and testing C++/C projects.
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ export async function setupMSVC(
|
||||||
async function addMSVCLoggingMatcher() {
|
async function addMSVCLoggingMatcher() {
|
||||||
const matcherPath = join(__dirname, "msvc_matcher.json")
|
const matcherPath = join(__dirname, "msvc_matcher.json")
|
||||||
if (!(await pathExists(matcherPath))) {
|
if (!(await pathExists(matcherPath))) {
|
||||||
return warning("the msvc_matcher.json file does not exist in the same folder as setup_cpp.js")
|
return warning("the msvc_matcher.json file does not exist in the same folder as setup-cpp.js")
|
||||||
}
|
}
|
||||||
info(`::add-matcher::${matcherPath}`)
|
info(`::add-matcher::${matcherPath}`)
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ export async function setupActionsPython(version: string, _setupDir: string, arc
|
||||||
async function addPythonLoggingMatcher() {
|
async function addPythonLoggingMatcher() {
|
||||||
const matcherPath = join(__dirname, "python_matcher.json")
|
const matcherPath = join(__dirname, "python_matcher.json")
|
||||||
if (!(await pathExists(matcherPath))) {
|
if (!(await pathExists(matcherPath))) {
|
||||||
return warning("the python_matcher.json file does not exist in the same folder as setup_cpp.js")
|
return warning("the python_matcher.json file does not exist in the same folder as setup-cpp.js")
|
||||||
}
|
}
|
||||||
info(`::add-matcher::${matcherPath}`)
|
info(`::add-matcher::${matcherPath}`)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
declare module "numerous" {
|
||||||
|
export type Locale = unknown
|
||||||
|
|
||||||
|
/** Adds pluralization data for the specified locale. Should be called in browser. */
|
||||||
|
export function addLocale(localeData: Locale | Locale[])
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module "numerous/locales/en.js" {
|
||||||
|
import { Locale } from "numerous"
|
||||||
|
|
||||||
|
declare const En = Locale
|
||||||
|
export = En
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
declare module "time-delta/locales/en.js" {
|
||||||
|
import { Locale } from "time-delta"
|
||||||
|
|
||||||
|
declare const En = Locale
|
||||||
|
export = En
|
||||||
|
}
|
|
@ -93,7 +93,7 @@ async function addPathSystem(path: string) {
|
||||||
case "win32": {
|
case "win32": {
|
||||||
// We do not use `execa.sync(`setx PATH "${path};%PATH%"`)` because of its character limit and also because %PATH% is different for user and system
|
// We do not use `execa.sync(`setx PATH "${path};%PATH%"`)` because of its character limit and also because %PATH% is different for user and system
|
||||||
await execPowershell(
|
await execPowershell(
|
||||||
`$USER_PATH=([Environment]::GetEnvironmentVariable("patha", "User")); [Environment]::SetEnvironmentVariable("patha", "${path};$USER_PATH", "User")`
|
`$USER_PATH=([Environment]::GetEnvironmentVariable("PATH", "User")); [Environment]::SetEnvironmentVariable("PATH", "${path};$USER_PATH", "User")`
|
||||||
)
|
)
|
||||||
info(`"${path}" was added to the PATH.`)
|
info(`"${path}" was added to the PATH.`)
|
||||||
return
|
return
|
||||||
|
|
|
@ -20,13 +20,13 @@ export const DefaultVersions: Record<string, string> = {
|
||||||
clangtidy: getLLVMDefault(),
|
clangtidy: getLLVMDefault(),
|
||||||
clangformat: getLLVMDefault(),
|
clangformat: getLLVMDefault(),
|
||||||
ninja: "1.11.1", // https://github.com/ninja-build/ninja/releases
|
ninja: "1.11.1", // https://github.com/ninja-build/ninja/releases
|
||||||
cmake: "3.25.0", // https://github.com/Kitware/CMake/releases
|
cmake: "3.25.1", // https://github.com/Kitware/CMake/releases
|
||||||
gcovr: "5.2", // https://pypi.org/project/gcovr/
|
gcovr: "5.2", // https://pypi.org/project/gcovr/
|
||||||
conan: "1.54.0", // https://github.com/conan-io/conan/releases
|
conan: "1.57.0", // https://github.com/conan-io/conan/releases
|
||||||
meson: "0.64.0", // https://github.com/mesonbuild/meson/releases
|
meson: "1.0.0", // https://github.com/mesonbuild/meson/releases
|
||||||
kcov: "40", // https://github.com/SimonKagstrom/kcov/releases
|
kcov: "40", // https://github.com/SimonKagstrom/kcov/releases
|
||||||
task: "3.18.0", // https://github.com/go-task/task/releases
|
task: "3.20.0", // https://github.com/go-task/task/releases
|
||||||
doxygen: isArch() ? "1.9.5-1" : "1.9.5", // https://www.doxygen.nl/download.html // https://packages.ubuntu.com/search?suite=all&arch=any&searchon=names&keywords=doxygen // https://formulae.brew.sh/formula/doxygen // https://archlinux.org/packages/extra/x86_64/doxygen/
|
doxygen: isArch() ? "1.9.6-1" : "1.9.6", // https://www.doxygen.nl/download.html // https://packages.ubuntu.com/search?suite=all&arch=any&searchon=names&keywords=doxygen // https://formulae.brew.sh/formula/doxygen // https://archlinux.org/packages/extra/x86_64/doxygen/
|
||||||
gcc: isArch() ? "11" : "12", // https://github.com/brechtsanders/winlibs_mingw/releases and // https://packages.ubuntu.com/search?suite=all&arch=any&searchon=names&keywords=gcc
|
gcc: isArch() ? "11" : "12", // https://github.com/brechtsanders/winlibs_mingw/releases and // https://packages.ubuntu.com/search?suite=all&arch=any&searchon=names&keywords=gcc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ export const DefaultLinuxVersion: Record<string, Record<number, string>> = {
|
||||||
18: "5.0",
|
18: "5.0",
|
||||||
},
|
},
|
||||||
meson: {
|
meson: {
|
||||||
20: "0.63.3",
|
20: "1.0.0",
|
||||||
18: "0.61.4",
|
18: "0.61.4",
|
||||||
},
|
},
|
||||||
nala: {
|
nala: {
|
||||||
|
|
|
@ -29,26 +29,25 @@ export function isDefault(version: string | undefined, name: string) {
|
||||||
return version === "true" || (version === undefined && name in DefaultVersions)
|
return version === "true" || (version === undefined && name in DefaultVersions)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sync the versions for the given inputs
|
||||||
|
*
|
||||||
|
* If the return is false, it means that versions don't match the target version
|
||||||
|
*/
|
||||||
export function syncVersions(opts: Opts, tools: Inputs[]): boolean {
|
export function syncVersions(opts: Opts, tools: Inputs[]): boolean {
|
||||||
for (let i = 0; i < tools.length; i++) {
|
const toolsInUse = tools.filter((tool) => opts[tool] !== undefined)
|
||||||
// tools excluding i_tool
|
const toolsNonDefaultVersion = toolsInUse.filter((tool) => !isDefault(opts[tool], tool))
|
||||||
const otherTools = tools.slice(0, i).concat(tools.slice(i + 1))
|
|
||||||
|
|
||||||
const tool = tools[i]
|
const targetVersion = toolsNonDefaultVersion.length >= 1 ? opts[toolsNonDefaultVersion[0]] : "true"
|
||||||
|
|
||||||
if (!isDefault(opts[tool], tool)) {
|
if (toolsNonDefaultVersion.some((tool) => opts[tool] !== targetVersion)) {
|
||||||
for (let i_other = 0; i_other < otherTools.length; i_other++) {
|
// error if any explicit versions don't match the target version
|
||||||
const otherTool = otherTools[i_other]
|
|
||||||
const useDefaultOtherTool = isDefault(opts[otherTool], otherTools[i_other])
|
|
||||||
if (useDefaultOtherTool) {
|
|
||||||
// use the same version if the other tool was requested with the default
|
|
||||||
opts[otherTool] = opts[tool]
|
|
||||||
} else if (opts[tool] !== opts[otherTools[i_other]]) {
|
|
||||||
// error if different from the other given versions
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
toolsInUse.forEach((tool) => {
|
||||||
}
|
opts[tool] = targetVersion
|
||||||
|
})
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue