diff --git a/.docker/netremote-dev/Dockerfile b/.docker/netremote-dev/Dockerfile index d9bda017..c240421d 100644 --- a/.docker/netremote-dev/Dockerfile +++ b/.docker/netremote-dev/Dockerfile @@ -1,8 +1,8 @@ -FROM ubuntu:mantic as netremote-build +FROM ubuntu:noble as netremote-build # Set arguments used only in this Dockerfile. -ARG BUILD_DATE="2024-02-28T21:09:49+00:00" +ARG BUILD_DATE="2024-06-20T16:36:23Z" ARG DEBIAN_FRONTEND=noninteractive ARG APT_ARGS_COMMON="-yqq --no-install-recommends" @@ -22,13 +22,13 @@ LABEL org.label-schema.schema-version = "1.0" # sudo apt -y update && sudo apt -y upgrade # # 2. Install core build tools and dependencies: -# sudo apt install -y --no-install-recommends autoconf automake autopoint build-essential ca-certificates cmake curl dotnet7 git gnupg libltdl-dev libmount-dev libtool linux-libc-dev ninja-build pkg-config python3-jinja2 tar unzip zip +# sudo apt install -y --no-install-recommends autoconf automake autopoint build-essential ca-certificates cmake curl dotnet7 git gnupg libltdl-dev libmount-dev libtool linux-libc-dev libstdc++-14-dev ninja-build pkg-config python3-jinja2 tar unzip zip # -# 3. Install complete LLVM 17 + clang 17 toolchain: -# sudo apt install -y --no-install-recommends libllvm-17-ocaml-dev libllvm17 llvm-17 llvm-17-dev llvm-17-doc llvm-17-examples llvm-17-runtime clang-17 clang-tools-17 clang-17-doc libclang-common-17-dev libclang-17-dev libclang1-17 clang-format-17 python3-clang-17 clangd-17 clang-tidy-17 libclang-rt-17-dev libpolly-17-dev libfuzzer-17-dev lldb-17 lld-17 libc++-17-dev libc++abi-17-dev libomp-17-dev libclc-17-dev libunwind-17-dev libmlir-17-dev mlir-17-tools libbolt-17-dev bolt-17 flang-17 libclang-rt-17-dev-wasm32 libclang-rt-17-dev-wasm64 libc++-17-dev-wasm32 libc++abi-17-dev-wasm32 libclang-rt-17-dev-wasm32 libclang-rt-17-dev-wasm64 +# 3. Install complete LLVM 18 + clang toolchain: +# sudo apt install -y --no-install-recommends libllvm-18-ocaml-dev libllvm18 llvm-18 llvm-18-dev llvm-18-doc llvm-18-examples llvm-18-runtime clang-18 clang-tools-18 clang-18-doc libclang-common-18-dev libclang-18-dev libclang1-18 clang-format-18 python3-clang-18 clangd-18 clang-tidy-18 libclang-rt-18-dev libpolly-18-dev libfuzzer-18-dev lldb-18 libc++-18-dev libc++abi-18-dev libomp-18-dev libclc-18-dev libunwind-18-dev libmlir-18-dev mlir-18-tools libbolt-18-dev bolt-18 flang-18 libclang-rt-18-dev-wasm32 libclang-rt-18-dev-wasm64 libc++-18-dev-wasm32 libc++abi-18-dev-wasm32 libclang-rt-18-dev-wasm32 libclang-rt-18-dev-wasm64 libllvmlibc-18-dev # # 4. Install other development dependencies and helpful tools: -# sudo apt install -y --no-install-recommends bc bison dwarves flex libelf-dev dos2unix file gnupg2 iproute2 mtools neofetch rsync ssh sudo emacs gdb kmod nano policycoreutils-python-utils python-is-python3 vim +# sudo apt install -y -qq --no-install-recommends bc bison dwarves flex libelf-dev dos2unix file gnupg2 iproute2 mtools neofetch rsync ssh sudo emacs gdb kmod nano policycoreutils-python-utils python-is-python3 vim # # 5. Install hostapd development dependencies and tools: # sudo apt install -y libnl-3-dev libssl-dev libnl-genl-3-dev libnl-3-dev libdbus-c++-dev libnl-route-3-dev flex bison dwarves libelf-dev bc iw debconf-utils @@ -47,59 +47,59 @@ RUN apt-get $APT_ARGS_COMMON update && \ ca-certificates \ cmake \ curl \ - dotnet7 \ git \ gnupg \ libltdl-dev \ libmount-dev \ libtool \ linux-libc-dev \ + libstdc++-14-dev \ ninja-build \ pkg-config \ python3-jinja2 \ tar \ unzip \ zip \ - # LLVM + Clang toolchain. - # libllvm-17-ocaml-dev libllvm17 llvm-17 llvm-17-dev llvm-17-doc llvm-17-examples llvm-17-runtime clang-17 clang-tools-17 clang-17-doc libclang-common-17-dev libclang-17-dev libclang1-17 clang-format-17 python3-clang-17 clangd-17 clang-tidy-17 libclang-rt-17-dev libpolly-17-dev libfuzzer-17-dev lldb-17 lld-17 libc++-17-dev libc++abi-17-dev libomp-17-dev libclc-17-dev libunwind-17-dev libmlir-17-dev mlir-17-tools libbolt-17-dev bolt-17 flang-17 libclang-rt-17-dev-wasm32 libclang-rt-17-dev-wasm64 libc++-17-dev-wasm32 libc++abi-17-dev-wasm32 libclang-rt-17-dev-wasm32 libclang-rt-17-dev-wasm64 - bolt-17 \ - clang-17 \ - clang-17-doc \ - clang-format-17 \ - clang-tidy-17 \ - clang-tools-17 \ - clangd-17 \ - flang-17 \ - libbolt-17-dev \ - libc++-17-dev \ - libc++-17-dev-wasm32 \ - libc++abi-17-dev \ - libc++abi-17-dev-wasm32 \ - libclang-17-dev \ - libclang-common-17-dev \ - libclang-rt-17-dev \ - libclang-rt-17-dev-wasm32 \ - libclang-rt-17-dev-wasm32 \ - libclang-rt-17-dev-wasm64 \ - libclang-rt-17-dev-wasm64 \ - libclang1-17 \ - libclc-17-dev \ - libfuzzer-17-dev \ - libllvm-17-ocaml-dev \ - libllvm17 \ - libmlir-17-dev \ - libomp-17-dev \ - libpolly-17-dev \ - libunwind-17-dev \ - lld-17 \ - lldb-17 \ - llvm-17 \ - llvm-17-dev \ - llvm-17-doc \ - llvm-17-examples \ - llvm-17-runtime \ - mlir-17-tools \ - python3-clang-17 \ + # LLVM + Clang 18 toolchain. + # libllvm-18-ocaml-dev libllvm18 llvm-18 llvm-18-dev llvm-18-doc llvm-18-examples llvm-18-runtime clang-18 clang-tools-18 clang-18-doc libclang-common-18-dev libclang-18-dev libclang1-18 clang-format-18 python3-clang-18 clangd-18 clang-tidy-18 libclang-rt-18-dev libpolly-18-dev libfuzzer-18-dev lldb-18 libc++-18-dev libc++abi-18-dev libomp-18-dev libclc-18-dev libunwind-18-dev libmlir-18-dev mlir-18-tools libbolt-18-dev bolt-18 flang-18 libclang-rt-18-dev-wasm32 libclang-rt-18-dev-wasm64 libc++-18-dev-wasm32 libc++abi-18-dev-wasm32 libclang-rt-18-dev-wasm32 libclang-rt-18-dev-wasm64 libllvmlibc-18-dev + libllvm-18-ocaml-dev \ + libllvm18 \ + llvm-18 \ + llvm-18-dev \ + llvm-18-doc \ + llvm-18-examples \ + llvm-18-runtime \ + clang-18 \ + clang-tools-18 \ + clang-18-doc \ + libclang-common-18-dev \ + libclang-18-dev \ + libclang1-18 \ + clang-format-18 \ + python3-clang-18 \ + clangd-18 \ + clang-tidy-18 \ + libclang-rt-18-dev \ + libpolly-18-dev \ + libfuzzer-18-dev \ + lldb-18 \ + libc++-18-dev \ + libc++abi-18-dev \ + libomp-18-dev \ + libclc-18-dev \ + libunwind-18-dev \ + libmlir-18-dev \ + mlir-18-tools \ + libbolt-18-dev \ + bolt-18 \ + flang-18 \ + libclang-rt-18-dev-wasm32 \ + libclang-rt-18-dev-wasm64 \ + libc++-18-dev-wasm32 \ + libc++abi-18-dev-wasm32 \ + libclang-rt-18-dev-wasm32 \ + libclang-rt-18-dev-wasm64 \ + libllvmlibc-18-dev \ # hostapd build dependencies. # libnl-3-200-dbg libnl-3-dev libssl-dev libnl-genl-3-dev libnl-3-200-dbg \ @@ -174,8 +174,10 @@ RUN apt-get $APT_ARGS_COMMON update && \ python-is-python3 \ vim \ # Wireless tools. + # iw iw \ # Packaging tools. + # debconf-utils debconf-utils \ && \ # Reduce image size by removing package cache. diff --git a/.github/actions/build-with-host/action.yml b/.github/actions/build-with-host/action.yml index 4ad880c5..aa3065bf 100644 --- a/.github/actions/build-with-host/action.yml +++ b/.github/actions/build-with-host/action.yml @@ -2,6 +2,9 @@ name: 'build-on-host' description: 'Build the repository on the runner host system' inputs: + os: + required: true + description: 'The target operating system to build for' build-type: required: false default: 'Debug' @@ -24,7 +27,7 @@ inputs: description: 'Publish build artifacts' preset-name: required: false - default: 'dev-windows' + default: 'dev' description: 'The name of the preset to use for all CMake operations (configure, build, test, install, package)' runs: @@ -36,43 +39,49 @@ runs: script: | core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); - core.exportVariable('VCPKG_DEFAULT_BINARY_CACHE', 'C:/vcpkg/archive'); core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite'); - - name: Install vcpkg dependencies with Github Actions Cache + - name: Install Linux build dependencies + if: ${{ inputs.os == 'linux' }} run: | - echo "VCPKG_DEFAULT_BINARY_CACHE=${VCPKG_DEFAULT_BINARY_CACHE}" >> "${GITHUB_ENV}" - echo "VCPKG_BINARY_SOURCES=${VCPKG_BINARY_SOURCES}" >> "${GITHUB_ENV}" - New-Item -Path ${env:VCPKG_DEFAULT_BINARY_CACHE} -ItemType Directory -Force - shell: pwsh + export DEBIAN_FRONTEND=noninteractive + sudo -E apt-get update + sudo -E apt-get upgrade + # Install core build dependencies + sudo -E apt-get install -qq --no-install-recommends autoconf automake autopoint build-essential ca-certificates cmake curl git gnupg libltdl-dev libmount-dev libtool linux-libc-dev libstdc++-14-dev ninja-build pkg-config python3-jinja2 tar unzip zip + # Install LLVM 18 toolchain + sudo -E apt-get install -qq --no-install-recommends libllvm-18-ocaml-dev libllvm18 llvm-18 llvm-18-dev llvm-18-doc llvm-18-examples llvm-18-runtime clang-18 clang-tools-18 clang-18-doc libclang-common-18-dev libclang-18-dev libclang1-18 clang-format-18 python3-clang-18 clangd-18 clang-tidy-18 libclang-rt-18-dev libpolly-18-dev libfuzzer-18-dev lldb-18 libc++-18-dev libc++abi-18-dev libomp-18-dev libclc-18-dev libunwind-18-dev libmlir-18-dev mlir-18-tools libbolt-18-dev bolt-18 flang-18 libclang-rt-18-dev-wasm32 libclang-rt-18-dev-wasm64 libc++-18-dev-wasm32 libc++abi-18-dev-wasm32 libclang-rt-18-dev-wasm32 libclang-rt-18-dev-wasm64 libllvmlibc-18-dev + # Install hostapd dependencies + sudo -E apt-get install -qq --no-install-recommends libnl-3-200-dbg libnl-3-dev libssl-dev libnl-genl-3-dev libdbus-c++-dev libnl-route-3-dev + shell: bash - name: CMake Configure if: ${{ ! inputs.arch }} - run: cmake --preset ${{ inputs.preset-name }} --fresh -DCMAKE_BUILD_TYPE=${{ inputs.build-type }} + run: cmake --preset ${{ inputs.preset-name }}-${{ inputs.os }} --fresh -DCMAKE_BUILD_TYPE=${{ inputs.build-type }} shell: pwsh - name: CMake Configure Cross-Compile ${{ inputs.arch }} if: ${{ inputs.arch }} - run: cmake --preset ${{ inputs.preset-name }} --fresh -DCMAKE_BUILD_TYPE=${{ inputs.build-type }} -DNETREMOTE_EXCLUDE_TESTS=TRUE -A ${{ inputs.arch }} + run: cmake --preset ${{ inputs.preset-name }}-${{ inputs.os }} --fresh -DCMAKE_BUILD_TYPE=${{ inputs.build-type }} -DNETREMOTE_EXCLUDE_TESTS=TRUE -A ${{ inputs.arch }} shell: pwsh - name: CMake Build - run: cmake --build --preset build-${{ inputs.preset-name }} --config ${{ inputs.build-type }} + run: cmake --build --preset build-${{ inputs.preset-name }}-${{ inputs.os }} --config ${{ inputs.build-type }} shell: pwsh - name: CMake Test (ctest) if: ${{ inputs.test == 'true' && ! inputs.arch }} - run: ctest --preset ${{ inputs.preset-name }} -C ${{ inputs.build-type }} + run: ctest --preset test-${{ inputs.preset-name }}-${{ inputs.os }} -C ${{ inputs.build-type }} shell: pwsh - name: CMake Install if: inputs.install == 'true' - run: cmake --build --preset build-${{ inputs.preset-name }} --target install --config ${{ inputs.build-type }} + run: cmake --build --preset build-${{ inputs.preset-name }}-${{ inputs.os }} --target install --config ${{ inputs.build-type }} shell: pwsh - name: CMake Package (cpack) if: inputs.package == 'true' - run: cpack --preset package-${{ inputs.preset-name }} -C ${{ inputs.build-type }} + run: cpack --preset packaging-${{ inputs.preset-name }}-${{ inputs.os }} -C ${{ inputs.build-type }} shell: pwsh - name: Publish Artifacts @@ -81,5 +90,5 @@ runs: with: name: release-package-${{ runner.os }}-${{ inputs.build-type }}-${{ inputs.arch != '' && inputs.arch || runner.arch }} path: | - ${{ github.workspace }}/out/package/${{ inputs.preset-name }}/*.tar.* - ${{ github.workspace }}/out/package/${{ inputs.preset-name }}/*.zip + ${{ github.workspace }}/out/package/${{ inputs.preset-name }}-${{ inputs.os }}/*.tar.* + ${{ github.workspace }}/out/package/${{ inputs.preset-name }}-${{ inputs.os }}/*.zip diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml deleted file mode 100644 index d8cc71c1..00000000 --- a/.github/workflows/build-linux.yml +++ /dev/null @@ -1,18 +0,0 @@ - -name: 'Build Linux 🐧' - -on: workflow_dispatch - -jobs: - build: - name: build linux - permissions: - contents: read - actions: read - security-events: write - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Build in container - uses: ./.github/actions/build-with-docker \ No newline at end of file diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml deleted file mode 100644 index 6f1afe6d..00000000 --- a/.github/workflows/build-windows.yml +++ /dev/null @@ -1,38 +0,0 @@ - -name: 'Build Windows 📎' - -on: - workflow_dispatch: - inputs: - build-type: - description: 'Build type' - required: true - type: choice - options: - - 'Debug' - - 'Release' - - 'RelWithDebInfo' - - 'MinSizeRel' - default: 'Debug' - -jobs: - build: - name: build windows - permissions: - contents: read - actions: read - security-events: write - runs-on: windows-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Build - uses: ./.github/actions/build-with-host - with: - build-type: ${{ inputs.build-type }} - preset-name: 'dev-windows' - install: false - test: false - package: false - publish-artifacts: false - \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c84896bf..c9cdca48 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,6 +3,12 @@ name: 'Build [CMake] 🛠️' on: workflow_dispatch: inputs: + build-types: + required: true + # Note the string here contains a JSON array. This is later converted to an array using fromJson. + default: "[ 'Debug' ]" + type: string + description: 'The CMake build types (CMAKE_BUILD_TYPE) to run (must be encoded as a JSON array)' analyze-codeql: required: true default: true @@ -33,12 +39,11 @@ on: default: false type: boolean description: 'Publish build artifacts' - build-types: - required: true - # Note the string here contains a JSON array. This is later converted to an array using fromJson. - default: "[ 'Debug' ]" + preset-name: + required: false type: string - description: 'The CMake build types (CMAKE_BUILD_TYPE) to run (must be encoded as a JSON array)' + default: 'dev' + description: 'The name of the CMake preset to use for all CMake operations (configure, build, test, install, package). Must be ''dev'', ''release'', or ''cicd''.' workflow_call: inputs: @@ -52,26 +57,37 @@ on: required: false default: true type: boolean + description: 'Peform static analysis with CodeQL' build-arm64: required: false default: false type: boolean + description: 'Build ARM64 architecture' install: required: false default: false type: boolean + description: 'Invoke CMake install for the project' test: required: false default: true type: boolean + description: 'Invoke CMake CTest for the project' package: required: false default: false type: boolean + description: 'Invoke CMake CPack for the project' publish-artifacts: required: false default: false type: boolean + description: 'Publish build artifacts' + preset-name: + required: false + type: string + default: 'dev' + description: 'The name of the CMake preset to use for all CMake operations (configure, build, test, install, package). Must be ''dev'', ''release'', or ''cicd''.' jobs: build: @@ -84,9 +100,9 @@ jobs: fail-fast: false matrix: config: - - { os: windows-2022 } - - { os: windows-2022, arch: 'ARM64' } - - { os: [ self-hosted, ubuntu-23.10 ] } + - { os: windows-2022, os-name: 'windows' } + - { os: windows-2022, os-name: 'windows', arch: 'ARM64' } + - { os: ubuntu-24.04, os-name: 'linux' } build-type: ${{ fromJson(inputs.build-types) }} runs-on: ${{ matrix.config.os }} @@ -100,25 +116,29 @@ jobs: with: languages: 'cpp' - - name: Build Windows - if: ${{ contains(matrix.config.os, 'windows') }} + - name: 'Build Windows 📎' + if: ${{ contains(matrix.config.os-name, 'windows') }} uses: ./.github/actions/build-with-host with: + os: ${{ matrix.config.os-name }} build-type: ${{ matrix.build-type }} install: ${{ inputs.install }} test: ${{ inputs.test }} package: ${{ inputs.package }} publish-artifacts: ${{ inputs.publish-artifacts }} + preset-name: ${{ inputs.preset-name }} - - name: Build Linux - if: ${{ contains(matrix.config.os, 'ubuntu-23.10') }} - uses: ./.github/actions/build-with-selfhost + - name: 'Build Linux 🐧' + if: ${{ contains(matrix.config.os-name, 'linux') }} + uses: ./.github/actions/build-with-host with: + os: ${{ matrix.config.os-name }} build-type: ${{ matrix.build-type }} install: ${{ inputs.install }} test: ${{ inputs.test }} package: ${{ inputs.package }} publish-artifacts: ${{ inputs.publish-artifacts }} + preset-name: ${{ inputs.preset-name }} - name: Perform CodeQL Analysis if: inputs.analyze-codeql == true diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 180efc88..546c0431 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -32,3 +32,4 @@ jobs: with: build-types: "[ 'Debug' ]" test: true + preset-name: 'cicd' diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 23e517bf..e6fbd1bd 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,14 +1,18 @@ { "recommendations": [ - "ms-vscode.cpptools", - "ms-vscode.cmake-tools", - "twxs.cmake", - "cschlosser.doxdocgen", "bierner.github-markdown-preview", + "coolbear.systemd-unit-file", + "cschlosser.doxdocgen", "davidanson.vscode-markdownlint", + "github.copilot-chat", + "github.copilot", + "ms-azuretools.vscode-docker", "ms-vscode-remote.vscode-remote-extensionpack", - "coolbear.systemd-unit-file", + "ms-vscode.cmake-tools", + "ms-vscode.cpptools", "redhat.vscode-yaml", + "timonwong.shellcheck", + "twxs.cmake", "vadimcn.vscode-lldb", "zxh404.vscode-proto3" ] diff --git a/CMakePresets.json b/CMakePresets.json index afb56567..8505b93f 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -8,6 +8,7 @@ { "name": "windows", "hidden": true, + "description": "Base options for all Windows builds", "condition": { "type": "equals", "lhs": "${hostSystemName}", @@ -30,20 +31,45 @@ "strategy": "set" } }, + { + "name": "linux-toolchain-llvm-17", + "hidden": true, + "description": "LLVM 17 toolchain on Linux", + "cacheVariables": { + "CMAKE_CXX_COMPILER": "/usr/bin/clang++-17", + "CMAKE_C_COMPILER": "/usr/bin/clang-17" + } + }, + { + "name": "linux-toolchain-llvm-18", + "hidden": true, + "description": "LLVM 18 toolchain on Linux", + "cacheVariables": { + "CMAKE_CXX_COMPILER": "/usr/bin/clang++-18", + "CMAKE_C_COMPILER": "/usr/bin/clang-18" + } + }, { "name": "linux", "hidden": true, + "description": "Base options for all Linux builds", "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Linux" }, "cacheVariables": { - "CMAKE_CXX_COMPILER": "/usr/bin/clang++-17", - "CMAKE_C_COMPILER": "/usr/bin/clang-17", "CMAKE_GENERATOR": "Ninja Multi-Config" } }, + { + "name": "linux-toolchain-default", + "hidden": true, + "description": "Default toolchain to use for Linux builds", + "inherits": [ + "linux-toolchain-llvm-17" + ] + }, { "name": "out-of-source-build", "hidden": true, @@ -102,6 +128,7 @@ "displayName": "Packaging Linux (base)", "inherits": [ "linux", + "linux-toolchain-default", "packaging" ], "cacheVariables": { @@ -180,6 +207,7 @@ "inherits": [ "dev", "linux", + "linux-toolchain-default", "packaging-linux-dev" ] }, @@ -220,6 +248,7 @@ "inherits": [ "release", "linux", + "linux-toolchain-default", "packaging-linux-release" ], "cacheVariables": { @@ -244,6 +273,46 @@ "release-windows", "windows-arm64" ] + }, + { + "name": "cicd", + "hidden": true, + "displayName": "CI/CD (base)", + "description": "Base options for CI/CD builds", + "inherits": [ + "out-of-source-build" + ] + }, + { + "name": "cicd-linux", + "displayName": "CI/CD", + "description": "CI/CD build on Linux", + "inherits": [ + "cicd", + "linux", + "linux-toolchain-llvm-18" + ], + "cacheVariables": { + "CMAKE_GENERATOR": "Ninja Multi-Config" + } + }, + { + "name": "cicd-windows", + "displayName": "CI/CD", + "description": "CI/CD build on Windows", + "inherits": [ + "cicd", + "windows" + ] + }, + { + "name": "cicd-windows-arm64", + "displayName": "CI/CD (ARM64)", + "description": "CI/CD build on Windows ARM64", + "inherits": [ + "cicd", + "windows-arm64" + ] } ], "buildPresets": [ @@ -293,6 +362,15 @@ "cfg-release-with-debuginfo" ] }, + { + "name": "build-cicd", + "hidden": true, + "displayName": "CI/CD Build (base)", + "description": "Base options for CI/CD builds", + "inherits": [ + "cfg-debug" + ] + }, { "name": "build-dev-linux", "displayName": "Development", @@ -346,6 +424,33 @@ "inherits": [ "build-release" ] + }, + { + "name": "build-cicd-linux", + "displayName": "CI/CD", + "description": "Build the project for CI/CD on Linux", + "configurePreset": "cicd-linux", + "inherits": [ + "build-cicd" + ] + }, + { + "name": "build-cicd-windows", + "displayName": "CI/CD", + "description": "Build the project for CI/CD on Windows", + "configurePreset": "cicd-windows", + "inherits": [ + "build-cicd" + ] + }, + { + "name": "build-cicd-windows-arm64", + "displayName": "CI/CD (ARM64)", + "description": "Build the project for CI/CD on Windows (ARM64)", + "configurePreset": "cicd-windows-arm64", + "inherits": [ + "build-cicd" + ] } ], "testPresets": [ @@ -358,27 +463,53 @@ } }, { - "name": "dev", - "configurePreset": "dev", + "name": "non-root", + "configurePreset": "dev-linux", "inherits": [ "test-common" - ] + ], + "filter": { + "exclude": { + "name": "(root)" + } + } }, { - "name": "non-root", + "name": "test-dev-linux", "configurePreset": "dev-linux", + "inherits": [ + "test-common" + ] + }, + { + "name": "test-dev-windows", + "configurePreset": "dev-windows", + "inherits": [ + "test-common" + ] + }, + { + "name": "test-cicd-linux", + "configurePreset": "cicd-linux", "inherits": [ "test-common" ], "filter": { "exclude": { - "name": "(root)" + "name": "(root|nl80211)" } } }, { - "name": "dev-windows", - "configurePreset": "dev-windows", + "name": "test-cicd-windows", + "configurePreset": "cicd-windows", + "inherits": [ + "test-common" + ] + }, + { + "name": "test-cicd-windows-arm64", + "configurePreset": "cicd-windows-arm64", "inherits": [ "test-common" ] diff --git a/README.md b/README.md index 421a740f..a2545d85 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ # Network Remote Control [![CI/CD](https://github.com/microsoft/netremote/actions/workflows/cicd.yml/badge.svg)](https://github.com/microsoft/netremote/actions/workflows/cicd.yml) -[![Build Linux](https://github.com/microsoft/netremote/actions/workflows/build-linux.yml/badge.svg)](https://github.com/microsoft/netremote/actions/workflows/build-linux.yml) -[![Build Windows](https://github.com/microsoft/netremote/actions/workflows/build-windows.yml/badge.svg)](https://github.com/microsoft/netremote/actions/workflows/build-windows.yml) This project provides the ability to remotely control network components such as Wi-Fi access points typically used to test network functionality on Windows. diff --git a/tests/unit/linux/libnl-helpers/TestNetlink80211Interface.cxx b/tests/unit/linux/libnl-helpers/TestNetlink80211Interface.cxx index 14171b1b..63756415 100644 --- a/tests/unit/linux/libnl-helpers/TestNetlink80211Interface.cxx +++ b/tests/unit/linux/libnl-helpers/TestNetlink80211Interface.cxx @@ -3,7 +3,7 @@ #include #include -TEST_CASE("Nl80211Interface instance creation", "[linux][libnl-helpers]") +TEST_CASE("Nl80211Interface instance creation (nl80211)", "[linux][libnl-helpers][nl80211]") { using Microsoft::Net::Netlink::Nl80211::Nl80211Interface; diff --git a/tests/unit/linux/libnl-helpers/TestNetlink80211ProtocolState.cxx b/tests/unit/linux/libnl-helpers/TestNetlink80211ProtocolState.cxx index df575323..d7958532 100644 --- a/tests/unit/linux/libnl-helpers/TestNetlink80211ProtocolState.cxx +++ b/tests/unit/linux/libnl-helpers/TestNetlink80211ProtocolState.cxx @@ -6,7 +6,7 @@ #include #include -TEST_CASE("Netlink80211ProtocolState instance creation", "[linux][libnl-helpers]") +TEST_CASE("Netlink80211ProtocolState instance creation (nl80211)", "[linux][libnl-helpers][nl80211]") { using namespace Microsoft::Net::Netlink::Nl80211; diff --git a/tests/unit/linux/wifi/apmanager/TestAccessPointDiscoveryAgentOperationsNetlink.cxx b/tests/unit/linux/wifi/apmanager/TestAccessPointDiscoveryAgentOperationsNetlink.cxx index fc601c97..b5f19583 100644 --- a/tests/unit/linux/wifi/apmanager/TestAccessPointDiscoveryAgentOperationsNetlink.cxx +++ b/tests/unit/linux/wifi/apmanager/TestAccessPointDiscoveryAgentOperationsNetlink.cxx @@ -7,7 +7,7 @@ #include #include -TEST_CASE("Create AccessPointDiscoveryAgentOperationsNetlink", "[wifi][core][apmanager]") +TEST_CASE("Create AccessPointDiscoveryAgentOperationsNetlink (nl80211)", "[wifi][core][apmanager][nl80211]") { using namespace Microsoft::Net::Wifi; using namespace Microsoft::Net::Wifi::Test; @@ -18,7 +18,7 @@ TEST_CASE("Create AccessPointDiscoveryAgentOperationsNetlink", "[wifi][core][apm } } -TEST_CASE("Destroy AccessPointDiscoveryAgentOperationsNetlink", "[wifi][core][apmanager]") +TEST_CASE("Destroy AccessPointDiscoveryAgentOperationsNetlink (nl80211)", "[wifi][core][apmanager][nl80211]") { using namespace Microsoft::Net::Wifi; using namespace Microsoft::Net::Wifi::Test; @@ -30,7 +30,7 @@ TEST_CASE("Destroy AccessPointDiscoveryAgentOperationsNetlink", "[wifi][core][ap } } -TEST_CASE("AccessPointDiscoveryAgentOperationsNetlink::Start", "[wifi][core][apmanager]") +TEST_CASE("AccessPointDiscoveryAgentOperationsNetlink::Start (nl80211)", "[wifi][core][apmanager][nl80211]") { using namespace Microsoft::Net::Wifi; using namespace Microsoft::Net::Wifi::Test; @@ -55,7 +55,7 @@ TEST_CASE("AccessPointDiscoveryAgentOperationsNetlink::Start", "[wifi][core][apm } } -TEST_CASE("AccessPointDiscoveryAgentOperationsNetlink::Stop", "[wifi][core][apmanager]") +TEST_CASE("AccessPointDiscoveryAgentOperationsNetlink::Stop (nl80211)", "[wifi][core][apmanager][nl80211]") { using namespace Microsoft::Net::Wifi; using namespace Microsoft::Net::Wifi::Test; @@ -89,7 +89,7 @@ TEST_CASE("AccessPointDiscoveryAgentOperationsNetlink::Stop", "[wifi][core][apma } } -TEST_CASE("AccessPointDiscoveryAgentOperationsNetlink::ProbeAsync", "[wifi][core][apmanager]") +TEST_CASE("AccessPointDiscoveryAgentOperationsNetlink::ProbeAsync (nl80211)", "[wifi][core][apmanager][nl80211]") { using namespace Microsoft::Net::Wifi; using namespace Microsoft::Net::Wifi::Test;