Skip to content

ci: 新增集成测试工作流并调整构建/测试工作流 - #10

Open
Starsky16 wants to merge 6 commits into
Yeson38:masterfrom
Starsky16:pr/5-ci-integration-test
Open

Starsky16 wants to merge 6 commits into
Yeson38:masterfrom
Starsky16:pr/5-ci-integration-test

Conversation

@Starsky16

@Starsky16 Starsky16 commented Sep 14, 2026 •

Copy link
Copy Markdown

概述

新增集成测试工作流,并让构建/测试工作流对齐现有工程。

这是「分贝监测插件重构与提醒功能」拆分系列的第 5/5 个 PR:

变更

  • .github/workflows/IntegrationTest.yml(新增):下载官方 ClassIsland 2.1.0.1 folder 包并解压,用 -epp <插件目录> --skip-oobe --quiet 启动宿主加载本插件,轮询等待插件写入 loaded.marker(最长 150 秒)以确认 Plugin.Initialize 完整执行、注册无异常;超时或进程提前退出即失败,失败时打印 AppRoot 目录结构便于排查。
  • Plugin:仅在环境变量 DECIBEL_MONITOR_CI_MARKER=1 时向插件配置目录写入 loaded.marker(写入失败不影响初始化);未设置该变量时行为与原来完全一致。
  • .github/workflows/Build.yml / Test.yml:构建与单元测试步骤对齐现有工程(tools/publish.ps1、Tests/Decibel_Monitor.Tests),并为 NuGet 增加缓存。

验证

dotnet build Decibel_Monitor.csproj -c Release
# 已成功生成:0 个警告 0 个错误

dotnet test Tests/Decibel_Monitor.Tests/Decibel_Monitor.Tests.csproj -c Release
# 已通过! - 失败: 0,通过: 37,已跳过: 0,总计: 37

工作流本身需要在 GitHub Actions 的 windows-latest 上运行验证(本机无法执行),合并后可在 Actions 页面看到 Integration Test 结果。

说明

本 PR 由 AI 辅助生成。

- 新增 Services:AudioPeakMeter(门面)、AudioDeviceEnumerator(设备枚举与缓存)、ContinuousPeakCapture(常驻静默捕获流)、OneShotPeakCapture(一次性三级回退采样)、DecibelCalculator(线性峰值与显示刻度换算)、PeakSample(采样结果纯数据)。

- 新增插件全局设置 DecibelMonitorGlobalSettings 与持久化服务 DecibelMonitorSettingsService(整体反序列化,新增设置项无需同步维护)。

- Plugin.Initialize 注册全局设置服务与共享采样服务;组件将在后续 PR 切换为该服务。

- 新增 Tests/Decibel_Monitor.Tests(xunit),覆盖计算换算与采样数据纯逻辑,共 28 条用例全绿。

由 VS Code 中的 Cline 辅助生成。
- DecibelComponent 从宿主 DI 获取 AudioPeakMeter 与 DecibelMonitorSettingsService,改用 DecibelCalculator 做线性峰值到显示刻度的换算,不再自行枚举设备并三级回退采样。

- 数值改用 AvaloniaProperty(StyledProperty)绑定,移除手写的 INotifyPropertyChanged;采样 Tick 增加节流,避免异步任务堆积;放大倍数取自全局设置,同一麦克风所有组件数值一致。

- 组件设置控件精简为显示侧偏好(分贝前缀、更新频率);测量/校准与提醒设置分别移至插件设置页与通知提供方设置。

- Plugin 移除重复的 GetVoicePeakValue()。

- 编译警告由 3 个降为 0 个(原 CS0108/CS4014 随旧实现一并移除)。

由 VS Code 中的 Cline 辅助生成。
- 新增 DecibelNotificationProvider:继承 NotificationProviderBase<DecibelNotificationProviderSettings>
  以获得宿主自动持久化的通知侧设置,注册「超过分贝阈值」渠道并通过 Channel(...) 发送,与内置通知提供方保持一致。
- 提醒判定抽为纯函数 DecibelAlertEvaluator.Evaluate(...):严格大于阈值才触发、冷却期内不重复通知;
  配套 9 条边界单元测试(等于阈值不触发、冷却中不通知、冷却刚过可通知、冷却下限 1 分钟等),单元测试总数 37 条全绿。
- 新增通知侧设置控件:启用提醒、阈值(dB)、提醒文字、冷却时间(分钟)。
- 组件展示评估结果:超阈值时显示红色提示文字,可用组件设置里的「组件内提示」关闭(关闭后仍照常发送通知);
  提供方实例动态读取,避免组件先于 IHostedService 创建导致提醒永久失效。
- README 补充阈值提醒的使用方式、设置项与排查说明。

由 VS Code 中的 Cline 辅助生成。
- 新增插件设置页(设置 → Decibel_Monitor,External 分类):全局校准(参考 dB 0..150、放大倍数、校准按钮)、
  持续监听麦克风与采样参数、默认捕获设备信息与捕获设备列表诊断。
- 校准改为调用 AudioPeakMeter.CaptureSamplePeakAsync 显式采样一次,结果写入全局放大倍数,
  插件内所有组件立即生效(同一麦克风各组件数值一致)。
- Plugin 注册设置页;Decibel_Monitor.csproj 补充设置页 XAML 与代码后置的 DependentUpon。
- README 更新:设置分布(组件设置 / 通知设置 / 插件设置页三处)、校准位置由组件设置改为插件设置页、
  补充全局设置项与故障排查说明。

由 VS Code 中的 Cline 辅助生成。
- IntegrationTest.yml:下载官方 ClassIsland 2.1.0.1 folder 包,用 -epp 加载本插件并启动,
  轮询等待插件写入 loaded.marker 以确认 Initialize 完整执行(注册组件与提醒提供方无异常);
  超时或进程提前退出即失败,并在失败时打印 AppRoot 目录便于排查。
- Plugin:设置 DECIBEL_MONITOR_CI_MARKER=1 时向插件配置目录写入 loaded.marker,供上述工作流判定加载成功;
  未设置该环境变量时行为与原来完全一致。
- Build.yml / Test.yml:构建与单元测试步骤对齐现有工程(tools/publish.ps1、Tests/Decibel_Monitor.Tests)。

由 VS Code 中的 Cline 辅助生成。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant