我创建了一个新的 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 action。 github-actions
的做事方式需要一些时间来适应,因为它是一个项目管理套件,并不仅仅满足 CI/CD 的需求。
所以,有些事情肯定会有点奇怪或麻烦,最重要的是因为关于这一切的文档还不是很成熟 - 但是嘿,这是一个测试版是有原因的。
这个 Action 的基本用法是:
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: ...
关于git - 如何使用 Github Actions checkout 最新提交?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58025217/