最近我的开源 CMS 项目上线了,看到 GitHub 又推出了 Actions 这个新功能,才开始被整的一脸懵,完全不知道这个是干嘛的…
在学习了新的 YAML
语法、看了官方文档之后发现这个东西用来做 CI/CD
是非常方便的,于是决定使用它配合 Pylint
对代码自动评分来控制每次 push
的代码质量。
GitHub Actions 会使用一个完全隔离的虚拟环境每次运行我们的代码,所以我们需要在工作流中设置 CI/CD
的工作环境,并且绑定一些 GitHub 的动作,这样每次动作发生的时候我们的工作流就会自动被调用了。

这在团队协作开发的时候非常有用,我们可以自定义测试/评分脚本,这样就能避免质量过低/测试无法通过的代码被提交了。
下面给出使用 GitHub Actions 结合 Pylint
给你的代码自动评分的脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| name: Test and Pylint
# 工作流在每次代码 push 的时候触发 on: [push]
jobs:
# 这个 job 的名字叫 linting linting:
# 在最新版的 ubuntu 上运行 runs-on: ubuntu-latest
steps: # 代码检出 - name: Checkout uses: actions/checkout@v2 id: checkout # 下面是安装 Python 和包依赖的 # 这里选定版本为3.7 - 大家也可以通过 matrix 构建测试环境矩阵 - name: Setup Python uses: actions/setup-python@v1 with: python-version: 3.7 # - name: Install dependencies run: python -m pip install --upgrade pip pip install -r requirements.txt pip install pylint # 我将测试的代码保存在 run.py - name: Test modules run: python run.py id: test # 如果上一步的结果是成功的调用 pylint 为代码评分 - name: Pylinting if: success() run: python linting.py id: linting - name: Low score warning if: steps.linting.outputs.score < 9 run: echo "Test passed, but score was too low." - name: Passed if: steps.linting.outputs.score >= 9 run: echo "All passed." # 关于 outputs 在下面进行说明 - name: Show score run: echo "Your score is ${{ steps.linting.outputs.score }}."
|
这段代码在 .github/workflows/main.yaml
中,代码中有几个点可能难以理解,我大概说明一下:
-
if: success()
- 这个是 Actions 的自带函数,当上一步运行成功的时候才会执行当前的 step
;这里的意思是:如果上面的测试都没有通过,就不用评分了
-
steps.linting.outputs.score
- 在 id: linting
的那一个步骤中,我们调用了 python linting.py
它会在一个 actions
的 steps
环境变量中输出一个键值对,之后我们可以通过这个语句调用这个值
我们现在看看 linting.py
中的内容:
1 2 3 4 5 6 7 8
| """Linting and return score as system code"""
from os import system from pylint.lint import Run
results = Run(["leaf"], do_exit=False) score = round(results.linter.stats["global_note"], 2) system('echo "::set-output name=score::' + str(score) + '"')
|
可以看到,我们评分获取到分数之后调用了系统命令:
1
| echo "::set-output name=score::your_score"
|
这是 Github Actions
虚拟环境的 tricks
,这样就可以将分数值留给下面的 step 去使用了。关于更多的指令,可以参考 GitHub 的官方帮助。
有想法的朋友也可以使用测试的结果获取一个酷酷的 badge,每次可以根据自己的测试情况来动态的更改 badge 的图案。我这里因为单元测试还没有写完,暂时没有用到。
好了,我们现在可以给自己的代码评分了呦,每次测试通过的 commit 还会有一个漂亮的绿色对勾~

本文作者:桂小方
本文鏈接:
https://init.blog/1838/
文章许可协议: 
如果你觉得文章对你有帮助,可以 支持我
評論