鸿蒙 PC Markdown 编辑器质量流水线:Web 构建、回归与 Release 门禁
鸿蒙 PC Markdown 编辑器质量流水线Web 构建、回归与 Release 门禁仓库出现一份 YAML不等于建立了 CI。质量流水线必须能在干净环境安装固定依赖、构建真实 Web产物、运行回归、把失败传给平台并明确哪些鸿蒙构建暂时只能在 macOS DevEco环境执行。否则“流水线已配置”很容易被误写成“远程已通过”。本文基于 OhMarkdown分析本地统一验证、GitCode Web Runner、缓存、离线产物断言和 Debug/Release门禁并如实记录当前远程状态。代码位于 https://gitcode.com/VON-/codex_md_oh先拆平台能力Web编辑器由 TypeScript、Vite、Playwright构成可以在 Linux容器执行。HarmonyOS HAP构建依赖 DevEco Studio工具链和 SDK当前路径在 macOS/Applications/DevEco-Studio.app/Contents因此流水线分两层远程 GitCode先承担 Web构建与20项回归本机统一入口承担 Web、Debug HAP、UnitTestBuild和 diff检查。设备 ohosTest还需要模拟器/HDC。准确边界比伪造“全平台 CI”重要。Linux Web通过不代表 ArkTS编译和 HAP通过。Web脚本是最小公共入口#!/bin/shset-euROOT_DIR$(CDPATH cd -- \ $(dirname--$0)/..pwd) cd $ROOT_DIR/web-editornpmrun test:e2eset -e让构建或测试失败立即非零退出-u拒绝未定义变量。ROOT_DIR从脚本自身位置计算调用者在哪个目录都一致。test:e2e本身先 build再 Playwright{scripts:{build:tsc --noEmit vite build,test:e2e:npm run build playwright test}}类型检查、生产构建和测试形成顺序门禁。测试不会只加载开发源码而是同时生成将打进 HAP的单文件资源。GitCode Runner 配置stages:-testweb_editor_regression:stage:testimage:mcr.microsoft.com/playwright:v1.61.1-noblescript:-cd web-editor-npm ci--ignore-scripts-npm run test:e2ecache:key:web-editor-${CI_COMMIT_REF_SLUG}paths:-web-editor/node_modules/Playwright镜像版本与开发依赖1.61.1对应减少浏览器二进制不匹配。npm ci严格使用 lockfile依赖图变化会失败而非静默改写--ignore-scripts减少安装阶段供应链脚本执行Playwright浏览器已由镜像提供。阶段只有 test任一脚本非零即 job失败。后续可增加 artifact保存 Playwright报告但报告可能包含测试文档截图应确保只使用无敏感 fixture。缓存不是正确性来源node_modules缓存按分支 slug区分加速重复执行。npm ci仍根据 lockfile重建所需状态不能因为缓存存在跳过安装。更稳 cache key可加入 lockfile哈希和镜像版本。否则依赖变更后旧缓存可能带来非确定行为。首次优化前先测 Runner实际安装耗时缓存损坏要能删除后重跑。固定依赖与锁文件任务列表插件使用精确2.1.1其余 CodeMirror和 markdown-it使用兼容范围但package-lock.json固定实际版本。流水线只用npm ci不执行 npm install更新锁。依赖升级应单独提交查看生产 HTML体积、20项回归和安全输出。不能让日常 CI每次拉到新的兼容版本后才发现渲染变化。产物离线断言Vite配置exportdefaultdefineConfig({base:./,plugins:[viteSingleFile()],build:{outDir:../entry/src/main/resources/rawfile/editor,emptyOutDir:true,sourcemap:false,target:es2020,chunkSizeWarningLimit:800}});生产测试读取该index.html断言没有外部 script src和 stylesheet link并包含 OhMarkdownEditor。流水线因此验证的不只是 Vite成功还锁定离线单文件约束。如果开发者忘记 build-editor就组装 HAP旧 rawfile可能进入包。Debug/Release脚本都先执行 build-editor确保资源新鲜。本机统一门禁$ROOT_DIR/scripts/verify-web.sh$ROOT_DIR/scripts/build-debug.shcd$ROOT_DIR$DEVECO_HOME/tools/hvigor/bin/hvigorw\UnitTestBuild\--modemodule\-pproductdefault\-pmoduleentrydefault\-pbuildModetest\-punitTestModetrue\--no-daemongitdiff--checkJAVA_HOME和 DEVECO_SDK_HOME从 DevEco路径设置可由环境变量覆盖。顺序先 Web回归再 HAP Debug再测试构建最后检查补丁空白。脚本没有运行设备 ohosTest因此本地门禁成功仍要单独记录4/4设备结果。以后可在检测到目标时执行不应在没有设备时跳过却显示成功。Debug 与 Release 都要构建Debug用于开发安装Release更接近最终优化和资源打包。两个脚本参数只在buildMode不同exec$DEVECO_HOME/tools/hvigor/bin/hvigorw\assembleHap\--modemodule\-pproductdefault\-pmoduleentrydefault\-pbuildModerelease\--no-daemonRelease当前无签名配置产物为 unsigned HAP适合体积和构建验证不等于可商店发布。签名、证书和流水线密钥属于后续交付安全。失败必须阻断shell使用 exec运行 Hvigor退出码直接成为脚本退出码。Playwright任何断言、TypeScript错误、Vite失败、ArkTS编译错误或 diff whitespace都会使门禁失败。不使用|| true吞测试。可选清理可以容忍失败构建与测试不能。流水线页面应将失败 job标红并保留关键日志不只发聊天通知。远程状态要如实表达截至基线.gitcode-ci.yml已经推送仓库显示 jobs和 shared runner能力开启但尚未拿到首次远程成功结果。质量报告状态仍为 In Progress。在确认平台默认配置文件名、pipeline触发和 Runner日志前不能写“CI通过”。如果 GitCode实际需要其他文件名或仓库设置应修正后再记录首个成功 commit、时间和 job链接。配置存在是输入远程绿色结果才是证据。文章保留这一差异避免阶段报告为了完整度伪造状态。GitCode 与鸿蒙构建的下一步若获得可运行 DevEco的自托管 macOS Runner可增加 ArkTS阶段构建 Web、Debug、Release、UnitTestBuild缓存 SDK不缓存用户证书。设备测试可连接专用模拟器主机串行运行避免状态污染。自托管 Runner涉及机器权限、签名密钥、HDC设备和缓存清理安全成本高。先让 Web远程稳定再增加原生减少同时调试平台和工具链。鸿蒙 PC 基线版本下图是流水线与本机门禁保护的实际应用版本。它运行在 MateBook Pro 2in1模拟器Web资源已离线打入 HAP。应用截图不证明 CI成功只证明构建产物进入目标界面。远程 job、构建日志、HAP哈希和设备截图分别承担不同证据。报告与产物Playwright失败应保存 trace、截图和 HTML报告成功可以只保留摘要控制存储。Release门禁记录 HAP大小和 SHA-256用于确认交付文件。测试报告必须包含命令、环境、通过数、失败项和未运行层。不要只写“测试通过”。构建日志中的本机绝对路径和用户信息在公开前清理。分支与合并策略远程流水线应对提交和合并请求触发main保护要求 Web job成功。原生本机门禁在提交前执行并记录。等自托管 Runner稳定后再把 ArkTS设为强制检查。紧急修复不能永久绕过门禁若平台故障允许管理员合并应在恢复后补跑并记录例外。质量流程要允许故障处理但不能让例外成为默认。当前边界远程首跑未确认CI只覆盖 Web没有远程 Release HAP、签名、设备 ohosTest和 artifact策略cache key未包含 lockfile哈希内部试用门禁不在自动化流水线中。这些未完成项正是 G2-08保持进行中的原因。配置文件不能替代外部条件。流水线自身也需要测试应定期做受控失败临时分支加入必然失败的断言确认 GitCode job确实触发、退出码阻断合并、日志和 artifact可访问随后撤销测试提交。只观察成功路径无法证明平台没有把脚本失败标成允许失败。还要验证冷缓存执行删除 node_modules缓存后从 lockfile完整安装验证依赖镜像不可用时错误明确验证并发提交时旧任务取消策略不会把旧绿色状态错误关联到新 commit。每个结果都绑定提交 SHA而不是只写分支名。流水线配置变更应像代码一样评审尤其是--ignore-scripts、镜像 tag、缓存目录和密钥权限。任何为了“先跑起来”加入的宽松参数都要有到期清理记录。结语OhMarkdown流水线从可移植 Web层开始固定 Playwright镜像、npm ci、类型检查、单文件构建和20项回归。macOS本机入口继续执行 Debug、UnitTestBuild和 diff检查Release单独验证。每层失败都保留非零退出。最关键的质量原则是准确命名状态已配置、已本地通过、已远程通过、已设备通过是四件事。鸿蒙 PC编辑器做大之前流水线首先要成为可信事实记录而不是一张装饰性的 YAML。

相关新闻

鸿蒙 PC Markdown 编辑器文件系统:Core File Kit 与安全保存

鸿蒙 PC Markdown 编辑器文件系统:Core File Kit 与安全保存

鸿蒙 PC Markdown 编辑器文件系统:Core File Kit 与安全保存 本文聚焦授权 URI、流式 UTF-8 解码、短写检测、持久化完成点、外部冲突和保存失败恢复。完整示例代码:https://gitcode.com/VON-/codex_md_oh。 不把文件系统暴露给 Web 鸿蒙 PC 上的文档…

2026/7/24 11:13:16 阅读更多 →
【Hugging Face自主AI智能体入侵事件】AI黑掉AI的周末攻防与GLM-5.2取证逆转

【Hugging Face自主AI智能体入侵事件】AI黑掉AI的周末攻防与GLM-5.2取证逆转

文章目录Hugging Face自主AI智能体入侵事件技术解析:AI黑掉AI的周末攻防与GLM-5.2取证逆转一、引言二、事件全景:一个周末,AI 黑掉了 AI2.1 披露时间线2.2 攻击者画像:基于安全研究工具包的自主智能体三、攻击链拆解:从…

2026/7/23 14:42:23 阅读更多 →
Python+Django+Scrapy构建游客行为分析可视化系统毕业设计指南

Python+Django+Scrapy构建游客行为分析可视化系统毕业设计指南

如果你正在为计算机毕业设计发愁,不知道如何选择一个既有技术含量又能体现实际应用价值的课题,那么"游客行为分析可视化系统"可能正是你需要的解决方案。这个项目不仅融合了Python全栈开发的核心技术,更重要的是它解决了旅游行业对…

2026/7/21 2:24:25 阅读更多 →

最新新闻

Ollama本地部署Qwen3大模型实战指南

Ollama本地部署Qwen3大模型实战指南

1. 项目概述最近在本地部署大模型的需求越来越旺盛,特别是像Qwen3这样的主流开源模型。Ollama作为一款轻量级的本地大模型运行工具,让普通开发者也能在自己的电脑上快速搭建大模型环境。今天我就来分享下如何从零开始部署Ollama,并运行Qwen3等…

2026/7/24 11:12:46 阅读更多 →
前端集成AI绘图的风险与防护实践

前端集成AI绘图的风险与防护实践

1. 前端集成AI绘图的风险全景图去年某电商平台上线AI试衣功能后,用户发现上传的工作证照片被自动生成了恶搞形象——这个真实案例暴露出前端调用AI绘图API时最典型的信任危机。当我们把用户数据交给一个黑箱模型时,究竟有多少潜在风险正在代码背后酝酿&a…

2026/7/24 11:12:46 阅读更多 →
VMD-RIME-LSTM模型在光伏发电预测中的应用

VMD-RIME-LSTM模型在光伏发电预测中的应用

1. 项目背景与核心价值 光伏发电预测一直是新能源领域的关键技术难题。传统预测方法往往难以应对光伏功率输出的强波动性和非线性特征,特别是在多云天气条件下,预测精度会显著下降。针对这一痛点,我们团队提出了一种融合变分模态分解&#xf…

2026/7/24 11:12:46 阅读更多 →
布局组件库:响应式栅格、卡片、分割线组件(252)

布局组件库:响应式栅格、卡片、分割线组件(252)

在鸿蒙(HarmonyOS)应用开发中,构建一套标准化的布局组件库是实现“一次开发,多端部署”的关键。结合 ArkUI 的声明式语法与响应式布局能力,以下是响应式栅格、卡片与分割线组件的完整封装方案与实战代码:一…

2026/7/24 11:12:46 阅读更多 →
基础组件库:Button、Input、Switch等原子组件封装(251)

基础组件库:Button、Input、Switch等原子组件封装(251)

一、 架构设计:原子化与样式复用在封装基础组件时,建议遵循以下原则:原子化设计:将 Button、Input 等作为不可再拆分的最小功能单元,不持有全局状态,仅通过参数配置外观和行为。样式与逻辑分离:…

2026/7/24 11:12:46 阅读更多 →
AI时代软件工程师能力进化:从编码到系统治理

AI时代软件工程师能力进化:从编码到系统治理

1. 项目概述:AI时代软件工程师的能力进化图谱2026年的技术职场将呈现怎样的图景?当我第一次看到这个标题时,脑海里浮现的是十年前移动互联网爆发期程序员们集体学习Objective-C和Android开发的场景。如今AI代码生成工具已经能自动补全整段业务…

2026/7/24 11:11:46 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻