之前开发了命令行工具,这里总结一下如何发布一个命令行工具。
这次命令行工具开发使用的 Python 技术栈,回头来看或许使用 go 是个更好的选择,但人生苦短,我用 Python。
我使用 Typer 来提高开发命令行工具的效率,引入 pytest 做单元测试。
另外如果你的团队在考虑引入集成测试, pytest 将会是一个不错的选择,之前我在 XDSDK 团队的服务端大量引入了 pytest,使得登录、内购支付系统的稳定性有了不小的提升。
为了让用户可以通过 pip install xxx
轻松的安装,可以把工具发布到 PyPI。具体的操作流程参考官方的文档 Python Packaging User Guide。大致流程是:
python setup.py sdist bdist_wheel
本地打包这种方式是不需要使用 PyInstaller 打包的。
使用 PyInstaller 来打二进制包,使得用户可以不安装 Python 即可安装使用该命令行工具。
大体流程是:
pip install pyinstaller
pyinstaller xxx.spec
本地执行会在 dist 目录生成命令行工具,可以先进行本地测试。
为了兼容各个架构平台,是需要在不同的操作系统上分别构建进行交叉编译的,我把这个过程放在了 Github Action 中,具体可以看 自动化
一节。
在 Mac 下最好还是能够支持通过 Homebrew 安装,大致流程是:
之后用户就可以通过:
brew tap yourusername/xxx
brew install xxx
来完成安装了。
单元测试、构建、打包、上传等动作,除了自己动手之外,也可以用 Github Actions 来完成,提高工作和摸鱼效率。
设置交叉编译
把发布到 PyPI 的流程也自动化掉
大致流程是:
release 是手动先创建的,Github Actions 内会把创建的包更新到当前创建的 release 上。
调试 Github Action 是一个比较麻烦的事情,有时候需要反复的 PR commit 去试试,为了提高一点点 效率。可以考虑使用 nektos/act,如果用的是 Gitlab 则可以尝试在本地安装 gitlab-runner 或者 gitlab-ci-local 来进行简单的测试。
Mac 下 brew install act
即可安装;Linux 下,则可以在命令行中输入 curl https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash
。 act 是基于 Docker 的,使用之前必须安装 Docker。
act
主要适合测试基本的构建和测试流程,但不适合完整测试跨平台构建,完整的跨平台测试还是需要依赖 GitHub Actions。但也算是部分的提高效率了!
act
有两个重要的选项:
至此,你可以把命令行工具的发布过程自动化了!