test.yaml 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. name: test
  2. on:
  3. push:
  4. pull_request:
  5. workflow_dispatch:
  6. inputs:
  7. gtest_filter:
  8. description: 'Google Test filter'
  9. test_linux:
  10. description: 'Test on Linux'
  11. type: boolean
  12. default: true
  13. test_macos:
  14. description: 'Test on MacOS'
  15. type: boolean
  16. default: true
  17. test_windows:
  18. description: 'Test on Windows'
  19. type: boolean
  20. default: true
  21. concurrency:
  22. group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
  23. cancel-in-progress: true
  24. env:
  25. GTEST_FILTER: ${{ github.event.inputs.gtest_filter || '*' }}
  26. jobs:
  27. style-check:
  28. runs-on: ubuntu-latest
  29. if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
  30. continue-on-error: true
  31. steps:
  32. - name: checkout
  33. uses: actions/checkout@v4
  34. - name: run style check
  35. run: |
  36. clang-format --version
  37. cd test && make style_check
  38. ubuntu:
  39. runs-on: ubuntu-latest
  40. if: >
  41. (github.event_name == 'push') ||
  42. (github.event_name == 'pull_request' &&
  43. github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name) ||
  44. (github.event_name == 'workflow_dispatch' && github.event.inputs.test_linux == 'true')
  45. strategy:
  46. matrix:
  47. config:
  48. - arch_flags: -m32
  49. arch_suffix: :i386
  50. name: (32-bit)
  51. - arch_flags:
  52. arch_suffix:
  53. name: (64-bit)
  54. name: ubuntu ${{ matrix.config.name }}
  55. steps:
  56. - name: checkout
  57. uses: actions/checkout@v4
  58. - name: install libraries
  59. run: |
  60. sudo dpkg --add-architecture i386
  61. sudo apt-get update
  62. sudo apt-get install -y libc6-dev${{ matrix.config.arch_suffix }} libstdc++-13-dev${{ matrix.config.arch_suffix }} \
  63. libssl-dev${{ matrix.config.arch_suffix }} libcurl4-openssl-dev${{ matrix.config.arch_suffix }} \
  64. zlib1g-dev${{ matrix.config.arch_suffix }} libbrotli-dev${{ matrix.config.arch_suffix }} \
  65. libzstd-dev${{ matrix.config.arch_suffix }}
  66. - name: build and run tests
  67. run: cd test && make EXTRA_CXXFLAGS="${{ matrix.config.arch_flags }}"
  68. - name: run fuzz test target
  69. run: cd test && make EXTRA_CXXFLAGS="${{ matrix.config.arch_flags }}" fuzz_test
  70. macos:
  71. runs-on: macos-latest
  72. if: >
  73. (github.event_name == 'push') ||
  74. (github.event_name == 'pull_request' &&
  75. github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name) ||
  76. (github.event_name == 'workflow_dispatch' && github.event.inputs.test_macos == 'true')
  77. steps:
  78. - name: checkout
  79. uses: actions/checkout@v4
  80. - name: build and run tests
  81. run: cd test && make
  82. - name: run fuzz test target
  83. run: cd test && make fuzz_test
  84. windows:
  85. runs-on: windows-latest
  86. if: >
  87. (github.event_name == 'push') ||
  88. (github.event_name == 'pull_request' &&
  89. github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name) ||
  90. (github.event_name == 'workflow_dispatch' && github.event.inputs.test_windows == 'true')
  91. strategy:
  92. matrix:
  93. config:
  94. - with_ssl: false
  95. compiled: false
  96. run_tests: true
  97. name: without SSL
  98. - with_ssl: true
  99. compiled: false
  100. run_tests: true
  101. name: with SSL
  102. - with_ssl: false
  103. compiled: true
  104. run_tests: false
  105. name: compiled
  106. name: windows ${{ matrix.config.name }}
  107. steps:
  108. - name: Prepare Git for Checkout on Windows
  109. run: |
  110. git config --global core.autocrlf false
  111. git config --global core.eol lf
  112. - name: Checkout
  113. uses: actions/checkout@v4
  114. - name: Export GitHub Actions cache environment variables
  115. uses: actions/github-script@v7
  116. with:
  117. script: |
  118. core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
  119. core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
  120. - name: Setup msbuild on windows
  121. uses: microsoft/setup-msbuild@v2
  122. - name: Install vcpkg dependencies
  123. run: vcpkg install gtest curl zlib brotli zstd
  124. - name: Install OpenSSL
  125. if: ${{ matrix.config.with_ssl }}
  126. run: choco install openssl
  127. - name: Configure CMake ${{ matrix.config.name }}
  128. run: >
  129. cmake -B build -S .
  130. -DCMAKE_BUILD_TYPE=Release
  131. -DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake
  132. -DHTTPLIB_TEST=ON
  133. -DHTTPLIB_COMPILE=${{ matrix.config.compiled && 'ON' || 'OFF' }}
  134. -DHTTPLIB_REQUIRE_ZLIB=ON
  135. -DHTTPLIB_REQUIRE_BROTLI=ON
  136. -DHTTPLIB_REQUIRE_ZSTD=ON
  137. -DHTTPLIB_REQUIRE_OPENSSL=${{ matrix.config.with_ssl && 'ON' || 'OFF' }}
  138. - name: Build ${{ matrix.config.name }}
  139. run: cmake --build build --config Release -- /v:m /clp:ShowCommandLine
  140. - name: Run tests ${{ matrix.config.name }}
  141. if: ${{ matrix.config.run_tests }}
  142. run: ctest --output-on-failure --test-dir build -C Release
  143. env:
  144. VCPKG_ROOT: "C:/vcpkg"
  145. VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"