Files
n_os_tr/includes/nostr-id-tui/build_static.sh

86 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
BUILD_DIR="$SCRIPT_DIR/build"
HOST_ARCH="$(uname -m)"
REQUESTED_ARCH="${ARCH:-}"
if [ -n "$REQUESTED_ARCH" ]; then
case "$REQUESTED_ARCH" in
arm64|aarch64)
PLATFORM="linux/arm64"
OUTPUT_ARCH="arm64"
;;
amd64|x86_64)
PLATFORM="linux/amd64"
OUTPUT_ARCH="x86_64"
;;
*)
echo "ERROR: Unsupported ARCH='$REQUESTED_ARCH' (supported: arm64, amd64)"
exit 1
;;
esac
else
case "$HOST_ARCH" in
x86_64)
PLATFORM="linux/amd64"
OUTPUT_ARCH="x86_64"
;;
aarch64|arm64)
PLATFORM="linux/arm64"
OUTPUT_ARCH="arm64"
;;
*)
echo "WARNING: Unknown host architecture '$HOST_ARCH', defaulting to linux/amd64"
PLATFORM="linux/amd64"
OUTPUT_ARCH="$HOST_ARCH"
;;
esac
fi
OUTPUT_NAME="nostr-id-tui_static_${OUTPUT_ARCH}"
BASE_IMAGE_TAG="n-os-tr/alpine-musl-base:3.19"
APP_IMAGE_TAG="n-os-tr/nostr-id-tui-musl-builder:latest"
mkdir -p "$BUILD_DIR"
echo "=========================================="
echo "n-OS-tr nostr-id-tui static build"
echo "=========================================="
echo "Repo root: $REPO_ROOT"
echo "Platform: $PLATFORM"
echo "Output: $BUILD_DIR/$OUTPUT_NAME"
echo ""
echo "[1/3] Building shared base image ($BASE_IMAGE_TAG)"
docker build \
--platform "$PLATFORM" \
-f "$REPO_ROOT/stack/build-common/Dockerfile.alpine-musl" \
-t "$BASE_IMAGE_TAG" \
"$REPO_ROOT/stack/build-common"
echo "[2/3] Building nostr-id-tui musl image ($APP_IMAGE_TAG)"
docker build \
--platform "$PLATFORM" \
-f "$SCRIPT_DIR/Dockerfile.alpine-musl" \
-t "$APP_IMAGE_TAG" \
"$REPO_ROOT"
echo "[3/3] Extracting binary"
CONTAINER_ID="$(docker create "$APP_IMAGE_TAG" /nostr-id-tui)"
trap 'docker rm -f "$CONTAINER_ID" >/dev/null 2>&1 || true' EXIT
docker cp "$CONTAINER_ID:/nostr-id-tui" "$BUILD_DIR/$OUTPUT_NAME"
chmod +x "$BUILD_DIR/$OUTPUT_NAME"
file "$BUILD_DIR/$OUTPUT_NAME"
if LDD_OUT="$(ldd "$BUILD_DIR/$OUTPUT_NAME" 2>&1 || true)"; then
echo "$LDD_OUT"
fi
echo "Built: $BUILD_DIR/$OUTPUT_NAME"
echo "Size: $(stat -c '%s bytes' "$BUILD_DIR/$OUTPUT_NAME")"