Make WPAD and DHCP tests not reliant on NPM #1061
Workflow file for this run
This file contains hidden or 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 - Windows | |
| 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 - Windows Win32 | |
| runs-on: windows-latest | |
| cmake-args: -A Win32 | |
| - name: Build - Windows Win64 | |
| runs-on: windows-latest | |
| - name: Build - Windows ClangCL | |
| runs-on: windows-latest | |
| cmake-args: -T ClangCL | |
| - name: Build - Windows GCC | |
| runs-on: windows-latest | |
| cmake-args: -G Ninja -D PROXYRES_CODE_COVERAGE=ON | |
| compiler: gcc | |
| cxx-compiler: g++ | |
| codecov: windows | |
| binary-dir: build/test | |
| - name: Build - Windows GCC (duktape) | |
| runs-on: windows-latest | |
| cmake-args: -G Ninja -D PROXYRES_CODE_COVERAGE=ON -D PROXYRES_DUKTAPE=ON | |
| compiler: gcc | |
| cxx-compiler: g++ | |
| codecov: windows_duktape | |
| binary-dir: build/test | |
| steps: | |
| - name: Install dependencies | |
| run: choco install curl | |
| - name: Install gcc dependencies | |
| if: matrix.compiler == 'gcc' | |
| run: | | |
| # strawberryperl installs incompatible libraries so remove it | |
| choco uninstall --no-progress strawberryperl | |
| choco install ninja --no-progress | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Generate project | |
| shell: bash | |
| run: | | |
| cmake -S . -B build ${{ matrix.cmake-args }} \ | |
| -D CMAKE_BUILD_TYPE=RelWithDebInfo \ | |
| -D CMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded \ | |
| -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 | |
| shell: bash | |
| 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: netsh winhttp show proxy | |
| - name: Set proxy settings (IE) | |
| run: | | |
| reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL /t REG_SZ /d "http://wpad/wpad2.dat" /f | |
| reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoDetect /t REG_DWORD /d 1 /f | |
| reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f | |
| reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d "http=myproxy;https=sproxy:88" /f | |
| reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyOverride /t REG_SZ /d "*.foo.com;<local>" /f | |
| - name: Check proxy settings (IE) | |
| 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://wpad/wpad2.dat" ]; then | |
| echo "Auto config url set successfully" | |
| else | |
| echo "Auto config url set failed" | |
| exit 1 | |
| fi | |
| out=$(./proxycli config proxy http) | |
| echo "Proxy (http): $out" | |
| if [ "$out" = "myproxy" ]; 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" = "sproxy:88" ]; 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" = "*.foo.com,<local>" ]; then | |
| echo "Proxy bypass set successfully" | |
| else | |
| echo "Proxy bypass set failed" | |
| exit 1 | |
| fi | |
| working-directory: ${{ matrix.binary-dir || 'build/test/RelWithDebInfo' }} | |
| - name: Turn off proxy settings (IE) | |
| run: | | |
| reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL /f | |
| reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f | |
| - name: Set proxy auto config setting (IE) | |
| run: | | |
| reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL /t REG_SZ /d "http://127.0.0.1:8080/pac.js" /f | |
| - name: Check proxy resolution (IE) | |
| shell: bash | |
| 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 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.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: ${{ matrix.binary-dir || 'build/test/RelWithDebInfo' }} | |
| - name: Reset proxy settings (IE) | |
| run: | | |
| reg delete "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v AutoConfigURL /f | |
| reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f | |
| - name: Generate coverage report | |
| shell: bash | |
| if: always() && matrix.codecov | |
| run: | | |
| python3 -u -m pip install --user gcovr | |
| python3 -m 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 |