如何用 GitHub Actions 寫出高質(zhì)量的 Python代碼?
“
閱讀本文大概需要 13 分鐘。
這篇博文將與你分享如何在 Python 項(xiàng)目中搭建起 GitHub Actions 工作流,以確保你寫出的代碼既優(yōu)雅,又符合所有最佳實(shí)踐,且已經(jīng)過完備測試。

作者 |?Wojciech Krzywiec
譯者 |?香檳超新星,責(zé)編 | 郭芮
出品 | CSDN(ID:CSDNnews)
以下為譯文:
如何確保我的代碼是高質(zhì)量的?如何確保我的代碼風(fēng)格與官方指南PEP 8一致?以及如何檢查代碼的測試是否完備?
如何集成 CodeFactor——一個可以在你的代碼中發(fā)現(xiàn)潛在bug的工具;
如何設(shè)置 wemake-python-styleguide GitHub Actions 工作流(用以檢查你的代碼是否符合 PEP 8);
如何運(yùn)行單元測試并通過 Codecov 報(bào)告覆蓋范圍。
在接下來的步驟中,我默認(rèn)你已經(jīng)在 GitHub 上有一個 Python 項(xiàng)目了。如果你沒有的話,就請先創(chuàng)建一個吧。
注冊后,單擊右上角的加號,將1 個庫添加到你的控制面板。從列表中選中你要分析的庫,然后單擊頁面底部的 import。
然后就好啦!現(xiàn)在你應(yīng)該已經(jīng)轉(zhuǎn)到一個包含著已發(fā)現(xiàn)的所有問題的列表的控制面板了。太棒了!
讓我們接著講第二個工具。這個工具能夠檢查代碼是否符合官方 Python ?風(fēng)格指南。這次我們不用在任何 Web 服務(wù)中創(chuàng)建新賬號。我們將搭建起一個 GitHub Actions 工作流,每當(dāng)一個 pull request 被創(chuàng)建出來時,該工作流都會被觸發(fā),并會在發(fā)現(xiàn)潛在問題時添加評論。給那些還不了解 GitHub Actions 的人介紹一下:它是 GitHub 上的一項(xiàng)新功能,可以實(shí)現(xiàn)許多任務(wù)的自動化,通常被視為CI / CD工具(Continuous Integration/Continuous Deployment,持續(xù)集成/持續(xù)部署),能夠進(jìn)行測試,進(jìn)行質(zhì)量檢查,然后部署。但這還不是它的唯一目標(biāo)。開始時,首先在項(xiàng)目的根文件夾中創(chuàng)建一個.github / workflows 文件夾,你的工作流的定義將會被放在這里。然后創(chuàng)建一個新文件,命名為 workflow-pr.yaml。
這是一個非常簡單的工作流,全名為 Python Pull Request Workflow。每個 pull request 都能觸發(fā)它,因此無論何時創(chuàng)建新的或更新現(xiàn)有的作業(yè),都會運(yùn)行。上面的工作流僅包含一個 qa 工作,分為 4 個步驟:name: Python Pull Request Workflowon: [pull_request]jobs:qa:name: Quality check: ubuntu-18.04steps:uses: actions/checkout@v1name: Set up Pythonuses: actions/setup-python@masterwith:: 3.8name: Run unit testsrun: |pip install pytestpytestname: Wemake Python Stylguideuses: wemake-services/[email protected]: truewith: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 將運(yùn)行位于項(xiàng)目中的所有單元測試。為此,我使用的是 pytest,首先需要安裝 pip install pytest,以便可以運(yùn)行下一個命令 pytest。如果這一步上有任何一個測試失敗,則下一個測試將不會運(yùn)行。
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 中啟用內(nèi)聯(lián)注釋了。在官方網(wǎng)站上可以找到更多受支持的 reporter 選項(xiàng)。最后,此工作流需要傳遞你的 GIHUB_TOKEN,這就是添加 env 語句的原因。
為了測試它的運(yùn)行,你需要創(chuàng)建一個新的 branch,提交一些更改并將其推送到 GitHub。然后創(chuàng)建一個? pull request,就能觸發(fā)此工作流了。要檢查它,請轉(zhuǎn)到項(xiàng)目中的“Actions”選項(xiàng),如果一切順利則應(yīng)如下圖所示:
如果單擊“Run unit tests”,則在 console log 中,你將看到測試報(bào)告:
如果返回到 Pull request,則應(yīng)該看到添加的注釋。就像這里那樣:https://github.com/wkrzywiec/algorithms-python/pull/6
在定義一個新的工作流之前,你首先需要先創(chuàng)建一個 Codecov 賬號。因此,你需要先單擊右上角的“Sign Up”按鈕轉(zhuǎn)到https://codecov.io。
然后選擇 GitHub 注冊。

然后會出現(xiàn)一個帶有令牌(token)的頁面。把它保存下來,因?yàn)橄乱徊街袝玫健?/span>
現(xiàn)在回到 GitHub 的項(xiàng)目上,然后單擊其“Settings”按鈕。單擊“Secrets”,然后添加一個新的 secret,這時就可以用上你在? Codecov 網(wǎng)站上生成的令牌了。要完成這一步,單擊 Add secret。
好的,一切都已設(shè)置好了,接下來就可以繼續(xù)定義 GitHub 工作流了。再次,我們創(chuàng)建一個單獨(dú)的文件,命名為 workflow-master.yaml,因?yàn)檫@次我們不想在創(chuàng)建 pull request 時觸發(fā)此工作流。這個工作流僅當(dāng)在 master branch 上推送了新的提交時才會運(yùn)行。在 jobs 部分中,只有一個名為 codecov 的作業(yè),包括四步:name: Python Master Workflowon:push:branches:'master'jobs:codecov:name: Codecov Workflow: ubuntu-18.04steps:uses: actions/checkout@v1name: Set up Pythonuses: actions/setup-python@masterwith:: 3.8name: Generate coverage reportrun: |pip install pytestpip install pytest-covpytest --cov=./ --cov-report=xmlname: Upload coverage to Codecovuses: codecov/codecov-action@v1with:token: ${{ secrets.CODECOV_TOKEN }}file: ./coverage.xmlflags: unittests
uses: actions/checkout@v1——這個步驟,跟上次一樣,也只是為了告訴 GitHub Actions 我們要使用當(dāng)前庫里的文件
uses: actions/setup-python@master——這個步驟之前也提到過,這里我們設(shè)置的 Python?版本是 3.8
然后是一個新步驟,負(fù)責(zé)生成覆蓋率報(bào)告(Generate coverage report);這包含一系列腳本,涵蓋了安裝 pytests(pip install pytest),pytest-cov(pip install pytest-cov)和運(yùn)行實(shí)際測試(pytest-cov =./-cov-report = xml),
最終,生成的測試覆蓋率報(bào)告可以上傳到 Codecov(Upload coverage to Codecov)。在這里我們使用 uses: codecov / codecov-action @ v1(https://github.com/marketplace/actions/codecov)。在其中,我們提供 3 個參數(shù):token: ${{ secrets.CODECOV_TOKEN }},取值自我們放置在 GitHub Secrets 保管庫的文件,(之前的步驟生成的)測試覆蓋率報(bào)告的位置是file:./coverage.xml,而 flags:unittests 是對我們的單元測試進(jìn)行分組的標(biāo)志。
要進(jìn)行測試,你需要將一些提交 push 到 master branch。這可以直接在你的本地庫中完成,也可以通過合并一個 pull request 完成。如果一切順利,那頁面應(yīng)該是像這樣的:
現(xiàn)在,如果你回到 Codecov,回到你的項(xiàng)目控制面板,你應(yīng)該能看到類似的輸出:
希望通過這篇博文,你可以了解到,要如何設(shè)置 GitHub 庫來確保寫出高質(zhì)量的代碼。有了這樣的工具集合,你可以找到所有的弱點(diǎn)和 bug,但要記住,不是每個 bug 和每個問題都值得去花心思。有時候,最好是更專注于實(shí)際工作,而不是整理那些臭代碼庫。(wink)原文:https://medium.com/@wkrzywiec/how-to-write-good-quality-python-code-with-github-actions-2f635a2ab09a作者:Wojciech Krzywiec,Java開發(fā)工程師,DevOps新手,終生學(xué)習(xí)者。
崔慶才
靜覓博客博主,《Python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)》作者
隱形字
個人公眾號:進(jìn)擊的Coder


長按識別二維碼關(guān)注
推薦閱讀
1
孫楊一夜之間風(fēng)評變差,從數(shù)據(jù)上看是真的嗎?
2
3
如何實(shí)現(xiàn)本地代碼和遠(yuǎn)程的實(shí)時同步
4??
如何用一條命令將網(wǎng)頁轉(zhuǎn)成電腦 App
