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

How to checkout the latest commit with 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:

This action checks out your repository to $GITHUB_WORKSPACE, so that your workflow can access the contents of your repository.

By default, this is equivalent to running git fetch and git checkout $GITHUB_SHA, so that you'll always have your repo contents at the version that triggered the workflow. See here to learn what $GITHUB_SHA is for different kinds of events.

但正如我之前所说,$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 Actions?如何使用 Github 操作检查最新的提交,即在拉取请求时?

这是 chronology of my failures

您应该使用处理结帐的 official actiongithub-actions' 的做事方式需要一些时间来适应,因为它是一个项目管理套件,不仅仅满足 CI/CD 的需求。

所以,有些事情肯定会有点奇怪或麻烦,主要是因为所有这些的文档还不是很成熟 - 但是,嘿,这是一个测试版是有原因的。

这个动作的基本用法是:

  • 找到您希望检出当前提交的 steps 部分
  • 在编写依赖代码的步骤之前添加操作,通常在最顶部
  • 决定你要使用哪个版本的动作,教程通常会有@master,但命名当前最新版本更安全一些 - 在这种情况 @v1
  • 享受您的工作流程
jobs:
  build:
    runs-on: ubuntu-latest
    steps:

      # may or may not have a name, it's quite self-descriptive
      - uses: actions/checkout@v1

      # run steps that rely on the code in the commit that was pushed
      - name: test code
        steps: ...
      - name: build package
        steps: ...