发布 0.2.0:安装包放官网,Homebrew 通过 gentpan/tap 安装

- 版本号改为 0.2.0(构建号 2),更新日志标记为 0.2.0 · 2026-09-13
- release.sh 生成的 cask 指向 getopenstats.com/download;新增 publish_release.sh:上传 DMG、校验线上文件、提交 cask 到 homebrew-tap
- 官网部署排除 /download/;官网下载按钮与 README 安装说明改为官网下载与 brew 命令
This commit is contained in:
gentpan committed 2026-09-13 07:18:50 +05:00
1 parent 3b3fd577da
commit bdb55e602d
9 files changed
+105 -48

No files matched your search

+3 -2
View File
@@ -24,8 +24,9 @@ echo "内容指纹 v=$STAMP"
# 目录归部署用户所有,Caddy 只需读取
"${SSH[@]}" "$HOST" "sudo mkdir -p $ROOT && sudo chown -R \$(id -un):\$(id -gn) $ROOT"
# geoip/ 由服务器上的定时任务生成,不在 web/ 里——排除掉,否则 --delete 会把数据库删了
rsync -az --delete --exclude /geoip/ -e "${SSH[*]}" web/ "$HOST:$ROOT/"
# geoip/ 由服务器上的定时任务生成,download/ 是 publish_release.sh 上传的安装包,都不在 web/ 里——
# 排除掉,否则 --delete 会把它们删了
rsync -az --delete --exclude /geoip/ --exclude /download/ -e "${SSH[*]}" web/ "$HOST:$ROOT/"
"${SSH[@]}" "$HOST" "sudo chmod -R a+rX $ROOT"
echo "已同步到 $HOST:$ROOT"
+48
View File
@@ -0,0 +1,48 @@
#!/bin/bash
# 发布已公证的版本:DMG 上传到官网 /download/,cask 提交到 gentpan/homebrew-tap,并校验线上文件。
#
# ./Scripts/release.sh # 先打包、公证
# ./Scripts/publish_release.sh # 再发布
set -euo pipefail
cd "$(dirname "$0")/.."
HOST="${SITE_HOST:-debian@15.204.80.137}"
KEY="${SITE_KEY:-$HOME/.ssh/gentpan.pem}"
ROOT="${SITE_ROOT:-/var/www/getopenstats.com}"
TAP="${TAP:-gentpan/homebrew-tap}"
VERSION="$(sed -nE 's/^ *MARKETING_VERSION: *"?([0-9.]+)"?.*/\1/p' project.yml | head -1)"
DMG="dist/OpenStats-${VERSION}.dmg"
CASK="dist/openstats.rb"
SSH=(ssh -i "$KEY" -o BatchMode=yes "$HOST")
[ -f "$DMG" ] && [ -f "$CASK" ] || { echo "缺少 $DMG 或 $CASK,先运行 ./Scripts/release.sh" >&2; exit 1; }
grep -q "version \"${VERSION}\"" "$CASK" || { echo "$CASK 的版本不是 ${VERSION}" >&2; exit 1; }
xcrun stapler validate "$DMG" >/dev/null || { echo "$DMG 没有装订公证票据" >&2; exit 1; }
SHA="$(shasum -a 256 "$DMG" | cut -d' ' -f1)"
grep -q "$SHA" "$CASK" || { echo "$CASK 里的 sha256 与 DMG 不一致" >&2; exit 1; }
# 上传:先传临时名再改名,下载中途不会拿到半个文件
"${SSH[@]}" "sudo install -d -o \$(id -un) -m 755 $ROOT/download"
scp -i "$KEY" -o BatchMode=yes "$DMG" "$HOST:$ROOT/download/.OpenStats-${VERSION}.dmg.part"
"${SSH[@]}" "mv -f $ROOT/download/.OpenStats-${VERSION}.dmg.part $ROOT/download/OpenStats-${VERSION}.dmg && chmod 644 $ROOT/download/OpenStats-${VERSION}.dmg"
URL="https://getopenstats.com/download/OpenStats-${VERSION}.dmg"
ONLINE="$(curl -fsSL --max-time 300 "$URL" | shasum -a 256 | cut -d' ' -f1)"
[ "$ONLINE" = "$SHA" ] || { echo "线上 DMG 校验不一致:$ONLINE" >&2; exit 1; }
echo "✅ $URL"
# Homebrew tap
WORK="$(mktemp -d)"
trap 'rm -rf "$WORK"' EXIT
gh repo clone "$TAP" "$WORK/tap" -- --quiet
mkdir -p "$WORK/tap/Casks"
cp "$CASK" "$WORK/tap/Casks/openstats.rb"
if git -C "$WORK/tap" diff --quiet -- Casks/openstats.rb && git -C "$WORK/tap" ls-files --error-unmatch Casks/openstats.rb >/dev/null 2>&1; then
echo "✅ $TAP 已是 ${VERSION}"
else
git -C "$WORK/tap" add Casks/openstats.rb
git -C "$WORK/tap" commit -q -m "openstats ${VERSION}"
git -C "$WORK/tap" push -q
echo "✅ 已提交 Casks/openstats.rb 到 $TAP"
fi
echo "安装:brew install --cask gentpan/tap/openstats"
+4 -3
View File
@@ -12,7 +12,8 @@
set -euo pipefail
cd "$(dirname "$0")/.."
REPO="${REPO:-gentpan/OpenStats}"
# 安装包放在官网(仓库是私有的,GitHub Release 无法匿名下载)
DOWNLOAD_BASE="${DOWNLOAD_BASE:-https://getopenstats.com/download}"
DIST="${DIST:-dist}"
NOTARY_PROFILE="${NOTARY_PROFILE:-QuotaBar}"
SIGN_ID="${SIGN_ID:-$(security find-identity -v -p codesigning 2>/dev/null \
@@ -91,7 +92,7 @@ cask "openstats" do
version "${VERSION}"
sha256 "${SHA256}"
url "https://github.com/${REPO}/releases/download/v#{version}/OpenStats-#{version}.dmg"
url "${DOWNLOAD_BASE}/OpenStats-#{version}.dmg"
name "OpenStats"
desc "Menu bar system monitor with fan control, keep-awake and cleanup"
homepage "https://getopenstats.com"
@@ -114,5 +115,5 @@ echo " Homebrew cask:${DIST}/openstats.rb"
if [ "${SKIP_NOTARIZE:-0}" = "1" ]; then
echo "⚠️ 未公证,仅供本机测试。"
else
echo "下一步:创建 GitHub Release v${VERSION} 并上传 DMG,再把 cask 提交到 gentpan/homebrew-tap。"
echo "下一步:./Scripts/publish_release.sh 上传 DMG 到官网并更新 gentpan/homebrew-tap。"
fi