<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何用 GitHub Actions 寫出高質(zhì)量的 Python代碼?

          共 5556字,需瀏覽 12分鐘

           ·

          2020-04-02 23:21

          閱讀本文大概需要 13 分鐘。


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

          25eec8b92f5977b6a96c03f4c6b351b7.webp


          作者 |?Wojciech Krzywiec

          譯者 |?香檳超新星,責(zé)編 | 郭芮

          出品 | CSDN(ID:CSDNnews)


          以下為譯文:


          最近,我決定開始學(xué)習(xí) Python 了。如今它已位列最流行的編程語言之一,因此做出嘗試一下的決定并沒有什么困難的。尤其是我對自己的算法水平仍然不滿意,所以我希望能夠一石二鳥——學(xué)習(xí) Python,并用一些算法題目來練手。因此,我在 GitHub 上創(chuàng)建了 Algorithms Python 項(xiàng)目,我會在上面發(fā)布一些自己覺得有趣的問題的答案。但是在練習(xí)過程中,我遇到了一個問題。


          如何確保我的代碼是高質(zhì)量的?如何確保我的代碼風(fēng)格與官方指南PEP 8一致?以及如何檢查代碼的測試是否完備?


          其實(shí)是有解決方案的!那就是 GitHub Actions!但是我想實(shí)現(xiàn)的究竟是什么?我將向你展示:


          • 如何集成 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)建一個吧。


          CodeFactor這是一個非常簡潔的工具,可以用來檢查你的代碼質(zhì)量。它可以免費(fèi)用于所有的公共庫,以及1個私有庫。首先,請先去官方網(wǎng)站 www.codefactor.io,并通過 GitHub 登錄,創(chuàng)建一個新賬號。(要完成此操作的)圖標(biāo)應(yīng)該是位于主頁的右上角。a3365abcbb93234ec0872c62d43a72cb.webp注冊后,單擊右上角的加號,將1 個庫添加到你的控制面板。從列表中選中你要分析的庫,然后單擊頁面底部的 import。e98e3d7b73df764fc4256364253e2911.webp然后就好啦!現(xiàn)在你應(yīng)該已經(jīng)轉(zhuǎn)到一個包含著已發(fā)現(xiàn)的所有問題的列表的控制面板了。太棒了!


          6f2656544c0cf45618f66d50e71c59ea.webp





          wemake-python-styleguide
          讓我們接著講第二個工具。這個工具能夠檢查代碼是否符合官方 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。
          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/[email protected] continue-on-error: true with: reporter: 'github-pr-review' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          這是一個非常簡單的工作流,全名為 Python Pull Request Workflow。每個 pull request 都能觸發(fā)它,因此無論何時創(chuàng)建新的或更新現(xiàn)有的作業(yè),都會運(yùn)行。上面的工作流僅包含一個 qa 工作,分為 4 個步驟:


          • 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)如下圖所示:


          890e7bac41dd9e65cf373e61a7b70360.webp如果單擊“Run unit tests”,則在 console log 中,你將看到測試報(bào)告:c34e196986d3f61e375ced6e3632b76d.webp如果返回到 Pull request,則應(yīng)該看到添加的注釋。就像這里那樣:https://github.com/wkrzywiec/algorithms-python/pull/677ab39174c81cb54050c7f638dc83d14.webp



          Codecov最后,我們想要一份涵蓋范圍的測試報(bào)告。為此,我們再次使用 pytest 庫,它將為我們生成報(bào)告,然后我們將其上傳到 Codecov,后續(xù)的可視化就由它完成。
          在定義一個新的工作流之前,你首先需要先創(chuàng)建一個 Codecov 賬號。因此,你需要先單擊右上角的“Sign Up”按鈕轉(zhuǎn)到https://codecov.io。d08099c5354fdf14f0d86adf0b984ab4.webp然后選擇 GitHub 注冊。


          94af9859c6d818868caaa6f53d84f4d9.webp


          然后,你將被帶到 GitHub 項(xiàng)目的控制面板,然后需要單擊 Add new repository 按鈕。


          42c03726f7c1c4dbefa66b7840ac4427.webp


          一個列表將出現(xiàn),包含所有的項(xiàng)目,你可以從中選擇一個來分析。70187e9a616c896a766eddc4680be889.webp然后會出現(xiàn)一個帶有令牌(token)的頁面。把它保存下來,因?yàn)橄乱徊街袝玫健?/span>
          4bf2e4b9bf6ac9b702b62646d7bec4c5.webp現(xiàn)在回到 GitHub 的項(xiàng)目上,然后單擊其“Settings”按鈕。單擊“Secrets”,然后添加一個新的 secret,這時就可以用上你在? Codecov 網(wǎng)站上生成的令牌了。要完成這一步,單擊 Add secret。f9d528278b7c752e92d20da637f8bed0.webp好的,一切都已設(shè)置好了,接下來就可以繼續(xù)定義 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
          再次,我們創(chuàng)建一個單獨(dú)的文件,命名為 workflow-master.yaml,因?yàn)檫@次我們不想在創(chuàng)建 pull request 時觸發(fā)此工作流。這個工作流僅當(dāng)在 master branch 上推送了新的提交時才會運(yùn)行。在 jobs 部分中,只有一個名為 codecov 的作業(yè),包括四步:


          • 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)該是像這樣的:


          5c46f83b6aca30c463bfb02c8808a82f.webp現(xiàn)在,如果你回到 Codecov,回到你的項(xiàng)目控制面板,你應(yīng)該能看到類似的輸出:


          ae46e2a3b65042b6dd4411e173c80f69.webp


          好的,我們做到了!(Cheers!)在結(jié)尾之前,我想告訴你的是,能幫你寫出更高質(zhì)量代碼的工具并非只有 CodeFactor,Codecov或wemake-python-styleguide。實(shí)際上,這樣的工具有很多,例如 SonarCloud,Pylint,Coveralls,DeepSource 等等。其中一些可以在 GitHub Marketplace 上找到,如果你不喜歡我提議的這幾個工具,那么最好從那上面的地方為起點(diǎn)開始尋找。



          結(jié)論
          希望通過這篇博文,你可以了解到,要如何設(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

          8073c81c7c66b7104272d339b3b2eb79.webp7629513f5d402e6a2a728e0edc1b805e.webp

          長按識別二維碼關(guān)注




          推薦閱讀

          1

          孫楊一夜之間風(fēng)評變差,從數(shù)據(jù)上看是真的嗎?

          2

          進(jìn)來看看你中了幾條

          3

          如何實(shí)現(xiàn)本地代碼和遠(yuǎn)程的實(shí)時同步

          4??

          如何用一條命令將網(wǎng)頁轉(zhuǎn)成電腦 App


          好文和朋友一起看~
          瀏覽 62
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  性爱大全无码 | 一级黄色电影免费看 | 婷婷五月天亚洲无码 | 99视频在线看 | 99热超碰在线播放 |