标签: github-actions

在 GitHub 工作流程中获取当前日期和时间

我有一个用于发布存储库夜间快照的 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_namerelease_name使用当前日期和时间,而不是硬编码值。但是,我找不到任何关于它的文档。我该怎么做?

github github-api github-actions

24
推荐指数
5
解决办法
1万
查看次数

仅在新标签上触发 Github Action?

是否有可能仅在推送新版本(带有新标签)时触发 github 操作?我不想在每次推送到 master 时运行它们,但我也想避免创建发布分支。

github github-actions

24
推荐指数
3
解决办法
7255
查看次数

如何将 Github 操作设置为必需的状态检查

我想将我的 GitHub 操作设置为所需的状态检查,以便我能够拥有受保护的分支,并防止提交被推送到特定分支(如果它们未通过 github 操作检查)。\n但是当我转到分支保护规则,github 操作 don\xe2\x80\x99t 出现在可供选择的检查列表中:\n存储库分支保护规则不显示 GitHub 操作

\n

正如你在这里看到的,我确实有两个 github 操作在我的存储库上运行了几周:

\n

存储库中存在的 GitHub 操作

\n

那么我错过了什么吗?如何将 Github Actions 设置为所需的状态检查?

\n

github github-actions

24
推荐指数
1
解决办法
8717
查看次数

github 操作上下文的完整列表

在调查如何在 github 操作中,我可以将存储库中特定文件的“基本”版本与文件的拉取请求(“头”)版本进行比较......在调查这一点时,我发现了各种来源(例如,github.communitygithub.com/actions/checkout README 文件中的代码示例)...我发现以下上下文变量可用:

  • github.ref
  • github.sha
  • github.event.pull_request.head.ref
  • github.event.pull_request.head.sha
  • github.event.pull_request.base.ref
  • github.event.pull_request.base.sha

但是,除了前两个(github.refgithub.sha)之外,我在任何 github actions 文档中都找不到其他四个

我的问题是: 是否有任何地方记录了可用上下文变量的完整列表?

例如,我找到了 this,但它只列出了 github 上下文对象下一级的上下文变量。我找不到上述更深层嵌套变量的文档。可能还有其他可能非常有用的上下文变量,但我似乎找不到完整的列表,而只是那些碰巧被提及并分散在各种代码示例中的变量。

github-actions github-actions-artifacts

24
推荐指数
1
解决办法
2万
查看次数

如何在 Github Actions 步骤中强制退出

如果满足特定条件,我想退出工作:

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-actions

23
推荐指数
2
解决办法
7832
查看次数

在 github 操作工作流中,有没有办法让多个作业重用相同的设置?

我最近将我的项目与 github 操作连接起来以进行持续集成。我创建了两个单独的作业:第一个检查拉取请求中的代码是否被我们的 linter 接受,第二个检查代码是否通过了测试套件。我喜欢这样的两个工作在 Github 网页中显示为拉取请求的两个单独的复选标记:

在此处输入图片说明

我现在遇到的问题是工作流 YAML 文件中有一些重复的代码:前 3 个步骤,安装 Lua 和 Luarocks。不仅维护起来很烦人,而且两次运行相同的操作也会浪费 CI 分钟。有没有办法避免这种情况?这样设置代码只写在一个地方,并且只在工作流执行时运行一次

但我很困惑什么是正确的方法:

  1. 我应该使用共享设置代码创建自己的 Github Action 吗?
  2. 我应该创建一个已经预先安装了 Lua 和 Luarocks 的 Docker 镜像吗?
  3. 我应该使用单个作业吗?如果 linter 和测试套件是同一个工作的步骤,我是否仍然可以有独立的复选标记?
  4. 还有什么?

这是我的工作流程的当前 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)

github-actions

23
推荐指数
2
解决办法
9063
查看次数

GitHub-actions OR 运算符用于需求子句

有人知道是否可以在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)

github-actions

23
推荐指数
2
解决办法
1万
查看次数

如何在 if 条件 Github Actions 中检查秘密变量是否为空

语境

我想在执行作业之前检查我的工作流程是否存在秘密。

像这样的东西:

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-actions

23
推荐指数
1
解决办法
2万
查看次数

github-action:IF 有 ELSE 吗?

在 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

22
推荐指数
5
解决办法
2万
查看次数

如何在 GitHub Actions 中缓存 yarn 包

我正在使用 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)

但构建时间仍然相同。

typescript yarnpkg github-actions

22
推荐指数
4
解决办法
9992
查看次数