diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 9558f6861..fb6178299 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -12,12 +12,12 @@ env: SECRET_RESULTS_SHEET_ID: ${{ secrets.RESULTS_SHEET_ID }} jobs: build_and_test: - name: '${{ matrix.os }}: build and test (install mdns: ${{ matrix.install_mdns }}, use conan: ${{ matrix.use_conan }}, force cpprest asio: ${{ matrix.force_cpprest_asio }}, dns-sd mode: ${{ matrix.dns_sd_mode}}, enable_authorization: ${{ matrix.enable_authorization }})' + name: "${{ matrix.os }}: build and test (C++ standard: ${{ matrix.cxx_standard || 'minimum' }}, install mdns: ${{ matrix.install_mdns }}, use conan: ${{ matrix.use_conan }}, force cpprest asio: ${{ matrix.force_cpprest_asio }}, dns-sd mode: ${{ matrix.dns_sd_mode}}, enable_authorization: ${{ matrix.enable_authorization }})" runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: - os: [ubuntu-22.04, ubuntu-24.04, windows-2022] + os: [ubuntu-22.04, ubuntu-24.04, windows-2025] install_mdns: [false, true] use_conan: [true] force_cpprest_asio: [false, true] @@ -25,10 +25,10 @@ jobs: enable_authorization: [false, true] exclude: # install_mdns is only meaningful on Linux - - os: windows-2022 + - os: windows-2025 install_mdns: true # for now, unicast DNS-SD tests are only implemented on Linux - - os: windows-2022 + - os: windows-2025 dns_sd_mode: unicast - os: ubuntu-22.04 enable_authorization: false @@ -45,12 +45,28 @@ jobs: install_mdns: true - os: ubuntu-24.04 dns_sd_mode: unicast - # don't force ASIO for ubuntu platforms + # don't force ASIO for ubuntu platforms - os: ubuntu-24.04 force_cpprest_asio: true - + include: + # exercise std::filesystem on VS 2026; regular windows-2025 jobs use the minimum standard + - os: windows-2025 + install_mdns: false + use_conan: true + force_cpprest_asio: false + dns_sd_mode: multicast + enable_authorization: true + cxx_standard: 17 + # keep one VS 2022 job while validating VS 2026 on windows-2025 + - os: windows-2022 + install_mdns: false + use_conan: true + force_cpprest_asio: false + dns_sd_mode: multicast + enable_authorization: true + steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 - name: set environment variables shell: bash @@ -61,16 +77,21 @@ jobs: authorization_mode=noauth fi + if [[ -n "${{ matrix.cxx_standard }}" ]]; then + cxx_standard_suffix="_cxx${{ matrix.cxx_standard }}" + echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DCMAKE_CXX_STANDARD=${{ matrix.cxx_standard }}" >> $GITHUB_ENV + fi + if [[ "${{ runner.os }}" == "Linux" ]]; then if [[ "${{ matrix.install_mdns }}" == "true" ]]; then - echo "BUILD_NAME=${{ matrix.os }}_mdns_${{ matrix.dns_sd_mode }}_$authorization_mode" >> $GITHUB_ENV + echo "BUILD_NAME=${{ matrix.os }}_mdns_${{ matrix.dns_sd_mode }}_$authorization_mode$cxx_standard_suffix" >> $GITHUB_ENV else - echo "BUILD_NAME=${{ matrix.os }}_avahi_${{ matrix.dns_sd_mode }}_$authorization_mode" >> $GITHUB_ENV + echo "BUILD_NAME=${{ matrix.os }}_avahi_${{ matrix.dns_sd_mode }}_$authorization_mode$cxx_standard_suffix" >> $GITHUB_ENV fi elif [[ "${{ matrix.force_cpprest_asio }}" == "true" ]]; then - echo "BUILD_NAME=${{ matrix.os }}_asio_$authorization_mode" >> $GITHUB_ENV + echo "BUILD_NAME=${{ matrix.os }}_asio_$authorization_mode$cxx_standard_suffix" >> $GITHUB_ENV else - echo "BUILD_NAME=${{ matrix.os }}_$authorization_mode" >> $GITHUB_ENV + echo "BUILD_NAME=${{ matrix.os }}_$authorization_mode$cxx_standard_suffix" >> $GITHUB_ENV fi GITHUB_COMMIT=`echo "${{ github.sha }}" | cut -c1-7` echo "GITHUB_COMMIT=$GITHUB_COMMIT" >> $GITHUB_ENV @@ -101,13 +122,8 @@ jobs: run: | pip install conan~=2.20 - - name: 'ubuntu-14.04: install cmake' - if: matrix.os == 'ubuntu-14.04' - uses: lukka/get-cmake@v3.24.2 - - name: install cmake - if: matrix.os != 'ubuntu-14.04' - uses: lukka/get-cmake@v3.28.3 + uses: lukka/get-cmake@v4.4.0 - name: setup bash path working-directory: ${{ env.GITHUB_WORKSPACE }} @@ -122,7 +138,7 @@ jobs: run: | # set compiler to cl.exe to avoid building with gcc. echo "CMAKE_COMPILER_ARGS=-DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe" >> $env:GITHUB_ENV - # disable unused network interface (may not exist on windows-2022 runners) + # disable unused network interface (may not exist on Windows runners) $nat = Get-NetAdapter -Name 'vEthernet (nat)' -ErrorAction SilentlyContinue if ($nat) { netsh interface set interface name="vEthernet (nat)" admin=DISABLED @@ -283,6 +299,18 @@ jobs: run: | echo "CONAN_INSTALL_EXTRA_ARGS=--options\;cpprestsdk/*:http_client_impl=asio\;--options\;cpprestsdk/*:http_listener_impl=asio" >> $GITHUB_ENV + # windows-2025 uses VS 2026 (MSVC 195). Conan Center prebuilts are built for + # MSVC 193/194; pin 194 so conan install downloads packages instead of building + # from source. Command-line -s overrides cmake-conan's auto-cmake profile (which + # would otherwise report 195). vs_version=18 is required when a package still + # builds from source: Conan maps compiler.version=194 → VS 17, which is not + # installed on this image. See actions/runner-images#14017. + - name: pin conan msvc 194 (windows-2025) + if: matrix.os == 'windows-2025' && matrix.use_conan == true + shell: bash + run: | + echo "CONAN_INSTALL_EXTRA_ARGS=${CONAN_INSTALL_EXTRA_ARGS:+$CONAN_INSTALL_EXTRA_ARGS\;}-s\;compiler.version=194\;-c\;tools.microsoft.msbuild:vs_version=18" >> $GITHUB_ENV + - name: enable conan if: matrix.use_conan == true shell: bash @@ -298,12 +326,16 @@ jobs: uses: ilammy/msvc-dev-cmd@v1 - name: build - uses: lukka/run-cmake@v3.4 - with: - cmakeListsOrSettingsJson: CMakeListsTxtAdvanced - cmakeListsTxtPath: '${{ env.GITHUB_WORKSPACE }}/Development/CMakeLists.txt' - buildDirectory: '${{ env.RUNNER_WORKSPACE }}/build/' - cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${{ env.RUNNER_WORKSPACE }}/install" ${{ env.CMAKE_COMPILER_ARGS }} ${{ env.CMAKE_EXTRA_ARGS }}' + shell: bash + run: | + cmake -S "${{ env.GITHUB_WORKSPACE }}/Development" \ + -B "${{ env.RUNNER_WORKSPACE }}/build" \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="${{ env.RUNNER_WORKSPACE }}/install" \ + ${{ env.CMAKE_COMPILER_ARGS }} \ + ${{ env.CMAKE_EXTRA_ARGS }} + cmake --build "${{ env.RUNNER_WORKSPACE }}/build" - name: dump conan lockfile if: matrix.use_conan == true @@ -323,12 +355,9 @@ jobs: ctest --output-on-failure ${{ env.CTEST_EXPECTED_FAILURES }} - name: install - uses: lukka/run-cmake@v3.4 - with: - cmakeListsOrSettingsJson: CMakeListsTxtAdvanced - cmakeListsTxtPath: '${{ env.GITHUB_WORKSPACE }}/Development/CMakeLists.txt' - buildDirectory: '${{ env.RUNNER_WORKSPACE }}/build/' - buildWithCMakeArgs: '--target install' + shell: bash + run: | + cmake --build "${{ env.RUNNER_WORKSPACE }}/build" --target install - name: set install test environment variable shell: bash @@ -338,18 +367,18 @@ jobs: - name: install test if: runner.os != 'macOS' - uses: lukka/run-cmake@v3.4 - with: - cmakeListsOrSettingsJson: CMakeListsTxtAdvanced - cmakeListsTxtPath: '${{ env.GITHUB_WORKSPACE }}/Sandbox/my-nmos-node/CMakeLists.txt' - buildDirectory: '${{ env.RUNNER_WORKSPACE }}/build-my-nmos-node/' - cmakeAppendedArgs: '-GNinja - -DCMAKE_BUILD_TYPE=Release - -DCMAKE_FIND_PACKAGE_PREFER_CONFIG="1" - -DCMAKE_MODULE_PATH="${{ env.CMAKE_WORKSPACE }}/build/conan" - -DCMAKE_PREFIX_PATH="${{ env.CMAKE_WORKSPACE }}/install" - -DCMAKE_INSTALL_PREFIX="${{ env.CMAKE_WORKSPACE }}/build/conan" - ${{ env.CMAKE_COMPILER_ARGS }}' + shell: bash + run: | + cmake -S "${{ env.GITHUB_WORKSPACE }}/Sandbox/my-nmos-node" \ + -B "${{ env.RUNNER_WORKSPACE }}/build-my-nmos-node" \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=1 \ + -DCMAKE_MODULE_PATH="${{ env.CMAKE_WORKSPACE }}/build/conan" \ + -DCMAKE_PREFIX_PATH="${{ env.CMAKE_WORKSPACE }}/install" \ + -DCMAKE_INSTALL_PREFIX="${{ env.CMAKE_WORKSPACE }}/build/conan" \ + ${{ env.CMAKE_COMPILER_ARGS }} + cmake --build "${{ env.RUNNER_WORKSPACE }}/build-my-nmos-node" - name: install test log if: runner.os != 'macOS' @@ -574,12 +603,12 @@ jobs: export SHEET=https://docs.google.com/spreadsheets/d/${{ env.SECRET_RESULTS_SHEET_ID }} python nmos-testing/utilities/run-test-suites/gsheetsImport/resultsImporter.py --credentials ${{ env.GDRIVE_CREDENTIALS }} --sheet "$SHEET" --insert --json nmos-testing/results/${{ env.GITHUB_COMMIT }}-*.json || echo "upload failed" - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v7 with: name: ${{ env.BUILD_NAME }}_badges path: ${{ runner.workspace }}/nmos-testing/badges - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v7 with: name: ${{ env.BUILD_NAME }}_results path: ${{ runner.workspace }}/nmos-testing/results @@ -590,7 +619,7 @@ jobs: needs: [build_and_test] runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 - name: set environment variables shell: bash @@ -600,7 +629,7 @@ jobs: echo "GITHUB_WORKSPACE=${{ github.workspace }}" >> $GITHUB_ENV echo "RUNNER_WORKSPACE=${{ runner.workspace }}" >> $GITHUB_ENV - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: path: ${{ runner.workspace }}/artifacts diff --git a/.github/workflows/src/build-setup.yml b/.github/workflows/src/build-setup.yml index 34d27a658..61f63d02e 100644 --- a/.github/workflows/src/build-setup.yml +++ b/.github/workflows/src/build-setup.yml @@ -3,13 +3,8 @@ run: | pip install conan~=2.20 -- name: 'ubuntu-14.04: install cmake' - if: matrix.os == 'ubuntu-14.04' - uses: lukka/get-cmake@v3.24.2 - - name: install cmake - if: matrix.os != 'ubuntu-14.04' - uses: lukka/get-cmake@v3.28.3 + uses: lukka/get-cmake@v4.4.0 - name: setup bash path working-directory: ${{ env.GITHUB_WORKSPACE }} @@ -24,7 +19,7 @@ run: | # set compiler to cl.exe to avoid building with gcc. echo "CMAKE_COMPILER_ARGS=-DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe" >> $env:GITHUB_ENV - # disable unused network interface (may not exist on windows-2022 runners) + # disable unused network interface (may not exist on Windows runners) $nat = Get-NetAdapter -Name 'vEthernet (nat)' -ErrorAction SilentlyContinue if ($nat) { netsh interface set interface name="vEthernet (nat)" admin=DISABLED @@ -185,6 +180,18 @@ run: | echo "CONAN_INSTALL_EXTRA_ARGS=--options\;cpprestsdk/*:http_client_impl=asio\;--options\;cpprestsdk/*:http_listener_impl=asio" >> $GITHUB_ENV +# windows-2025 uses VS 2026 (MSVC 195). Conan Center prebuilts are built for +# MSVC 193/194; pin 194 so conan install downloads packages instead of building +# from source. Command-line -s overrides cmake-conan's auto-cmake profile (which +# would otherwise report 195). vs_version=18 is required when a package still +# builds from source: Conan maps compiler.version=194 → VS 17, which is not +# installed on this image. See actions/runner-images#14017. +- name: pin conan msvc 194 (windows-2025) + if: matrix.os == 'windows-2025' && matrix.use_conan == true + shell: bash + run: | + echo "CONAN_INSTALL_EXTRA_ARGS=${CONAN_INSTALL_EXTRA_ARGS:+$CONAN_INSTALL_EXTRA_ARGS\;}-s\;compiler.version=194\;-c\;tools.microsoft.msbuild:vs_version=18" >> $GITHUB_ENV + - name: enable conan if: matrix.use_conan == true shell: bash diff --git a/.github/workflows/src/build-test.yml b/.github/workflows/src/build-test.yml index f919cce32..88560aa24 100644 --- a/.github/workflows/src/build-test.yml +++ b/.github/workflows/src/build-test.yml @@ -12,12 +12,12 @@ env: SECRET_RESULTS_SHEET_ID: ${{ secrets.RESULTS_SHEET_ID }} jobs: build_and_test: - name: '${{ matrix.os }}: build and test (install mdns: ${{ matrix.install_mdns }}, use conan: ${{ matrix.use_conan }}, force cpprest asio: ${{ matrix.force_cpprest_asio }}, dns-sd mode: ${{ matrix.dns_sd_mode}}, enable_authorization: ${{ matrix.enable_authorization }})' + name: "${{ matrix.os }}: build and test (C++ standard: ${{ matrix.cxx_standard || 'minimum' }}, install mdns: ${{ matrix.install_mdns }}, use conan: ${{ matrix.use_conan }}, force cpprest asio: ${{ matrix.force_cpprest_asio }}, dns-sd mode: ${{ matrix.dns_sd_mode}}, enable_authorization: ${{ matrix.enable_authorization }})" runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: - os: [ubuntu-22.04, ubuntu-24.04, windows-2022] + os: [ubuntu-22.04, ubuntu-24.04, windows-2025] install_mdns: [false, true] use_conan: [true] force_cpprest_asio: [false, true] @@ -25,10 +25,10 @@ jobs: enable_authorization: [false, true] exclude: # install_mdns is only meaningful on Linux - - os: windows-2022 + - os: windows-2025 install_mdns: true # for now, unicast DNS-SD tests are only implemented on Linux - - os: windows-2022 + - os: windows-2025 dns_sd_mode: unicast - os: ubuntu-22.04 enable_authorization: false @@ -45,12 +45,28 @@ jobs: install_mdns: true - os: ubuntu-24.04 dns_sd_mode: unicast - # don't force ASIO for ubuntu platforms + # don't force ASIO for ubuntu platforms - os: ubuntu-24.04 force_cpprest_asio: true - + include: + # exercise std::filesystem on VS 2026; regular windows-2025 jobs use the minimum standard + - os: windows-2025 + install_mdns: false + use_conan: true + force_cpprest_asio: false + dns_sd_mode: multicast + enable_authorization: true + cxx_standard: 17 + # keep one VS 2022 job while validating VS 2026 on windows-2025 + - os: windows-2022 + install_mdns: false + use_conan: true + force_cpprest_asio: false + dns_sd_mode: multicast + enable_authorization: true + steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 - name: set environment variables shell: bash @@ -61,16 +77,21 @@ jobs: authorization_mode=noauth fi + if [[ -n "${{ matrix.cxx_standard }}" ]]; then + cxx_standard_suffix="_cxx${{ matrix.cxx_standard }}" + echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DCMAKE_CXX_STANDARD=${{ matrix.cxx_standard }}" >> $GITHUB_ENV + fi + if [[ "${{ runner.os }}" == "Linux" ]]; then if [[ "${{ matrix.install_mdns }}" == "true" ]]; then - echo "BUILD_NAME=${{ matrix.os }}_mdns_${{ matrix.dns_sd_mode }}_$authorization_mode" >> $GITHUB_ENV + echo "BUILD_NAME=${{ matrix.os }}_mdns_${{ matrix.dns_sd_mode }}_$authorization_mode$cxx_standard_suffix" >> $GITHUB_ENV else - echo "BUILD_NAME=${{ matrix.os }}_avahi_${{ matrix.dns_sd_mode }}_$authorization_mode" >> $GITHUB_ENV + echo "BUILD_NAME=${{ matrix.os }}_avahi_${{ matrix.dns_sd_mode }}_$authorization_mode$cxx_standard_suffix" >> $GITHUB_ENV fi elif [[ "${{ matrix.force_cpprest_asio }}" == "true" ]]; then - echo "BUILD_NAME=${{ matrix.os }}_asio_$authorization_mode" >> $GITHUB_ENV + echo "BUILD_NAME=${{ matrix.os }}_asio_$authorization_mode$cxx_standard_suffix" >> $GITHUB_ENV else - echo "BUILD_NAME=${{ matrix.os }}_$authorization_mode" >> $GITHUB_ENV + echo "BUILD_NAME=${{ matrix.os }}_$authorization_mode$cxx_standard_suffix" >> $GITHUB_ENV fi GITHUB_COMMIT=`echo "${{ github.sha }}" | cut -c1-7` echo "GITHUB_COMMIT=$GITHUB_COMMIT" >> $GITHUB_ENV @@ -93,7 +114,7 @@ jobs: needs: [build_and_test] runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v6 - name: set environment variables shell: bash @@ -103,7 +124,7 @@ jobs: echo "GITHUB_WORKSPACE=${{ github.workspace }}" >> $GITHUB_ENV echo "RUNNER_WORKSPACE=${{ runner.workspace }}" >> $GITHUB_ENV - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: path: ${{ runner.workspace }}/artifacts diff --git a/.github/workflows/src/build.yml b/.github/workflows/src/build.yml index 80b669d62..b6d0365fa 100644 --- a/.github/workflows/src/build.yml +++ b/.github/workflows/src/build.yml @@ -3,12 +3,16 @@ uses: ilammy/msvc-dev-cmd@v1 - name: build - uses: lukka/run-cmake@v3.4 - with: - cmakeListsOrSettingsJson: CMakeListsTxtAdvanced - cmakeListsTxtPath: '${{ env.GITHUB_WORKSPACE }}/Development/CMakeLists.txt' - buildDirectory: '${{ env.RUNNER_WORKSPACE }}/build/' - cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${{ env.RUNNER_WORKSPACE }}/install" ${{ env.CMAKE_COMPILER_ARGS }} ${{ env.CMAKE_EXTRA_ARGS }}' + shell: bash + run: | + cmake -S "${{ env.GITHUB_WORKSPACE }}/Development" \ + -B "${{ env.RUNNER_WORKSPACE }}/build" \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="${{ env.RUNNER_WORKSPACE }}/install" \ + ${{ env.CMAKE_COMPILER_ARGS }} \ + ${{ env.CMAKE_EXTRA_ARGS }} + cmake --build "${{ env.RUNNER_WORKSPACE }}/build" - name: dump conan lockfile if: matrix.use_conan == true diff --git a/.github/workflows/src/install-test.yml b/.github/workflows/src/install-test.yml index 95926816b..8c4f8ed63 100644 --- a/.github/workflows/src/install-test.yml +++ b/.github/workflows/src/install-test.yml @@ -6,18 +6,18 @@ - name: install test if: runner.os != 'macOS' - uses: lukka/run-cmake@v3.4 - with: - cmakeListsOrSettingsJson: CMakeListsTxtAdvanced - cmakeListsTxtPath: '${{ env.GITHUB_WORKSPACE }}/Sandbox/my-nmos-node/CMakeLists.txt' - buildDirectory: '${{ env.RUNNER_WORKSPACE }}/build-my-nmos-node/' - cmakeAppendedArgs: '-GNinja - -DCMAKE_BUILD_TYPE=Release - -DCMAKE_FIND_PACKAGE_PREFER_CONFIG="1" - -DCMAKE_MODULE_PATH="${{ env.CMAKE_WORKSPACE }}/build/conan" - -DCMAKE_PREFIX_PATH="${{ env.CMAKE_WORKSPACE }}/install" - -DCMAKE_INSTALL_PREFIX="${{ env.CMAKE_WORKSPACE }}/build/conan" - ${{ env.CMAKE_COMPILER_ARGS }}' + shell: bash + run: | + cmake -S "${{ env.GITHUB_WORKSPACE }}/Sandbox/my-nmos-node" \ + -B "${{ env.RUNNER_WORKSPACE }}/build-my-nmos-node" \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_FIND_PACKAGE_PREFER_CONFIG=1 \ + -DCMAKE_MODULE_PATH="${{ env.CMAKE_WORKSPACE }}/build/conan" \ + -DCMAKE_PREFIX_PATH="${{ env.CMAKE_WORKSPACE }}/install" \ + -DCMAKE_INSTALL_PREFIX="${{ env.CMAKE_WORKSPACE }}/build/conan" \ + ${{ env.CMAKE_COMPILER_ARGS }} + cmake --build "${{ env.RUNNER_WORKSPACE }}/build-my-nmos-node" - name: install test log if: runner.os != 'macOS' diff --git a/.github/workflows/src/install.yml b/.github/workflows/src/install.yml index 35cda17b4..13843df32 100644 --- a/.github/workflows/src/install.yml +++ b/.github/workflows/src/install.yml @@ -1,7 +1,4 @@ - name: install - uses: lukka/run-cmake@v3.4 - with: - cmakeListsOrSettingsJson: CMakeListsTxtAdvanced - cmakeListsTxtPath: '${{ env.GITHUB_WORKSPACE }}/Development/CMakeLists.txt' - buildDirectory: '${{ env.RUNNER_WORKSPACE }}/build/' - buildWithCMakeArgs: '--target install' + shell: bash + run: | + cmake --build "${{ env.RUNNER_WORKSPACE }}/build" --target install diff --git a/.github/workflows/src/save-results.yml b/.github/workflows/src/save-results.yml index c4991df13..c44911488 100644 --- a/.github/workflows/src/save-results.yml +++ b/.github/workflows/src/save-results.yml @@ -6,12 +6,12 @@ export SHEET=https://docs.google.com/spreadsheets/d/${{ env.SECRET_RESULTS_SHEET_ID }} python nmos-testing/utilities/run-test-suites/gsheetsImport/resultsImporter.py --credentials ${{ env.GDRIVE_CREDENTIALS }} --sheet "$SHEET" --insert --json nmos-testing/results/${{ env.GITHUB_COMMIT }}-*.json || echo "upload failed" -- uses: actions/upload-artifact@v4 +- uses: actions/upload-artifact@v7 with: name: ${{ env.BUILD_NAME }}_badges path: ${{ runner.workspace }}/nmos-testing/badges -- uses: actions/upload-artifact@v4 +- uses: actions/upload-artifact@v7 with: name: ${{ env.BUILD_NAME }}_results path: ${{ runner.workspace }}/nmos-testing/results diff --git a/Development/bst/filesystem.h b/Development/bst/filesystem.h index e5bcb7d94..fbdd803b7 100644 --- a/Development/bst/filesystem.h +++ b/Development/bst/filesystem.h @@ -15,24 +15,22 @@ #elif defined(_MSC_VER) -#if _MSC_VER >= 1951 -// From VS2026, or more precisely, MSVC Build Tools v14.51, is finally removed -// See https://learn.microsoft.com/en-us/visualstudio/releases/2026/release-notes -// and https://github.com/microsoft/STL/pull/5765 -#define BST_FILESYSTEM_STD -#elif _MSC_VER >= 1910 // From VS2017, /std:c++17 switch is introduced, but this is only indicated in __cplusplus if /Zc:__cplusplus is also specified -#if __cplusplus >= 201703L +// so use _MSVC_LANG instead +#if defined(_MSVC_LANG) && _MSVC_LANG >= 201703L +// C++17 #define BST_FILESYSTEM_STD -#else +#elif _MSC_VER >= 1951 +// From VS2026 / MSVC Build Tools v14.51, is removed +// See https://learn.microsoft.com/en-us/visualstudio/releases/2026/release-notes +// and https://github.com/microsoft/STL/pull/5765 +#define BST_FILESYSTEM_BOOST +#elif _MSC_VER >= 1900 +// VS2015 #define BST_FILESYSTEM_STD_EXPERIMENTAL #if _MSC_VER >= 1920 #define _SILENCE_EXPERIMENTAL_FILESYSTEM_DEPRECATION_WARNING #endif -#endif -#elif _MSC_VER >= 1900 -// VS2015 -#define BST_FILESYSTEM_STD_EXPERIMENTAL #else // Earlier #define BST_FILESYSTEM_MICROSOFT_TR2 diff --git a/Development/cmake/NmosCppDependencies.cmake b/Development/cmake/NmosCppDependencies.cmake index 5479a481a..6580f395d 100644 --- a/Development/cmake/NmosCppDependencies.cmake +++ b/Development/cmake/NmosCppDependencies.cmake @@ -1,7 +1,7 @@ # Boost set(BOOST_VERSION_MIN "1.54.0") -set(BOOST_VERSION_CUR "1.83.0") +set(BOOST_VERSION_CUR "1.86.0") # note: 1.57.0 doesn't work due to https://svn.boost.org/trac10/ticket/10754 # note: some components are only required for one platform or other # so find_package(Boost) is called after adding those components @@ -12,12 +12,17 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_SYSTEM_NAME} STREQUAL "Darwi # add filesystem (for bst/filesystem.h, used by nmos/filesystem_route.cpp) list(APPEND FIND_BOOST_COMPONENTS filesystem) endif() +elseif(MSVC AND MSVC_VERSION GREATER_EQUAL 1951 AND (NOT CMAKE_CXX_STANDARD OR CMAKE_CXX_STANDARD LESS 17)) + # MSVC 14.51 removed , so C++11/14 builds use Boost.Filesystem + list(APPEND FIND_BOOST_COMPONENTS filesystem) endif() # since std::shared_mutex is not available until C++17 # see bst/shared_mutex.h list(APPEND FIND_BOOST_COMPONENTS thread) -find_package(Boost ${BOOST_VERSION_MIN} REQUIRED COMPONENTS ${FIND_BOOST_COMPONENTS}) -# cope with historical versions of FindBoost.cmake +# Prefer BoostConfig.cmake (CMake 3.30+ / CMP0167). Legacy FindBoost is removed +# there; Config mode is what Conan CMakeDeps and modern Boost installs provide. +find_package(Boost ${BOOST_VERSION_MIN} CONFIG REQUIRED COMPONENTS ${FIND_BOOST_COMPONENTS}) +# cope with historical versions of FindBoost.cmake / BoostConfig.cmake if(DEFINED Boost_VERSION_STRING) set(Boost_VERSION_COMPONENTS "${Boost_VERSION_STRING}") elseif(DEFINED Boost_VERSION_MAJOR) diff --git a/Development/conanfile.py b/Development/conanfile.py new file mode 100644 index 000000000..b5bd02f85 --- /dev/null +++ b/Development/conanfile.py @@ -0,0 +1,26 @@ +from conan import ConanFile + + +class NmosCppConan(ConanFile): + settings = "os", "arch", "compiler", "build_type" + generators = "CMakeDeps" + # Conan Center recipes still pin older transitive deps (cpprestsdk → boost/1.83.0, + # json-schema-validator → nlohmann_json/3.11.3). Force the versions we want for the + # whole graph. Cap Boost at 1.86.0: 1.87 removed deprecated Asio APIs that unpatched + # websocketpp 0.8.2 (and our own Asio usage) still need. without_cobalt avoids + # packaging failures when Boost is built from source with OpenSSL present + # (conan-center-index#30414). + default_options = { + "boost/*:shared": False, + "boost/*:without_cobalt": True, + } + + def requirements(self): + self.requires("boost/1.86.0", force=True) + self.requires("cpprestsdk/2.10.19") + self.requires("websocketpp/0.8.2") + self.requires("openssl/3.5.7") + self.requires("json-schema-validator/2.4.0") + self.requires("nlohmann_json/3.12.0", force=True) + self.requires("zlib/1.3.2") + self.requires("jwt-cpp/0.7.2") diff --git a/Development/conanfile.txt b/Development/conanfile.txt deleted file mode 100644 index cf66b3ee6..000000000 --- a/Development/conanfile.txt +++ /dev/null @@ -1,20 +0,0 @@ -[requires] -boost/1.83.0 -cpprestsdk/2.10.19 -websocketpp/0.8.2 -openssl/3.5.2 -json-schema-validator/2.3.0 -nlohmann_json/3.11.3 -zlib/1.3.1 -jwt-cpp/0.7.1 - -[imports] -bin, *.dll -> ./bin -lib, *.so* -> ./lib -lib, *.dylib* -> ./lib - -[options] -boost/*:shared=False - -[generators] -CMakeDeps diff --git a/Documents/Dependencies.md b/Documents/Dependencies.md index 52d8f2778..6643af26b 100644 --- a/Documents/Dependencies.md +++ b/Documents/Dependencies.md @@ -34,7 +34,8 @@ Specific instructions for [cross-compiling for Raspberry Pi](Raspberry-Pi.md) ar 1. Download and install a recent [CMake stable release](https://cmake.org/download/#latest) for your platform Notes: - - Currently, CMake 3.24 or higher is required in order to use the Conan package manager; version 4.1.0 (latest release at the time) has been tested + - Currently, CMake 3.24 or higher is required in order to use the Conan package manager; version 4.4.0 has been tested + (CMake 4.2 or higher is required for the Visual Studio 18 2026 generator, but is not a hard project requirement) - Pre-built binary distributions are available for many platforms - On Linux distributions, e.g. Ubuntu 14.04 LTS (long-term support), the pre-built binary version available via ``apt-get`` may be too out-of-date Fetch, build and install a suitable version: @@ -74,9 +75,12 @@ If using Conan, this section can be skipped. 1. Download a [recent release](http://www.boost.org/users/download/) Notes: - - Several Boost releases have been tested, including Version 1.83.0 (latest release at the time) and Version 1.54.0 + - Several Boost releases have been tested, including Version 1.86.0 and Version 1.54.0 + - Boost 1.87+ is not yet supported: it removes deprecated Asio APIs still required by + WebSocket++ 0.8.2 (and some nmos-cpp Asio usage) - On Linux distributions, a Boost libraries package may already be installed, e.g. Ubuntu 14.04 LTS has Version 1.54.0 -2. Expand the archive so that, for example, the boost\_1\_83\_0 directory is at the same level as the nmos-cpp directory + (Ubuntu 14.04 is no longer exercised in CI) +2. Expand the archive so that, for example, the boost\_1\_86\_0 directory is at the same level as the nmos-cpp directory 3. Build and stage (or install) the following Boost libraries for your platform/toolset: - atomic - chrono @@ -230,13 +234,13 @@ If using Conan, this section can be skipped. The C++ REST SDK depends on [OpenSSL](https://www.openssl.org/) (to implement secure HTTP and/or secure WebSockets). The nmos-cpp codebase also uses OpenSSL directly to implement the specific requirements of [AMWA BCP-003-01 Secure Communication in NMOS Systems](https://specs.amwa.tv/bcp-003-01/) and [AMWA BCP-003-02 Authorization in NMOS Systems](https://specs.amwa.tv/bcp-003-02/). -OpenSSL version 3 is recommended, and version 3.5.2 (latest release at the time) has been tested. +OpenSSL version 3 is recommended, and version 3.5.7 (latest 3.5 LTS release at the time) has been tested. It is currently also possible to use OpenSSL v1.1.1, although [this OpenSSL release is now end of life](https://www.openssl.org/blog/blog/2023/09/11/eol-111/index.html). 1. Download and install a recent release Notes: - On Windows, an installer can be downloaded from [Shining Light Productions - Win32 OpenSSL](https://slproweb.com/products/Win32OpenSSL.html) - The Win64 OpenSSL v3.5.2 installer (latest release at the time) has been tested + The Win64 OpenSSL v3.5.7 installer (latest 3.5 LTS release at the time) has been tested - On Linux distributions, an OpenSSL package may already be available For example, Ubuntu 22.04 LTS includes OpenSSL v3.0.2 diff --git a/README.md b/README.md index a09ba47ee..cf8093cab 100644 --- a/README.md +++ b/README.md @@ -73,9 +73,10 @@ The following configurations, defined by the [build-test](.github/workflows/src/ | Linux | Ubuntu 22.04 (GCC 11.2.0) | Avahi | Secure Communications
IS-10 Authorization
Multicast DNS-SD | | Linux | Ubuntu 22.04 (GCC 11.2.0) | Avahi | Secure Communications
IS-10 Authorization
Unicast DNS-SD | | Linux | Ubuntu 22.04 (GCC 11.2.0) | mDNSResponder | Secure Communications
IS-10 Authorization
Multicast DNS-SD | -| Windows | Server 2022 (VS 2022) | Bonjour (mDNSResponder), ASIO | Secure Communications
Multicast DNS-SD | -| Windows | Server 2022 (VS 2022) | Bonjour (mDNSResponder), ASIO | Secure Communications
IS-10 Authorization
Multicast DNS-SD | -| Windows | Server 2022 (VS 2022) | Bonjour (mDNSResponder), WinHTTP | Secure Communications
Multicast DNS-SD | +| Windows | Server 2025 (VS 2026) | Bonjour (mDNSResponder), ASIO | Secure Communications
Multicast DNS-SD | +| Windows | Server 2025 (VS 2026) | Bonjour (mDNSResponder), ASIO | Secure Communications
IS-10 Authorization
Multicast DNS-SD | +| Windows | Server 2025 (VS 2026) | Bonjour (mDNSResponder), WinHTTP | Secure Communications
Multicast DNS-SD | +| Windows | Server 2025 (VS 2026) | Bonjour (mDNSResponder), WinHTTP | Secure Communications
IS-10 Authorization
Multicast DNS-SD | | Windows | Server 2022 (VS 2022) | Bonjour (mDNSResponder), WinHTTP | Secure Communications
IS-10 Authorization
Multicast DNS-SD | The [AMWA NMOS API Testing Tool](https://github.com/AMWA-TV/nmos-testing) is automatically run against the APIs of the **nmos-cpp-node** and **nmos-cpp-registry** applications.