我创建了一个新的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
和git checkout $GITHUB_SHA
,因此您将始终以触发工作流的版本获得回购内容。 请参阅here,以了解$GITHUB_SHA
对于各种事件的作用。
但是正如我之前所说,$GITHUB_WORKSPACE
完全是空的,git fetch
只会告诉您没有git存储库。
这里是example failure:
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动作吗?如何使用Github Actions(即在请求请求中)检出最新提交?
答案 0 :(得分:5)
您应该使用official action处理结帐。 github-actions
的处事方式需要一定的习惯,因为它是一个项目管理套件,不能完全满足CI / CD的需求。
因此,某些事情注定会有些奇怪或麻烦,这主要是因为有关这方面的文档还不是很成熟-但是,嘿,这是一个beta版本。
此操作的基本用法是:
steps
部分中找到您要检出当前提交的地方@master
,但是更安全的命名当前的最新版本-在这种情况下为{{1 }} @v1