如何用 GitHub Actions 写出高质量的 Python代码?
这篇博文将与你分享如何在Python项目中搭建起GitHub Actions工作流,以确保你写出的代码既优雅,又符合所有最佳实践,且已经过完备测试。
以下为译文:
如何确保我的代码是高质量的? 如何确保我的代码风格与官方指南PEP 8一致? 以及如何检查代码的测试是否完备?
如何集成CodeFactor——一个可以在你的代码中发现潜在bug的工具;
如何设置wemake-python-styleguide GitHub Actions工作流(用以检查你的代码是否符合PEP 8);
如何运行单元测试并通过Codecov报告覆盖范围。
在接下来的步骤中,我默认你已经在GitHub上有一个Python项目了。如果你没有的话,就请先创建一个吧。
name: Python Pull Request Workflow
on: [pull_request]
jobs:
qa:
name: Quality check
ubuntu-18.04 :
steps:
uses: actions/checkout@v1
name: Set up Python
uses: actions/setup-python@master
with:
3.8 :
name: Run unit tests
run: |
pip install pytest
pytest
name: Wemake Python Stylguide
uses: wemake-services/[email protected]
true :
with:
reporter: 'github-pr-review'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
actions / checkout @ v1——必须让GitHub Actions工作流知道它可以使用库中的代码
使用actions/setup-python@master的Set up Python配置好一个Python版本,在本例中为使用的是python-version: 3.8。
Run unit tests将运行位于项目中的所有单元测试。为此,我使用的是pytest,首先需要安装pip install pytest,以便可以运行下一个命令pytest。如果这一步上有任何一个测试失败,则下一个测试将不会运行。
Wemake Python Styleguide的这一个步骤是我们最感兴趣的。它使用wemake-services/[email protected]操作,这是工作流的基本组成单位。你可以在GitHub Marketplace上找到它们(https://github.com/marketplace?type=actions),就像上述提到的一样(https://github.com/marketplace/actions/wemake-python-styleguide)。将此代码配置为(with 语句)以使用github-pr-review reporter,就可以在code review中启用内联注释了。在官方网站上可以找到更多受支持的reporter选项。最后,此工作流需要传递你的GIHUB_TOKEN,这就是添加env语句的原因。
为了测试它的运行,你需要创建一个新的branch,提交一些更改并将其推送到GitHub。然后创建一个pull request,就能触发此工作流了。要检查它,请转到项目中的“Actions”选项,如果一切顺利则应如下图所示:
name: Python Master Workflow
on:
push:
branches:
'master'
jobs:
codecov:
name: Codecov Workflow
ubuntu-18.04 :
steps:
uses: actions/checkout@v1
name: Set up Python
uses: actions/setup-python@master
with:
3.8 :
name: Generate coverage report
run: |
pip install pytest
pip install pytest-cov
pytest --cov=./ --cov-report=xml
name: Upload coverage to Codecov
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./coverage.xml
flags: unittests
uses: actions/checkout@v1——这个步骤,跟上次一样,也只是为了告诉GitHub Actions我们要使用当前库里的文件
uses: actions/setup-python@master——这个步骤之前也提到过,这里我们设置的Python版本是3.8
然后是一个新步骤,负责生成覆盖率报告(Generate coverage report);这包含一系列脚本,涵盖了安装pytests(pip install pytest),pytest-cov(pip install pytest-cov)和运行实际测试(pytest-cov =./-cov-report = xml),
最终,生成的测试覆盖率报告可以上传到Codecov(Upload coverage to Codecov)。在这里我们使用uses: codecov / codecov-action @ v1(https://github.com/marketplace/actions/codecov)。在其中,我们提供3个参数:token: ${{ secrets.CODECOV_TOKEN }},取值自我们放置在GitHub Secrets保管库的文件,(之前的步骤生成的)测试覆盖率报告的位置是file:./coverage.xml,而flags:unittests是对我们的单元测试进行分组的标志。
要进行测试,你需要将一些提交push到master branch。这可以直接在你的本地库中完成,也可以通过合并一个pull request完成。如果一切顺利,那页面应该是像这样的:
今日福利:评论区留言入选,都可获得价值299元的「2020 AI开发者万人大会」在线直播门票一张。 快来动动手指,写下你想说的话吧
☞
☞
点击阅读原文,查看详情!