首页 > 编程语言 >用python实现简单的版本号生成工具

用python实现简单的版本号生成工具

时间:2023-04-04 16:56:26浏览次数:39  
标签:name 版本号 answers 生成 python tag inquirer release

用python实现简单的版本号生成工具

我们发布比较频繁,每次发布都需要从release分支打1个tag,不过可能是因为年纪大了的缘故吧,尽管借鉴了一些版本号的制定规则,不过每次我都记不太住,需要翻文档去重新复习,不如把这步自动化一下,为未来的自己节约一点时间,另外有了工具就好统一规则,后面所有相关的项目都可以用同一套规则来生成版本号,去掉了人工对齐的成本,变相提升了效率。

版本号规则

我们的版本号大概长这个样子

v1.00.0-hotfix-20221111-1
版本号   发布类型 发布时间  第几次发布

  • 版本号规则: 大版本1位 + 小版本2位 + patch版本号1,比如v1.00.0表示大版本是1,小版本是0,patch版本是0
  • 发布类型:普通发布/hotfix/adhoc(临时版本)

设计

首先不考虑写页面做系统,其实用vue随便写个单页应用是可以很快搞定的,不过没那个必要,用命令行工具就好了,简单快速,而且生成了版本号之后可以调用githlab(我们公司用私有化部署的版本)api来自动打tag,在微服务化当道的今天,手动为每次发布的所有repo打版本号本身就不是一个很好的体验。命令行工具在这方面比单页应用更具优势一些。

另外交互式的命令行可以省去很多参数validation的工作量,这也应该是考虑的。随便搜索了一下,发现了1个名为inquirer的库可以很好的满足我的需求。

代码实现

import inquirer
from datetime import datetime

STR_MAP = {
	'regular': '',
	'hotfix': '-hotfix',
	'adhoc': '-adhoc'
}

def build_version(options):
	release_type = STR_MAP[options['release_type'][0]]
	date = datetime.now().strftime('%Y%m%d')
	return f"v{options['version']}{release_type}-{date}-{options['seq']}"

if __name__ == "__main__":

	questions = [
		inquirer.Text("version", message="Please enter a version, for sample 1.00.0", default='2.00.0'),
		inquirer.Checkbox(
			"release_type",
			message="Please select a release type",
			choices=["regular", "hotfix", "adhoc"],
			default=['regular']
		),
		inquirer.Text("seq", message="please enter the sequence", default='1'),
		inquirer.Confirm(
			"correct",
			message="This will generate a tag name. Continue?",
			default=False,
		),
	]
	answers = inquirer.prompt(questions)

	if answers['correct']:
		tag_name = build_version(answers)
		print(tag_name)
	else:
		print('nothing to do')

整体流程非常的简单

  • 提示用户输入版本号,也就是类似1.00.0这串,由于给了default值,所以只需要稍微修改一下就可以了
  • 提示用户选择发布类型,默认是regular,也就是正常发布
  • 提示用户输入当天的发布次数,默认值给了1,用户可以自行修改
  • 提示用户确认
  • 打印版本号

效果演示

➜  deploy python create_tag.py
[?] Please enter a version, for sample 1.00.0: 2.00.0
[?] Please select a release type:
 > X regular
   o hotfix
   o adhoc

[?] please enter the sequence: 1
[?] This will generate a tag name. Continue? (y/N): y

v2.00.0-20221118-1

后续

由于我打通了gitlab的api,版本号生成之后我会提示用户选择项目并自动去release分支打tag,如果tag创建成功的话,我就自动选择该tag进行发布。下面是一些示例代码。

questions = [
		inquirer.Confirm(
			"create_tag",
			message=f"tag name is {tag_name}, do you want to create a tag on gitlab?",
			default=False,
		),
	]
	answers = inquirer.prompt(questions)

	if answers['create_tag']:
		questions = [
			inquirer.Checkbox(
				"project",
				message="Please select a project",
				choices=["project A", "project B", "Porject C"],
			),
		]
		answers = inquirer.prompt(questions)

		git = GitLabAPI(answers['project'])
		git.create_tag(tag_name)
	else:
		print('nothing to to. quit')
		exit()

总结

当一件事情需要周期性的手工做n次的时候,花一点点时间进行自动化是一件非常值得的事情的。既提升了工作效率,又提升了代码量,一举两得何乐不为呢?

标签:name,版本号,answers,生成,python,tag,inquirer,release
From: https://www.cnblogs.com/nbkhic/p/17286983.html

相关文章

  • python-torch numpy matploit pandas
    title:深度学习基础torchnumpypandasmatplotlibnumpy数组对象是NumPy中最核心的组成部分,这个数组叫做ndarray,是“N-dimensionalarray”的缩写。其中的N是一个数字,指代维度.在NumPy中,数组是由numpy.ndarray类来实现的,它是NumPy的核心数据结构。而Python......
  • Python3内置函数之R系列
    1、range()在Python中,range()函数用于创建一系列数字的序列,常用于for循环中,可以接受1到3个参数,具体形式如下:range(stop):表示生成从0开始到stop-1结束的整数序列,步长为1。range(start,stop):表示生成从start开始到stop-1结束的整数序列,步长为1。range(start,stop,step)......
  • python文件操作:r、w、a、r+、w+、a+和b模式
    对文件操作的基本步骤f=open('a.txt','r',encoding='utf-8')data=f.read()print(data)f.close()文件的打开和关闭使用open()、close()函数,文件刚打开时光标在最前面。open()函数的第一个参数为要打开的文件名,默认路径为这个脚本所在路径;第二个参数为打开模式,第三个参数为编......
  • Python3内置函数之P系列
    1、pow()pow()函数是Python内置函数之一,用于计算一个数的幂。它接受两个参数,第一个参数为底数,第二个参数为指数,如果提供第三个参数,则表示对结果取模。 2、print()print()函数是Python内置函数之一,用于输出指定的对象。它可以接受多个参数,用逗号分隔,它们将被依次输出,并且......
  • Python3内置函数之O系列
    1、object()object()是Python的内置函数之一,它返回一个新的object对象。这个对象没有任何特殊的属性或方法,它是所有类的基类,即所有Python类都直接或间接地继承自object类。如果您在Python中定义一个新的类,并且没有明确指定继承哪个类,那么该类将自动成为object类的子类。......
  • Python Opencv等比例缩放图片
    PythonOpencv等比例缩放图片前言前提条件相关介绍实验环境等比例缩放图片代码实现输出结果前言本文是个人使用PythonOpencv处理图片的笔记,由于水平有限,难免出现错漏,敬请批评改正。更多精彩内容,可点击进入我的个人主页查看前提条件熟悉Python相关介绍Python是一种跨平台的计算机......
  • python去掉重复值的方法--四种
    my_list=[1,1,1,1,2,3,3,3,4,5,5,56,6,7,77,7,5,5,3]#集合法:缺点是结果会打乱原始数据的顺序print(set(my_list))#列表法:缺点是代码较长res_list=[]#用来存放结果foriinrange(len(my_list)):ifmy_list[i]notinres_list:res_list.append(my_list[i])print(res_list......
  • 《Python编程快速上手—让繁琐工作自动化》实践项目答案:第六章
    实践项目表格打印编写一个名为printTabel()的函数,它接受字符串的列表的列表,将它显示在组织良好的表格中,每列右对齐,假定所有内层列表都包含同样数目的字符串,例如:你的printTable()函数将打印出:点击查看代码tableData=[['apples','oranges','cherries','banana'],......
  • 使用wsimport快速生成soap客户端代码
    在jdk的bin目录下cmd进入操作界面使用命令wsimport.exe-encodingutf-8-keep-s输出java文件路径wsdl文件路径 ......
  • python基础六(函数基础及参数使用)
    一、函数定义1、什么是函数函数就相当于具备某一功能的工具函数的使用必须遵循一个原则:先定义后调用2、为何要用函数代码冗余,程序的组织结构不清晰,可读性差可维护性、扩展性差3、如何用函数#定义函数#定义的语法def函数名(参数1,参数2,........