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

Get current date and time in GitHub workflows

我有一个 GitHub 工作流来发布存储库的夜间快照。它使用 the create-release action。这是工作流文件现在的样子:

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

我希望 tag_namerelease_name 使用当前日期和时间,而不是硬编码值。但是,我找不到任何关于它的文档。我应该怎么做?

来自 this post you can create a step that set its output,值为 $(date +'%Y-%m-%d')

然后通过 ${{ steps.date.outputs.date }} 使用此输出。下面显示了环境变量和输入的示例:

on: [push, pull_request]
name: build
jobs:
  build:
    name: Example
    runs-on: ubuntu-latest
    steps:
      - name: Get current date
        id: date
        run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
      - name: Test with environment variables
        run: echo $TAG_NAME - $RELEASE_NAME
        env:
          TAG_NAME: nightly-tag-${{ steps.date.outputs.date }}
          RELEASE_NAME: nightly-release-${{ steps.date.outputs.date }}
      - name: Test with input
        uses: actions/hello-world-docker-action@master
        with:
          who-to-greet: Mona-the-Octocat-${{ steps.date.outputs.date }}

输出:

* Test with environment variables
nightly-tag-2020-03-31 - nightly-release-2020-03-31

* Test with input
Hello Mona-the-Octocat-2020-03-31

这是通过环境变量执行此操作的另一种方法(来自 this post):

name: deploy
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Set current date as env variable
        run: echo "NOW::$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_ENV
      - name: Echo current date
        run: echo $NOW

这会将日期设置为环境变量,如果您想在后续步骤的脚本/程序中使用它,这将非常有用。

一个干净的解决方案是使用非常接近当前日期时间$(date +%Y%m%d%H%M)

${{ github.event.repository.updated_at}}

格式为ISO 8601
例如 2022-05-15T23:33:38Z

优点:

  • 不需要shell执行
  • 可从您的所有工作流程直接访问
  • 允许 cross-referencing 事件 GitHub

缺点:

  • 严格格式
    您仍然可以在 shell
    中修改格式 例如echo ${{ github.event.repository.updated_at}} | sed 's/:/./g'
  • 不适用于 Act 测试框架

参考文献:
Github context
Event object