name: Python Pull Request Workflowon: [pull_request]jobs: qa: name: Quality check runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 - name: Set up Python uses: actions/setup-python@master with: python-version: 3.8 - name: Run unit tests run: | pip install pytest pytest - name: Wemake Python Stylguide uses: wemake-services/wemake-python-styleguide@0.13.4 continue-on-error: true with: reporter: 'github-pr-review' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 这是一个非常简单的工作流,全名为 Python Pull Request Workflow。每个 pull request 都能触发它,因此无论何时创建新的或更新现有的作业,都会运行。
上面的工作流仅包含一个 qa 工作,分为 4 个步骤:
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/wemake-python-styleguide@0.13.4 操作,这是工作流的基本组成单位。你可以在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”选项,如果一切顺利则应如下图所示:
如果单击“Run unit tests”,则在 console log 中,你将看到测试报告:
如果返回到 Pull request,则应该看到添加的注释。就像这里那样:
https://github.com/wkrzywiec/algorithms-python/pull/6
Codecov
最后,我们想要一份涵盖范围的测试报告。为此,我们再次使用 pytest 库,它将为我们生成报告,然后我们将其上传到 Codecov,后续的可视化就由它完成。 在定义一个新的工作流之前,你首先需要先创建一个 Codecov 账号。因此,你需要先单击右上角的“Sign Up”按钮转到https://codecov.io。
然后选择 GitHub 注册。
然后,你将被带到 GitHub 项目的控制面板,然后需要单击 Add new repository 按钮。
一个列表将出现,包含所有的项目,你可以从中选择一个来分析。
然后会出现一个带有令牌(token)的页面。把它保存下来,因为下一步中会用到。 现在回到 GitHub 的项目上,然后单击其“Settings”按钮。单击“Secrets”,然后添加一个新的 secret,这时就可以用上你在 Codecov 网站上生成的令牌了。要完成这一步,单击 Add secret。
好的,一切都已设置好了,接下来就可以继续定义 GitHub 工作流了。
name: Python Master Workflowon: push: branches: - 'master'jobs: codecov: name: Codecov Workflow runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v1 - name: Set up Python uses: actions/setup-python@master with: python-version: 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
再次,我们创建一个单独的文件,命名为 workflow-master.yaml,因为这次我们不想在创建 pull request 时触发此工作流。这个工作流仅当在 master branch 上推送了新的提交时才会运行。
在 jobs 部分中,只有一个名为 codecov 的作业,包括四步:
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 完成。如果一切顺利,那页面应该是像这样的:
现在,如果你回到 Codecov,回到你的项目控制面板,你应该能看到类似的输出:
好的,我们做到了!(Cheers!)
在结尾之前,我想告诉你的是,能帮你写出更高质量代码的工具并非只有 CodeFactor,Codecov或wemake-python-styleguide。实际上,这样的工具有很多,例如 SonarCloud,Pylint,Coveralls,DeepSource 等等。其中一些可以在 GitHub Marketplace 上找到,如果你不喜欢我提议的这几个工具,那么最好从那上面的地方为起点开始寻找。
结论
希望通过这篇博文,你可以了解到,要如何设置 GitHub 库来确保写出高质量的代码。有了这样的工具集合,你可以找到所有的弱点和 bug,但要记住,不是每个 bug 和每个问题都值得去花心思。有时候,最好是更专注于实际工作,而不是整理那些臭代码库。(wink)
原文:https://medium.com/@wkrzywiec/how-to-write-good-quality-python-code-with-github-actions-2f635a2ab09a
作者:Wojciech Krzywiec,Java开发工程师,DevOps新手,终生学习者。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!