通过 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),具体使用可以参考文档介绍:

Parameter Description Default
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相关推荐

  1. 用GitHub Actions自动部署Hexo

    本文不算原创,是根据参考文档结合自己的需要修改而成,但也非转载和翻译. 老苏一直用 hexo 发博文,发布过程经历了 三个阶段 第一阶段 : 在家里的台式机上发布 hexo ,流程是先把要发布博文的 ...

  2. 如何使用 Github Actions 自动抓取每日必应壁纸?

    Hello world : ) 微信搜「 程序猿阿朗 」.点赞再看,动力无限. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. 如何 ...

  3. 5 分钟教你快速掌握 GitHub Actions 自动部署博客

    自从 GitHub 宣布 GitHub Actions 在平台上对所有开发人员和存储库可用以来,GitHub Actions 越来越受欢迎.很多第三方平台在生态系统中有速度等限制,将进一步推动开发人员 ...

  4. Dependabot:自动创建GitHub PR修复潜在漏洞

    Dependabot基于GitHub Security Advisory API,旨在帮助开发人员跟踪依赖项.监控程序的安全性,并通过自动创建PR来移除任何潜在的漏洞. Dependabot联合创始人 ...

  5. 利用 Github Actions 自动更新 docfx 文档

    利用 Github Actions 自动更新 docfx 文档 Intro docfx 是微软出品一个 .NET API 文档框架,有一个理念是代码即文档,会根据项目代码自动生成 API 文档,即使没 ...

  6. Github Actions 自动同步到 Gitee

    目录 引言 具体方案 引言 平时开源代码一般已Github为主,但是会遇到网不好的情况,于是考虑将Github仓库自动同步到Gitee上,作为备份. 考虑不能手动做这个事情,于是想到了Github A ...

  7. 使用Github Actions自动部署vue项目到nginx服务器

    解决的问题:妈妈再也不担心我deploy时候手滑了 1. 避免手动执行重复的前端发布流程,节约开发时间和耐心 2. 减少了使用Jenkins类似的工具来做这种简单的发布流程,减少了第三方系统(Jenk ...

  8. 使用GitHub Actions实现Android自动打包apk

    记录一下,免得忘了 实现根据tag自动打包并上传至release 官方文档 workflow name: Android CI# 触发器 on:push:tags:- v*pull_request:t ...

  9. 使用GitHub Actions实现Hexo博客自动发布

    我在使用jenkins实现hexo博客自动发布中介绍了可以使用jenkins实现博客自动发布,其实还有一种更简单的方法,就是GitHub提供的持续集成服务:GitHub Actions.下面就来介绍一 ...

最新文章

  1. C#开发微信门户及应用(25)-微信企业号的客户端管理功能
  2. php程序yii是什么意思,Yii框架啥意思
  3. SAP 电商云 Spartacus UI shipping method 切换时的 spinner 显示
  4. WebClient与WebRequest差异
  5. 顺序表应用2:多余元素删除之建表算法(SDUT 3325)
  6. 命名之法 —— 书名及角色、武功(金庸)
  7. Nopi的学习笔记(C#篇)
  8. TCP/IP协议号大全
  9. Jconsole小记
  10. matlab学习笔记 clc和clear
  11. 什么是SSD TRIM (by quqi99)
  12. 【Python 常用英文单词】——总结Python常用的英文单词 最全版
  13. CSS3基础一篇完结(豪豪的备忘录)
  14. 虚拟机NAT模式无法连外网
  15. rj45插座尺寸图_带灯RJ45插座接口定义及使用说明
  16. ICN6211-6202MIPI转RGB MIPI转LVDS
  17. Vue3基础安装教程
  18. Vue.js 3.0 学习笔记(十)过渡和动画效果
  19. 淘宝技术发展[转载]
  20. 【弱监督显著目标检测论文】Weakly-Supervised Salient Object Detection Using Point Supervison

热门文章

  1. Python基础学习总结__Day3
  2. MAMP升级mysql5.6到5.7
  3. thinkphp与php共享session
  4. 赠与大学毕业生_出售,赠与或交易iPhone之前应该做什么
  5. 计算机复试比重低的学校,又有985院校发布调剂信息,这个34所降低复试比重!...
  6. confd_confd + Nacos | 无代码侵入的配置变更管理
  7. 「读懂源码系列2」我从 lodash 源码中学到的几个知识点
  8. sqlplus命令行登录oracle数据库的N种方法盘点
  9. 2018暑假集训---递推递归----一只小蜜蜂hdu2044
  10. 你不知道的JavaScript(二)