如何用 GitHub Actions 寫出高質量的 Python代碼?

這篇博文將與你分享如何在Python項目中搭建起GitHub Actions工作流,以確保你寫出的代碼既優雅,又符合所有最佳實踐,且已經過完備測試。

如何用 GitHub Actions 写出高质量的 Python代码?

作者 | Wojciech Krzywiec

譯者 | 香檳超新星,責編 | 郭芮

頭圖 | CSDN 下載自東方 IC

出品 | CSDN(ID:CSDNnews)

最近,我決定開始學習Python了。如今它已位列最流行的編程語言之一,因此做出嘗試一下的決定並沒有什麼困難的。尤其是我對自己的算法水平仍然不滿意,所以我希望能夠一石二鳥——學習Python,並用一些算法題目來練手。

因此,我在GitHub上創建了Algorithms Python項目,我會在上面發佈一些自己覺得有趣的問題的答案。

但是在練習過程中,我遇到了一個問題。

如何確保我的代碼是高質量的?

如何確保我的代碼風格與官方指南PEP 8一致?

以及如何檢查代碼的測試是否完備?

其實是有解決方案的!那就是 GitHub Actions!

但是我想實現的究竟是什麼?

我將向你展示:

  • 如何集成CodeFactor——一個可以在你的代碼中發現潛在bug的工具;

  • 如何設置wemake-python-styleguide GitHub Actions工作流(用以檢查你的代碼是否符合PEP 8);

  • 如何運行單元測試並通過Codecov報告覆蓋範圍。

在接下來的步驟中,我默認你已經在GitHub上有一個Python項目了。如果你沒有的話,就請先創建一個吧。

如何用 GitHub Actions 写出高质量的 Python代码?

CodeFactor

這是一個非常簡潔的工具,可以用來檢查你的代碼質量。它可以免費用於所有的公共庫,以及1個私有庫。

首先,請先去官方網站www.codefactor.io,並通過GitHub登錄,創建一個新賬號。(要完成此操作的)圖標應該是位於主頁的右上角。

如何用 GitHub Actions 写出高质量的 Python代码?

註冊後,單擊右上角的加號,將1個庫添加到你的控制面板。

從列表中選中你要分析的庫,然後單擊頁面底部的import。

如何用 GitHub Actions 写出高质量的 Python代码?

然後就好啦!現在你應該已經轉到一個包含著已發現的所有問題的列表的控制面板了。太棒了!

如何用 GitHub Actions 写出高质量的 Python代码?
如何用 GitHub Actions 写出高质量的 Python代码?

wemake-python-styleguide

讓我們接著講第二個工具。這個工具能夠檢查代碼是否符合官方Python風格指南。

這次我們不用在任何Web服務中創建新賬號。我們將搭建起一個GitHub Actions工作流,每當一個pull request被創建出來時,該工作流都會被觸發,並會在發現潛在問題時添加評論。

給那些還不瞭解GitHub Actions的人介紹一下:它是GitHub上的一項新功能,可以實現許多任務的自動化,通常被視為CI / CD工具(Continuous Integration/Continuous Deployment,持續集成/持續部署),能夠進行測試,進行質量檢查,然後部署。但這還不是它的唯一目標。

開始時,首先在項目的根文件夾中創建一個.github / workflows文件夾,你的工作流的定義將會被放在這裡。

然後創建一個新文件,命名為workflow-pr.yaml。

<code>name: Python Pull Request Workflow/<code><code>on: [pull_request]/<code><code>jobs:/<code>
<code> qa:/<code><code> name: Quality check/<code><code> runs-on: ubuntu-18.04/<code><code> steps:/<code><code> - uses: actions/checkout@v1/<code><code> - name: Set up Python/<code><code> uses: actions/setup-python@master/<code><code> with:/<code><code> python-version: 3.8/<code><code> - name: Run unit tests/<code><code> run: |/<code><code> pip install pytest/<code><code> pytest/<code><code> - name: Wemake Python Stylguide/<code><code> uses: wemake-services/[email protected]/<code><code> continue-on-error: true/<code><code> with:/<code><code> reporter: 'github-pr-review'/<code><code> env:/<code><code> GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}/<code>

這是一個非常簡單的工作流,全名為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/[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”選項,如果一切順利則應如下圖所示:

如何用 GitHub Actions 写出高质量的 Python代码?

如果單擊“Run unit tests”,則在console log中,你將看到測試報告:

如何用 GitHub Actions 写出高质量的 Python代码?

如果返回到Pull request,則應該看到添加的註釋。就像這裡那樣:https://github.com/wkrzywiec/algorithms-python/pull/6

如何用 GitHub Actions 写出高质量的 Python代码?
如何用 GitHub Actions 写出高质量的 Python代码?

Codecov

最後,我們想要一份涵蓋範圍的測試報告。為此,我們再次使用pytest庫,它將為我們生成報告,然後我們將其上傳到Codecov,後續的可視化就由它完成。

在定義一個新的工作流之前,你首先需要先創建一個Codecov賬號。因此,你需要先單擊右上角的“Sign Up”按鈕轉到https://codecov.io。

如何用 GitHub Actions 写出高质量的 Python代码?

然後選擇GitHub註冊。

如何用 GitHub Actions 写出高质量的 Python代码?

然後,你將被帶到GitHub項目的控制面板,然後需要單擊Add new repository按鈕。

如何用 GitHub Actions 写出高质量的 Python代码?

一個列表將出現,包含所有的項目,你可以從中選擇一個來分析。

如何用 GitHub Actions 写出高质量的 Python代码?

然後會出現一個帶有令牌(token)的頁面。把它保存下來,因為下一步中會用到。

如何用 GitHub Actions 写出高质量的 Python代码?

現在回到GitHub的項目上,然後單擊其“Settings”按鈕。單擊“Secrets”,然後添加一個新的secret,這時就可以用上你在Codecov網站上生成的令牌了。要完成這一步,單擊Add secret。

如何用 GitHub Actions 写出高质量的 Python代码?

好的,一切都已設置好了,接下來就可以繼續定義GitHub工作流了。

<code>name: Python Master Workflow/<code><code>on:/<code><code> push:/<code><code> branches:/<code><code> - 'master'/<code><code>jobs:/<code><code> codecov:/<code><code> name: Codecov Workflow/<code><code> runs-on: ubuntu-18.04/<code><code> steps:/<code><code> - uses: actions/checkout@v1/<code><code> - name: Set up Python/<code><code> uses: actions/setup-python@master/<code><code> with:/<code><code> python-version: 3.8/<code><code> - name: Generate coverage report/<code><code> run: |/<code><code> pip install pytest/<code><code> pip install pytest-cov/<code><code> pytest --cov=./ --cov-report=xml/<code><code> - name: Upload coverage to Codecov/<code><code> uses: codecov/codecov-action@v1/<code><code> with:/<code><code> token: ${{ secrets.CODECOV_TOKEN }}/<code><code> file: ./coverage.xml/<code><code> flags: unittests/<code>

再次,我們創建一個單獨的文件,命名為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完成。如果一切順利,那頁面應該是像這樣的:

如何用 GitHub Actions 写出高质量的 Python代码?

現在,如果你回到Codecov,回到你的項目控制面板,你應該能看到類似的輸出:

如何用 GitHub Actions 写出高质量的 Python代码?

好的,我們做到了!(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新手,終生學習者。

本文為CSDN翻譯文章,轉載請註明出處。


分享到:


相關文章: