mirror of
https://github.com/cmz0228/hysteria-dev.git
synced 2025-06-20 03:09:49 +00:00
refactor: build.sh
+ fix command exit status check under set -e + fix crashes when $HY_APP_PLATFORMS contains invalid values + fix final binary size report error under UTF-8 locales + reduce global variables
This commit is contained in:
parent
455f36734c
commit
432a29ff9a
105
build.sh
105
build.sh
@ -8,12 +8,36 @@ set -e
|
||||
# - HY_APP_COMMIT: App commit hash
|
||||
# - HY_APP_PLATFORMS: Platforms to build for (e.g. "windows/amd64,linux/amd64,darwin/amd64")
|
||||
|
||||
export LC_ALL=C
|
||||
export LC_DATE=C
|
||||
|
||||
has_command() {
|
||||
local cmd="$1"
|
||||
type -P "$cmd" > /dev/null 2>&1
|
||||
}
|
||||
|
||||
if ! has_command go; then
|
||||
echo 'Error: go is not installed.' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! has_command git; then
|
||||
echo 'Error: git is not installed.' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
echo 'Error: not in a git repository.' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
platform_to_env() {
|
||||
local os=$1
|
||||
local arch=$2
|
||||
local os="$1"
|
||||
local arch="$2"
|
||||
local env="GOOS=$os GOARCH=$arch CGO_ENABLED=0"
|
||||
|
||||
case $arch in
|
||||
case "$arch" in
|
||||
arm)
|
||||
env+=" GOARM= GOARCH=arm"
|
||||
;;
|
||||
@ -43,39 +67,54 @@ platform_to_env() {
|
||||
;;
|
||||
esac
|
||||
|
||||
echo $env
|
||||
echo "$env"
|
||||
}
|
||||
|
||||
if ! [ -x "$(command -v go)" ]; then
|
||||
echo 'Error: go is not installed.' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -x "$(command -v git)" ]; then
|
||||
echo 'Error: git is not installed.' >&2
|
||||
exit 1
|
||||
fi
|
||||
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
echo 'Error: not in a git repository.' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ldflags="-s -w -X 'main.appDate=$(date -u '+%F %T')'"
|
||||
if [ -n "$HY_APP_VERSION" ]; then
|
||||
make_ldflags() {
|
||||
local ldflags="-s -w -X 'main.appDate=$(date -u '+%F %T')'"
|
||||
if [ -n "$HY_APP_VERSION" ]; then
|
||||
ldflags="$ldflags -X 'main.appVersion=$HY_APP_VERSION'"
|
||||
else
|
||||
ldflags="$ldflags -X 'main.appVersion=$(git describe --tags --always)'"
|
||||
fi
|
||||
if [ -n "$HY_APP_COMMIT" ]; then
|
||||
else
|
||||
ldflags="$ldflags -X 'main.appVersion=$(git describe --tags --always --match 'v*')'"
|
||||
fi
|
||||
if [ -n "$HY_APP_COMMIT" ]; then
|
||||
ldflags="$ldflags -X 'main.appCommit=$HY_APP_COMMIT'"
|
||||
else
|
||||
else
|
||||
ldflags="$ldflags -X 'main.appCommit=$(git rev-parse HEAD)'"
|
||||
fi
|
||||
fi
|
||||
echo "$ldflags"
|
||||
}
|
||||
|
||||
build_for_platform() {
|
||||
local platform="$1"
|
||||
local ldflags="$2"
|
||||
|
||||
local GOOS="${platform%/*}"
|
||||
local GOARCH="${platform#*/}"
|
||||
if [[ -z "$GOOS" || -z "$GOARCH" ]]; then
|
||||
echo "Invalid platform $platform" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "Building $GOOS/$GOARCH"
|
||||
local output="build/hysteria-$GOOS-$GOARCH"
|
||||
if [[ "$GOOS" = "windows" ]]; then
|
||||
output="$output.exe"
|
||||
fi
|
||||
local envs="$(platform_to_env "$GOOS" "$GOARCH")"
|
||||
local exit_val=0
|
||||
env $envs go build -o "$output" -tags=gpl -ldflags "$ldflags" -trimpath ./app/cmd/ || exit_val=$?
|
||||
if [[ "$exit_val" -ne 0 ]]; then
|
||||
echo "Error: failed to build $GOOS/$GOARCH" >&2
|
||||
return $exit_val
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
if [ -z "$HY_APP_PLATFORMS" ]; then
|
||||
HY_APP_PLATFORMS="$(go env GOOS)/$(go env GOARCH)"
|
||||
fi
|
||||
platforms=(${HY_APP_PLATFORMS//,/ })
|
||||
ldflags="$(make_ldflags)"
|
||||
|
||||
mkdir -p build
|
||||
rm -rf build/*
|
||||
@ -83,19 +122,7 @@ rm -rf build/*
|
||||
echo "Starting build..."
|
||||
|
||||
for platform in "${platforms[@]}"; do
|
||||
GOOS=${platform%/*}
|
||||
GOARCH=${platform#*/}
|
||||
echo "Building $GOOS/$GOARCH"
|
||||
output="build/hysteria-$GOOS-$GOARCH"
|
||||
if [ $GOOS = "windows" ]; then
|
||||
output="$output.exe"
|
||||
fi
|
||||
envs=$(platform_to_env $GOOS $GOARCH)
|
||||
env $envs go build -o $output -tags=gpl -ldflags "$ldflags" -trimpath ./app/cmd/
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: failed to build $GOOS/$GOARCH"
|
||||
exit 1
|
||||
fi
|
||||
build_for_platform "$platform" "$ldflags"
|
||||
done
|
||||
|
||||
echo "Build complete."
|
||||
|
Loading…
x
Reference in New Issue
Block a user