我创建了一个新的 Rust 项目并决定,我将尝试在Github Actions上针对每个拉取请求运行自动构建和测试:
name: Rust
on: [pull_request]
我花了一段时间才注意到,默认情况下,Github Actions 根本不会检查我的代码,并且GITHUB_WORKSPACE
只是空的。所以,我尝试手动克隆存储库。做这样的事情:
REPO=/tmp/path/to/repository
git clone https://github.com/myself/mycode.git $REPO
但这只是检查默认分支上的任何内容。所以,我调查了检查$GITHUB_SHA
结果是我的存储库不知道的东西。$GITHUB_REF
空的也是如此。
在这一点上,我对自己在做什么一无所知。我最初的假设是,实际上配置为运行的作业on: [pull request]
应该具有完全相同的代码,但它无法检查并准备它。
我还调查了提供的Checkout Actions:
此操作将您的存储库签出到
$GITHUB_WORKSPACE
,以便您的工作流可以访问存储库的内容。默认情况下,这等效于运行
git fetch
andgit checkout $GITHUB_SHA
,因此您将始终拥有触发工作流的版本的 repo 内容。请参阅此处以了解$GITHUB_SHA
不同类型的事件是什么。
但正如我之前所说,$GITHUB_WORKSPACE
完全是空的,agit fetch
只会告诉你没有 git 存储库。
这是一个这样的示例失败:
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
fatal: reference is not a tree: d76745134ae45905e4a0ab8d27c92f1e2544bdc1
##[error]Process completed with exit code 128.
$GITHUB_SHA
如果我的存储库不知道它怎么办?我完全误解了 Github Actions 吗?如何使用 Github Actions 签出最新提交,即在拉取请求中?
这是我失败的年表。