From 70da66b1209293ceda0b5519dc54e4b5e97b4737 Mon Sep 17 00:00:00 2001 From: Alexandr Stelnykovych Date: Fri, 13 Jun 2025 13:21:54 +0300 Subject: [PATCH] Build script for updatemgr --- cmds/updatemgr/build.sh | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100755 cmds/updatemgr/build.sh diff --git a/cmds/updatemgr/build.sh b/cmds/updatemgr/build.sh new file mode 100755 index 00000000..4f6612d6 --- /dev/null +++ b/cmds/updatemgr/build.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +# This script builds the updatemgr binary for Portmaster. +# It retrieves the current version from git tags, builds the binary, +# and optionally compresses it using UPX if available. +# Usage: ./build.sh + +set -e + +# ##################################################################### +# Initialize 'version' variables +# ##################################################################### + +# Get source repository +SOURCE="$( (git remote -v | cut -f2 | cut -d" " -f1 | head -n 1) || echo "unknown" )" + +# Get build time +BUILD_TIME="$(date -u "+%Y-%m-%dT%H:%M:%SZ" || echo "unknown")" + +# Get version from git tags +VERSION="$(git tag --points-at || true)" +if [ -z "${VERSION}" ]; then + dev_version="$(git describe --tags --first-parent --abbrev=0 || true)" + if [ -n "${dev_version}" ]; then + VERSION="${dev_version}_dev_build" + fi +fi +if [ -z "${VERSION}" ]; then + VERSION="dev_build" +fi + +echo "Source : $SOURCE" +echo "Build Time : $BUILD_TIME" +echo "Version : $VERSION" + +# Create cleaned version without 'v' prefix and without suffix +version_clean="$(echo "${VERSION}" | sed -E 's/^[vV]//' | sed -E 's/_.*$//')" +if echo "${version_clean}" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+([.-].*)?$' > /dev/null; then + VERSION_SemVer="${version_clean}" + echo "VERSION_SemVer: $VERSION_SemVer" +else + echo "VERSION_SemVer: [Empty - not a valid SemVer in Git Tag] - !!! WARNING !!!" +fi + +# ##################################################################### +# Build updatemgr +# ##################################################################### +echo "" +echo "Building updatemgr..." + +mkdir -p dist +CGO_ENABLED=0 go build -trimpath -ldflags="-s -w \ + -X github.com/safing/portmaster/base/info.version=${VERSION} \ + -X github.com/safing/portmaster/base/info.buildSource=${SOURCE} \ + -X github.com/safing/portmaster/base/info.buildTime=${BUILD_TIME}" \ + -o dist/updatemgr + +echo "Build complete." +echo "" + +# ##################################################################### +# Check if UPX is installed and compress the binary +# ##################################################################### +if command -v upx &> /dev/null; then + echo "UPX is installed. UPX can reduce binary size." + read -p "Do you want to compress the binary with UPX? [y/N] " use_upx + + if [[ $use_upx =~ ^[Yy]$ ]]; then + echo "Compressing with UPX..." + upx --best dist/updatemgr + echo "Compression complete." + else + echo "Skipping UPX compression." + fi +else + echo "UPX is not installed. Skipping compression." +fi + +echo "" +echo "Build script completed. The updatemgr binary is located in the 'dist' directory." \ No newline at end of file