[Python Dev] 在 poetry 環境下使用 github actions 和 coveralls 來進行 CI -最終

CookSen
SWF Lab
Published in
6 min readOct 9, 2022

前言:

上一篇介紹了 github actions 的基本設定以及用法,最終得以透過 workflow 裡的 yml 檔設定來讓 github actions 自動在指定動作發生後跑寫好的腳本。這篇文章我會將這個功能結合 release ,同時會使用 poetry 打包,讓 github actions 在每個版本 release 後都可以自動測試,如此一來即可確保這個版本是穩定的,不用親自下載測試!

Pypi 使用介紹:

pypi 應該是所有 python 使用者最熟悉的 Python Software repository 了,所以我這裡就不多做說明,直接介紹新增 package 的流程。

1. 創建帳號:
https://pypi.org/
直接到網站進行註冊即可。

2. 創建並取得 project token:

到右上角選 account settings,往下滑會看到 Add API token 的區域:

Add API Token.

這裡先選 Entire account 的選項。

3. 將 Token 加入 GitHub secret:

接著我們要使用 Github secret 這個酷炫功能,只要你把東西放到這裡,就算是青天大老爺來也無法再次查看,所以在放進去之前一定要好好記住。

這裡附上官方 doc:

我們可以在 project settings 的地方看到這一個選項:

GitHub secret

在右邊按 “New repository secret”,然後取一個你想要的名字:

New Secret

之後 add secret 就可以了。

到這裡 pypi 的設定就結束了,接下來我們回到 github actions 和 poetry 的設定步驟。

Poetry 設定:

Poetry 在設定 publish 時非常方便,我們只需修改它的 toml file ,也就是我們前幾篇提到的 pyproject.toml:

可以依照下面格式填:

都填完後就算準備好了,poetry 在打包時有自己的指令 “publish”,關於他的用法我們會在下一個段落介紹到。

接著就讓我們進入到 github actions 的設定吧。

GitHub Actions 設定:

這裡一樣是在 workflow 裡新增 yml 檔案,我建立了一個名為 publish.yml 的檔案:

my yml files

裡面的內容可以大致照這樣寫:

這串指令的意思就是當 release 這個動作被偵測到時,就會自動跑下面的指令,其中包含一些:

新增 tag 的指令:

git checkout -b release/$GITHUB_REF_NAME

git push origin release/@GITHUB_REF_NAME

測試安裝:

poetry build

刪除安裝產生的 dist 然後上傳至 pypi:

rm -rf dist

poetry publish — build — username=__token__ — password=$PYPI_TOKEN

可以看到我用到了 secrets.PYPI_TOKEN 這個指令來使用 github secret,如此一來,透過這個 env 變數 poetry publish 就可以把此 package 順利包起來上傳到 pypi 上。

Trigger release:

那我們要如何 trigger release 呢?

很簡單,只要到 repo 右邊的欄位選 release,然後選 draft a new release:

新增一個 tag,這裡記得要和 pyproject 裡的 version 一致,然後輸入這次 release 的名字,修改筆記的部分可以直接點 Generate release notes,他會直接幫你整理並貼上版本間新增的 branch 簡述:

Generate release notes like a boss

接著按 “publish release“ 就可以 trigger 這個 yml 腳本了,我們可以在 github actions 的頁面裡看到:

到這裡就大功告成了,可以到 Pypi 看看你 project 的頁面如何!

附上這次示範的 Project:(順便幫我實習公司打個小廣告…)

小結:

這篇文章主要是在介紹如何將 poetry 結合 github actions 將 python 專案自動打包到 pypi 上,並於 release 同時使用微軟富爸爸免費提供的環境做測試。

如此一來可以確保每次版本更新時,package 的可靠性,而這幾個工具合作使用也可大大提升開發的效率,以上三篇介紹,希望有幫助到大家!(我自己是覺得非常有用啦~

--

--

CookSen
SWF Lab
Writer for

An EE student at National Taiwan University. A junior engineer who likes both software and hardware.