Files
LanMountainDesktop/scripts/build.sh

160 lines
3.1 KiB
Bash
Raw Normal View History

2026-03-04 02:02:34 +08:00
#!/bin/bash
# Build script for LanMontainDesktop
# Cross-platform build support: Linux, macOS
2026-03-04 02:02:34 +08:00
set -e
Script_Dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
Root_Dir="$(dirname "$Script_Dir")"
2026-03-04 02:02:34 +08:00
# Detect OS
OS=""
ARCH=""
RID=""
2026-03-04 02:02:34 +08:00
detect_os() {
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
OS="linux"
RID="linux-x64"
elif [[ "$OSTYPE" == "darwin"* ]]; then
OS="macos"
ARCH=$(uname -m)
if [[ "$ARCH" == "arm64" ]]; then
RID="osx-arm64"
else
RID="osx-x64"
fi
else
echo "Unsupported OS: $OSTYPE"
exit 1
fi
2026-03-04 02:02:34 +08:00
}
print_usage() {
2026-03-04 02:02:34 +08:00
cat << EOF
LanMontainDesktop Build Script
2026-03-04 02:02:34 +08:00
Usage: $0 [command] [options]
2026-03-04 02:02:34 +08:00
Commands:
build Build the project
publish Publish as self-contained
clean Clean build output
2026-03-04 02:02:34 +08:00
Options:
--config CONFIG Build configuration (Debug/Release, default: Release)
--rid RID Runtime identifier (e.g., linux-x64, osx-arm64)
--os OS Operating system (linux, macos)
2026-03-04 02:02:34 +08:00
Examples:
$0 build
$0 publish --config Release --rid linux-x64
$0 clean
2026-03-04 02:02:34 +08:00
EOF
}
build_project() {
local config="$1"
echo "Building $OS ($RID) - $config configuration..."
cd "$Root_Dir"
dotnet restore
dotnet build -c "$config" --no-restore -v minimal
echo "✅ Build completed"
}
publish_project() {
local config="$1"
local output_dir="$Root_Dir/publish/$RID"
echo "Publishing $OS ($RID)..."
cd "$Root_Dir"
dotnet restore
dotnet publish LanMontainDesktop/LanMontainDesktop.csproj \
-c "$config" \
-o "$output_dir" \
--self-contained \
-r "$RID" \
-p:PublishSingleFile=true \
-p:DebugType=none \
-v minimal
echo "✅ Published to: $output_dir"
echo " Size: $(du -sh "$output_dir" | cut -f1)"
}
clean_project() {
echo "Cleaning build output..."
cd "$Root_Dir"
rm -rf ./publish
rm -rf ./bin
rm -rf ./obj
find . -name "bin" -type d -exec rm -rf {} + 2>/dev/null || true
find . -name "obj" -type d -exec rm -rf {} + 2>/dev/null || true
echo "✅ Clean completed"
}
# Main
detect_os
config="Release"
command="build"
2026-03-04 02:02:34 +08:00
while [[ $# -gt 0 ]]; do
case $1 in
build|publish|clean)
command="$1"
shift
2026-03-04 02:02:34 +08:00
;;
--config)
config="$2"
2026-03-04 02:02:34 +08:00
shift 2
;;
--rid)
2026-03-04 02:02:34 +08:00
RID="$2"
shift 2
;;
--os)
OS="$2"
if [[ "$OS" == "linux" ]]; then
RID="linux-x64"
elif [[ "$OS" == "macos" ]]; then
RID="osx-x64"
fi
2026-03-04 02:02:34 +08:00
shift 2
;;
-h|--help)
print_usage
2026-03-04 02:02:34 +08:00
exit 0
;;
*)
echo "Unknown option: $1"
print_usage
2026-03-04 02:02:34 +08:00
exit 1
;;
esac
done
case $command in
build)
build_project "$config"
;;
publish)
publish_project "$config"
;;
clean)
clean_project
;;
*)
print_usage
exit 1
;;
esac