在 GitHub Actions 中添加基于日期的标签

Posted

技术标签:

【中文标题】在 GitHub Actions 中添加基于日期的标签【英文标题】:Bump date-based tag in GitHub Actions 【发布时间】:2022-01-17 09:08:00 【问题描述】:

我正在尝试使用发布标签基于日期的 GitHub Actions 创建 project 的自动发布。我不想使用标准语义版本控制,因为这个项目是另一个使用基于日期的版本控制的项目的分支。我发现了有关在工作流程中获取日期的帖子,并且到目前为止:

name: Publish

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  publish:
    name: Publish release of font files
    runs-on: ubuntu-latest
    steps:
      - name: Create foo file
        run: |
          mkdir cascadios
          > cascadios/foo.txt
          
      - name: Get tag name from date
        id: tag_name
        run: echo "::set-output name=date::$(date +'%y%m.%d')"

      - name: Zip font files
        run: |
          cd cascadios
          zip ../cascadios-$ steps.tag_name.outputs.date .zip *
          cd ..

      - name: Create tag
        uses: mathieudutour/github-tag-action@v6.0
        id: tag_version
        with:
          github_token: $ github.token 
          custom_tag: $ steps.tag_name.outputs.date 

注意:我让它创建一个空白文件来释放以节省 15 分钟的构建时间。

这很好用,直到我在一天内发布了两个版本(例如今天我正在大量测试此工作流程)。我怎样才能得到它,这样我就可以在标签中添加一个动态补丁号,这样就不会引起冲突?一个示例可能类似于 v2112.13.0

【问题讨论】:

【参考方案1】:

您可以使用我们的版本控制库 - https://github.com/relizaio/versioning

然后您可以将版本模式声明为:YYYY.0M.0D.Micro

然后以下命令将生成一个基本版本:

docker run --rm relizaio/versioning -s YYYY.0M.0D.Micro

现在,如果您已经有一个版本,比如 2021.12.14.1 并且想要升级它,您可以这样做

docker run --rm relizaio/versioning -s YYYY.0M.0D.Micro -v 2021.12.14.1 -a bump

如果您在 12 月 14 日调用它,这将产生 2021.12.14.2,如果您在 12 月 15 日调用此命令,则会产生 2021.12.15.0

【讨论】:

太酷了!我不知道“CalVer”有一个名字,所以以后要坚持下去。有没有办法格式化使得年月之间没有分隔符?即,YY0M 代表 2112?尝试使用 YY0M 时出现 RuntimeException。 谢谢!该库目前主要依赖于分隔符,我们在自述文件中列出了支持的选项,但我想我可以添加YY0M YYYY0M - 应该是微不足道的,今天晚些时候会尝试提交。 那太棒了!谢谢! 此外,虽然这可能是一个重大更改,但可能值得添加一个“静默”分隔符(不显示在输出中)或基于% 进行变量替换,就像使用 Linux date. 现在应该支持 YYOM - 请试一试。关于静音分隔符,我会考虑,但这将是一个很大的变化。因为当我们固定版本时,目前正在积极使用分隔符 - 即您可以将一个 pin 设置为 2112.12.Micro - 它只会在不更改日期的情况下碰撞 Micro(例如 Ubuntu 版本控制,例如当他们发布补丁时)。顺便说一句,如果你想保持联系 - 随时加入 DevOps 社区 Discord - devopscommunity.org - 你总是可以在那里找到我。

以上是关于在 GitHub Actions 中添加基于日期的标签的主要内容,如果未能解决你的问题,请参考以下文章

使用 GitHub Actions 创建标签而不是发布

将用户添加到存储库时触发 Github Actions

在 GitHub Actions 中使用 docker 文件

在 GitHub Actions 中缓存 node_modules

如何在推送事件中跳过 GitHub Actions 作业?

这个开源项目有点意思,利用Github Actions实现贴吧自动签到!