forked from taurusxin/ncmdump-go
动机:解决苹果系统发布包缺少执行权限和特殊文件误处理问题。 改动:校验发布包权限,支持两类芯片架构并改进文件识别。 影响:苹果系统可直接运行发布包,其他平台构建与使用方式兼容。 验证:运行 go test ./...、go vet ./... 和完整发布构建,结果通过。 关联:无
64 lines
2.2 KiB
Bash
Executable File
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}/"
|