Files
webui4frpc/scripts/release.sh
JianFeeeee 57d4d14d28 chore: v0.1.3 — 版本号收拢(5 处)
0.1.2 的 tag 已补记在 64d3359(该版本从未向 gitcode 发布安装包,
线上是手动 scp 覆盖的,故不为其补建 release 条目,避免误导用户
以为存在可下载的 0.1.2 产物)。

本次版本内容(v0.1.2..v0.1.3):
- 窄屏:补 box-sizing 重置、接管画布 fit(缩放下限 0.65)、弹窗宽度钳制、
  统一滚动容器(修复手机端整页无法滑动)
- 集群:停用/启动改为经令牌环跨节点传播;撤销不再静默失效
- 集群:修复滚动重启导致的分裂脑、令牌环冻结、非 leader 不重建 worker
- 集群:令牌轮转日志降级为 debug(355 → 1 行/分钟)
2026-10-05 21:57:17 +08:00

151 lines
4.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
#
# webui4frpc 多平台发布脚本
#
# 用法:
# ./scripts/release.sh [version] # 默认 version=0.1.3
#
# 行为:
# 1. 构建前端 (web/dist) 并同步到 internal/httpapi/dist (go:embed 用)
# 2. 交叉编译全平台单二进制 (linux/windows/darwin × amd64/arm64)
# 3. 打包各平台安装包:
# - linux/darwin: tar.gz (二进制 + README + systemd 模板)
# - windows: zip (exe + README)
# 4. 生成 SHA256SUMS
# 5. 输出到 dist/artifacts/<version>/
#
# 环境变量:
# GOPROXY_OVERRIDE 覆盖 go module 代理 (默认 goproxy.cn,direct, 走本地 7890 代理)
# NO_BUILD_FRONTEND 设为 1 跳过前端构建 (用现有 dist)
set -euo pipefail
VERSION="${1:-0.1.3}"
VERSION="${VERSION#v}" # 去掉可能的前导 v
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
OUT="$ROOT/dist/artifacts/$VERSION"
GOFLAGS_ENV=""
# ---- 0. Go module 代理 (内网需走本地代理访问 goproxy.cn) ----
if [ -n "${GOPROXY_OVERRIDE:-}" ]; then
GOFLAGS_ENV="GOPROXY=${GOPROXY_OVERRIDE}"
else
GOFLAGS_ENV="GOPROXY=https://goproxy.cn,direct"
fi
# 若本地 7890 代理存在则导出 (模块下载走代理)
if curl -s -o /dev/null -m 2 -x http://127.0.0.1:7890 https://goproxy.cn >/dev/null 2>&1; then
export HTTPS_PROXY=http://127.0.0.1:7890 HTTP_PROXY=http://127.0.0.1:7890
fi
echo "==> 版本: $VERSION"
mkdir -p "$OUT"
# ---- 1. 构建前端 ----
if [ "${NO_BUILD_FRONTEND:-0}" != "1" ]; then
echo "==> 构建前端"
( cd "$ROOT/web" && npm run build )
rm -rf "$ROOT/internal/httpapi/dist"
cp -r "$ROOT/web/dist" "$ROOT/internal/httpapi/dist"
else
echo "==> 跳过前端构建 (用现有 dist)"
fi
# ---- 2. 交叉编译全平台 ----
# target 格式: os arch 扩展名 [tar|zip]
TARGETS=(
"linux amd64" "linux arm64"
"windows amd64" "windows arm64"
"darwin amd64" "darwin arm64"
)
declare -A PLATFORM_EXT=(
[linux-amd64]=tgz [linux-arm64]=tgz
[darwin-amd64]=tgz [darwin-arm64]=tgz
[windows-amd64]=zip [windows-arm64]=zip
)
declare -A PLATFORM_BIN=(
[linux-amd64]=webui4frpc [linux-arm64]=webui4frpc
[darwin-amd64]=webui4frpc [darwin-arm64]=webui4frpc
[windows-amd64]=webui4frpc.exe [windows-arm64]=webui4frpc.exe
)
for target in "${TARGETS[@]}"; do
os="${target%% *}"; arch="${target##* }"
key="$os-$arch"
bin="${PLATFORM_BIN[$key]}"
# 每个平台编译到独立子目录,避免 darwin/linux 同名二进制互相覆盖
bindir="$OUT/bin/$key"
mkdir -p "$bindir"
echo "==> 编译 $os/$arch"
env $GOFLAGS_ENV CGO_ENABLED=0 GOOS="$os" GOARCH="$arch" \
go build -trimpath \
-ldflags="-s -w -X webui4frpc/internal/version.Version=$VERSION" \
-o "$bindir/$bin" "$ROOT/cmd/webui4frpc"
done
# ---- 3. 打包各平台 ----
# 整理 systemd 模板
cat > "$OUT/webui4frpc.service.tpl" <<'TPL'
[Unit]
Description=webui4frpc - visual frpc controller (cluster node)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/opt/webui4frpc/webui4frpc -addr 0.0.0.0:7500 -user admin -password admin -workdir /opt/webui4frpc/data
Restart=always
RestartSec=5
LimitNOFILE=65535
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
TPL
for target in "${TARGETS[@]}"; do
os="${target%% *}"; arch="${target##* }"
key="$os-$arch"
bin="${PLATFORM_BIN[$key]}"
ext="${PLATFORM_EXT[$key]}"
base="webui4frpc-${VERSION}-${os}-${arch}"
echo "==> 打包 $key -> $base.$ext"
cp "$ROOT/README.md" "$OUT/README.md"
bindir="$OUT/bin/$key"
# staging 目录: 把二进制 + README (+systemd) 放一起再一次性打包
stage="$OUT/.stage/$key"
rm -rf "$stage"; mkdir -p "$stage"
cp "$bindir/$bin" "$stage/$bin"
cp "$OUT/README.md" "$stage/README.md"
if [ "$ext" = "zip" ]; then
( cd "$stage" && zip -q "$OUT/$base.zip" "$bin" README.md )
else
cp "$OUT/webui4frpc.service.tpl" "$stage/"
( cd "$stage" && tar czf "$OUT/$base.tar.gz" "$bin" README.md webui4frpc.service.tpl )
fi
done
rm -rf "$OUT/.stage"
# ---- 4. 校验和 ----
# 先生成免安装包的校验和;原生安装包构建完后在 4.6 统一重算,
# 保证 SHA256SUMS 覆盖 deb/rpm/setup.exe/pkg(否则用户校验会 "no file was verified")。
# ---- 4.5 原生安装包 (deb/rpm/setup.exe/pkg) ----
if [ "${NO_INSTALLERS:-0}" != "1" ]; then
echo ""
echo "==> 构建原生安装包"
"$ROOT/scripts/build_installers.sh" "$VERSION"
fi
# ---- 4.6 校验和(覆盖全部产物)----
echo ""
echo "==> 生成 SHA256SUMS"
( cd "$OUT" && sha256sum *.tar.gz *.zip *.deb *.rpm *-setup.exe *.pkg 2>/dev/null | tee SHA256SUMS )
# ---- 5. 汇总 ----
echo ""
echo "==> 发布产物位于: $OUT"
ls -lh "$OUT"
echo ""
echo "==> 完成"