通过 GitHub Actions 自动创建 Github Release
通過 GitHub Actions 自動創建 Github Release
Intro
在 GitHub 上維護了幾個小的開源項目,每次在發布新版本的時候會創建一個 release,這樣可以比較方便的找到對應的版本的代碼,不需要再人肉的從 git log 中找到指定的 commit,而且在 GitHub 上創建 Release 的話別人可以方便的關注項目新版本的發布,之前都是手動創建 release,最近看到 docfx 的項目配置了自動創建 release,于是想給自己的項目里加上自動創建 release。
Sample
可以看一個實際的示例效果:
release 中的簡介是后來編輯加上去的,因為選的這個 Action 暫時不支持設置 release 的簡介部分
Github ?Actions 配置
name:?Release on:push:branches:?[?master?] jobs:build:name:?Releaseruns-on:?windows-lateststeps:-?uses:?actions/checkout@v1-?name:?Setup?.NET?Coreuses:?actions/setup-dotnet@v1with:dotnet-version:?5.0.x-?name:?Buildshell:?pwshrun:?.\build.ps1?--stable=true-?name:?Get?Release?Versionshell:?pwshrun:?.\build\getReleaseVersion.ps1-?name:?Create?GitHub?releaseuses:?marvinpinto/action-automatic-releases@latestwith:repo_token:?"${{?secrets.GITHUB_TOKEN?}}"automatic_release_tag:?${{?env.ReleaseVersion?}}title:?${{?env.ReleaseVersion?}}prerelease:?falsefiles:?|artifacts/packages/*整個 Action 大體上可以分為三步,第一步是安裝 dotnet 環境并且 build package,第二步是獲取當前 package 的版本,用作 release 的 tag,第三步就是要創建 release 了,創建 release 使用的是一個開源的別人封裝好的創建 release 的 action 模板(marvinpinto/action-automatic-releases),具體使用可以參考文檔介紹:
| repo_token** | GitHub Action token, e.g. "${{ secrets.GITHUB_TOKEN }}". | null |
| draft | Mark this release as a draft? | false |
| prerelease | Mark this release as a pre-release? | true |
| automatic_release_tag | Tag name to use for automatic releases, e.g latest. | null |
| title | Release title; defaults to the tag name if none specified. | Tag Name |
| files | Files 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 環境變量中,腳本內容如下:
$versionPath=$PSScriptRoot+"/version.props" $versionXml=([xml](Get-Content $versionPath)) $versionProperty=$versionXml.Project.PropertyGroup $ReleaseVersion=$versionProperty.VersionMajor+"."+$versionProperty.VersionMinor+"."+$versionProperty.VersionPatch $ReleaseVersion 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
總結
以上是生活随笔為你收集整理的通过 GitHub Actions 自动创建 Github Release的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何运用并行编程Parallel提升任务
- 下一篇: windows服务autofac注入qu