7 Star 0 Fork 7

openEuler / patch-tracking

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MulanPSL-2.0

patch-tracking

简介

在 openEuler 发行版开发过程,需要及时更新上游社区各个软件包的最新代码,修改功能 bug 及安全问题,确保发布的 openEuler 发行版尽可能避免缺陷和漏洞。

本工具对软件包进行补丁管理,主动监控上游社区提交,自动生成补丁,并自动提交 issue 给对应的 maintainer,同时自动验证补丁基础功能,减少验证工作量支持 maintainer 快速决策。

架构

C/S架构

patch-tracking采用 C/S 架构。

服务端(patch-tracking) :负责执行补丁跟踪任务,包括:维护跟踪项,识别上游仓库分支代码变更并形成补丁文件,向 Gitee 提交 issue 及 PR,同时 patch-tracking 提供 RESTful 接口,用于对跟踪项进行增删改查操作。

客户端:即命令行工具(patch-tracking-cli),通过调用 patch-tracking 的 RESTful 接口,实现对跟踪项的增删改查操作。

核心流程

  • 补丁跟踪服务流程

主要步骤:

  1. 命令行工具写入跟踪项。
  2. 自动从跟踪项配置的上游仓库(例如Github)获取补丁文件。
  3. 创建临时分支,将获取到的补丁文件提交到临时分支。
  4. 自动提交issue到对应项目,并生成关联 issue 的 PR。

PatchTracking

  • Maintainer对提交的补丁处理流程

主要步骤:

  1. Maintainer分析临时分支中的补丁文件,判断是否合入。
  2. 执行构建,构建成功后判断是否合入PR。

Maintainer

数据结构

  • Tracking表
序号 名称 说明 类型 允许空
1 id 自增补丁跟踪项序号 int - NO
2 version_control 上游SCM的版本控制系统类型 String - NO
3 scm_repo 上游SCM仓库地址 String - NO
4 scm_branch 上游SCM跟踪分支 String - NO
5 scm_commit 上游代码最新处理过的Commit ID String - YES
6 repo 包源码在Gitee的仓库地址 String Primary NO
7 branch 包源码在Gitee的仓库分支 String Primary NO
8 enabled 是否启动跟踪 Boolean - NO
  • Issue表
序号 名称 说明 类型 允许空
1 issue issue编号 String Primary NO
2 repo 包源码在Gitee的仓库地址 String - NO
3 branch 包源码在Gitee的仓库分支 String - NO

工具部署

软件下载

Repo 源挂载正式发布地址:https://repo.openeuler.org/

rpm 包获取地址:https://build.openeuler.org/package/show/openEuler:20.09/patch-tracking

安装工具

方法1:从repo源安装

  1. 使用 dnf 挂载 repo源(需要 20.09 或更新的 repo 源,具体方法参考应用开发指南),然后执行如下指令下载以及安装 patch-tracking 及其依赖。

  2. 执行以下命令安装patch-tracking

    dnf install patch-tracking

方法2:直接使用rpm安装

  1. 首先安装相关依赖。

    dnf install python3-uWSGI python3-flask python3-Flask-SQLAlchemy python3-Flask-APScheduler python3-Flask-HTTPAuth python3-requests python3-pandas git
  2. patch-tracking-1.0.0-1.oe1.noarch.rpm为例,执行如下命令安装。

    rpm -ivh patch-tracking-1.0.0-1.oe1.noarch.rpm

生成证书

执行如下命令生成证书。

openssl req -x509 -days 3650 -subj "/CN=self-signed" \
-nodes -newkey rsa:4096 -keyout self-signed.key -out self-signed.crt

将生成的 self-signed.keyself-signed.crt 文件拷贝到 /etc/patch-tracking 目录

配置参数

在配置文件中对相应参数进行配置,配置文件路径为 /etc/patch-tracking/settings.conf

  1. 配置服务监听地址。

    LISTEN = "127.0.0.1:5001"
  2. GitHub Token, 用于访问托管在 GitHub 上游开源软件仓的仓库信息 , 生成 GitHub Token 的方法参考 Creating a personal access token

    GITHUB_ACCESS_TOKEN = ""
  3. 对于托管在gitee上的需要跟踪的仓库,配置一个有该仓库权限的gitee的token,用于提交patch文件,提交issue,提交PR等操作。

    GITEE_ACCESS_TOKEN = ""
  4. 定时扫描数据库中是否有新增或修改的跟踪项,对扫描到的跟踪项执行获取上游补丁任务,在这里配置扫描的时间间隔,数字单位是秒。

    SCAN_DB_INTERVAL = 3600
  5. 命令行工具运行过程中,POST接口需要填写进行认证的用户名和口令哈希值。

    USER = "admin"
    
    PASSWORD = ""

USER默认值为admin

执行如下指令,获取口令的哈希值,其中Test@123为设置的口令。

[root]# generate_password Test@123
pbkdf2:sha256:150000$w38eLeRm$ebb5069ba3b4dda39a698bd1d9d7f5f848af3bd93b11e0cde2b28e9e34bfbbae

口令值需要满足如下复杂度要求:

  • 长度大于等于6个字符
  • 必须包含大写字母、小写字母、数字、特殊字符(~!@#%^*-_=+)

将口令的哈希值pbkdf2:sha256:150000$w38eLeRm$ebb5069ba3b4dda39a698bd1d9d7f5f848af3bd93b11e0cde2b28e9e34bfbbae配置到PASSWORD = ""引号中。

启动补丁跟踪服务

可以使用以下两种方式启动服务。

  • 使用systemd方式。

    systemctl start patch-tracking
  • 直接执行可执行程序。

    /usr/bin/patch-tracking

工具使用

添加跟踪项

将需要跟踪的软件仓库和分支与其上游开源软件仓库与分支关联起来,可以通过以下三种方式实现。

命令行直接添加

参数含义:

--user :POST接口需要进行认证的用户名,同settings.conf中的USER参数
--password :POST接口需要进行认证的口令,为settings.conf中的PASSWORD哈希值对应的实际的口令字符串
--server :启动Patch Tracking服务的URL,例如:127.0.0.1:5001
--version_control :上游仓库版本的控制工具,支持github, git类型
--repo: 需要进行跟踪的仓库URL,不支持需要配置SSH key公私钥对才能克隆的URL
--branch :需要进行跟踪的仓库的分支名称
--scm_repo :被跟踪的上游仓库的仓库名称,--version_control为github的格式:组织/仓库;--version_control为git的格式:仓库URL,不支持需要配置SSH key公私钥对才能克隆的URL
--scm_branch: 被跟踪的上游仓库的仓库的分支
--scm_commit:指定跟踪的起始commit,选填,默认从当前最新commit开始跟踪
--enabled :是否自动跟踪该仓库

例如:

patch-tracking-cli add --server 127.0.0.1:5001 --user admin --password Test@123 --version_control github --repo https://gitee.com/testPatchTrack/testPatch1 --branch master --scm_repo BJMX/testPatch01 --scm_branch test  --scm_commit <COMMIT_SHA> --enabled true

指定文件添加

参数含义:

--server :启动Patch Tracking服务的URL,例如:127.0.0.1:5001
--user :POST接口需要进行认证的用户名,同settings.conf中的USER参数
--password :POST接口需要进行认证的口令,为settings.conf中的PASSWORD哈希值对应的实际的口令字符串
--file :yaml文件路径

将仓库、分支、版本管理工具、是否启动监控等信息写入yaml文件(例如tracking.yaml),文件路径作为--file的入参调用命令。

例如:

patch-tracking-cli add --server 127.0.0.1:5001 --user admin --password Test@123 --file tracking.yaml

yaml文件内容格式如下,冒号左边的内容不可修改,右边内容根据实际情况填写。

version_control: github
scm_repo: <SCM_REPO>
scm_branch: master
repo: <URL>
branch: master
enabled: true

version_control :上游仓库版本的控制工具,只支持github
scm_repo :被跟踪的上游仓库的仓库名称,github格式:组织/仓库;git格式:仓库URL,不支持需要配置SSH key公私钥对才能克隆的URL
scm_branch :被跟踪的上游仓库的仓库的分支
repo :需要进行跟踪的仓库URL,不支持需要配置SSH key公私钥对才能克隆的URL
branch :需要进行跟踪的仓库的分支名称
enabled :是否自动跟踪该仓库

如果指定起始的commit,yaml文件内容增加一行

scm_commit: <commit sha>

scm_commit :用户指定的跟踪仓库/分支的起始commit

指定目录添加

在指定的目录,例如test_yaml下放入多个xxx.yaml文件,执行如下命令,记录指定目录下所有yaml文件的跟踪项。

参数含义:

--user :POST接口需要进行认证的用户名,同settings.conf中的USER参数
--password :POST接口需要进行认证的口令,为settings.conf中的PASSWORD哈希值对应的实际的口令字符串
--server :启动Patch Tracking服务的URL,例如:127.0.0.1:5001
--dir :存放yaml文件目录的路径

patch-tracking-cli add --server 127.0.0.1:5001 --user admin --password Test@123 --dir /home/Work/test_yaml/

查询跟踪项

参数含义:

--server :必选参数,启动Patch Tracking服务的URL,例如:127.0.0.1:5001
--table :必选参数,需要查询的表
--repo :可选参数,需要查询的repo;如果没有该参数查询表中所有内容
--branch :可选参数,需要查询的branch

patch-tracking-cli query --server <LISTEN> --table tracking

例如:

patch-tracking-cli query --server 127.0.0.1:5001 --table tracking

查询生成的 Issue

patch-tracking-cli query --server <LISTEN> --table issue

例如:

patch-tracking-cli query --server 127.0.0.1:5001 --table issue

删除跟踪项

patch-tracking-cli delete --server SERVER --user USER --password PWD --repo REPO [--branch BRANCH]

例如:

patch-tracking-cli delete --server 127.0.0.1:5001 --user admin --password Test@123 --repo https://gitee.com/testPatchTrack/testPatch1 --branch master

可以删除指定repo和branch的单条数据;也可直接删除指定repo下所有branch的数据。

码云查看 issue 及 PR

登录Gitee上进行跟踪的软件项目,在该项目的Issues和Pull Requests页签下,可以查看到名为[patch tracking] TIME,例如 [patch tracking] 20200713101548的条目,该条目即是刚生成的补丁文件的issue和对应PR。

FAQ

  • 访问 api.github.com Connection refused 异常

patch-tracking 运行过程中,可能会出现如下报错 9月 21 22:00:10 localhost.localdomain patch-tracking[36358]: 2020-09-21 22:00:10,812 - patch_tracking.util.github_api - WARNING - HTTPSConnectionPool(host='api.github.com', port=443): Max retries exceeded with url: /user (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0xfffe19d35820>: Failed to establish a new connection: [Errno 111] Connection refused')),原因是 patch-tracking 与 GitHub API 服务之间网络访问不稳定导致。 请确保在与 GitHub API 服务之间网络稳定的环境中(如华为云香港区域)运行 patch-tracking。

木兰宽松许可证, 第2版 木兰宽松许可证, 第2版 2020年1月 http://license.coscl.org.cn/MulanPSL2 您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束: 0. 定义 “软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。 “贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。 “贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。 “法人实体”是指提交贡献的机构及其“关联实体”。 “关联实体”是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。 1. 授予版权许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。 2. 授予专利许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。 3. 无商标许可 “本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。 4. 分发限制 您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。 5. 免责声明与责任限制 “软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 6. 语言 “本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。 条款结束 如何将木兰宽松许可证,第2版,应用到您的软件 如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步: 1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字; 2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中; 3, 请将如下声明文本放入每个源文件的头部注释中。 Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details. Mulan Permissive Software License,Version 2 Mulan Permissive Software License,Version 2 (Mulan PSL v2) January 2020 http://license.coscl.org.cn/MulanPSL2 Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions: 0. Definition Software means the program and related documents which are licensed under this License and comprise all Contribution(s). Contribution means the copyrightable work licensed by a particular Contributor under this License. Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License. Legal Entity means the entity making a Contribution and all its Affiliates. Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity. 1. Grant of Copyright License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not. 2. Grant of Patent License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken. 3. No Trademark License No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4. 4. Distribution Restriction You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software. 5. Disclaimer of Warranty and Limitation of Liability THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 6. Language THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL. END OF THE TERMS AND CONDITIONS How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps: i Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner; ii Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package; iii Attach the statement to the appropriate annotated syntax at the beginning of each source file. Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details.

简介

A tool for automatically tracking upstream repository code patches 展开 收起
Python 等 2 种语言
MulanPSL-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/openeuler/patch-tracking.git
git@gitee.com:openeuler/patch-tracking.git
openeuler
patch-tracking
patch-tracking
master

搜索帮助