组件开发方案 #372
ZCShou
started this conversation in
Code of Conduct
组件开发方案
#372
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
组件开发方案
本文档是 组件开发及管理规范 的配套操作指南,专注于组件开发的具体执行方案。关于开发规范、分支规划、版本号规范等,请参考 组件开发及管理规范。
一、方案概述
1.1 背景与目的
ArceOS 采用组件化架构设计,组件是功能相对独立且可独立测试的实体。为了规范组件的开发、管理和发布流程,特制定本协同开发方案。
1.2 仓库架构
我们的组件实际分布在各个独立的子仓库中,每个组件都是一个独立的 Git 仓库。同时,我们提供了 axcrates 仓库作为统一的管理入口,通过 Git Submodule 关联所有组件。因此,有两种开发方式可选,来处理组件的开发过程:
1.3 架构关系图
1.4 核心开发原则
基于 组件开发及管理规范,我们遵循以下核心原则:
version.sh批量管理所有组件版本号.gitmodules+ submodulescripts/check.sh本地检查cargo doc生成文档1.5 分支与版本对应关系
在 组件开发及管理规范 中我们规定了组件仓库分支与版本必须强制对应,以便统一管理!
二、开发环境准备
2.1 配置 Git 环境
2.2 安装 Rust 工具链
三、开发工作流详解
3.1 工作流选择决策树
3.2 独立子组件开发
对于每个独立的组件,我们已经在其对应的仓库中配备了完整的 CI/CD 以及本地测试脚本文件。当需要修改只修改单个组件,不涉及其他组件的 API 变更时,可以直接在独立子组件仓库中开发及测试。
3.2.1 克隆子仓库
3.2.2 创建功能分支
所有子仓库的
main或master分支受保护,无法直接推送代码。所有开发必须在功能分支上进行,通过 Pull Request 合并。3.2.3 修改代码
3.2.4 代码检查
使用
scripts/check.sh检查代码规范:检查项目:
cargo fmt)cargo build)cargo clippy)cargo doc)3.2.5 本地测试
单元测试(可选):
**集成测试(必须,具体测试内容参见:https://github.com/orgs/arceos-hypervisor/discussions/217)**:
# 使用 test.sh 执行集成测试 bash scripts/test.sh3.2.6 提交变更
3.2.7 创建 Pull Request
在当前组件仓库页面点击 "Compare & pull request" 创建 PR:
推送到 dev 分支(预览版迭代):
推送到 main 分支(稳定版):
3.2.8 通知主仓库更新
3.3 多组件协同开发
多组件协同开发适用于需要同时修改多个组件,或者跨组件 API 变更等情况。为此,我们创建了 https://github.com/arceos-hypervisor/axcrates 统一仓库,通过 SUBMODULE 来管理所有组件,并同时提供了一系列协同开发脚本,可以统一管理所有组件,无需进入每个组件目录执行 git 命令。
checkout.shbash scripts/checkout.sh all devcheck.shbash scripts/check.sh allcommit.shbash scripts/commit.sh axvcpu "feat: xxx"push.shbash scripts/push.sh allsync.shbash scripts/sync.sh all devversion.shbash scripts/version.sh all 0.2.0tag.shbash scripts/tag.sh all v0.2.03.3.1 获取 axcrates 仓库
3.3.2 批量切换组件分支
使用
scripts/checkout.sh批量管理组件分支:脚本功能:
3.3.3 确定修改范围
3.3.4 修改组件代码
开发阶段进入各组件目录修改代码。此时所有组件已在3.3.2 批量切换组件分支 切换了分支,开发流程与 3.2 独立子组件开发类似,但是可使不用在组件中直接提交代码,而是在编辑多个组件之后,统一使用
check.sh、commit.sh等脚本批量处理多个组件。3.3.5 批量代码检查
开发过程中或完成后,使用
scripts/check.sh批量检查代码质量:检查项目:
cargo fmt)cargo build)cargo clippy)cargo doc)3.3.6 批量推送组件变更
开发完成后,使用
scripts/push.sh批量推送各组件的变更到远程:脚本功能:
3.3.7 更新 submodule 引用
使用
scripts/sync.sh批量同步组件到远程最新,并更新主仓库引用:脚本功能:
四、版本发布流程
版本发布必须通过 axcrates 仓库统一处理,以确保所有组件版本号保持一致。所有组件使用相同版本号,便于管理和追踪,确保组件间的依赖关系正确,并且所有组件同时发布,避免版本混乱。
0.2.0-preview.10.2.04.1 发布流程概述
基于 三、开发工作流详解,版本发布使用以下脚本协同完成:
4.2 预览版发布流程
根据 组件开发及管理规范 的要求,预览版只允许在 dev 上进行发布,因此,我们需要将所有修改合并到 dev 分支后,然后按照如下流程发布预览版!
4.2.1 统一升级版本号
在修改确保无误后,就可以通过
scripts/version.sh统一升级组件的版本号了。4.2.2 提交并推送版本变更
4.2.3 创建标签
# 预览版可以选择不打标签,或打预览标签 bash scripts/tag.sh all v0.2.0-preview.14.2.4 推送标签
# 预览版可以选择不打标签,或打预览标签 bash scripts/tag.sh all v0.2.0-preview.14.2.5 发布到 crates.io
4.3 稳定版发布流程
根据 组件开发及管理规范 的要求,稳定版只允许在 mian(部分组件仓库使用 master 分支) 上进行发布,因此,我们需要将所有修改合并到 master 分支后,然后按照如下流程发布预览版!
4.3.1 升级到稳定版版本号
在修改确保无误后,就可以通过 scripts/version.sh 统一升级组件的版本号了。
4.3.2 提交到 main 分支
4.3.3 创建 PR
在组件仓库中创建从自己使用的分支到主分支的 PR:target: main ← release-v0.2.0
4.3.4 合并 PR 后打标签
等待所有 PR 合并后:
4.3.5 发布到 crates.io
本文档由 ArceOS Hypervisor 团队维护
Beta Was this translation helpful? Give feedback.
All reactions