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

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 环境变量中,脚本内容如下:

$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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用win7的applocker功能来有组织的阻止相关软件运行

我有4年没用360相关的软件了,没有360的弹窗用电脑就是舒服。但是我的电脑有时候会有别人来用,我的同学或者我的父母。但是他们经常会自作主张地在我的电脑上装上360卫士,还有360浏览器。每次都是装了我再删,反反复复也不是办法。后…

人工智能会让工作环境变得更公平,还是更压抑?

人工智改变的不仅仅是工作内容……人工智能(AI)正在踏足商业领域。正如我们本周的特别报道所诠释到的那样,所有类型的公司都在利用人工智能来预测需求,雇佣员工和对付客户。2017年,企业在与人工智能相关的并购交易中支…

递归C语言排列组合方式,递归解决一种排列组合的方法

问题场景:比如说一件商品有3中属性,每个属性又有3种不同的值,那么此时问,这几种属性可能的组合性,相信你很快就得到结果为"33327"种,此时你可以实现的方式可以为三个for循环嵌套来实现&#xff0…

windows服务autofac注入quartz任务

概述Autofac 是一款超赞的.NET IoC 容器 . 它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改 . 它的实现方式是将常规的.net类当做 组件 处理。我们通常在一些情况下需要软件具有一个自动执行某些任务的功能,但是又不希望直接启动…

离开时请告诉自己生意就是生意

离开时请告诉自己生意就是生意 离职或者被离职,是职场中很常见的事情,每天这个星球上不知道要发生多少次,不管你经历过与否、体会到其中的滋味与否,他都会一直存在着!当这一切发生时,不管你是获利者还是受害…

如何假装成一名好程序员?

最近我对一位资深程序员就工作生活问题进行了深度采访,采访内容如下:Q:请问你工作多久了?A:5年了Q:你觉得,程序员这份工作对你有什么影响吗?A:有Q:那你的生活…

c语言常见英文提示词,c语言-常见英语-词汇及其他提示语.doc

c语言-常见英语-词汇及其他提示语运算符与表达式:1.constant 常量2. variable 变量3. identify 标识符4. keywords 关键字5. sign 符号6. operator 运算符7. statement语句8. syntax 语法9. expression 表达式10. initialition 初始化11. number format 数据格式12 …

不一样的虚假(Bogus)和骗子(Faker)

首先声明,Bogus是一个Nuget包的名称,Faker是它内部的一个类,这个库的作用就是模拟生成实体类的数据,特别适合测试时的场景,不用苦思冥想,辛辛苦苦来造不同的实体类了。当然,造出来的都是虚假的(…

用一个Sql语句查询出表中的一个字段的数据类型

select name,(select name from systypes where xusertypesyscolumns.xusertype) from syscolumns where idobject_id(aa) 如果是其它的表,把aa换成别的表名就行了 转载于:https://blog.51cto.com/lightweight/502307

c语言 gbk字模点阵数组,GBK点阵显示字库的制作和使用

GBK编码共收录汉字21003个、符号883个,并提供1894个造字码位,简、繁体字融于一库。以两个字节表示一个汉字,编码范围是0x8140~0xfefe,兼容GB2318,并覆盖了unicode中的所有汉字。Win7记事本默认以GBK保存汉字。开发环境…

云服务器下行_腾讯云轻量应用服务器简单测评

这台机器的配置是1核心1G内存3M带宽,一直在吃灰,到现在才想起来应该测评一下腾讯云活动推荐​cloud.tencent.com测评机器概况从图中可以看到这台机器CPU采用 AMD EPYC 7K62 48-Core Processor 主频2.60GhzI/O大致129.3MB/S 用来建站是没问题的。3Mbps上行带宽跑满,下…

这是我见过的最全的训练数据集,没有之一!

从大学毕业起,小编就开始收集各类数据集,经过近几年的积累和沉淀,小编收集整理了32套数据集,内容涵盖“自动驾驶”、“人脸识别”、“世界杯”、“股票数据”、“基因组数据”、“全球各大社交媒体数据”等。现在,小编…

运维小姐姐说这篇Consul集群和ACL配置超给力(保姆级)

前言上一篇简单介绍了Consul,并使用开发模式(dev)进行流程演示,但在实际开发中需要考虑Consul的高可用和操作安全性,所以接着来聊聊集群和ACL的相关配置,涉及到的命令会在环境搭建过程中详细介绍。正文关于…

Linux5配置jboss环境

Linux5配置jboss环境 说明: Linux版本:Redhat Enterprise Linux 5 JDK版本:jdk1.6.0_21(安装文件:jdk-6u21-linux-i586-rpm.bin) Jboss版本:jboss-5.1.0.GA 进入系统的用户是用root,拥有最大的权限。 1…

c语言判断x的个位数是否为5,用C语言编程从键盘输入一个正整数,判断其个位数是否为5,若是5则输出“yes”,否则输出“no”...

#include int main(){int five;printf("输入一个整数:");scanf("%d",&five);while(five>10){five five%10;}if(five 5)printf("yes");elseprintf("no");return 0;}扩展资料:“模”是“Mod”的音译,模运…

从基础概念到数学公式,这是一份520页的机器学习笔记(图文并茂)

导读:近日,来自SAP(全球第一大商业软件公司)的梁劲(Jim Liang)公开了自己所写的一份 520 页的学习教程(英文版),详细、明了地介绍了机器学习中的相关概念、数学知识和各种…

XP下Virtualbox虚拟Ubuntu共享文件夹

环境:主机操作系统是Windows XP,虚拟机是Ubuntu 10.10,虚拟机是VirtualBox 4.0.0。 1. 安装增强功能包(Install Guest Additions) 安装好Ubuntu 10.10后,运行Ubuntu并登录。然后在VirtualBox的菜单里选择"设备(Devices)"…

Excel模板导出之动态导出

说明目前Magicodes.IE已支持Excel模板导出时使用JObject、Dictionary和ExpandoObject来进行动态导出,具体使用请看本篇教程。本功能的想法、部分实现初步源于arik的贡献,这里再次感谢arik!在开始本篇教程之前,我们重温一下模板导出…

android textview动态设置,android – 如何动态设置文本到TextView?

我想在活动开始时显示连接的ssid和ip地址.它包含一个图像视图(用于标题,因为我没有使用操作栏)和4个文本视图(ssid标签,ssid值,ipaddr标签和ipaddr值)我已经测试了获取ssid和ipaddr的代码,但它们运行良好.问题是我无法将它们显示在TextView中.在此代码中,没有错误,但是当活动开…

简述原型模型的特点_3D打印硅胶复模手板的步骤和特点有哪些

硅胶手板是一种主要用于手板模制作的硅胶制品,手板硅胶主要要求:不缩水、不变形,硬度合适不太复杂的产品使用。硅胶手板经常用硅胶模具来制造为产品快速成型复制提供便利性,产品收缩率可达到千分之二,主要用于手板模型…