Skip to content

Make WPAD and DHCP tests not reliant on NPM #1287

Make WPAD and DHCP tests not reliant on NPM

Make WPAD and DHCP tests not reliant on NPM #1287

Workflow file for this run

name: Build - macOS
on: [workflow_dispatch, pull_request]
env:
TERM: xterm-256color
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build:
name: ${{ matrix.name }}
runs-on: ${{ matrix.runs-on }}
strategy:
fail-fast: false
matrix:
include:
- name: Build - macOS Xcode
runs-on: macos-latest
compiler: clang
cxx-compiler: clang++
cmake-args: -G Xcode -D PROXYRES_CODE_COVERAGE=ON
codecov: macos
- name: Build - macOS Xcode (duktape)
runs-on: macos-latest
compiler: clang
cxx-compiler: clang++
cmake-args: -G Xcode -D PROXYRES_CODE_COVERAGE=ON -D PROXYRES_DUKTAPE=ON
codecov: macos_duktape
steps:
- name: Checkout repository
uses: actions/checkout@v6
- 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: Run test http server
run: ./pac_server.sh
working-directory: test
- name: Run tests
run: ctest --verbose -C RelWithDebInfo
working-directory: build
- name: Download pac from http server
run: curl -v http://127.0.0.1:8080/pac.js
working-directory: test
- name: Dump proxy info
run: scutil --proxy
- name: Dump network services
run: networksetup -listallnetworkservices
- name: Turn on proxy auto discovery (networksetup)
run: networksetup -setproxyautodiscovery Ethernet on
- name: Check proxy auto discovery setting (networksetup)
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
working-directory: build/test/RelWithDebInfo
- name: Turn off proxy auto discovery (networksetup)
run: networksetup -setproxyautodiscovery Ethernet off
- name: Set proxy auto config url setting (networksetup)
run: networksetup -setautoproxyurl Ethernet http://wpad/wpad3.dat
- name: Check proxy auto config url setting (networksetup)
run: |
out=$(./proxycli config auto_config_url)
echo "Auto config url: $out"
if [ "$out" = "http://wpad/wpad3.dat" ]; then
echo "Auto config url set successfully"
else
echo "Auto config url set failed"
exit 1
fi
working-directory: build/test/RelWithDebInfo
- name: Set manual proxy settings (networksetup)
run: |
networksetup -setwebproxy Ethernet my.proxy7.com 8007
networksetup -setsecurewebproxy Ethernet my.proxy8.com 8008
networksetup -setproxybypassdomains Ethernet hi.com world.com
- name: Check manual proxy settings (networksetup)
shell: bash
run: |
out=$(./proxycli config proxy http)
echo "Proxy (http): $out"
if [ "$out" = "my.proxy7.com:8007" ]; 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.proxy8.com:8008" ]; 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" = "hi.com,world.com" ]; then
echo "Proxy bypass set successfully"
else
echo "Proxy bypass set failed"
exit 1
fi
working-directory: build/test/RelWithDebInfo
- name: Set proxy auto config url setting (networksetup)
run: |
networksetup -setautoproxyurl Ethernet http://127.0.0.1:8080/pac.js
networksetup -setautoproxystate Ethernet on
- name: Check proxy resolution (networksetup)
shell: bash
run: |
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
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" = "http://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-legacy.com/)
echo "Proxy for https://multi-legacy.com/: $out"
if [ "$out" = "http://some-such-proxy:443,http://any-such-proxy:41" ]; then
echo "Proxy for https://multi-legacy.com/ set successfully"
else
echo "Proxy for https://multi-legacy.com/ set failed"
exit 1
fi
working-directory: build/test/RelWithDebInfo
- name: Reset proxy settings (networksetup)
run: |
networksetup -setautoproxystate Ethernet off
networksetup -setwebproxystate Ethernet off
networksetup -setsecurewebproxystate Ethernet off
- name: Generate coverage report
if: always() && matrix.codecov
run: |
brew install gcovr
gcovr \
--exclude-unreachable-branches \
--exclude-directories=build \
--gcov-ignore-parse-errors \
--gcov-ignore-errors=no_working_dir_found \
--root . \
--xml \
--output coverage.xml \
--verbose
- name: Upload coverage report
uses: codecov/codecov-action@v5
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@v6
if: failure()
with:
name: Build Errors - ${{ matrix.name }}
path: |
**/CMakeFiles/CMakeOutput.log
**/CMakeFiles/CMakeError.log
**/Testing/Temporary/LastTest.log
**/*.log
retention-days: 3