[Python Dev] 在 poetry 環境下使用 github actions 和 coveralls 來進行 CI -最終
前言:
上一篇介紹了 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 的區域:
這裡先選 Entire account 的選項。
3. 將 Token 加入 GitHub secret:
接著我們要使用 Github secret 這個酷炫功能,只要你把東西放到這裡,就算是青天大老爺來也無法再次查看,所以在放進去之前一定要好好記住。
這裡附上官方 doc:
我們可以在 project settings 的地方看到這一個選項:
在右邊按 “New repository secret”,然後取一個你想要的名字:
之後 add secret 就可以了。
到這裡 pypi 的設定就結束了,接下來我們回到 github actions 和 poetry 的設定步驟。
Poetry 設定:
Poetry 在設定 publish 時非常方便,我們只需修改它的 toml file ,也就是我們前幾篇提到的 pyproject.toml:
可以依照下面格式填:
都填完後就算準備好了,poetry 在打包時有自己的指令 “publish”,關於他的用法我們會在下一個段落介紹到。
接著就讓我們進入到 github actions 的設定吧。
GitHub Actions 設定:
這裡一樣是在 workflow 裡新增 yml 檔案,我建立了一個名為 publish.yml 的檔案:
裡面的內容可以大致照這樣寫:
這串指令的意思就是當 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 簡述:
接著按 “publish release“ 就可以 trigger 這個 yml 腳本了,我們可以在 github actions 的頁面裡看到:
到這裡就大功告成了,可以到 Pypi 看看你 project 的頁面如何!
附上這次示範的 Project:(順便幫我實習公司打個小廣告…)
小結:
這篇文章主要是在介紹如何將 poetry 結合 github actions 將 python 專案自動打包到 pypi 上,並於 release 同時使用微軟富爸爸免費提供的環境做測試。
如此一來可以確保每次版本更新時,package 的可靠性,而這幾個工具合作使用也可大大提升開發的效率,以上三篇介紹,希望有幫助到大家!(我自己是覺得非常有用啦~