89 lines
2.7 KiB
Bash
Executable File
89 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# This script builds, tests, and prepares the mcp-bridge binary for deployment.
|
|
|
|
set -e
|
|
|
|
# --- Configuration ---
|
|
BINARY_NAME="mcp-bridge"
|
|
SRC_PATH="./src" # Build the package in the src directory
|
|
DIST_DIR="./dist"
|
|
VERSION=$(git describe --tags --always --dirty 2>/dev/null || echo "dev")
|
|
BUILD_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
COMMIT_HASH=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
|
|
|
# Define target platforms (OS/ARCH) that match install.sh
|
|
TARGETS="linux/amd64 linux/arm64 darwin/amd64 darwin/arm64"
|
|
|
|
# --- Setup ---
|
|
mkdir -p ${DIST_DIR}
|
|
|
|
# --- Test ---
|
|
echo "--- Running Tests ---"
|
|
# This command will run tests in all subdirectories.
|
|
go test ./... || { echo "Tests failed"; exit 1; }
|
|
echo "--- Tests Finished ---"
|
|
echo ""
|
|
|
|
# --- Build ---
|
|
echo "--- Building Binaries ---"
|
|
# Clean the distribution directory
|
|
rm -f ${DIST_DIR}/*
|
|
|
|
for TARGET in $TARGETS; do
|
|
# Split the target into OS and ARCH
|
|
GOOS=$(echo $TARGET | cut -f1 -d'/')
|
|
GOARCH=$(echo $TARGET | cut -f2 -d'/')
|
|
OUTPUT_NAME="${DIST_DIR}/${BINARY_NAME}-${GOOS}-${GOARCH}"
|
|
|
|
echo "Building for ${GOOS}/${GOARCH}..."
|
|
# Set environment variables and build with version information
|
|
env GOOS=$GOOS GOARCH=$GOARCH go build -o $OUTPUT_NAME \
|
|
-ldflags "-X main.Version=${VERSION} -X main.BuildTime=${BUILD_TIME} -X main.CommitHash=${COMMIT_HASH}" \
|
|
$SRC_PATH
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "Successfully built ${OUTPUT_NAME}"
|
|
# Create a checksum file for verification
|
|
if command -v sha256sum >/dev/null 2>&1; then
|
|
sha256sum $OUTPUT_NAME > ${OUTPUT_NAME}.sha256
|
|
elif command -v shasum >/dev/null 2>&1; then
|
|
shasum -a 256 $OUTPUT_NAME > ${OUTPUT_NAME}.sha256
|
|
fi
|
|
else
|
|
echo "Error building for ${GOOS}/${GOARCH}"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# Create a symbolic link for the native platform
|
|
NATIVE_OS=$(uname -s | tr '[:upper:]' '[:lower:]')
|
|
NATIVE_ARCH=$(uname -m)
|
|
if [ "$NATIVE_ARCH" = "x86_64" ]; then
|
|
NATIVE_ARCH="amd64"
|
|
elif [ "$NATIVE_ARCH" = "aarch64" ] || [ "$NATIVE_ARCH" = "arm64" ]; then
|
|
NATIVE_ARCH="arm64"
|
|
fi
|
|
|
|
NATIVE_BINARY="${DIST_DIR}/${BINARY_NAME}-${NATIVE_OS}-${NATIVE_ARCH}"
|
|
if [ -f "$NATIVE_BINARY" ]; then
|
|
ln -sf $(basename $NATIVE_BINARY) ${DIST_DIR}/${BINARY_NAME}
|
|
echo "Created symbolic link for native platform: ${DIST_DIR}/${BINARY_NAME}"
|
|
fi
|
|
|
|
echo "--- Build Finished ---"
|
|
echo ""
|
|
|
|
# --- Deploy ---
|
|
echo "--- Staging for Deploy ---"
|
|
echo "Adding binaries to Git..."
|
|
git add ${DIST_DIR}
|
|
|
|
echo ""
|
|
echo "Binaries are staged for commit."
|
|
echo "To complete the deployment, please run:"
|
|
echo " git commit -m \"build: Compile binaries for version ${VERSION}\""
|
|
echo " git push"
|
|
echo ""
|
|
echo "Build script finished."
|