This article was last updated on <span id="expire-date"></span> days ago, the information described in the article may be outdated.
最近我的开源 CMS 项目上线了,看到 GitHub 又推出了 Actions 这个新功能,才开始被整的一脸懵,完全不知道这个是干嘛的…
在学习了新的 YAML
语法、看了官方文档之后发现这个东西用来做 CI/CD
是非常方便的,于是决定使用它配合 Pylint
对代码自动评分来控制每次 push
的代码质量。
GitHub Actions 会使用一个完全隔离的虚拟环境每次运行我们的代码,所以我们需要在工作流中设置 CI/CD
的工作环境,并且绑定一些 GitHub 的动作,这样每次动作发生的时候我们的工作流就会自动被调用了。
这在团队协作开发的时候非常有用,我们可以自定义测试/评分脚本,这样就能避免质量过低/测试无法通过的代码被提交了。
下面给出使用 GitHub Actions 结合 Pylint
给你的代码自动评分的脚本:
1 | name: Test and Pylint |
这段代码在 .github/workflows/main.yaml
中,代码中有几个点可能难以理解,我大概说明一下:
-
if: success()
- 这个是 Actions 的自带函数,当上一步运行成功的时候才会执行当前的step
;这里的意思是:如果上面的测试都没有通过,就不用评分了 -
steps.linting.outputs.score
- 在id: linting
的那一个步骤中,我们调用了python linting.py
它会在一个actions
的steps
环境变量中输出一个键值对,之后我们可以通过这个语句调用这个值
我们现在看看 linting.py
中的内容:
1 | """Linting and return score as system code""" |
可以看到,我们评分获取到分数之后调用了系统命令:
1 | echo "::set-output name=score::your_score" |
这是 Github Actions
虚拟环境的 tricks
,这样就可以将分数值留给下面的 step 去使用了。关于更多的指令,可以参考 GitHub 的官方帮助。
有想法的朋友也可以使用测试的结果获取一个酷酷的 badge,每次可以根据自己的测试情况来动态的更改 badge 的图案。我这里因为单元测试还没有写完,暂时没有用到。
好了,我们现在可以给自己的代码评分了呦,每次测试通过的 commit 还会有一个漂亮的绿色对勾~
Comments