如何使用 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 操作检查最新的提交,即在拉取请求时?
您应该使用处理结帐的 official action。 github-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: ...
我创建了一个新的 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
andgit 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 操作检查最新的提交,即在拉取请求时?
您应该使用处理结帐的 official action。 github-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: ...