iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0

昨天我們成功建立出一個簡單的 Github Actions Workflow,幫助我們上傳 TestPyPI,昨天說會再透過 push 來驗收成果,但其實我們在 Repo 新增 publish.yml 就算是 push 一個新的 commit 進我們的 main branch,所以 Github 有成功執行 我們的 Workflow。我們可以在 Repo 頁看到我們這次執行是否成功,如果是成功會有綠色的勾勾,失敗則是有紅色的叉叉。

https://ithelp.ithome.com.tw/upload/images/20240926/201630244awqeI2fUj.png

沒錯,昨天的結果我們獲得了紅色的叉叉,代表我們其中一個 job 在執行的時候有發生錯誤,可以點圖示進去就能查看是哪個出現問題:

https://ithelp.ithome.com.tw/upload/images/20240926/20163024mlbqm1VJ0W.png

可以看到我們在打包的時候是成功的,但在上傳到 TestPyPI 時卻失敗了,要看更多訊息就需要再點 Details 按鈕,他會帶我們到 Actions 的詳情頁。詳情頁會顯示每個 step 的執行情況,如果有錯誤的 step 會特別 Highlight 起來,方便使用者快速查看:
https://ithelp.ithome.com.tw/upload/images/20240926/20163024FSsxEYQxMf.png

查看 Log 裡的訊息,最後錯誤訊息是:

HTTPError: 400 Bad Request from https://test.pypi.org/legacy/          
         File already exists ('baseball_stats_python-0.0.3-py3-none-any.whl',   
         with blake2_256 hash                                                   
         '2703e426d8ccbbf20632c2d99047bff0c8cefd0a5c3d0adcb647ca7c2a18f970').   
         See https://test.pypi.org/help/#file-name-reuse for more information.  

他的意思是 TestPyPI 上已經有重複的 0.0.3 版本,所以我們不能上傳上去。在前面的文章我也有提過這個問題(Day 09 - 簡單上傳一版到 TestPyPI),目前是無法直接覆蓋上去,也無法在 TestPyPI 那邊先刪除既有的版本,再重新上傳。可以查看在錯誤訊息裡提供的網頁 https://test.pypi.org/help/#file-name-reuse

要解決正個問題,最簡單快速的方法就是去修改 pyproject.toml 裡的 version,我把版本更新成 0.0.3.1 後,Workflow 會再次觸發,然後會發現在原本有叉叉的地方會變成圓點點,代表 Workflow 正在執行,一樣可以點進去看目前執行到哪。

https://ithelp.ithome.com.tw/upload/images/20240926/20163024sztzqzbExm.png

除了直接點擊圖示,我們也可以去上面的 Actions 分頁裡面查看,裡面也會有之前執行過的結果:
https://ithelp.ithome.com.tw/upload/images/20240926/20163024qAUK8Smf3Y.png

可以看到我們改完版本後,也成功獲得綠色勾勾,但這樣表示我們每次更新,都需要手動更新版本,很麻煩,怎麼辦呢?其實在昨天提到的 Publishing package distribution releases using GitHub Actions CI/CD workflows 裡有提供方法,可以使用 if 來設定限制,讓 job 不會每次更新都觸發。文章裡使用的是 if: startsWith(github.ref, 'refs/tags/') ,這一行代表說,只有在上傳 tag 的時候,會執行這個 job

Github Tag

Tag 簡單的來說是 Github 提供我們一個時間標記,他不會被 commit 的增減影響,就只會存到當下的 commit,通常會用來幫助我們推行版本像是 v1.0.0。Github 還會特別留一頁管理(例如:pybaseball tag 頁)。
他也實在跟 branch 做比較,不過就像剛剛提到的,tag 在存入後不會被 commit 影響而有變動,branch 則是會跟著 commit 有所變動。可以參考這篇文章:【冷知識】標籤跟分支有什麼不一樣?
因為這樣關係,我們可以等告一個段落後,修改我們版號,再建立一個新的 tag 上傳到 Github 後觸發 Actions 就不用每次都改版號了。

Dynamic Versioning

如果不想每次手動改版號的話,其實也可以,還記得我們在 Day 09 - 簡單上傳一版到 TestPyPI 裡有提到我們會使用打包工具幫助我們打包,他們各自也都會有提供動態產生版號的方法,像是我們選擇的 Hatchling 有提供 內建 或是使用 Plugin。今天就先不詳細說明,等之後要上傳正式版的時候再來一一介紹。

本日小結

今天說明如何解決使用 Workflow 上傳重複版號的問題,當初我是沒預料這邊會花那麼多篇幅,自己也是學到了一課。希望有說明的夠完整,明天應該真的能開始設計我們的 Function 了。
一樣最後感謝大家耐心地看完這篇文章,有任何問題與建議歡迎直接留言給我,明天見,晚安。


上一篇
Day 11 - 用 Github Actions 建立 workflow
系列文
上次介紹的棒球套件很少更新了,那就只好自己寫一個!?12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言