Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
167 commits
Select commit Hold shift + click to select a range
de272c5
test: 补充配置审计测试覆盖
Adsryen Jun 27, 2026
ece0abc
docs: 规划环境应用与操作历史能力
Adsryen Jun 27, 2026
611f1cd
test: 补充基础组件测试覆盖
Adsryen Jun 27, 2026
d46847e
test: 补充连接与配置浏览组件测试
Adsryen Jun 27, 2026
1c17205
test: 补充配置编辑与历史组件测试
Adsryen Jun 27, 2026
00ea367
docs: 提升检查更新任务优先级
Adsryen Jun 27, 2026
c9f5c92
feat: 增加应用检查更新能力
Adsryen Jun 27, 2026
85c058a
docs: 按版本路线图重排待办规划
Adsryen Jun 28, 2026
60fcfe2
feat: 增加配置中心 provider 底座
Adsryen Jun 28, 2026
5387774
feat: 增加配置中心通用调用入口
Adsryen Jun 28, 2026
db8ad75
refactor: 通过通用入口读取 Nacos 配置
Adsryen Jun 28, 2026
b776a32
feat: 支持阿里云 MSE Nacos 连接
Adsryen Jun 29, 2026
73464c7
docs: 更新 MSE Nacos 待办状态
Adsryen Jun 29, 2026
251eb64
refactor(ssh): 移除硬编码的远程主机端口配置,改为从baseUrl自动推导
Adsryen Jun 29, 2026
a834513
feat: 新增连接的项目、环境、来源分组展示功能
Adsryen Jun 29, 2026
dac01de
feat: 新增侧边导航、多页面框架与国际化文案
Adsryen Jun 29, 2026
55ba724
feat: 新增本地快照配置源支持,实现本地配置备份读取与校验
Adsryen Jun 29, 2026
11a14f3
feat: 完成全局SSH隧道配置档案功能开发
Adsryen Jun 29, 2026
2e17a97
feat: 批量功能迭代与体验优化
Adsryen Jun 30, 2026
7304c79
refactor(nacos): 重构MSE鉴权与响应处理逻辑,优化前端展示
Adsryen Jun 30, 2026
4d810de
feat: 实现全局错误消息中心,优化错误上报与展示流程
Adsryen Jun 30, 2026
46e70bf
feat: 新增多项功能并修复MSE AK/SK鉴权下空group的兼容问题
Adsryen Jun 30, 2026
930dd22
feat: 添加连接默认命名空间快速设置与批量加载功能
Adsryen Jun 30, 2026
b1f5c7f
feat: 新增对比面板功能,完善多环境多项目对比支持
Adsryen Jun 30, 2026
80a106c
feat(connection): add duplicate connection function
Adsryen Jun 30, 2026
564d727
feat: 实现完整的应用更新功能
Adsryen Jun 30, 2026
cfa1a03
chore: 将应用版本从1.0.0更新到1.1.0
Adsryen Jun 30, 2026
71846a2
ci(github release): 优化release workflow的release note处理
Adsryen Jun 30, 2026
cb04024
refactor(settings,connection): 完成v1.1.0第一阶段配置优化
Adsryen Jul 1, 2026
6565b0a
chore: 完成工程质量优化项配置
Adsryen Jul 1, 2026
5a85bcb
feat: 添加重试匹配、不可用提示,优化Nacos请求与错误处理
Adsryen Jul 2, 2026
f8e2ff4
feat: 优化连接测试按钮与批量对比失败处理,修复测试用例
Adsryen Jul 2, 2026
e06de39
feat: 发布v1.1.0正式版,完成全部P0/P1任务
Adsryen Jul 2, 2026
6fcc5b4
feat(audit): 新增配置审计矩阵功能
Adsryen Jul 2, 2026
5ee90f9
feat(audit): 完成审计矩阵全量功能开发与国际化
Adsryen Jul 2, 2026
13c67b6
refactor(sidebar): 实现侧边栏分组优化并更新文案
Adsryen Jul 2, 2026
c13a7cf
feat: 添加操作历史功能,新增强制测试要求
Adsryen Jul 3, 2026
f694b32
refactor(DiffView): 重构页面布局并新增页面副标题
Adsryen Jul 3, 2026
99bad23
docs: 更新 CHANGELOG 和版本号至 v1.2.0
Adsryen Jul 3, 2026
469f5c3
ci: 修复 Windows 构建 shell 配置
Adsryen Jul 3, 2026
cfa5ff3
docs: README 添加配置中心支持状态表
Adsryen Jul 3, 2026
712099c
docs: 更新 README 界面预览截图
Adsryen Jul 3, 2026
7543fb1
docs: README Nacos 支持说明补充自建和阿里云 MSE
Adsryen Jul 3, 2026
155a008
docs: add致谢 section to README
Adsryen Jul 3, 2026
64cc7bf
feat: 新增配置导出、快照管理和任务中心全功能
Adsryen Jul 3, 2026
0de56b2
feat: 新增快照管理功能,优化任务中心与测试用例
Adsryen Jul 3, 2026
50ccc8d
feat: 添加配置快照功能并完善对比功能
Adsryen Jul 3, 2026
93f5f21
feat: 实现操作历史记录与回滚功能
Adsryen Jul 4, 2026
0ed966d
fix: 修复useEffect依赖项遗漏及回调函数引用问题
Adsryen Jul 4, 2026
92299a3
feat: 新增快照对比加载完成的提示文案并添加对应提示逻辑
Adsryen Jul 4, 2026
cde817b
feat(diff): 支持备份快照跳转后自动对比
Adsryen Jul 4, 2026
f73f86d
test(diff): 补充自动对比失败路径覆盖
Adsryen Jul 4, 2026
0dcb6e5
fix(diff): 优化批量对比失败提示
Adsryen Jul 4, 2026
df52040
fix(ui): 补齐内联错误复制入口
Adsryen Jul 4, 2026
2537234
fix(i18n): 本地化错误中心操作文案
Adsryen Jul 4, 2026
416c8d0
fix(i18n): 收敛错误中心硬编码文案
Adsryen Jul 4, 2026
655d57a
fix(i18n): 本地化连接测试链路文案
Adsryen Jul 4, 2026
21c6e87
fix(i18n): 本地化消息中心和统一差异文案
Adsryen Jul 4, 2026
15dc10f
fix(i18n): 本地化差异面板和消息摘要
Adsryen Jul 4, 2026
4006d56
fix(i18n): 本地化通用操作控件文案
Adsryen Jul 4, 2026
b3edfa7
fix(i18n): 本地化历史操作和快照只读错误
Adsryen Jul 4, 2026
a2161df
fix(i18n): 本地化校验和导出错误
Adsryen Jul 4, 2026
f4eca84
fix(i18n): 本地化快照目录校验消息
Adsryen Jul 4, 2026
db14cf1
fix(i18n): 本地化审计占位和快照环境名
Adsryen Jul 4, 2026
d480744
fix(i18n): 本地化残留控件提示
Adsryen Jul 4, 2026
f89d95d
feat(startup): 增加启动版本提示弹窗
Adsryen Jul 4, 2026
6f09882
fix(nav): 修复无连接导航误标规划中
Adsryen Jul 4, 2026
4b24d6d
style(settings): 重排设置页布局
Adsryen Jul 4, 2026
5286f91
fix(app): 修复关于页无连接空态误拦截
Adsryen Jul 4, 2026
55fdd9a
docs: 将项目开源协议从MIT更换为AGPL-3.0
Adsryen Jul 5, 2026
e1bb54b
fix(update): 修复更新判断和启动烟花
Adsryen Jul 5, 2026
df31763
fix(settings): 限制设置页索引滚动范围
Adsryen Jul 5, 2026
1502aa6
chore(release): 补齐 1.3.1 发布收尾
Adsryen Jul 5, 2026
50350fb
feat(snapshot): 固化本地快照 schema
Adsryen Jul 5, 2026
a59f305
fix(snapshot): 避免临时快照被识别为完成状态
Adsryen Jul 5, 2026
1299018
feat(snapshot): 支持本地快照只读浏览元数据
Adsryen Jul 5, 2026
645729d
feat(export): 默认脱敏导出敏感配置
Adsryen Jul 5, 2026
7651c1b
feat(backup): 补齐备份任务中心收尾
Adsryen Jul 5, 2026
f0c7f3d
feat(apply): 增加应用计划快照模型
Adsryen Jul 5, 2026
2f96ead
feat(apply): 接入应用计划入口
Adsryen Jul 5, 2026
1bda402
feat(apply): 补齐写入前备份历史合同
Adsryen Jul 5, 2026
4329258
feat(apply): 完成应用计划预览与执行闭环
Adsryen Jul 6, 2026
d04de32
feat(apply): 完成沙箱晋级与回退闭环
Adsryen Jul 6, 2026
268781e
fix(apply): 禁用旧直写入口
Adsryen Jul 6, 2026
4844735
fix(apply): 修复回退计划快照执行
Adsryen Jul 6, 2026
0b3e574
chore(release): 同步 1.4.0 发版元数据
Adsryen Jul 6, 2026
b5fffbc
fix(apply): 修复默认命名空间写入回读
Adsryen Jul 6, 2026
8458c22
test(smoke): 新增真实环境冒烟测试体系
Adsryen Jul 6, 2026
1c03b2d
test(smoke): 新增原生 Wails 冒烟自动化
Adsryen Jul 6, 2026
d6bf807
feat(app-data): 新增应用数据备份恢复
Adsryen Jul 7, 2026
baeec7d
chore(release): 准备 1.5.0 发版
Adsryen Jul 7, 2026
885391a
test(smoke): 使用通用 WebDAV 容器
Adsryen Jul 7, 2026
8952685
feat(settings): 优化备份设置页布局
Adsryen Jul 7, 2026
d790692
feat(apollo): 新增 Apollo 只读适配
Adsryen Jul 7, 2026
2748d9d
feat(consul): 新增 Consul KV 只读适配
Adsryen Jul 7, 2026
5ee9bf9
feat(backup): 支持配置快照 WebDAV 同步
Adsryen Jul 8, 2026
9198147
docs(roadmap): 固化平台治理路线图
Adsryen Jul 8, 2026
b92c110
docs(plan): 固化审计导出增强计划
Adsryen Jul 8, 2026
c6ead26
feat(export): 增强审计导出字段与脱敏
Adsryen Jul 8, 2026
520c6b1
docs(plan): 固化本地数据迁移护栏计划
Adsryen Jul 8, 2026
a3f4ae1
test(migration): 增加本地数据兼容护栏
Adsryen Jul 8, 2026
7e78814
docs(security): 固化凭据安全调研计划
Adsryen Jul 8, 2026
ff7d818
feat(security): 增加 Windows 凭据库 PoC
Adsryen Jul 8, 2026
9b002fc
test(smoke): 补齐容器化全量回归覆盖
Adsryen Jul 8, 2026
0a9b1df
feat(security): 支持凭据 secretRef 真实迁移
Adsryen Jul 8, 2026
9c72d32
feat(provider): 支持 Apollo 与 Consul ApplyPlan 写入
Adsryen Jul 8, 2026
75468b4
ci(release): 恢复 macOS 双架构 DMG 自动构建
Adsryen Jul 15, 2026
f248d96
chore(release): 准备 1.6.5 发版
Adsryen Jul 15, 2026
dd4f0fe
feat: 支持便携数据目录
Adsryen Jul 23, 2026
ad84521
fix: 修复 Nacos 编码和 SSH 隧道重连
Adsryen Jul 23, 2026
776a380
feat: 增强配置对比来源和缺失项展示
Adsryen Jul 23, 2026
1af9639
feat: 优化配置浏览分组筛选界面
Adsryen Jul 23, 2026
39a6719
feat: 支持应用计划 dry-run 和文件选择
Adsryen Jul 23, 2026
0dc3187
chore: 发布 1.7.0
Adsryen Jul 23, 2026
4ed7327
feat(browser): 细化配置浏览范围筛选
Adsryen Jul 24, 2026
459190b
feat(diff): 优化文件选择和返回流程
Adsryen Jul 24, 2026
89aefb4
fix(settings): 清理保存提示定时器
Adsryen Jul 24, 2026
9f45dc7
feat: 支持配置源文件导出与应用数据备份集成快照
Adsryen Jul 25, 2026
e0bf026
chore: 忽略 dist-test 构建产物目录
Adsryen Jul 26, 2026
a1f5a2b
feat(diff): 增加配置对比工作流引导并统一变更计划文案
Adsryen Jul 26, 2026
d955450
feat: 支持 CONFSCOPE_DATA_DIR 便携数据目录与 DiffView 批量对比优化
Adsryen Jul 28, 2026
ceca406
feat(diff): 支持批量差异双向合并预览与物化变更计划
Adsryen Jul 29, 2026
12106ef
feat(diff): 重构合并预览交互与工作流布局
Adsryen Jul 29, 2026
25a1ac4
feat: 完善配置变更与备份安全能力
Adsryen Aug 11, 2026
0cc34b2
chore(release): 发布 1.8.0
Adsryen Aug 11, 2026
0c22fdf
fix: 修复对比应用箭头失效、搜索无高亮、拖选复制含两端代码块及审计跨命名空间对齐
Adsryen Aug 28, 2026
8ad29a2
feat(audit): 增加会话审计日志(audit-trail.jsonl)与审计日志页
Adsryen Aug 28, 2026
5f1cdb4
chore(retest): 增加生产级测试数据生成脚本(12 个配置对)
Adsryen Aug 28, 2026
2fa87b3
feat(diff): 记住对比页的左右来源并自动恢复对比
Adsryen Aug 28, 2026
797082e
fix(nacos): 修正 v1 列表接口字段映射,修复批量匹配找不到 dataId
Adsryen Aug 28, 2026
8830bcb
fix(audit): 矩阵滚动与详情面板布局,修复跳转 Diff 按钮被遮挡无法点击
Adsryen Aug 29, 2026
ca77dd1
test(retest): 真人模拟全功能复测套件修复至全绿(25/25)
Adsryen Aug 29, 2026
f4ff7a6
feat(nacos): 后端支持命名空间/组列表查询与审计事件持久化
Adsryen Aug 29, 2026
fea98f5
feat(ui): 配置浏览/对比页增加 group 下拉与来源恢复,完善编辑器与审计视图
Adsryen Aug 29, 2026
3a082f5
build: 升级 Wails v2.12→v2.13 以支持 webkit2gtk-4.1
Adsryen Aug 29, 2026
e62ab35
feat(audit): 变更计划 5 步全程会话记录(含完整配置内容)
Adsryen Aug 29, 2026
3bc1955
feat(settings): 开发者清理缓存入口(localStorage cs.* + audit-trail)
Adsryen Aug 29, 2026
f4ed401
fix(normalize): YAML duplicate key 降级为警告,不再阻塞配置同步
Adsryen Aug 29, 2026
a66676c
feat(diff): 重复 key 位置可视化警告(对比页提示条 + 计划详情黄色 warning)
Adsryen Aug 29, 2026
c90b537
feat(apply): 变更计划内人工编辑目标配置(机器判定不准/需补充时)
Adsryen Aug 29, 2026
806ec7a
chore: 忽略测试数据生成产物(generated/ 与 pycache)
Adsryen Aug 29, 2026
91d49f3
fix(diff): 重复 key 检测按完整层级路径判定,修复不同父路径同名 key 误报
Adsryen Aug 30, 2026
250d4ec
fix(apply): 第四步计划页明确 dry-run 语义,避免「应用后」预览被误认为已写入
Adsryen Aug 30, 2026
6ac2770
feat(apply): 计划详情 diff 上方增加 dry-run 预览提示条
Adsryen Aug 30, 2026
445a997
test(retest): 新增 UX-01/UX-02 真人路径用例(计划页 dry-run 误读 + 浏览编辑拦截)
Adsryen Aug 30, 2026
14392f9
test(retest): 新增浏览防护/浏览流程/矩阵历史三组真人路径用例
Adsryen Aug 30, 2026
f99619c
test(retest): 新增快照/连接管理/设置/全局异常 11 条真人模拟用例
Adsryen Aug 30, 2026
cf1be42
test(retest): 补齐矩阵跳转/一致性、执行失败、快照浏览、任务详情、审计 jsonl 用例
Adsryen Aug 30, 2026
ea7f00b
test(retest): 新增导出与快照恢复真人路径用例
Adsryen Aug 30, 2026
2e81128
test(retest): 修正操作历史沙箱验证/回退计划用例断言
Adsryen Aug 30, 2026
be411e2
test(retest): runSingleApply 断言执行必须成功落库
Adsryen Aug 30, 2026
61958ef
test(retest): 修复重复 key 数据缺陷与用例数据自洁
Adsryen Aug 30, 2026
d9da22f
test(retest): 新增晋级全链路与 dataId 不存在报错真人用例
Adsryen Aug 31, 2026
dd6be73
test(retest): 修复晋级/执行落库断言的最终一致性与按钮文案漂移
Adsryen Sep 2, 2026
3b01575
test(retest): 修复 S5/S6/S7/S13 并补齐内联桥 SSH/WebDAV mock
Adsryen Sep 2, 2026
f375205
test(retest): 新增 S 组真人模拟补充场景(S1-S16)
Adsryen Sep 2, 2026
f97fdd6
test(retest): J1 SSH 隧道真机握手验证补全
Adsryen Sep 2, 2026
886728e
chore: 版本号升至 1.9.0
Adsryen Sep 2, 2026
840726d
fix: 移除生产构建中的 retest 播种脚本引用并修复标题乱码
Adsryen Sep 4, 2026
35262ec
chore: 新增生产构建守卫与一键构建脚本
Adsryen Sep 4, 2026
440e539
chore: 提交便携数据启动脚本
Adsryen Sep 4, 2026
dafe12b
feat: 新增 Go 侧主数据文件 app-data/confscope-data.json 读写
Adsryen Sep 4, 2026
4d052d2
feat: 前端主数据迁移到数据文件,localStorage 降级为热缓存
Adsryen Sep 4, 2026
fddf55e
test: 数据护栏测试补充文件↔缓存双向兼容与损坏回退用例
Adsryen Sep 4, 2026
c22c49c
chore: 清理公开仓库中不应跟踪的本地文件与密钥
Adsryen Sep 5, 2026
aa5394f
test: 替换 retest 数据中内网风格 IP 为文档保留网段
Adsryen Sep 5, 2026
17770c2
fix: 修复配置编辑器光标错位,优化应用计划确认流程
raozhiyong11 Sep 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Binary file removed .github/assets/page-1.png
Binary file not shown.
Binary file added .github/assets/配置对比.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/assets/配置浏览.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/assets/配置矩阵.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
203 changes: 190 additions & 13 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
tags:
- "v*"
workflow_dispatch:

permissions:
contents: write
Expand All @@ -20,6 +21,12 @@ jobs:
- os: windows-latest
platform: windows
goarch: amd64
- os: macos-14
platform: darwin
goarch: arm64
- os: macos-14
platform: darwin
goarch: amd64

runs-on: ${{ matrix.os }}
name: Build (${{ matrix.platform }}-${{ matrix.goarch }})
Expand All @@ -31,7 +38,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: "1.22"
go-version: "1.24.x"

- name: Setup Node
uses: actions/setup-node@v4
Expand All @@ -49,36 +56,81 @@ jobs:
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev

- name: Install Wails CLI
run: go install github.com/wailsapp/wails/v2/cmd/wails@v2.12.0
shell: bash
run: |
WAILS_VERSION="v2.12.0"
if [ "${{ matrix.platform }}" = "darwin" ]; then
# macOS: external link so the CLI binary gets LC_UUID (dyld requirement)
go install -ldflags="-linkmode=external" "github.com/wailsapp/wails/v2/cmd/wails@${WAILS_VERSION}"
else
go install "github.com/wailsapp/wails/v2/cmd/wails@${WAILS_VERSION}"
fi
wails version

- name: Install frontend dependencies
run: pnpm install

- name: Build
run: wails build -clean
shell: bash
run: |
if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then
VERSION="${GITHUB_REF_NAME#v}"
else
VERSION="dev-${GITHUB_SHA::7}"
fi
echo "Building ConfScope version=${VERSION} GOARCH=${GOARCH}"
wails build -clean -ldflags "-X main.appVersion=${VERSION}"
env:
GOARCH: ${{ matrix.goarch }}

# macOS 打包成 .dmg 安装镜像
- name: Package macOS artifact
if: matrix.platform == 'darwin'
shell: bash
run: |
set -euo pipefail
APP_PATH="$(find build/bin -maxdepth 2 -name '*.app' -type d | head -n 1 || true)"
if [ -z "${APP_PATH}" ] || [ ! -d "${APP_PATH}" ]; then
echo "ERROR: no .app bundle found under build/bin"
ls -laR build/bin || true
exit 1
fi
echo "Using app bundle: ${APP_PATH}"

DMG_PATH="build/bin/ConfScope-darwin-${{ matrix.goarch }}.dmg"
rm -f "${DMG_PATH}"

brew install create-dmg
create-dmg \
if create-dmg \
--volname "ConfScope" \
--window-pos 200 120 \
--window-size 600 400 \
--icon "ConfScope.app" 150 200 \
--icon "$(basename "${APP_PATH}")" 150 200 \
--app-drop-link 450 200 \
"build/bin/ConfScope-darwin-${{ matrix.goarch }}.dmg" \
"build/bin/ConfScope.app" || true
"${DMG_PATH}" \
"${APP_PATH}"; then
echo "create-dmg succeeded: ${DMG_PATH}"
else
echo "create-dmg failed; falling back to hdiutil"
rm -f "${DMG_PATH}"
hdiutil create \
-volname "ConfScope" \
-srcfolder "${APP_PATH}" \
-ov \
-format UDZO \
"${DMG_PATH}"
fi

test -f "${DMG_PATH}"
ls -lh "${DMG_PATH}"

- name: Upload artifact (macOS)
if: matrix.platform == 'darwin'
uses: actions/upload-artifact@v4
with:
name: ConfScope-darwin-${{ matrix.goarch }}
path: build/bin/ConfScope-darwin-${{ matrix.goarch }}.dmg
if-no-files-found: error

- name: Upload artifact (Windows)
if: matrix.platform == 'windows'
Expand All @@ -87,11 +139,24 @@ jobs:
name: ConfScope-windows-amd64
path: build/bin/ConfScope.exe

# Linux 打包成 .deb + .rpm
# Linux 打包原始二进制 + .deb + .rpm
- name: Package Linux tarball
if: matrix.platform == 'linux'
shell: bash
run: |
cd build/bin
tar czf "confscope-linux-amd64.tar.gz" ConfScope
echo "TARBALL=confscope-linux-amd64.tar.gz" >> $GITHUB_ENV

- name: Package Linux .deb
if: matrix.platform == 'linux'
shell: bash
run: |
VERSION="${GITHUB_REF_NAME#v}"
if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then
VERSION="${GITHUB_REF_NAME#v}"
else
VERSION="0.0.0-dev.${GITHUB_SHA::7}"
fi
PKG="confscope_${VERSION}_amd64"
mkdir -p "${PKG}/DEBIAN"
mkdir -p "${PKG}/usr/bin"
Expand Down Expand Up @@ -120,20 +185,31 @@ jobs:

- name: Package Linux .rpm
if: matrix.platform == 'linux'
shell: bash
run: |
sudo apt-get install -y rpm
VERSION="${GITHUB_REF_NAME#v}"
if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then
VERSION="${GITHUB_REF_NAME#v}"
else
VERSION="0.0.0"
fi
# rpm Release 带 dev 标识,避免与正式包混淆
if [[ "${GITHUB_REF}" != refs/tags/v* ]]; then
RPM_RELEASE="0.dev.${GITHUB_SHA::7}"
else
RPM_RELEASE="1"
fi
TOPDIR="${HOME}/rpmbuild"
mkdir -p "${TOPDIR}"/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

# spec 文件
cat > "${TOPDIR}/SPECS/confscope.spec" <<EOF
Name: confscope
Version: ${VERSION}
Release: 1%{?dist}
Release: ${RPM_RELEASE}%{?dist}
Summary: 配置中心管理工具

License: MIT
License: AGPL-3.0-only
URL: https://github.com/${{ github.repository }}

Requires: gtk3
Expand Down Expand Up @@ -171,12 +247,109 @@ jobs:
with:
name: ConfScope-linux-amd64
path: |
build/bin/confscope-linux-amd64.tar.gz
build/bin/confscope-linux-amd64.deb
build/bin/confscope-linux-amd64.rpm

release:
generate-manifest:
if: startsWith(github.ref, 'refs/tags/v')
needs: build
runs-on: ubuntu-latest
outputs:
manifest: ${{ steps.manifest.outputs.json }}
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts

- name: Generate update.json
id: manifest
run: |
VERSION="${GITHUB_REF_NAME#v}"
NOTES=$(gh release view "${GITHUB_REF_NAME}" --json body -q .body 2>/dev/null || echo "")
if [ -z "$NOTES" ]; then
NOTES="发行版 ${VERSION}"
fi

# Windows
WIN_SHA256=$(sha256sum "artifacts/ConfScope-windows-amd64/ConfScope.exe" | awk '{print $1}')

# Linux
LINUX_TAR_SHA256=$(sha256sum "artifacts/ConfScope-linux-amd64/confscope-linux-amd64.tar.gz" | awk '{print $1}')
LINUX_DEB_SHA256=$(sha256sum "artifacts/ConfScope-linux-amd64/confscope-linux-amd64.deb" | awk '{print $1}')
LINUX_RPM_SHA256=$(sha256sum "artifacts/ConfScope-linux-amd64/confscope-linux-amd64.rpm" | awk '{print $1}')

# macOS
DARWIN_ARM64_SHA256=$(sha256sum "artifacts/ConfScope-darwin-arm64/ConfScope-darwin-arm64.dmg" | awk '{print $1}')
DARWIN_AMD64_SHA256=$(sha256sum "artifacts/ConfScope-darwin-amd64/ConfScope-darwin-amd64.dmg" | awk '{print $1}')

DOWNLOAD_BASE="https://github.com/${{ github.repository }}/releases/download/${GITHUB_REF_NAME}"

jq -n \
--arg version "${VERSION}" \
--arg notes "${NOTES}" \
--arg publishedAt "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--arg winSha256 "${WIN_SHA256}" \
--arg linuxTarSha256 "${LINUX_TAR_SHA256}" \
--arg linuxDebSha256 "${LINUX_DEB_SHA256}" \
--arg linuxRpmSha256 "${LINUX_RPM_SHA256}" \
--arg darwinArm64Sha256 "${DARWIN_ARM64_SHA256}" \
--arg darwinAmd64Sha256 "${DARWIN_AMD64_SHA256}" \
--arg downloadBase "${DOWNLOAD_BASE}" \
'{
version: $version,
notes: $notes,
publishedAt: $publishedAt,
mandatory: false,
platforms: {
"windows-amd64": {
downloadUrl: "\($downloadBase)/ConfScope.exe",
sha256: $winSha256,
fileName: "ConfScope.exe"
},
"linux-amd64": {
downloadUrl: "\($downloadBase)/confscope-linux-amd64.tar.gz",
sha256: $linuxTarSha256,
fileName: "confscope-linux-amd64.tar.gz"
},
"linux-amd64-deb": {
downloadUrl: "\($downloadBase)/confscope-linux-amd64.deb",
sha256: $linuxDebSha256,
fileName: "confscope-linux-amd64.deb"
},
"linux-amd64-rpm": {
downloadUrl: "\($downloadBase)/confscope-linux-amd64.rpm",
sha256: $linuxRpmSha256,
fileName: "confscope-linux-amd64.rpm"
},
"darwin-arm64": {
downloadUrl: "\($downloadBase)/ConfScope-darwin-arm64.dmg",
sha256: $darwinArm64Sha256,
fileName: "ConfScope-darwin-arm64.dmg"
},
"darwin-amd64": {
downloadUrl: "\($downloadBase)/ConfScope-darwin-amd64.dmg",
sha256: $darwinAmd64Sha256,
fileName: "ConfScope-darwin-amd64.dmg"
}
}
}' > update.json

cat update.json
echo "json=$(cat update.json | jq -c .)" >> $GITHUB_OUTPUT
cp update.json artifacts/update.json

- name: Upload update.json as artifact
uses: actions/upload-artifact@v4
with:
name: update-manifest
path: artifacts/update.json

release:
if: startsWith(github.ref, 'refs/tags/v')
needs: [build, generate-manifest]
runs-on: ubuntu-latest
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
Expand All @@ -189,5 +362,9 @@ jobs:
generate_release_notes: true
files: |
artifacts/ConfScope-windows-amd64/ConfScope.exe
artifacts/ConfScope-linux-amd64/confscope-linux-amd64.tar.gz
artifacts/ConfScope-linux-amd64/confscope-linux-amd64.deb
artifacts/ConfScope-linux-amd64/confscope-linux-amd64.rpm
artifacts/ConfScope-darwin-arm64/ConfScope-darwin-arm64.dmg
artifacts/ConfScope-darwin-amd64/ConfScope-darwin-amd64.dmg
artifacts/update-manifest/update.json
55 changes: 54 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ vendor/

# Build output
dist/
dist-test/
build/bin/
# NSIS 安装器脚本与运行时为 wails build -nsis 每次生成的构建产物
build/windows/installer/
*.exe
*.dll
*.so
Expand Down Expand Up @@ -45,15 +48,65 @@ yarn-debug.log*
yarn-error.log*
pnpm-debug.log*

# Playwright
test-results/
playwright-report/
# playwright-cli 会话快照(本地调试产物)
/.playwright-cli/

# Local history
.history/

# Temp files
.tmp/
*.tmp
*.temp

# AI tools
.claude/
.cursor/
.codex/
.agents/
docs/superpowers/
.trae/
.trae/
.trellis/
AGENTS.MD

# ConfScope 本机运行数据与便携程序
/portable/
/local-backups/
/ConfScopeData/

# 本地数据、备份与导出压缩包
*.db
*.sqlite
*.sqlite3
*.bak
*.backup
*.zip
*.7z
*.rar

# 复测截图产物
results/

# 本地开发备份目录(dev 脚本产物)
/local-backups/

# Linux build output
/confscope-linux

# Local manual retest bridge (ephemeral test env, not part of product)
/public/manual-bridge-*.js
scripts/retest-data/generated/
scripts/retest-data/__pycache__/

# 复测运行产物(Playwright 输出)
tests/retest/results-run/

# 复测 SSH 测试密钥(本地自生成,禁止提交)
/tests/retest/ssh-keys/id_ed25519
/tests/retest/ssh-keys/id_ed25519.pub

# 本机便携启动脚本(含个人路径,仅本地保留)
/scripts/launch-confscope-portable.vbs
7 changes: 7 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"semi": true,
"singleQuote": false,
"trailingComma": "es5",
"printWidth": 140,
"tabWidth": 2
}
Loading