Files
XStats/Taskfile.yml
T
ysicing f09861f6ec feat(release): 安装包迁移对象存储,版本号回归 semver
发布链路:安装包不再 scp 到 VPS,改用 mc 上传到对象存储
c.ysicing.net/oss/apps/macOS/XStats,上传后从 CDN 回读比对 sha256;
GitHub Release 挂 dmg 作为手动下载入口,应用内“手动下载”在未取到清单时
跳到 releases/latest。版本清单仍由自建 API 返回,publish_api.py 与
server/api 不变,且始终最后提交——安装包校验通过后客户端才看到新版本。
发布前只读校验 HEAD 与 origin/main 一致,脚本不代为 commit 或 push。

版本号:公开版本号从“年.月.日.索引”回归标准 semver,真源收敛到
CHANGELOG.md 顶部的 “## X.Y.Z · YYYY-MM-DD”;version.sh 收敛为
show/build/release 三个子命令,build 只推进构建号,删除 next 与 tag。
内部构建号改为单调递增整数(0109 规范化为 109)。日期校验回读比对,
因为 BSD date 会把 2026-02-29 规整成 2026-03-01 而非报错。

CI 不再参与发版:删除 tag 触发与 Set version from tag 步骤。

其他:appcast 的 changelog 指向本仓库而非上游站点;arm64_release_test
改用 fixture CHANGELOG,与仓库版本历史解耦;丢弃上游 0.2.0–0.6.1 的
历史条目;sync_changelog 不再改写 web/index.html(上游历史站点),
连带删除仅服务于它的 Website 段落。
2026-09-22 08:25:45 +08:00

113 lines
2.8 KiB
YAML

# Copyright (C) 2026 ysicing
# SPDX-License-Identifier: AGPL-3.0-or-later
version: '3'
vars:
PROJECT: XStats.xcodeproj
SCHEME: XStats
CONFIG: '{{default "Release" .CONFIG}}'
DERIVED: build/DerivedData-arm64
APP: '{{.DERIVED}}/Build/Products/{{.CONFIG}}/XStats.app'
BUMP: '{{default "1" .BUMP}}'
INSTALL: '{{default "1" .INSTALL}}'
SIGN_ID:
sh: |
if [ -n "${SIGN_ID:-}" ]; then
printf '%s\n' "$SIGN_ID"
else
security find-identity -v -p codesigning 2>/dev/null | grep 'Developer ID Application' | head -1 | sed -E 's/.*"(.*)".*/\1/' || true
fi
TEAM_ID:
sh: echo '{{.SIGN_ID}}' | sed -nE 's/.*\(([A-Z0-9]+)\)$/\1/p'
tasks:
generate:
desc: 由 project.yml 生成 Xcode 工程
cmds:
- xcodegen generate --quiet
build:
desc: 编译 App(含辅助工具)并安装
cmds:
- |
if [ "{{.BUMP}}" != "0" ]; then ./Scripts/version.sh build; fi
- task: compile
vars:
CONFIG: '{{.CONFIG}}'
SIGN_ID: '{{.SIGN_ID}}'
- |
if [ "{{.INSTALL}}" != "0" ]; then ./Scripts/install_local.sh "{{.APP}}"; fi
compile:
desc: 只编译 App,不安装
deps: [generate]
cmds:
- |
xcodebuild -project "{{.PROJECT}}" -scheme "{{.SCHEME}}" -configuration "{{.CONFIG}}" \
-derivedDataPath "{{.DERIVED}}" \
-destination 'generic/platform=macOS' ARCHS=arm64 ONLY_ACTIVE_ARCH=NO \
{{if .TEAM_ID}}CODE_SIGN_IDENTITY="{{.SIGN_ID}}" CODE_SIGN_STYLE=Manual DEVELOPMENT_TEAM={{.TEAM_ID}}{{if eq .CONFIG "Release"}} OTHER_CODE_SIGN_FLAGS=--timestamp CODE_SIGN_INJECT_BASE_ENTITLEMENTS=NO{{end}}{{end}} \
build
run:
desc: 编译、安装并启动 App
deps: [build]
install:
desc: 编译、安装并启动 App
deps: [build]
release:
desc: 签名、公证、装订、打包 DMG 并生成 Homebrew cask
cmds:
- ./Scripts/release.sh
stop:
desc: 停止正在运行的 App
cmds:
- pkill -x XStats
ignore_error: true
test:
desc: 运行版本脚本、API 和 Swift 单元测试
cmds:
- bash Scripts/version_test.sh
- bash Scripts/arm64_release_test.sh
- python3 Scripts/publish_api_test.py
- task: test-api
- task: test-swift
test-api:
internal: true
dir: server/api
cmds:
- go test ./...
test-swift:
internal: true
dir: Packages/XStatsKit
cmds:
- swift test
snapshot:
desc: 用本机实时数据渲染页面截图
cmds:
- /Applications/XStats.app/Contents/MacOS/XStats --snapshot build/snapshots
open:
desc: 生成工程并用 Xcode 打开
deps: [generate]
cmds:
- open "{{.PROJECT}}"
clean:
desc: 删除构建产物
cmds:
- rm -rf build
version:
desc: 显示当前版本
cmds:
- ./Scripts/version.sh