如何使用Github Actions检出最新提交?

时间:2019-09-20 09:05:32

标签: git github continuous-integration git-checkout github-actions

我创建了一个新的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 fetchgit 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(即在请求请求中)检出最新提交?

这里是chronology of my failures

1 个答案:

答案 0 :(得分:5)

您应该使用official action处理结帐。 github-actions的处事方式需要一定的习惯,因为它是一个项目管理套件,不能完全满足CI / CD的需求。

因此,某些事情注定会有些奇怪或麻烦,这主要是因为有关这方面的文档还不是很成熟-但是,嘿,这是一个beta版本。

此操作的基本用法是:

  • steps部分中找到您要检出当前提交的地方
  • 在编写依赖于代码的步骤之前添加操作,通常在最顶部
  • 确定要使用的操作的版本,教程中通常会有@master,但是更安全的命名当前的最新版本-在这种情况下为{{1 }}
  • 享受您的工作流程
@v1