215 lines
6.4 KiB
Bash
Executable file
215 lines
6.4 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# ============================================================================
|
|
# Projekt.....: rs2322tcp
|
|
# Datei.......: build.sh
|
|
#
|
|
# Copyright (C) 2026 Dieter Lang
|
|
#
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
#
|
|
# Beschreibung:
|
|
# Erstellt die Linux- und Windows-Builds des Projektes.
|
|
#
|
|
# Die Versionsinformationen werden aus Git ermittelt und beim Build
|
|
# über den Go-Linker in die Binärdateien eingebettet.
|
|
#
|
|
# Gebaut werden:
|
|
# - Linux amd64: Client und Server
|
|
# - Linux arm64: Server
|
|
# - Windows amd64: Client
|
|
# ============================================================================
|
|
#
|
|
|
|
set -e
|
|
|
|
PROJECT=$(basename "$(pwd)")
|
|
BUILDDIR="build"
|
|
MODULE=$(go list -m)
|
|
|
|
##############################################################################
|
|
# Farben
|
|
##############################################################################
|
|
|
|
RED="\033[1;31m"
|
|
GREEN="\033[1;32m"
|
|
BLUE="\033[1;34m"
|
|
YELLOW="\033[1;33m"
|
|
RESET="\033[0m"
|
|
|
|
##############################################################################
|
|
# Zeitmessung
|
|
##############################################################################
|
|
|
|
START=$(date +%s)
|
|
|
|
##############################################################################
|
|
# Projektinformationen
|
|
##############################################################################
|
|
|
|
VERSION=$(git describe --tags --always 2>/dev/null || echo "dev")
|
|
BUILD=$(git rev-list --count HEAD 2>/dev/null || echo "0")
|
|
BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
|
|
COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
|
GO_VERSION=$(go version | awk '{print $3}')
|
|
HOST=$(hostname)
|
|
DATE=$(date "+%Y-%m-%dT%H:%M:%S")
|
|
|
|
##############################################################################
|
|
|
|
echo
|
|
echo -e "${BLUE}"
|
|
echo "============================================================"
|
|
echo " ${PROJECT} Build Script"
|
|
echo "============================================================"
|
|
echo -e "${RESET}"
|
|
|
|
printf "%-12s %s\n" "Projekt:" "$PROJECT"
|
|
printf "%-12s %s\n" "Version:" "$VERSION"
|
|
printf "%-12s %s\n" "Build:" "$BUILD"
|
|
printf "%-12s %s\n" "Branch:" "$BRANCH"
|
|
printf "%-12s %s\n" "Commit:" "$COMMIT"
|
|
printf "%-12s %s\n" "Go:" "$GO_VERSION"
|
|
printf "%-12s %s\n" "Host:" "$HOST"
|
|
printf "%-12s %s\n" "Datum:" "$DATE"
|
|
|
|
echo
|
|
|
|
##############################################################################
|
|
# Formatieren
|
|
##############################################################################
|
|
|
|
echo -e "${YELLOW}Formatiere Quellcode ...${RESET}"
|
|
gofmt -w .
|
|
|
|
##############################################################################
|
|
# Tests
|
|
##############################################################################
|
|
|
|
echo -e "${YELLOW}Starte Tests ...${RESET}"
|
|
go test ./...
|
|
|
|
##############################################################################
|
|
# Module bereinigen
|
|
##############################################################################
|
|
|
|
echo -e "${YELLOW}Bereinige Module ...${RESET}"
|
|
go mod tidy
|
|
|
|
##############################################################################
|
|
# Build-Verzeichnis
|
|
##############################################################################
|
|
|
|
echo -e "${YELLOW}Erzeuge Build-Verzeichnis ...${RESET}"
|
|
|
|
rm -rf "${BUILDDIR}"
|
|
mkdir -p "${BUILDDIR}"
|
|
|
|
##############################################################################
|
|
# Linker-Optionen
|
|
##############################################################################
|
|
|
|
LDFLAGS="-s -w \
|
|
-X '${MODULE}/internal/version.Version=${VERSION}' \
|
|
-X '${MODULE}/internal/version.Build=${BUILD}' \
|
|
-X '${MODULE}/internal/version.Commit=${COMMIT}' \
|
|
-X '${MODULE}/internal/version.Date=${DATE}'"
|
|
|
|
##############################################################################
|
|
# Buildfunktion
|
|
##############################################################################
|
|
|
|
build_target() {
|
|
|
|
GOOS=$1
|
|
GOARCH=$2
|
|
TARGET=$3
|
|
PROGRAM=$4
|
|
OUTPUT=$5
|
|
|
|
echo
|
|
echo -e "${BLUE}Baue ${PROGRAM} für ${TARGET}${RESET}"
|
|
|
|
mkdir -p "${BUILDDIR}/${TARGET}"
|
|
|
|
GOOS="${GOOS}" \
|
|
GOARCH="${GOARCH}" \
|
|
CGO_ENABLED=0 \
|
|
go build \
|
|
-trimpath \
|
|
-ldflags="${LDFLAGS}" \
|
|
-o "${BUILDDIR}/${TARGET}/${OUTPUT}" \
|
|
"./cmd/${PROGRAM}"
|
|
|
|
(
|
|
cd "${BUILDDIR}/${TARGET}"
|
|
sha256sum "${OUTPUT}" > "${OUTPUT}.sha256"
|
|
)
|
|
|
|
SIZE=$(stat -c%s "${BUILDDIR}/${TARGET}/${OUTPUT}")
|
|
SIZE_MB=$(awk "BEGIN {printf \"%.2f\", ${SIZE}/1024/1024}")
|
|
|
|
echo -e "${GREEN}OK${RESET}"
|
|
echo "Größe : ${SIZE_MB} MB"
|
|
}
|
|
|
|
##############################################################################
|
|
# Linux amd64
|
|
##############################################################################
|
|
|
|
build_target linux amd64 linux-amd64 \
|
|
rs2322tcp-client rs2322tcp-client
|
|
|
|
build_target linux amd64 linux-amd64 \
|
|
rs2322tcp-server rs2322tcp-server
|
|
|
|
##############################################################################
|
|
# Linux arm64
|
|
##############################################################################
|
|
|
|
build_target linux arm64 linux-arm64 \
|
|
rs2322tcp-server rs2322tcp-server
|
|
|
|
##############################################################################
|
|
# Windows amd64
|
|
##############################################################################
|
|
|
|
build_target windows amd64 windows-amd64 \
|
|
rs2322tcp-client rs2322tcp-client.exe
|
|
|
|
##############################################################################
|
|
# Abschluss
|
|
##############################################################################
|
|
|
|
END=$(date +%s)
|
|
RUNTIME=$((END-START))
|
|
|
|
TARGETS=4
|
|
FILES=$(find "${BUILDDIR}" -type f | wc -l)
|
|
|
|
echo
|
|
echo -e "${BLUE}"
|
|
echo "============================================================"
|
|
echo "Zusammenfassung"
|
|
echo "============================================================"
|
|
echo -e "${RESET}"
|
|
|
|
printf "%-12s %s\n" "Targets:" "$TARGETS"
|
|
printf "%-12s %s\n" "Dateien:" "$FILES"
|
|
printf "%-12s %s\n" "Builddauer:" "${RUNTIME} Sekunden"
|
|
|
|
echo
|
|
echo -e "${BLUE}"
|
|
echo "============================================================"
|
|
echo "Erzeugte Build-Dateien"
|
|
echo "============================================================"
|
|
echo -e "${RESET}"
|
|
|
|
find "${BUILDDIR}" -type f | sort
|
|
|
|
echo
|
|
echo -e "${GREEN}"
|
|
echo "============================================================"
|
|
echo "Alle Builds erfolgreich abgeschlossen."
|
|
echo "============================================================"
|
|
echo -e "${RESET}"
|