我创建了一个新的 Rust 项目并决定,我将尝试 Github Actions 对每个 pull 请求运行自动构建和测试:

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] 的作业应该具有完全相同的代码,但它无法 check out 并准备它。

我还调查了提供的 Checkout Actions :



但正如我之前所说,$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 Actions checkout 最新提交,即在 pull 请求中?

这是 chronology of my failures

最佳答案

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

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

这个 Action 的基本用法是:

  • 找到您希望检查当前提交的 steps 部分
  • 在编写依赖代码的步骤之前添加 Action ,通常在最顶部
  • 决定你想要使用的 Action 的哪个版本 ,教程通常会有 @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: ...
    

    关于git - 如何使用 Github Actions checkout 最新提交?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58025217/

    10-15 05:32