协作流程
加入 Cattidea
Flake8 小组整体的协作将会在 Cattidea 组织中进行,以便相互之间协作,相关修改直接在 cattidea/Paddle 新建分支修改即可,无需自己 fork。
TIP
使用 cattidea 下 fork 的 Paddle 非强制,如果你更喜欢用自己 fork 好的 Paddle 的话,当然也是可以的~
环境准备
安装 Flake8
我们使用的是 flake8 4.0.1 版本
pip install flake8==4.0.1
Clone Paddle
# 直接 clone cattidea 下的 Paddle 即可
git clone https://github.com/cattidea/Paddle.git
# 切换到 Paddle 目录,之后所有操作默认在此目录执行
cd Paddle
# 设置 upstream 为 Paddle 官方 repo
git remote add upstream https://github.com/PaddlePaddle/Paddle.git
尝试下 Flake8 命令
# 直接在 Paddle 根目录尝试运行
flake8 .
# 不出意外是没有任何输出的,说明现在 flake8 全部文件都正常~
TIP
有些时候可能因为未捕获的增量出现输出,如果输出的不是你所修复的错误码的话,先忽略就好,Nyakku 会尽快修复。
安装 pre-commit
向 Paddle 贡献,pre-commit 的安装是必须的,如果不安装的话很容易会因为代码风格问题在 CI 卡住。
# 安装 pre-commit
pip install pre-commit==2.17.0
# 在 Paddle 注册 pre-commit hook
pre-commit install
开始修改代码~
这里以解决 python/paddle/fluid/tests/unittests/collective
目录全部 F401 错误码为例(#46615)
DANGER
我们的修复包含全部 Python 文件(.py
扩展名),但不包含以下文件
python/paddle/fluid/
目录下的文件,但python/paddle/fluid/tests/
目录要单独保留,因为前者包含了大量即将退场的 API 代码,因此暂不修复,而后者为单测目录,需要保留- 自动生成的文件,如
python/paddle/fluid/distributed/ps_pb2.py
,_pb2.py
后缀的文件大概率是利用 protoc 从 proto 文件自动生成的 protobuf 处理文件,因此不需要修复 - 第三方库,如
python/paddle/utils/gast/
,这些是于 #34556 引入的第三方库
创建新分支
# 创建新分支前,需要确认当前是在 develop 分支
git branch
# 确认在 develop 后新建分支
git switch -c <branch_name>
# <branch_name> 需要替换成分支名,如 F401/fix/unittests-collective
# 在 flake8 协作过程中尽可能使用上述的 <做什么>/<fix 存量问题还是修改 config>/<修改范围> 格式来命名一个分支
# 能够避免大家的分支名冲突,也可以让大家一眼知道这个分支在修改什么
修改代码
这里可能做各种各样的修改,比如 F401 任务需要
autoflake --in-place --remove-all-unused-imports --exclude=__init__.py --ignore-pass-after-docstring --recursive ./python/paddle/fluid/tests/unittests/collective/
这里利用 autoflake
将 python/paddle/fluid/tests/unittests/collective/
全部 F401 错误码都去除掉了~
之后我们就可以提交并 push 到远程仓库啦~
git commit -m 'some description of this commit'
git push origin <branch_name>
之后就可以去 cattidea/Paddle 提交 PR 啦~
不出意外你会在 repo 里看到一个弹出的 PR 提示:
此时直接点击 Compare & pull request
即可创建一个 PR。
PR 规范
PR 标题
本任务均以 [CodeStyle]
标志作为开头,如果确定是修改某一个错误码,则后面加上错误码,如 [F401]
,之后加上修改的描述。如 [CodeStyle][F401] remove unused imports in unittests/collective
如果一个 PR 尚未完成,则在最前面加上 [WIP]
标志,如 [WIP][CodeStyle][F401] remove unused imports in unittests/collective
,在完成后移除 [WIP]
标志
PR 描述
首先要遵守 Paddle PR 模板,否则无法通过 CheckPRTemplate 这一 CI 流水线。
在 Describe
部分详细描述做了什么修改,如果自动修改直接粘贴命令即可,如果手动修改应当详细说明修改原因和修改方式(更建议通过 review 的方式在手动修改的相关行上指出为什么这样修改,可以提高 reviewer 在 review 时候的效率,减少沟通成本)。
此外增加一项 Related links
,使用列表放一些链接,需包含 tracking issue、修复了的 issue 等等(修复的链接需要使用 fix
等关键字才能正确链接)。
为什么要用列表存放链接?
GitHub 对列表中的链接有更好的渲染方式,可以自动展开 PR 标题和状态,这样可以方便 reviewer 更直观地了解相关 PR 是否已经 merge,以便跳转处理。
下面是一个模板(#46615):
<!-- Demo: https://github.com/PaddlePaddle/Paddle/pull/24810 -->
### PR types
<!-- One of [ New features | Bug fixes | Function optimization | Performance optimization | Breaking changes | Others ] -->
Others
### PR changes
<!-- One of [ OPs | APIs | Docs | Others ] -->
Others
### Describe
<!-- Describe what this PR does -->
修复 `python/paddle/fluid/tests/unittests/collective/` 目录 F401 unused import 存量 python 代码
```bash
autoflake --in-place --remove-all-unused-imports --ignore-pass-after-docstring --exclude=__init__.py --recursive ./python/paddle/fluid/tests/unittests/collective/
```
### Related links
- Flake8 tracking issue: #46039
- F401 project: https://github.com/orgs/cattidea/projects/4/views/7
- 配置文件更新: #46616
- fixes https://github.com/cattidea/paddle-flake8-project/issues/28
这样一个 PR 就创建完成啦~
之后等 CI 查看是否出现问题即可~