我有一个用于发布存储库夜间快照的 GitHub 工作流程。它使用create-release 操作。这是工作流文件现在的样子:
name: Release Nightly Snapshot
on:
schedule:
- cron: "0 0 * * *"
jobs:
build:
name: Release Nightly Snapshot
runs-on: ubuntu-latest
steps:
- name: Checkout master Branch
uses: actions/checkout@v2
with:
ref: 'master'
- name: Create Release
id: nightly-snapshot
uses: actions/create-release@latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: 'nightly snapshot'
release_name: 'nightly snapshot'
draft: false
prerelease: false
Run Code Online (Sandbox Code Playgroud)
我想要tag_name并release_name使用当前日期和时间,而不是硬编码值。但是,我找不到任何关于它的文档。我该怎么做?
是否有可能仅在推送新版本(带有新标签)时触发 github 操作?我不想在每次推送到 master 时运行它们,但我也想避免创建发布分支。
在调查如何在 github 操作中,我可以将存储库中特定文件的“基本”版本与文件的拉取请求(“头”)版本进行比较......在调查这一点时,我发现了各种来源(例如,github.community和github.com/actions/checkout README 文件中的代码示例)...我发现以下上下文变量可用:
github.refgithub.shagithub.event.pull_request.head.refgithub.event.pull_request.head.shagithub.event.pull_request.base.refgithub.event.pull_request.base.sha但是,除了前两个(github.ref和github.sha)之外,我在任何 github actions 文档中都找不到其他四个。
我的问题是: 是否有任何地方记录了可用上下文变量的完整列表?
例如,我找到了 this,但它只列出了 github 上下文对象下一级的上下文变量。我找不到上述更深层嵌套变量的文档。可能还有其他可能非常有用的上下文变量,但我似乎找不到完整的列表,而只是那些碰巧被提及并分散在各种代码示例中的变量。
如果满足特定条件,我想退出工作:
jobs:
foo:
steps:
...
- name: Early exit
run: exit_with_success # I want to know what command I should write here
if: true
- run: foo
- run: ...
...
Run Code Online (Sandbox Code Playgroud)
怎么做?
我最近将我的项目与 github 操作连接起来以进行持续集成。我创建了两个单独的作业:第一个检查拉取请求中的代码是否被我们的 linter 接受,第二个检查代码是否通过了测试套件。我喜欢这样的两个工作在 Github 网页中显示为拉取请求的两个单独的复选标记:
我现在遇到的问题是工作流 YAML 文件中有一些重复的代码:前 3 个步骤,安装 Lua 和 Luarocks。不仅维护起来很烦人,而且两次运行相同的操作也会浪费 CI 分钟。有没有办法避免这种情况?这样设置代码只写在一个地方,并且只在工作流执行时运行一次?
但我很困惑什么是正确的方法:
这是我的工作流程的当前 YAML 文件:
name: Github Actions CI
on: [ pull_request ]
jobs:
lint:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: leafo/gh-actions-lua@v8.0.0
- uses: leafo/gh-actions-luarocks@v4.0.0
- run: luarocks install luacheck
- run: ./run-linter.sh
test:
name: …Run Code Online (Sandbox Code Playgroud) 有人知道是否可以在needs语句中使用 OR 运算符?假设我们期望成功的 job-a 或 job-b 运行 job-c,即
name: My workflow
on:
workflow_dispatch:
jobs:
job-a:
runs-on: ubuntu-latest
steps:
- name: do something
run: echo "something"
job-b:
runs-on: ubuntu-latest
steps:
- name: do something
run: echo "something"
job-c:
runs-on: ubuntu-latest
needs:
- job-a OR job-b
steps:
- name: do something
run: echo "something"
Run Code Online (Sandbox Code Playgroud) 我想在执行作业之前检查我的工作流程是否存在秘密。
像这样的东西:
publish:
runs-on: ubuntu-latest
if: secrets.AWS_ACCESS_KEY_ID != ''
steps:
[ ... ]
Run Code Online (Sandbox Code Playgroud)
但是,在使用此表达式时,我遇到了这样的错误:
The workflow is not valid. .github/workflows/release.yml (Line: 11, Col: 9): Unrecognized named-value: 'secrets'...
Run Code Online (Sandbox Code Playgroud)
我尝试用另一种方式写这个表达式:
if: ${{ secrets.AWS_ACCESS_KEY_ID != '' }}
Run Code Online (Sandbox Code Playgroud)
if: ${{ secrets.AWS_ACCESS_KEY_ID }} != ''
Run Code Online (Sandbox Code Playgroud)
如何在 Github Actions 工作流程中实现我想要的目标?
在 github 操作中,我有一个 if,但如果我处于 else 情况下,我仍然需要运行其他东西。有没有一种干净的方法来做到这一点,或者我是否必须在 false 的相同条件下执行另一个步骤?
- if: contains(['SNAPSHOT'],env.BUILD_VERSION)
name:IF
run: echo ":)"
- if: false == contains(['SNAPSHOT'], env.BUILD_VERSION)
name: Else
run: echo ":("
Run Code Online (Sandbox Code Playgroud) 我正在使用 GitHub Actions 来构建我的 TypeScript 项目。每次运行操作时,我都会等待 3 分钟以安装所有依赖项。
有没有办法缓存纱线依赖项,所以构建时间会更快?
我试过这个:
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- uses: actions/cache@v1
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install yarn
run: npm install -g yarn
- name: Install project dependencies
run: yarn
Run Code Online (Sandbox Code Playgroud)
但构建时间仍然相同。