Bump test dependencies to remove security vulnerabilities. #844
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build - Ubuntu | |
on: [workflow_dispatch, push, pull_request] | |
env: | |
TERM: xterm-256color | |
jobs: | |
build: | |
name: ${{ matrix.name }} | |
runs-on: ${{ matrix.runs-on }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name: Build - Ubuntu Clang | |
runs-on: ubuntu-latest | |
compiler: clang | |
cxx-compiler: clang++ | |
cmake-args: -G Ninja -D PROXYRES_CODE_COVERAGE=ON | |
gcov-exec: llvm-cov-14 gcov | |
codecov: ubuntu | |
- name: Build - Ubuntu Clang (curl) | |
runs-on: ubuntu-latest | |
compiler: clang | |
cxx-compiler: clang++ | |
cmake-args: -G Ninja -D PROXYRES_CODE_COVERAGE=ON -D PROXYRES_CURL=ON | |
gcov-exec: llvm-cov-14 gcov | |
codecov: ubuntu_curl | |
steps: | |
- name: Install dependencies | |
run: | | |
sudo apt update | |
sudo apt install -y llvm-14 ninja-build libgconf2-dev libjavascriptcoregtk-4.0-dev | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Generate project | |
run: | | |
cmake -S . -B build ${{ matrix.cmake-args }} \ | |
-D CMAKE_BUILD_TYPE=RelWithDebInfo \ | |
-D BUILD_SHARED_LIBS=OFF | |
env: | |
CC: ${{ matrix.compiler }} | |
CXX: ${{ matrix.cxx-compiler }} | |
- name: Build project | |
run: cmake --build build --config RelWithDebInfo | |
- name: Setup node version | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18.18.0 | |
- name: Install test dependencies | |
run: | | |
corepack enable | |
yarn install | |
working-directory: test | |
- name: Run test http server | |
run: | | |
npx pm2 start http_server_cmd.js --output http_server.log | |
sleep 15 | |
working-directory: test | |
- name: Run test dhcp server | |
# Used by wpad.dhcp googletest | |
run: | | |
npx pm2 start dhcp_server_cmd.js --output dhcp_server.log | |
sleep 15 | |
working-directory: test | |
# Run as sudo to be able to bind to DHCP client port, then reset | |
# permissions to code coverage files if necessary | |
- name: Run tests | |
run: | | |
sudo ctest --verbose -C RelWithDebInfo | |
sudo chmod -R a+rw . | |
working-directory: build | |
env: | |
WPAD: true | |
- name: Download pac from http server | |
run: curl -v http://127.0.0.1:8080/pac.js | |
working-directory: test | |
- name: Dump proxy info (gsettings) | |
run: | | |
gsettings get org.gnome.system.proxy autoconfig-url | |
gsettings get org.gnome.system.proxy mode | |
gsettings get org.gnome.system.proxy.http host | |
gsettings get org.gnome.system.proxy.http port | |
gsettings get org.gnome.system.proxy.https host | |
gsettings get org.gnome.system.proxy.https port | |
gsettings get org.gnome.system.proxy ignore-hosts | |
- name: Set auto proxy settings (gsettings) | |
run: | | |
gsettings set org.gnome.system.proxy autoconfig-url 'http://127.0.0.1:8080/pac.js' | |
gsettings set org.gnome.system.proxy mode 'auto' | |
- name: Check auto proxy settings (gsettings) | |
shell: bash | |
run: | | |
out=$(./proxycli config auto_discover) | |
echo "Auto discovery: $out" | |
if [ "$out" = "enabled" ]; then | |
echo "Auto discovery set successfully" | |
else | |
echo "Auto discovery set failed" | |
exit 1 | |
fi | |
out=$(./proxycli config auto_config_url) | |
echo "Auto config url: $out" | |
if [ "$out" = "http://127.0.0.1:8080/pac.js" ]; then | |
echo "Auto config url set successfully" | |
else | |
echo "Auto config url set failed" | |
exit 1 | |
fi | |
working-directory: build/test | |
env: | |
XDG_CURRENT_DESKTOP: GNOME | |
- name: Check auto proxy resolution (gsettings) | |
run: | | |
out=$(./proxycli resolve https://google.com/) | |
echo "Proxy for https://google.com/: $out" | |
if [ "$out" = "direct://" ]; then | |
echo "Proxy for https://google.com/ set successfully" | |
else | |
echo "Proxy for https://google.com/ set failed" | |
exit 1 | |
fi | |
out=$(./proxycli resolve http://simple.com/) | |
echo "Proxy for http://simple.com/: $out" | |
if [ "$out" = "http://no-such-proxy:80" ]; then | |
echo "Proxy for http://simple.com/ set successfully" | |
else | |
echo "Proxy for http://simple.com/ set failed" | |
exit 1 | |
fi | |
out=$(./proxycli resolve https://simple.com/) | |
echo "Proxy for https://simple.com/: $out" | |
if [ "$out" = "https://no-such-proxy:80" ]; then | |
echo "Proxy for https://simple.com/ set successfully" | |
else | |
echo "Proxy for https://simple.com/ set failed" | |
exit 1 | |
fi | |
out=$(./proxycli resolve https://multi.com/) | |
echo "Proxy for https://multi.com/: $out" | |
if [ "$out" = "https://some-such-proxy:443,https://any-such-proxy:41" ]; then | |
echo "Proxy for https://multi.com/ set successfully" | |
else | |
echo "Proxy for https://multi.com/ set failed" | |
exit 1 | |
fi | |
working-directory: build/test | |
env: | |
XDG_CURRENT_DESKTOP: GNOME | |
- name: Set manual proxy settings (gsettings) | |
run: | | |
gsettings set org.gnome.system.proxy mode 'manual' | |
gsettings set org.gnome.system.proxy.http host 'my.proxy1.com' | |
gsettings set org.gnome.system.proxy.http port 8001 | |
gsettings set org.gnome.system.proxy.https host 'my.proxy2.com' | |
gsettings set org.gnome.system.proxy.https port 8002 | |
gsettings set org.gnome.system.proxy ignore-hosts "['localhost', '127.0.0.0/8']" | |
gsettings set org.gnome.system.proxy use-same-proxy false | |
- name: Check manual proxy settings (gsettings) | |
shell: bash | |
run: | | |
out=$(./proxycli config proxy http) | |
echo "Proxy (http): $out" | |
if [ "$out" = "my.proxy1.com:8001" ]; then | |
echo "Proxy (http) set successfully" | |
else | |
echo "Proxy (http) set failed" | |
exit 1 | |
fi | |
out=$(./proxycli config proxy https) | |
echo "Proxy (https): $out" | |
if [ "$out" = "my.proxy2.com:8002" ]; then | |
echo "Proxy (https) set successfully" | |
else | |
echo "Proxy (https) set failed" | |
exit 1 | |
fi | |
out=$(./proxycli config bypass_list) | |
echo "Proxy bypass: $out" | |
if [ "$out" = "localhost,127.0.0.0/8" ]; then | |
echo "Proxy bypass set successfully" | |
else | |
echo "Proxy bypass set failed" | |
exit 1 | |
fi | |
working-directory: build/test | |
env: | |
XDG_CURRENT_DESKTOP: GNOME | |
- name: Reset proxy settings (gsettings) | |
run: gsettings set org.gnome.system.proxy mode 'none' | |
# Run env tests after gsettings since environment variables are set for all | |
# subsequent steps. | |
- name: Set proxy settings (env) | |
run: | | |
echo "http_proxy=my.proxy3.com:8003" >> $GITHUB_ENV | |
echo "https_proxy=my.proxy4.com:8004" >> $GITHUB_ENV | |
echo "no_proxy=localhost,127.0.0.0/8" >> $GITHUB_ENV | |
- name: Check proxy settings (env) | |
shell: bash | |
run: | | |
out=$(./proxycli config proxy http) | |
echo "Proxy (http): $out" | |
if [ "$out" = "my.proxy3.com:8003" ]; then | |
echo "Proxy (http) set successfully" | |
else | |
echo "Proxy (http) set failed" | |
exit 1 | |
fi | |
out=$(./proxycli config proxy https) | |
echo "Proxy (https): $out" | |
if [ "$out" = "my.proxy4.com:8004" ]; then | |
echo "Proxy (https) set successfully" | |
else | |
echo "Proxy (https) set failed" | |
exit 1 | |
fi | |
out=$(./proxycli config bypass_list) | |
echo "Proxy bypass: $out" | |
if [ "$out" = "localhost,127.0.0.0/8" ]; then | |
echo "Proxy bypass set successfully" | |
else | |
echo "Proxy bypass set failed" | |
exit 1 | |
fi | |
working-directory: build/test | |
- name: Reset proxy settings (env) | |
run: | | |
echo "http_proxy=" >> $GITHUB_ENV | |
echo "https_proxy=" >> $GITHUB_ENV | |
echo "no_proxy=" >> $GITHUB_ENV | |
- name: Generate coverage report | |
if: always() && matrix.codecov | |
run: | | |
python3 -u -m pip install --user gcovr | |
python3 -m gcovr \ | |
--exclude-unreachable-branches \ | |
--gcov-ignore-parse-errors \ | |
--gcov-executable "${{ matrix.gcov-exec || 'gcov' }}" \ | |
--root . \ | |
--xml \ | |
--output coverage.xml \ | |
--verbose | |
- name: Upload coverage report | |
uses: codecov/codecov-action@v4 | |
if: always() && matrix.codecov && env.CODECOV_TOKEN != '' | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
flags: ${{ matrix.codecov }} | |
name: ${{ matrix.name }} | |
verbose: false | |
fail_ci_if_error: true | |
env: | |
CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN }}" | |
- name: Upload build errors | |
uses: actions/upload-artifact@v4 | |
if: failure() | |
with: | |
name: Build Errors - ${{ matrix.name }} | |
path: | | |
**/CMakeFiles/CMakeOutput.log | |
**/CMakeFiles/CMakeError.log | |
**/Testing/Temporary/LastTest.log | |
**/*.log | |
retention-days: 3 |