v0.7.9 - Optimize Docker build caching and enforce static binary usage

- Restructure Dockerfile.alpine-musl for better layer caching
  * Build dependencies (secp256k1, libwebsockets) in separate cached layers
  * Copy submodules before source files to maximize cache hits
  * Reduce rebuild time from ~2-3 minutes to ~10-15 seconds for source changes
- Remove 'musl' from binary names (c_relay_static_x86_64 instead of c_relay_static_musl_x86_64)
- Enforce static binary usage in make_and_restart_relay.sh
  * Remove all fallbacks to regular make builds
  * Exit with clear error if static binary not found
  * Ensures JSON1 extension is always available
- Fix build_static.sh hanging on ldd check with timeout
- Remove sudo usage from build_static.sh (assumes docker group membership)

These changes ensure consistent builds with JSON1 support and dramatically improve
development iteration speed through intelligent Docker layer caching.
This commit is contained in:
Your Name
2025-10-11 11:08:01 -04:00
parent ecd7095123
commit b27a56a296
5 changed files with 60 additions and 36 deletions

View File

@@ -163,14 +163,15 @@ rm -f db/c_nostr_relay.db* 2>/dev/null
echo "Embedding web files..."
./embed_web_files.sh
# Build the project first - use static build by default
# Build the project - ONLY static build
echo "Building project (static binary with SQLite JSON1 extension)..."
./build_static.sh
# Fallback to regular build if static build fails
# Exit if static build fails - no fallback
if [ $? -ne 0 ]; then
echo "Static build failed, falling back to regular build..."
make clean all
echo "ERROR: Static build failed. Cannot proceed without static binary."
echo "Please fix the build errors and try again."
exit 1
fi
# Restore database files if preserving
@@ -187,37 +188,32 @@ if [ $? -ne 0 ]; then
exit 1
fi
# Check if relay binary exists after build - prefer static binary, fallback to regular
# Check if static relay binary exists after build - ONLY use static binary
ARCH=$(uname -m)
case "$ARCH" in
x86_64)
STATIC_BINARY="./build/c_relay_static_x86_64"
REGULAR_BINARY="./build/c_relay_x86"
BINARY_PATH="./build/c_relay_static_x86_64"
;;
aarch64|arm64)
STATIC_BINARY="./build/c_relay_static_arm64"
REGULAR_BINARY="./build/c_relay_arm64"
BINARY_PATH="./build/c_relay_static_arm64"
;;
*)
STATIC_BINARY="./build/c_relay_static_$ARCH"
REGULAR_BINARY="./build/c_relay_$ARCH"
BINARY_PATH="./build/c_relay_static_$ARCH"
;;
esac
# Prefer static binary if available
if [ -f "$STATIC_BINARY" ]; then
BINARY_PATH="$STATIC_BINARY"
echo "Using static binary: $BINARY_PATH"
elif [ -f "$REGULAR_BINARY" ]; then
BINARY_PATH="$REGULAR_BINARY"
echo "Using regular binary: $BINARY_PATH"
else
echo "ERROR: No relay binary found. Checked:"
echo " - $STATIC_BINARY"
echo " - $REGULAR_BINARY"
# Verify static binary exists - no fallbacks
if [ ! -f "$BINARY_PATH" ]; then
echo "ERROR: Static relay binary not found: $BINARY_PATH"
echo ""
echo "The relay requires the static binary with JSON1 support."
echo "Please run: ./build_static.sh"
echo ""
exit 1
fi
echo "Using static binary: $BINARY_PATH"
echo "Build successful. Proceeding with relay restart..."
# Kill existing relay if running - start aggressive immediately