在 deepin-community/Repository-Manager 项目下修改 repos.yml 文件,以 PR 形式提交需创建的仓库,merge 后会自动创建对应仓库。请联系具有 deepin-community 组织 owner 权限成员审核,创建的仓库会默认添加工作流,一次新增的仓库建议不超过10个。示例 deepin-community/Repository-Manager/pull/213
repos.yml 文件字段定义:
仓库同步工作流,同步至内网gitlab
软件包构建工作流,提交PR时触发包构建检查
.obs/workflows.yml 文件替换 build-deb。将推送文件内容类似 .obs/workflows.yml@deepin-community/template-repository。
该文件中定义了三种OBS工作流:
推送工作流后的构建将由 OBS 接管,在 GitHub 当 pr 创建后,OBS工作流将被触发,成功触发 OBS 工作流后,OBS 将会创建类似下面的状态。
此时可在 OBS 查看构建进度和构建日志。等待构建结束时,对应仓库的构建结果将会返回到 pr 。点击 Details 可直接跳转到 OBS 界面查看构建详情。
三个状态从上到下分别为:
obs相关工作流文件已迁移至debian/deepin目录下
当上面所有的状态都返回到 GitHub 时说明构建没有问题,缺少任何一个都代表构建出现问题或未完成。
构建日志大家可在 https://build.deepin.com 查询。在 All Projects 中找到 deepin:CI 开头加上自己 PR 信息的 Project。比如 deepin:CI:deepin-community:inltool-debian:PR-1,如果使用了 topic(feat: add topic · linuxdeepin/open-build-service@2702a73,由 wineee 提供该patch)将会是 deepin:CI:topic:{topic},topic 触发机制与之前保持一致,并且使用相同 topic 的仓库都会在该 Project 下。
1). All Projects 界面找到 deepin:CI:deepin-community:intltool-debian:PR-1
2). 点开 deepin:CI:deepin-community:intltool-debian:PR-1 后的界面,此处未使用 topic,所以只有 intltool-debian 一个 Package。如果使用topic,相同 topic 的 pr 会在同一个Project下,此处会有多个 Package,构建顺序会由 OBS 根据依赖情况进行调整。
小规模使用OBS工作流的 pr 有:
想了解关于 OBS 更多的使用请参考OBS用户手册
在使用过程中有遇到任何问题都可以到 deepin-cicd 群中反馈。
ps: deepin OBS 实例目前由于构建资源问题暂不开放注册。
obs构建产物获取:
以deepin-community:fstrcmp:PR-1为例,在project主页面 -> Repositories -> deepin_develop -> Go to download repository ,通过以上路径找到仓库地址。
仓库使用: echo "deb [trusted=yes] https://ci.deepin.com/repo/obs/deepin:/CI:/deepin-community:/fstrcmp:/PR-1/deepin_develop/ ./" > /etc/apt/sources.list
tag创建工作流,PR修改debian/changelog时将deb版本号自动创建成Tag,:会被替换成% ~会被替换成_ ,DISTRIBUTION为UNRELEASED时不会触发tag的创建
tag创建完成后自动触发构建任务,构建完成的deb会合入unstable仓库,一次性引入多个包时需注意将其依赖通过Tag创建工作流合入unstable仓库以免后续依赖包无法构建,仓库地址说明请参见仓库流转规范
权限管控,Pull Request 机器人.
CLA 检查,验证开发者是否签署 CLA,同时这也是提交 PR 必须签署的协议。(注:deepin-community 下的上游软件包维护仓库大多不需要签署 CLA)
通过软件包更新流程将软件包提交testing仓库,测试团队定期验证testing仓库状态,持续修复问题待到符合发布标准后定期合入主仓库发布。详情请参见仓库流转规范。示例Repository-Integration/pull/72
在Repository-Integration 提交PR
修改intergration.yml文件提交填写集成的软件包,以及版本
集成软件包的名称必须为deepin-community下的正确的仓库名,一次可集成多个软件包(推荐是不超过20个),请按照格式填完写yml文件
字段说明
- message # 集成说明,简要说明 会作为看板issues的标题
- repo # 软件包名称
- tag # tag版本
- tagsha: "3adc55ff5a3ef9751026cc598aeed88c4a3d46e6" # commit哈希
- order #废弃字段 默认为0即可
ps: tag可为空,考虑可能存在当前tag无法进行构建或者验证不通过需要重新提交commit修复 此时为一个commit打tag有些不太合适 因此该字段为空时不强制检查tag,打包时使用的版本为commit哈希里changelog的版本号,如无此特殊情况还请按规范填写对应tag,tag不为空时CI会效验tag是否存在
提交PR
PR提交后相关工作流开始执行,检查结构会由机器人在当前PR下添加评论,有些项目需要进行管理员进行revie进阅读相关提示, 工作流完成后可以在OBS平台查看相关的project,具体为test-intergration-pr-50命名形式,可以主页检索,自行进行相关验证
信息记录
构建通过后CI工作流会在linuxdeepin组织下创建issue关联到看板上,相关issues链接也会在所提交的集成PR里commented下备注,请相关提交者在此issues下备注更新说明、测试建议、影响范围等问题。相关测试人员也会在此介入。
集成的历史信息记录在records.yml文件中
集成完毕
集成完毕后PR会被关闭,所提交的软件包会自动构建后合入testing仓库 中,后续按仓库流转规范合入主仓库中, 仓库介绍详情请参阅 仓库流转规范, v23-集成管理看板上相关的issues对应的状态会就改变,请关注相关该看板
TODO: