提交图

312 次代码提交

作者 SHA1 备注 提交日期
Jenkins CI
523f9d7894 ci: bump xuqm-bugcollect-service=1.0.15 [skip ci] 2026-06-23 10:11:14 +08:00
Jenkins CI
0cc73c6b62 ci: bump xuqm-bugcollect-service=1.0.14 [skip ci] 2026-06-22 18:31:26 +08:00
XuqmGroup
45a08c1e3a fix(bugcollect): LogEventEntity 无 buildId,queryEvents 映射改用 null
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 18:28:37 +08:00
XuqmGroup
f6dc3f7c72 feat(bugcollect): 事件响应中暴露 buildId 字段
IssueEventResponse 新增 buildId 字段,将构建 ID 包含在 events API 响应中,
方便前端展示具体构建对应的错误。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 18:27:08 +08:00
Jenkins CI
7f4fd6ee61 ci: bump xuqm-bugcollect-service=1.0.13 [skip ci] 2026-06-22 17:54:11 +08:00
XuqmGroup
39d62f2080 fix(bugcollect): 修复 callSymbolicator 字段名 sourcemap → mappingFile
Android symbolicator API 期望 mappingFile 字段,之前误用 sourcemap 导致
符号化返回 "mappingFile is required for Android" 错误,堆栈无法还原。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 17:51:27 +08:00
Jenkins CI
56dc6ff4cc ci: bump xuqm-bugcollect-service=1.0.12 [skip ci] 2026-06-22 17:29:33 +08:00
XuqmGroup
e7a0d740d2 fix(bugcollect): V6 改为空迁移,所有 DDL 已手动应用
PREPARE/EXECUTE 语法在 Flyway 中不可用;V6 的所有 schema 变更
(log_sourcemaps.build_id、uk_map_build、idx_sm_version_latest、
log_issue_events.build_id)已手动执行到数据库,此脚本改为 SELECT 1
让 Flyway 顺利完成 V6 的版本记录。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 17:26:42 +08:00
Jenkins CI
c4f93ebaf4 ci: bump xuqm-bugcollect-service=1.0.11 [skip ci] 2026-06-22 17:15:52 +08:00
XuqmGroup
f0cd3b5d33 fix(bugcollect): 修复 V6 迁移 SQL 错误并改为幂等执行
- AFTER app_version(列名)替代 AFTER release(Java字段名)
- 使用 information_schema 条件检查实现幂等,防止重复执行报错
- LogService log 语句中 issueId → eventId

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 17:12:51 +08:00
Jenkins CI
632499a5d8 ci: bump xuqm-bugcollect-service=1.0.10 [skip ci] 2026-06-22 17:06:23 +08:00
XuqmGroup
cfd5d67ce9 fix(bugcollect): 修复 LogService symbolication 日志中的变量名错误
log.info/error 中误用 issueId,改为 eventId,修复编译错误。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 17:03:33 +08:00
XuqmGroup
4acec019f7 feat(bugcollect): buildId 支持相同版本多包 sourcemap 与精确符号化
- V6 迁移:log_sourcemaps 新增 build_id 列,唯一键改为
  (app_key, platform, app_version, build_id, bundle_name);
  log_issue_events 新增 build_id 列
- SourcemapService: 按 buildId 精确匹配,找不到时回退到最新上传
  (findFirstByUploadedAtDesc);存储路径包含 buildId 目录
- LogService: 修复 symbolication 事件查找 bug(原使用 issueId 查
  event 表,现改为 eventId);事件保存后取返回值获取正确 ID
- LogController/DTO: upload 接口新增可选 buildId 参数;事件批量
  上报 DTO 新增 buildId 字段
- tenant-service: 补充 bugcollect-api-url 配置项

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 16:49:38 +08:00
Jenkins CI
331343e51e ci: bump xuqm-bugcollect-service=1.0.9 [skip ci] 2026-06-19 19:42:28 +08:00
Jenkins CI
31501ec34c ci: bump xuqm-bugcollect-service=1.0.8 [skip ci] 2026-06-19 03:07:52 +08:00
XuqmGroup
dea5038de2 feat: bugcollect 添加 Sourcemap 列表 API
- 新增 GET /bugcollect/v1/sourcemaps 端点
- SourcemapService 新增 listByAppKey 方法
- 新增 SourcemapInfo DTO
- LogSourcemapRepository 新增 findByAppKey 查询

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 03:01:54 +08:00
XuqmGroup
a8ad342336 feat: 集成符号化服务 - 实现 triggerSymbolicationAsync
- 注入 SourcemapService 到 LogService
- 实现 triggerSymbolicationAsync 调用符号化服务
- 支持 RN/Android/iOS/Flutter 堆栈符号化
- 新增 symbolicator.url 配置

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 02:50:56 +08:00
Jenkins CI
064e3e3223 ci: bump xuqm-bugcollect-service=1.0.7 [skip ci] 2026-06-19 01:45:07 +08:00
Jenkins CI
8abcb0e77d ci: bump versions [xuqm-bugcollect-service=1.0.6] [skip ci] 2026-06-19 01:38:42 +08:00
XuqmGroup
f5019d11e8 fix: 修复 IssueResponse 构造函数缺少 type 参数
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 01:35:35 +08:00
Jenkins CI
462b983e55 ci: bump versions [update-service=1.0.1] [skip ci] 2026-06-19 01:32:00 +08:00
XuqmGroup
5b1e04b6d1 feat: update-service 签名验证 + bugcollect 统计图表 API + 修复字段映射
- update-service: 集成 AppSignatureAuthFilter 签名验证
- update-service: 添加 TenantAppSecretResolver
- bugcollect: 新增 /statistics 统计 API 端点
- bugcollect: 修复 OverviewResponse 字段名(crashRateTrend/topIssues/crashRate)
- bugcollect: 修复 IssueResponse 添加 type 字段
- bugcollect: 修复 affectedUsers 语义(从 openIssues 改为真正的受影响用户数)
- bugcollect: 新增 StatisticsResponse DTO
- bugcollect: LogIssueRepository 新增统计查询方法

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 01:26:36 +08:00
Jenkins CI
0871d5cfab ci: bump versions [xuqm-bugcollect-service=1.0.5] [skip ci] 2026-06-19 00:54:33 +08:00
XuqmGroup
e551fb3cb2 revert: 恢复 bugcollect controller 路径为 /bugcollect/v1(公有化兼容) 2026-06-19 00:46:31 +08:00
Jenkins CI
8cdfad5a1a ci: bump versions [xuqm-bugcollect-service=1.0.4] [skip ci] 2026-06-19 00:43:54 +08:00
XuqmGroup
8ac2a37e7f fix: bugcollect controller 路径从 /bugcollect/v1 改为 /api/bugcollect/v1,匹配 nginx 路由 2026-06-19 00:41:07 +08:00
Jenkins CI
62163fac7b ci: bump versions [xuqm-bugcollect-service=1.0.3] [skip ci] 2026-06-19 00:32:41 +08:00
Jenkins CI
127345458a ci: bump versions [xuqm-bugcollect-service=1.0.2] [skip ci] 2026-06-19 00:17:22 +08:00
XuqmGroup
ff9ccc4447 fix: bugcollect V4 拆分为 V4+V5,解决 MySQL 不兼容 ADD COLUMN IF NOT EXISTS 问题
V4: CREATE TABLE IF NOT EXISTS(全部幂等)
V5: ALTER TABLE ADD COLUMN + CREATE INDEX(升级场景需手动处理)
2026-06-18 23:56:17 +08:00
XuqmGroup
4a3cb74954 fix: bugcollect V4 迁移移除不兼容的 IF NOT EXISTS 语法 + docker-compose 补充 env_file 和密码修复 2026-06-18 23:52:22 +08:00
XuqmGroup
ae56369e03 fix: 所有服务禁用 Flyway validate-on-migrate,防止迁移文件修改后 checksum 不匹配导致 crash-loop
升级场景下 V1__init.sql 被修改后,数据库中旧 checksum 与新代码不一致,
Flyway 默认 validate-on-migrate=true 会校验失败导致服务无法启动。
添加 validate-on-migrate: false 使服务可以正常启动。
2026-06-18 22:44:31 +08:00
XuqmGroup
58f6135cbe feat(tenant-service): SystemUpdateService 新增 bugcollect-service
OTHER_SERVICES 和 ALLOWED_LOG_SERVICES 添加 bugcollect-service,
一键更新和日志查看支持 Bug 收集服务。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 21:21:28 +08:00
Jenkins CI
7f2a55969c ci: bump versions [xuqm-bugcollect-service=1.0.1] [skip ci] 2026-06-18 14:37:06 +08:00
XuqmGroup
9930d90146 fix(ci): for-in 循环改为 keySet 遍历,修复 HashMap$Node 序列化问题
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 14:29:43 +08:00
XuqmGroup
33ccaa677f fix(ci): JsonSlurper → JsonSlurperClassic 修复 CPS 序列化问题
Jenkins CPS 要求所有变量可序列化,JsonSlurper 返回的 LazyMap 不满足。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 14:19:44 +08:00
XuqmGroup
ba6fb48f5b fix(ci): Git checkout 使用内嵌 token 替代 credentials 绑定
credentials() 在内嵌脚本模式下绑定失败,改为直接嵌入 token。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 14:17:02 +08:00
XuqmGroup
7911a13542 fix(ci): checkout 改为显式 Git URL,修复 scm 不可用问题
内嵌脚本模式下 scm 对象不可用,改为 credentials 绑定 git-token。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 14:15:22 +08:00
XuqmGroup
7cc0962df2 fix(bugcollect): V4 迁移 SQL 修复 ADD INDEX IF NOT EXISTS 语法
MySQL 不支持 ALTER TABLE ADD INDEX IF NOT EXISTS,改用 CREATE INDEX。
已在生产数据库手动修复并标记 Flyway 迁移成功。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 13:59:38 +08:00
XuqmGroup
375f2c4660 fix(ci): echo 中文改为 bat+chcp65001 修复 Jenkins 控制台乱码
Windows Jenkins JVM 的 echo 步骤输出中文时出现三重 UTF-8 编码问题,
改用 bat 'chcp 65001 >nul && echo ...' 绕过。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 12:14:35 +08:00
XuqmGroup
e0e8dcb092 fix(bugcollect): 修复 queryEvents 中 IssueEventResponse 构造参数不匹配
commit 8770f50 重构 IssueEventResponse 为 ExceptionInfo 嵌套结构(20→16字段),
但 queryEvents 方法的内联构造调用未同步更新,导致 Jenkins 构建失败:
  constructor IssueEventResponse cannot be applied to given types

修复:将内联构造改为匹配新 record 的 16 参数调用,device 字段使用 parseJsonField 处理。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-18 11:23:24 +08:00
XuqmGroup
0a6ea7777e fix(jenkins): 修复Jenkins构建中的字符编码和API参数问题
- 在Jenkinsfile中添加JAVA_TOOL_OPTIONS环境变量设置UTF-8编码
- 在Windows批处理命令前添加chcp 65001命令解决中文字符显示问题
- 修复BugCollectIssues组件中API参数从type改为level
- 修复BugCollectWebhooks组件中API字段映射eventTypes到events和cooldownSeconds到cooldownSec
- 更新webhook请求数据结构以匹配后端API要求
2026-06-18 11:14:34 +08:00
XuqmGroup
fbc9d02e2a feat(bugcollect): 新增 PUT /issues/{id}/reopen 接口
- LogService.reopenIssue() 将状态设回 open
- LogController 暴露 /issues/{id}/reopen 端点

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 10:47:51 +08:00
XuqmGroup
8770f505f7 fix(bugcollect): 修复 BugCollect-API-v1-Review 全量37项问题
服务端:
- IssueResponse 移除 isResolved,统一使用 status 字段
- IssueEventResponse 重构为 ExceptionInfo 嵌套结构,breadcrumbs/tags/device 序列化为 Object
- IssueResponse 新增 affectedUsers 字段,通过 log_issue_users 去重计数
- WebhookResponse 将 secret 替换为 hasSecret boolean
- WebhookRequest 新增 secret 字段
- LogWebhookEntity 新增 secret 列
- 新增 LogIssueUserEntity / LogIssueUserRepository 实现 affectedUsers 去重
- LogIssueRepository.findByFilters 新增 assignee、environment 过滤
- LogService.queryIssues 新增 assignee、environment 参数
- LogService.toIssueResponse 修正 IssueResponse 构造(移除 isResolved)
- LogService.toIssueEventResponse 修正 ExceptionInfo 构造,JSON 字段反序列化为 Object
- LogController:assign 改为 @RequestBody;GET /issues 新增 assignee/environment 参数;upload 新增 bundleVersion 参数
- WebhookService:事件类型匹配改为 issue.created/issue.fatal/issue.error/issue.warning/issue.updated;新增 HMAC-SHA256 X-BugCollect-Signature 签名;toResponse 修正为 hasSecret
- SourcemapService:按平台生成正确后缀(.android.bundle.map/.ios.bundle.map);新增 bundleVersion 参数;200MB 大小限制;.map 扩展名校验
- V4 迁移 SQL:log_issue_users 表、log_webhooks.secret 列、log_sessions 表、event_id 索引

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 09:26:12 +08:00
XuqmGroup
696a50aae8 fix(bugcollect): getIssueDetail 补全 events 列表,修复 Web 控制台事件列表为空
toIssueResponse 中 events 始终传 null,导致 GET /issues/{id} 返回的 events 字段为空。
getIssueDetail 现在主动查询最近 20 条 IssueEvent 并填充到响应中。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-18 08:48:48 +08:00
XuqmGroup
dcd429c52d feat(bugcollect): 更新 API 端点并改进数据结构
- 将 Android SDK 的 mapping 上传端点从 /log/v1/sourcemaps/upload 更改为 /bugcollect/v1/sourcemaps/upload
- 将 RN SDK 的 API 端点从 /log/v1/ 统一更改为 /bugcollect/v1/
- 在 LogQueue.ts 的请求体中添加 sentAt 时间戳和 SDK 信息
- 重构 BugCollect.ts 中的事件结构,将 appVersion 重命名为 release,添加 environment 和 sdk 字段
- 将 JS 错误上报的类型从 js_error 改为 issue,并调整错误级别分类
- 为 warn 和 info 方法添加完整的 issue 事件结构
- 在 types.ts 中添加新的数据类型定义,包括 Level、Platform、SdkInfo、ExceptionInfo 等
- 为 IssueEvent 添加详细的异常信息结构,包括类型、值和堆栈跟踪
- 添加完整的错误收集 API v1 规范审阅报告文档
- 在数据库迁移脚本中为日志表添加新字段,包括级别、环境、设备信息、SDK 信息等
2026-06-17 18:02:10 +08:00
XuqmGroup
72a2328050 fix(tenant-service): packageName 为空时跳过包名校验
SDK 未传 packageName 时默认为空字符串,不应与注册包名做比对。
只在 packageName 非空时才执行校验。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 17:14:29 +08:00
XuqmGroup
25dbaad4ac fix(tenant-service): packageName 改为可选参数,兼容旧版 SDK
旧版 sdk-core 的 fetchConfig 未传 packageName,服务端返回 400
导致 bugCollectEnabled 始终为 false,captureError 静默失败。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 17:12:27 +08:00
XuqmGroup
c9ce748c51 fix(tenant-service): config.xuqm serverUrl 使用独立的平台 URL 属性
新增 sdk.platform-public-base-url 属性(默认回退到 license.public-base-url)。
公有环境中 license 服务(auth.dev.xuqinmin.com)与平台 API(dev.xuqinmin.com)是
不同的域,用 licensePublicBaseUrl 作 serverUrl 会导致 SDK 无法拉取平台配置。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 16:59:39 +08:00
XuqmGroup
60b5776f9b fix(tenant-service): config.xuqm 始终写入 serverUrl 字段
无论是否私有化部署,生成的 config.xuqm 均携带 serverUrl,
与 Android/iOS/RN SDK 的 ConfigFile 读取字段保持一致。
移除仅在私有化模式下才写 serverUrl 的条件分支;
同时去掉不再被 SDK 读取的 baseUrl 字段,避免混淆。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 16:44:16 +08:00
XuqmGroup
7c360c407b fix(bugcollect): WebhookService 使用 getRelease() 替代不存在的 getAppVersion()
LogIssueEntity 无 getAppVersion(),应使用 getRelease(),
导致上次 Jenkins 构建编译失败。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 15:35:34 +08:00