diff --git a/.actrc b/.actrc new file mode 100644 index 00000000..f19fc11b --- /dev/null +++ b/.actrc @@ -0,0 +1,12 @@ +# Act configuration for netremote +# Use full Ubuntu image (includes PowerShell, .NET, and other tools) +# Note: This image is large (~15GB) but matches GitHub runners more closely +-P ubuntu-latest=catthehacker/ubuntu:full-latest +-P ubuntu-24.04=catthehacker/ubuntu:full-24.04 +-P ubuntu-22.04=catthehacker/ubuntu:full-22.04 + +# Reuse containers between runs for faster iteration +--reuse + +# Set artifact server path +--artifact-server-path /tmp/act-artifacts diff --git a/.github/actions/build-with-host/action.yml b/.github/actions/build-with-host/action.yml index aa3065bf..693363c8 100644 --- a/.github/actions/build-with-host/action.yml +++ b/.github/actions/build-with-host/action.yml @@ -1,4 +1,4 @@ - + name: 'build-on-host' description: 'Build the repository on the runner host system' inputs: @@ -29,37 +29,58 @@ inputs: required: false default: 'dev' description: 'The name of the preset to use for all CMake operations (configure, build, test, install, package)' + github-token: + required: true + description: 'GitHub token for NuGet package authentication (use secrets.GITHUB_TOKEN)' runs: using: 'composite' steps: - - name: Configure vcpkg to use Github Actions Cache - uses: actions/github-script@v7 - with: - script: | - core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || ''); - core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || ''); - core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;x-gha,readwrite'); - - name: Install Linux build dependencies if: ${{ inputs.os == 'linux' }} run: | 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 + sudo -E apt-get install -qq --no-install-recommends autoconf autoconf-archive 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: Configure vcpkg binary caching with GitHub Packages + shell: pwsh + env: + GITHUB_TOKEN: ${{ inputs.github-token }} + run: | + dotnet nuget add source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" --name "GitHubPackages" --username "${{ github.repository_owner }}" --password "$env:GITHUB_TOKEN" --store-password-in-clear-text 2>$null + if ($LASTEXITCODE -ne 0) { + # Source may already exist, try updating instead + dotnet nuget update source "GitHubPackages" --source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" --username "${{ github.repository_owner }}" --password "$env:GITHUB_TOKEN" --store-password-in-clear-text + } + + - name: Set vcpkg environment variables + uses: actions/github-script@v7 + with: + script: | + core.exportVariable('VCPKG_BINARY_SOURCES', 'clear;nuget,https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json,readwrite'); + - name: CMake Configure if: ${{ ! inputs.arch }} run: cmake --preset ${{ inputs.preset-name }}-${{ inputs.os }} --fresh -DCMAKE_BUILD_TYPE=${{ inputs.build-type }} shell: pwsh + - name: Upload vcpkg logs on failure + if: failure() + uses: actions/upload-artifact@v4 + with: + name: vcpkg-logs-${{ runner.os }}-${{ inputs.build-type }} + path: | + ${{ github.workspace }}-cmake/build/${{ inputs.preset-name }}-${{ inputs.os }}/vcpkg-manifest-install.log + ${{ github.workspace }}/vcpkg/buildtrees/**/*.log + if-no-files-found: ignore + - name: CMake Configure Cross-Compile ${{ inputs.arch }} if: ${{ inputs.arch }} run: cmake --preset ${{ inputs.preset-name }}-${{ inputs.os }} --fresh -DCMAKE_BUILD_TYPE=${{ inputs.build-type }} -DNETREMOTE_EXCLUDE_TESTS=TRUE -A ${{ inputs.arch }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c9cdca48..5158b14d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -96,6 +96,7 @@ jobs: contents: read actions: read security-events: write + packages: write strategy: fail-fast: false matrix: @@ -105,7 +106,7 @@ jobs: - { os: ubuntu-24.04, os-name: 'linux' } build-type: ${{ fromJson(inputs.build-types) }} runs-on: ${{ matrix.config.os }} - + steps: - name: Checkout repository uses: actions/checkout@v4 @@ -127,6 +128,7 @@ jobs: package: ${{ inputs.package }} publish-artifacts: ${{ inputs.publish-artifacts }} preset-name: ${{ inputs.preset-name }} + github-token: ${{ secrets.GITHUB_TOKEN }} - name: 'Build Linux 🐧' if: ${{ contains(matrix.config.os-name, 'linux') }} @@ -139,6 +141,7 @@ jobs: package: ${{ inputs.package }} publish-artifacts: ${{ inputs.publish-artifacts }} preset-name: ${{ inputs.preset-name }} + github-token: ${{ secrets.GITHUB_TOKEN }} - name: Perform CodeQL Analysis if: inputs.analyze-codeql == true diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 546c0431..54f70dcf 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -25,6 +25,7 @@ jobs: contents: read actions: read security-events: write + packages: write concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true diff --git a/.gitignore b/.gitignore index e1e20235..04653d8d 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,7 @@ vcpkg_installed*/ # Debug logs. *-LogNetRemote*.txt + +# Act (local GitHub Actions testing) +.secrets +.github/workflows/act-test.yml diff --git a/.secrets.example b/.secrets.example new file mode 100644 index 00000000..a9dafd43 --- /dev/null +++ b/.secrets.example @@ -0,0 +1,6 @@ +# Secrets for local act runs +# Copy this file to .secrets and fill in values +# NEVER commit the .secrets file! + +# GitHub token (create a PAT with packages:write for NuGet caching) +GITHUB_TOKEN=your_github_pat_here diff --git a/packaging/vcpkg/ports/abseil/0001-Mark-absl_cc_library-target-as-test-only.patch b/packaging/vcpkg/ports/abseil/0001-Mark-absl_cc_library-target-as-test-only.patch deleted file mode 100644 index 23e3e4dc..00000000 --- a/packaging/vcpkg/ports/abseil/0001-Mark-absl_cc_library-target-as-test-only.patch +++ /dev/null @@ -1,24 +0,0 @@ -From ccb2f752f6ba4f90eda8931de78c9d8535286602 Mon Sep 17 00:00:00 2001 -From: Andrew Beltrano -Date: Tue, 16 Jul 2024 13:36:58 -0600 -Subject: [PATCH 1/1] Mark absl_cc_library target as test-only. - ---- - absl/container/CMakeLists.txt | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/absl/container/CMakeLists.txt b/absl/container/CMakeLists.txt -index 128cc0e9..11d65d55 100644 ---- a/absl/container/CMakeLists.txt -+++ b/absl/container/CMakeLists.txt -@@ -213,6 +213,7 @@ absl_cc_library( - DEPS - absl::config - GTest::gmock -+ TESTONLY - ) - - absl_cc_test( --- -2.43.0 - diff --git a/packaging/vcpkg/ports/abseil/portfile.cmake b/packaging/vcpkg/ports/abseil/portfile.cmake deleted file mode 100644 index cd5c007e..00000000 --- a/packaging/vcpkg/ports/abseil/portfile.cmake +++ /dev/null @@ -1,60 +0,0 @@ -if (NOT VCPKG_TARGET_IS_WINDOWS) - vcpkg_check_linkage(ONLY_STATIC_LIBRARY) -endif() - -vcpkg_from_github( - OUT_SOURCE_PATH SOURCE_PATH - REPO abseil/abseil-cpp - REF "${VERSION}" - SHA512 41504899ac4fd4a6eaa0a5fdf27a7765ec81962fb99b6a07982ceed32c5289e9eb12206c83a70fd44c5c3e1b96c2bfa160eb12f1dbbb45f1109d632c7690de90 - HEAD_REF master - PATCHES - 0001-Mark-absl_cc_library-target-as-test-only.patch -) - -vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS - FEATURES - cxx17 ABSL_USE_CXX17 -) - -# With ABSL_PROPAGATE_CXX_STD=ON abseil automatically detect if it is being -# compiled with C++14 or C++17, and modifies the installed `absl/base/options.h` -# header accordingly. This works even if CMAKE_CXX_STANDARD is not set. Abseil -# uses the compiler default behavior to update `absl/base/options.h` as needed. -if (ABSL_USE_CXX17) - set(ABSL_USE_CXX17_OPTION "-DCMAKE_CXX_STANDARD=17") -endif () - -vcpkg_cmake_configure( - SOURCE_PATH "${SOURCE_PATH}" - DISABLE_PARALLEL_CONFIGURE - OPTIONS - -DABSL_PROPAGATE_CXX_STD=ON - ${ABSL_USE_CXX17_OPTION} -) - -vcpkg_cmake_install() -vcpkg_cmake_config_fixup(PACKAGE_NAME absl CONFIG_PATH lib/cmake/absl) -vcpkg_fixup_pkgconfig() - -vcpkg_copy_pdbs() -file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share" - "${CURRENT_PACKAGES_DIR}/debug/include" - "${CURRENT_PACKAGES_DIR}/include/absl/copts" - "${CURRENT_PACKAGES_DIR}/include/absl/strings/testdata" - "${CURRENT_PACKAGES_DIR}/include/absl/time/internal/cctz/testdata" -) - -if (VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") - file(GLOB_RECURSE headers "${CURRENT_PACKAGES_DIR}/include/absl/*.h") - foreach(header IN LISTS ${headers}) - vcpkg_replace_string("${header}" - "!defined(ABSL_CONSUME_DLL)" "0" - ) - vcpkg_replace_string("${header}" - "defined(ABSL_CONSUME_DLL)" "1" - ) - endforeach() -endif() - -vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/packaging/vcpkg/ports/abseil/vcpkg.json b/packaging/vcpkg/ports/abseil/vcpkg.json deleted file mode 100644 index 2749d4f1..00000000 --- a/packaging/vcpkg/ports/abseil/vcpkg.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "abseil", - "version": "20240116.1", - "port-version": 1, - "description": [ - "Abseil is an open-source collection of C++ library code designed to augment the C++ standard library. The Abseil library code is collected from Google's own C++ code base, has been extensively tested and used in production, and is the same code we depend on in our daily coding lives.", - "In some cases, Abseil provides pieces missing from the C++ standard; in others, Abseil provides alternatives to the standard for special needs we've found through usage in the Google code base. We denote those cases clearly within the library code we provide you.", - "Abseil is not meant to be a competitor to the standard library; we've just found that many of these utilities serve a purpose within our code base, and we now want to provide those resources to the C++ community as a whole." - ], - "homepage": "https://github.com/abseil/abseil-cpp", - "license": "Apache-2.0", - "dependencies": [ - { - "name": "vcpkg-cmake", - "host": true - }, - { - "name": "vcpkg-cmake-config", - "host": true - } - ], - "features": { - "cxx17": { - "description": "Enable compiler C++17." - } - } -} diff --git a/vcpkg b/vcpkg index 9224b3bb..58831996 160000 --- a/vcpkg +++ b/vcpkg @@ -1 +1 @@ -Subproject commit 9224b3bbd8df24999d85720b1d005dd6f969ade0 +Subproject commit 588319964489874699b378e3a94b4285126e112e diff --git a/vcpkg.json b/vcpkg.json index 1108693f..5a2b8216 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -2,6 +2,7 @@ "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json", "name": "netremote", "version-string": "0.5.2", + "builtin-baseline": "588319964489874699b378e3a94b4285126e112e", "dependencies": [ { "name": "vcpkg-cmake", @@ -12,17 +13,13 @@ "host": true } ], - "overrides": [ - { - "name": "cli11", - "version": "2.3.1" - } + "default-features": [ + "api", + "api-bindings", + "server", + "tests", + "tools" ], - "vcpkg-configuration": { - "overlay-ports": [ - "packaging/vcpkg/ports/abseil" - ] - }, "features": { "api": { "description": "Provide the API protocol buffers + gRPC .proto source files" @@ -31,73 +28,72 @@ "description": "Provide the API protocol buffers + gRPC library bindings", "dependencies": [ "grpc", - "protobuf", - { - "name": "netremote", - "features": [ - "api" - ] - } + "protobuf" ] }, - "server":{ + "server": { "description": "Provide the server binary", "dependencies": [ - { - "name": "netremote", - "features": [ - "api-bindings" - ] - }, - { - "name": "sdbus-cpp", - "platform": "linux" - }, + "cli11", + "grpc", { "name": "libsystemd", "platform": "linux" }, - "cli11", "magic-enum", + "nlohmann-json", "plog", - "nlohmann-json" + "protobuf", + { + "name": "sdbus-cpp", + "platform": "linux" + } ] }, - "tests":{ + "tests": { "description": "Enable building the tests", "dependencies": [ "catch2", + "cli11", + "grpc", + { + "name": "libsystemd", + "platform": "linux" + }, "magic-enum", "nlohmann-json", "plog", + "protobuf", { - "name": "netremote", - "features": [ - "api-bindings", - "server" - ] + "name": "sdbus-cpp", + "platform": "linux" } ] }, - "tools":{ + "tools": { "description": "Enable building the tools", "dependencies": [ + "cli11", + "grpc", { - "name": "netremote", - "features": [ - "api-bindings", - "server" - ] + "name": "libsystemd", + "platform": "linux" + }, + "magic-enum", + "nlohmann-json", + "plog", + "protobuf", + { + "name": "sdbus-cpp", + "platform": "linux" } ] } }, - "default-features": [ - "api", - "api-bindings", - "server", - "tests", - "tools" - ], - "builtin-baseline": "9224b3bbd8df24999d85720b1d005dd6f969ade0" -} \ No newline at end of file + "overrides": [ + { + "name": "cli11", + "version": "2.3.1" + } + ] +}