当前位置:   article > 正文

通过 GitHub Actions 自动创建 Github Release

git release create

通过 GitHub Actions 自动创建 Github Release

Intro

在 GitHub 上维护了几个小的开源项目,每次在发布新版本的时候会创建一个 release,这样可以比较方便的找到对应的版本的代码,不需要再人肉的从 git log 中找到指定的 commit,而且在 GitHub 上创建 Release 的话别人可以方便的关注项目新版本的发布,之前都是手动创建 release,最近看到 docfx 的项目配置了自动创建 release,于是想给自己的项目里加上自动创建 release。

Sample

可以看一个实际的示例效果:



release 中的简介是后来编辑加上去的,因为选的这个 Action 暂时不支持设置 release 的简介部分

Github  Actions 配置

  1. name: Release
  2. on:
  3.   push:
  4.     branches: [ master ]
  5. jobs:
  6.   build:
  7.     name: Release
  8.     runs-on: windows-latest
  9.     steps:
  10.     - uses: actions/checkout@v1
  11.     - name: Setup .NET Core
  12.       uses: actions/setup-dotnet@v1
  13.       with:
  14.         dotnet-version: 5.0.x
  15.     - name: Build
  16.       shell: pwsh
  17.       run: .\build.ps1 --stable=true
  18.     - name: Get Release Version
  19.       shell: pwsh
  20.       run: .\build\getReleaseVersion.ps1
  21.     - name: Create GitHub release
  22.       uses: marvinpinto/action-automatic-releases@latest
  23.       with:
  24.         repo_token: "${{ secrets.GITHUB_TOKEN }}"
  25.         automatic_release_tag: ${{ env.ReleaseVersion }}
  26.         title: ${{ env.ReleaseVersion }}
  27.         prerelease: false
  28.         files: |
  29.           artifacts/packages/*

整个 Action 大体上可以分为三步,第一步是安装 dotnet 环境并且 build package,第二步是获取当前 package 的版本,用作 release 的 tag,第三步就是要创建 release 了,创建 release 使用的是一个开源的别人封装好的创建 release 的 action 模板(marvinpinto/action-automatic-releases),具体使用可以参考文档介绍:

ParameterDescriptionDefault
repo_token**GitHub Action token, e.g. "${{ secrets.GITHUB_TOKEN }}".null
draftMark this release as a draft?false
prereleaseMark this release as a pre-release?true
automatic_release_tagTag name to use for automatic releases, e.g latest.null
titleRelease title; defaults to the tag name if none specified.Tag Name
filesFiles to upload as part of the release assets.null

  • Parameters denoted with ** are required.

  • The files parameter supports multi-line glob patterns, see repository examples.

上面的 ${{ env.ReleaseVersion }} 表示从 GitHub Actions 环境中获取变量 ReleaseVersion 的值,而 ReleaseVersion 是在上一步中执行的 powershell 脚本中设置的,GitHub Actions 中的环境变量并不直接等于系统的环境变量,出于安全考虑,GitHub Actions 使用了一个自定义的变量 GITHUB_ENV 来支持用户自定义环境变量,我们需要把自定义的变量放在这里面才能跨 step 共享

powershell 脚本比较简单就是获取 package version 并将其设置到 GitHub Actions 环境变量中,脚本内容如下:

  1. $versionPath=$PSScriptRoot+"/version.props"
  2. $versionXml=([xml](Get-Content $versionPath))
  3. $versionProperty=$versionXml.Project.PropertyGroup
  4. $ReleaseVersion=$versionProperty.VersionMajor+"."+$versionProperty.VersionMinor+"."+$versionProperty.VersionPatch
  5. $ReleaseVersion
  6. Add-Content -Path $env:GITHUB_ENV -Value "ReleaseVersion=${ReleaseVersion}"

最后设置脚本的这里折腾了好久,因为官方给的示例是基于 Bash 的,基于 Linux  的示例,直接使用并没有效果,最后参考了这里的https://github.community/t/empty-github-env-variables-on-powershell/147626 的答案,使用了上面这种方式终于可以了,在 Linux 中需要使用 echo "ReleaseVersion=${ReleaseVersion}" >> $GITHUB_ENV,详细信息可以参考 https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable

More

以上的示例是在 Windows 上,有需要的可以调整成 Linux 进行使用,只需要把获取和设置 ReleaseVersion 的逻辑换一下就可以了

这不仅仅适用于 Nuget 包的发布,同样可以适用于其他任何需要发布的项目

目前唯一的不够完美的地方就是不支持设置介绍部分,已经有一个 issue,有需要的可以关注一下 https://github.com/marvinpinto/actions/issues/19

现在 docfx 项目在使用这个 GitHub Action 来做自动发布 release,所以也使用了这个 Action,但是没看明白 docfx 项目是在哪里设置版本的,有兴趣的可以看一下 docfx 项目,目前 3.0 版本正在使用自动发布 release 的功能 https://github.com/dotnet/docfx/blob/v3-release/.github/workflows/release.yml

References

  • https://github.com/WeihanLi/WeihanLi.Common

  • https://github.com/WeihanLi/WeihanLi.Common/blob/dev/.github/workflows/release.yml

  • https://github.com/WeihanLi/WeihanLi.Common/actions/runs/671183725

  • https://github.community/t/empty-github-env-variables-on-powershell/147626

  • https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable

  • https://github.com/marvinpinto/action-automatic-releases

  • https://github.com/marvinpinto/actions/issues/19

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号