0
0
Fork 0
mirror of https://github.com/netdata/netdata.git synced 2025-04-26 13:54:48 +00:00

Add code signing for Windows executables. ()

* Add code signing for Windows executables.

* Fix typos and add failure notification.

* Use full version for trusted signing action.

Because MS isn’t publishing it with proper semver tags.

* Avoid reinstalling dependencies that are already installed.

* Fix CMake 3.30 compatibility.

* Don’t let BUILD_DIR propagate to cmake.

* Fix JSON-C build warning.

* Fix handling of externally specified build directories.

While regular Windows paths do actually work under MSYS2, they seem to
confuse CMake, so we need to convert to a standard MSYS2 path if
`BUILD_DIR` is set to a Windows path.

* Fix typo.

* Fix build directory handling.
This commit is contained in:
Austin S. Hemmelgarn 2024-08-08 07:24:54 -04:00 committed by GitHub
parent 6089849cf6
commit a3ea51ed15
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 105 additions and 36 deletions

View file

@ -1082,11 +1082,47 @@ jobs:
- name: Build Netdata - name: Build Netdata
id: build id: build
if: needs.file-check.outputs.run == 'true' if: needs.file-check.outputs.run == 'true'
env:
BUILD_DIR: ${{ github.workspace }}\build
run: ./packaging/windows/build.ps1 run: ./packaging/windows/build.ps1
- name: Sign Agent Code
id: sign-agent
if: needs.file-check.outputs.run == 'true' && github.event_name != 'pull_request'
uses: azure/trusted-signing-action@v0.4.0
with:
azure-tennant-id: ${{ secrets.CODE_SIGNING_TENNANT_ID }}
azure-client-id: ${{ secrets.CODE_SIGNING_CLIENT_ID }}
azure-client-secret: ${{ secrets.CODE_SIGNING_CLIENT_SECRET }}
endpoint: "https://eus.codesigning.azure.net/"
trusted-signing-account-name: Netdata
certificate-profile-name: Netdata
files-folder: ${{ github.workspace }}\build
files-folder-filter: exe,dll
files-recurse: true
file-digest: SHA256
timestamp-rfc3161: "http://timestamp.acs.microsoft.com"
timestamp-digest: SHA256
- name: Package Netdata - name: Package Netdata
id: package id: package
if: needs.file-check.outputs.run == 'true' if: needs.file-check.outputs.run == 'true'
env:
BUILD_DIR: ${{ github.workspace }}\build
run: ./packaging/windows/package.ps1 run: ./packaging/windows/package.ps1
- name: Sign Installer
id: sign-installer
if: needs.file-check.outputs.run == 'true' && github.event_name != 'pull_request'
uses: azure/trusted-signing-action@v0.4.0
with:
azure-tennant-id: ${{ secrets.CODE_SIGNING_TENNANT_ID }}
azure-client-id: ${{ secrets.CODE_SIGNING_CLIENT_ID }}
azure-client-secret: ${{ secrets.CODE_SIGNING_CLIENT_SECRET }}
endpoint: "https://eus.codesigning.azure.net/"
trusted-signing-account-name: Netdata
certificate-profile-name: Netdata
files: ${{ github.workspace }}\packaging\windows\netdata-installer.exe
file-digest: SHA256
timestamp-rfc3161: "http://timestamp.acs.microsoft.com"
timestamp-digest: SHA256
- name: Upload Installer - name: Upload Installer
id: upload id: upload
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
@ -1094,6 +1130,32 @@ jobs:
name: windows-x86_64-installer name: windows-x86_64-installer
path: packaging\windows\netdata-installer.exe path: packaging\windows\netdata-installer.exe
retention-days: 30 retention-days: 30
- name: Failure Notification
uses: rtCamp/action-slack-notify@v2
env:
SLACK_COLOR: 'danger'
SLACK_FOOTER: ''
SLACK_ICON_EMOJI: ':github-actions:'
SLACK_TITLE: 'Windows build failed:'
SLACK_USERNAME: 'GitHub Actions'
SLACK_MESSAGE: |-
${{ github.repository }}: Updater checks for ${{ matrix.distro }} failed.
Checkout: ${{ steps.checkout.outcome }}
Set Up Dependencies: ${{ steps.deps.outcome }}
Build Netdata: ${{ steps.build.outcome }}
Sign Agent Code: ${{ steps.sign-agent.outcome }}
Package Netdata: ${{ steps.package.outcome }}
Sign Installer: ${{ steps.sign-installer.outcome }}
Upload Installer: ${{ steps.upload.outcome }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
if: >-
${{
failure()
&& startsWith(github.ref, 'refs/heads/master')
&& github.event_name != 'pull_request'
&& github.repository == 'netdata/netdata'
&& needs.file-check.outputs.run == 'true'
}}
updater-check: # Test the generated dist archive using the updater code. updater-check: # Test the generated dist archive using the updater code.
name: Test Generated Distfile and Updater Code name: Test Generated Distfile and Updater Code

View file

@ -38,8 +38,17 @@ endmacro()
# #
# This needs to be explicitly included for any sub-project that needs # This needs to be explicitly included for any sub-project that needs
# to be built for the target system. # to be built for the target system.
#
# This also needs to _NOT_ have any generator expressions, as they are not
# supported for the required usage of this variable in CMake 3.30 or newer.
set(NETDATA_PROPAGATE_TOOLCHAIN_ARGS set(NETDATA_PROPAGATE_TOOLCHAIN_ARGS
"-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}")
$<$<BOOL:${CMAKE_C_COMPILER_TARGET}>:-DCMAKE_C_COMPILER_TARGET=${CMAKE_C_COMPILER_TARGET}
$<$<BOOL:${CMAKE_CXX_COMPILER_TARGET}>:-DCMAKE_CXX_COMPILER_TARGET=${CMAKE_CXX_COMPILER_TARGET}") if(DEFINED CMAKE_C_COMPILER_TARGET)
set(NETDATA_PROPAGATE_TOOLCHAIN_ARGS "${NETDATA_PROPAGATE_TOOLCHAIN_ARGS} -DCMAKE_C_COMPILER_TARGET=${CMAKE_C_COMPILER_TARGET}")
endif()
if(DEFINED CMAKE_CXX_COMPILER_TARGET)
set(NETDATA_PROPAGATE_TOOLCHAIN_ARGS "${NETDATA_PROPAGATE_TOOLCHAIN_ARGS} -DCMAKE_CXX_COMPILER_TARGET=${CMAKE_CXX_COMPILER_TARGET}")
endif()

View file

@ -75,7 +75,7 @@ macro(netdata_detect_jsonc)
endif() endif()
if(NOT JSONC_FOUND) if(NOT JSONC_FOUND)
set(ENABLE_BUNDLED_JSONC True PARENT_SCOPE) set(ENABLE_BUNDLED_JSONC True)
netdata_bundle_jsonc() netdata_bundle_jsonc()
set(NETDATA_JSONC_LDFLAGS json-c) set(NETDATA_JSONC_LDFLAGS json-c)
set(NETDATA_JSONC_INCLUDE_DIRS ${PROJECT_BINARY_DIR}/include) set(NETDATA_JSONC_INCLUDE_DIRS ${PROJECT_BINARY_DIR}/include)

View file

@ -1,21 +1,10 @@
#!/bin/bash #!/bin/bash
repo_root="$(dirname "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null && pwd -P)")")" REPO_ROOT="$(dirname "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null && pwd -P)")")"
CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE:-RelWithDebInfo}" CMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE:-RelWithDebInfo}"
if [ -n "${BUILD_DIR}" ]; then # shellcheck source=./win-build-dir.sh
build="${BUILD_DIR}" . "${REPO_ROOT}/packaging/windows/win-build-dir.sh"
elif [ -n "${OSTYPE}" ]; then
if [ -n "${MSYSTEM}" ]; then
build="${repo_root}/build-${OSTYPE}-${MSYSTEM}"
else
build="${repo_root}/build-${OSTYPE}"
fi
elif [ "$USER" = "vk" ]; then
build="${repo_root}/build"
else
build="${repo_root}/build"
fi
set -exu -o pipefail set -exu -o pipefail
@ -42,7 +31,7 @@ fi
${GITHUB_ACTIONS+echo "::group::Configuring"} ${GITHUB_ACTIONS+echo "::group::Configuring"}
# shellcheck disable=SC2086 # shellcheck disable=SC2086
CFLAGS="${BUILD_CFLAGS}" /usr/bin/cmake \ CFLAGS="${BUILD_CFLAGS}" /usr/bin/cmake \
-S "${repo_root}" \ -S "${REPO_ROOT}" \
-B "${build}" \ -B "${build}" \
-G "${generator}" \ -G "${generator}" \
-DCMAKE_INSTALL_PREFIX="/opt/netdata" \ -DCMAKE_INSTALL_PREFIX="/opt/netdata" \

View file

@ -11,7 +11,7 @@ pacman -Syuu --noconfirm
${GITHUB_ACTIONS+echo "::endgroup::"} ${GITHUB_ACTIONS+echo "::endgroup::"}
${GITHUB_ACTIONS+echo "::group::Installing dependencies"} ${GITHUB_ACTIONS+echo "::group::Installing dependencies"}
pacman -S --noconfirm \ pacman -S --noconfirm --needed \
base-devel \ base-devel \
cmake \ cmake \
git \ git \

View file

@ -1,20 +1,9 @@
#!/bin/bash #!/bin/bash
repo_root="$(dirname "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null && pwd -P)")")" REPO_ROOT="$(dirname "$(dirname "$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null && pwd -P)")")"
if [ -n "${BUILD_DIR}" ]; then # shellcheck source=./win-build-dir.sh
build="${BUILD_DIR}" . "${REPO_ROOT}/packaging/windows/win-build-dir.sh"
elif [ -n "${OSTYPE}" ]; then
if [ -n "${MSYSTEM}" ]; then
build="${repo_root}/build-${OSTYPE}-${MSYSTEM}"
else
build="${repo_root}/build-${OSTYPE}"
fi
elif [ "$USER" = "vk" ]; then
build="${repo_root}/build"
else
build="${repo_root}/build"
fi
set -exu -o pipefail set -exu -o pipefail
@ -24,7 +13,7 @@ ${GITHUB_ACTIONS+echo "::endgroup::"}
if [ ! -f "/msys2-installer.exe" ]; then if [ ! -f "/msys2-installer.exe" ]; then
${GITHUB_ACTIONS+echo "::group::Fetching MSYS2 installer"} ${GITHUB_ACTIONS+echo "::group::Fetching MSYS2 installer"}
"${repo_root}/packaging/windows/fetch-msys2-installer.py" /msys2-installer.exe "${REPO_ROOT}/packaging/windows/fetch-msys2-installer.py" /msys2-installer.exe
${GITHUB_ACTIONS+echo "::endgroup::"} ${GITHUB_ACTIONS+echo "::endgroup::"}
fi fi
@ -33,5 +22,5 @@ NDVERSION=$"$(grep 'CMAKE_PROJECT_VERSION:STATIC' "${build}/CMakeCache.txt"| cut
NDMAJORVERSION=$"$(grep 'CMAKE_PROJECT_VERSION_MAJOR:STATIC' "${build}/CMakeCache.txt"| cut -d= -f2)" NDMAJORVERSION=$"$(grep 'CMAKE_PROJECT_VERSION_MAJOR:STATIC' "${build}/CMakeCache.txt"| cut -d= -f2)"
NDMINORVERSION=$"$(grep 'CMAKE_PROJECT_VERSION_MINOR:STATIC' "${build}/CMakeCache.txt"| cut -d= -f2)" NDMINORVERSION=$"$(grep 'CMAKE_PROJECT_VERSION_MINOR:STATIC' "${build}/CMakeCache.txt"| cut -d= -f2)"
/mingw64/bin/makensis.exe -DCURRVERSION="${NDVERSION}" -DMAJORVERSION="${NDMAJORVERSION}" -DMINORVERSION="${NDMINORVERSION}" "${repo_root}/packaging/windows/installer.nsi" /mingw64/bin/makensis.exe -DCURRVERSION="${NDVERSION}" -DMAJORVERSION="${NDMAJORVERSION}" -DMINORVERSION="${NDMINORVERSION}" "${REPO_ROOT}/packaging/windows/installer.nsi"
${GITHUB_ACTIONS+echo "::endgroup::"} ${GITHUB_ACTIONS+echo "::endgroup::"}

View file

@ -0,0 +1,20 @@
#!/bin/bash
if [ -n "${BUILD_DIR}" ]; then
if (echo "${BUILD_DIR}" | grep -q -E "^[A-Z]:\\\\"); then
build="$(echo "${BUILD_DIR}" | sed -e 's/\\/\//g' -e 's/^\([A-Z]\):\//\/\1\//' -)"
else
build="${BUILD_DIR}"
fi
elif [ -n "${OSTYPE}" ]; then
if [ -n "${MSYSTEM}" ]; then
build="${REPO_ROOT}/build-${OSTYPE}-${MSYSTEM}"
else
build="${REPO_ROOT}/build-${OSTYPE}"
fi
elif [ "$USER" = "vk" ]; then
build="${REPO_ROOT}/build"
else
# shellcheck disable=SC2034
build="${REPO_ROOT}/build"
fi