Files
ncmdump-go/build.sh
JoJo 628bea38be fix: 完善苹果系统构建与文件兼容
动机:解决苹果系统发布包缺少执行权限和特殊文件误处理问题。
改动:校验发布包权限,支持两类芯片架构并改进文件识别。
影响:苹果系统可直接运行发布包,其他平台构建与使用方式兼容。
验证:运行 go test ./...、go vet ./... 和完整发布构建,结果通过。
关联:无
2026-09-07 16:14:11 +08:00

64 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
VERSION="${VERSION:-1.7.5}"
VERSION="${VERSION#v}"
BUILD_DIR="${BUILD_DIR:-build}"
PACKAGE="git.taurusxin.com/taurusxin/ncmdump-go"
LDFLAGS="-w -s -X main.version=${VERSION}"
mkdir -p "${BUILD_DIR}"
rm -f \
"${BUILD_DIR}/ncmdump-go" \
"${BUILD_DIR}/ncmdump-go.exe" \
"${BUILD_DIR}/ncmdump-go_linux_amd64_${VERSION}.tar.gz" \
"${BUILD_DIR}/ncmdump-go_linux_arm64_${VERSION}.tar.gz" \
"${BUILD_DIR}/ncmdump-go_darwin_amd64_${VERSION}.tar.gz" \
"${BUILD_DIR}/ncmdump-go_darwin_arm64_${VERSION}.tar.gz" \
"${BUILD_DIR}/ncmdump-go_windows_amd64_${VERSION}.zip"
create_tar_archive() {
local os="$1"
local arch="$2"
local binary="${BUILD_DIR}/ncmdump-go"
local archive="${BUILD_DIR}/ncmdump-go_${os}_${arch}_${VERSION}.tar.gz"
local tar_version
echo "Building for ${os} ${arch}..."
CGO_ENABLED=0 GOOS="${os}" GOARCH="${arch}" \
go build -trimpath -ldflags="${LDFLAGS}" -o "${binary}" "${PACKAGE}"
# Builds are sometimes produced from Git Bash on Windows, where chmod does
# not change NTFS permissions. Force the executable bit into GNU tar's
# header so macOS/Linux users can run the extracted binary immediately.
chmod 0755 "${binary}"
tar_version="$(tar --version 2>/dev/null || true)"
if [[ "${tar_version}" == *"GNU tar"* ]]; then
tar --mode=0755 -zcf "${archive}" -C "${BUILD_DIR}" ncmdump-go
else
tar -zcf "${archive}" -C "${BUILD_DIR}" ncmdump-go
fi
if ! tar -tvzf "${archive}" | awk 'NR == 1 { exit(substr($1, 1, 10) == "-rwxr-xr-x" ? 0 : 1) }'; then
echo "Archive validation failed: ncmdump-go is not executable in ${archive}" >&2
exit 1
fi
rm "${binary}"
}
create_tar_archive linux amd64
create_tar_archive linux arm64
create_tar_archive darwin amd64
create_tar_archive darwin arm64
# Windows amd64
echo "Building for Windows amd64..."
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 \
go build -trimpath -ldflags="${LDFLAGS}" -o "${BUILD_DIR}/ncmdump-go.exe" "${PACKAGE}"
zip -q -j "${BUILD_DIR}/ncmdump-go_windows_amd64_${VERSION}.zip" "${BUILD_DIR}/ncmdump-go.exe"
rm "${BUILD_DIR}/ncmdump-go.exe"
echo "Release archives written to ${BUILD_DIR}/"