自动release工具

无聊,写个自动release工具,自动升级版本,自动提交,自动打tag,自动推送到远程仓库。

1. 安装

yarn add chalk semver enquirer  execa

2. package.json

 "scripts": {  "release": "node ./scripts/release.js"},

3. scripts/release.js

const fs = require('fs')
const path = require('path')
const chalk = require('chalk')
const semver = require('semver')
const { version: currentVersion } = require('../package.json')
const { prompt } = require('enquirer')
const execa = require('execa')//  版本列表
const versionIncrements = ['patch','minor','major','prepatch','preminor','premajor','prerelease'
]// 步骤打印
const step = msg => console.log(chalk.green(msg))// 增加版本号
const inc = i => semver.inc(currentVersion, i)// 运行脚本
const run = (bin, args, opts = {}) =>execa(bin, args, { stdio: 'inherit', ...opts })/*** 更新版本号* @param {string} version*/
function updatePackage(version) {const pkgPath = path.resolve(__dirname, '../package.json')const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'))pkg.version = versionfs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n')step(`updated package.json version to ${version}\n`)
}/*** 提交 打标签 推送到远程仓库* @param {string} version*/
async function publish(version) {try {await run('git', ['add', '-A'])await run('git', ['tag', '-a', version, '-m', `Release v${version}`])await run('git', ['commit', '-m', `release: v${version}`])await run('git', ['push', '--tags'])await run('git', ['push'])step(`push version to ${version}\n`)} catch (error) {throw new Error(error)}
}// 主函数
async function main() {let versionconst { release } = await prompt({type: 'select',name: 'release',message: 'Select release type',choices: versionIncrements.map(i => `${i} (${inc(i)})`).concat(['custom'])})if (release === 'custom') {version = (await prompt({type: 'input',name: 'version',message: 'Input custom version',initial: version})).version} else {version = release.match(/\((.*)\)/)[1]}if (!semver.valid(version)) {throw new Error(`invalid target version: ${version}`)}updatePackage(version)await publish(version)
}main().catch(err => {console.error(err)
})

4. 运行

yarn release

5.效果

$ yarn release
yarn run v1.22.17
$ node ./scripts/release.js
? Select release type ...
> patch (0.1.1)minor (0.2.0)major (1.0.0)prepatch (0.1.1-0)preminor (0.2.0-0)premajor (1.0.0-0)prerelease (0.1.1-0)custom

自动release工具相关推荐

  1. 开源交互式自动标注工具EISeg

    在人工智能行业有这么一句话:"深度学习有多智能.背后就有多少人工".这句话直接说出了深度学习从业者心中的痛处,毕竟模型的好坏数据占着很大的因素,但是数据的标注成本却让很多从业者感到 ...

  2. 20120520 Linux下mysql的自动备份工具

    文章摘自:http://hi.baidu.com/vb98/blog/item/2ed90cea835fa4cfd439c97f.html linux下的MySQL自动备份工具-第二版2011-10- ...

  3. 业界首个高性能交互式自动标注工具EISeg正式开源,跨越式提升你的标注体验...

    在人工智能行业有这么一句话:"深度学习有多智能.背后就有多少人工".这句话直接说出了深度学习从业者心中的痛处,毕竟模型的好坏数据占着很大的因素,但是数据的标注成本却让很多从业者感到 ...

  4. mybatis代码自动生成工具之maven插件mybatis-generator-maven-plugin(mybatis逆向工程)

    mybatis自动代码生成工具maven插件可以帮助我们轻松的生成pojo.dao.mapper.xml文件,相比于mybatis-generator等其他方式方便许多,话不多说,上代码 先看一下整体 ...

  5. SpringBoot的整合(自动生成工具的使用mysql5和mysql8版本的两种版本和两种生成方式)

    注意:本篇文章连接的数据库为mysql8.0.16版本的,跟低版本的稍微有些不同. 使用mybatis进行开发的时候,model类.mapper.xml.mapper接口等都自己写十分浪费时间,这里介 ...

  6. js 刷新页面但是不闪烁_前端开发还在手动刷新页面?手把手教你搭建一个自动刷新工具...

    作为一名前端,开发web页面是我们的本职工作.在完成一个页面开发的过程中,保存代码然后手动刷新页面查看效果,这样的动作需要重复无数次,虽然一次这样的动作可能只要花费几秒钟的时间,但是次数多了也挺浪费时 ...

  7. iOS应用模块化的思考及落地方案(二)模块化自动构建工具的使用

    1.0 iOS模块化中的问题 前文已经介绍了模块化的流程及一些常见的问题,我们在这里再次总结一下. 在工作中,当我们开始一个新项目的时候,最先考虑的就是模块化工作. 模块化工作的想法是很美好的,可是执 ...

  8. 微软开源的自动机器学习工具上新了:NNI概览及新功能详解

    作者 | 宋驰 来源 | 微软研究院AI头条(ID: MSRAsia) 2018年9月,微软亚洲研究院发布了第一版 NNI (Neural Network Intelligence) ,目前已在 Gi ...

  9. 开源!开源!我写的Anto.exe C#代码自动生成工具.欢迎下载。。

    在开发的过程中开发人员不得不经常要写很多重复的代码, 为了把精力放到更重要的方面去很多人为都做了N多努力,随便google一下自动生成工具, 你都会很容易得到很多这样的工具.园子就有好几款,其中李天平 ...

最新文章

  1. python_2开发简单爬虫
  2. linux ssh连接交换机_java通过ssh协议管理交换机,linux
  3. 【错误记录】Android 应用安装后出现两个启动图标 ( 排查应用及依赖库中配置了 android.intent.category.LAUNCHER 的 Activity )
  4. UML静态建模之用例图
  5. linux:date 命令
  6. Linux系统软件包的管理   3月30日课程
  7. 【Python selenium自动化环境配置】4步搞定ChromeDriver版本选择
  8. PAT甲级1023 大整数加法
  9. SQL Server 2014新特性:其他
  10. ModelSim 入门使用教程
  11. 讲讲那些 H-桥电路 的基本道理
  12. 无锡高二计算机会考内容,无锡期中考试卷分析,看一看高一高二高三数学都考了哪些...
  13. TLS Lab(Transport Layer Security Lab,SEED实验)基于PKI实验内容进行中间人攻击实验
  14. php量表是什么心理量表,气质类型量表——计分标准
  15. 成为互联网企业家的10个理由
  16. 并发编程之深入理解java线程
  17. 图片太大不要慌,简单的调整图片大小
  18. MoCo v1 文献研究 [自监督学习]
  19. html制作windows 10,Windows 10迎来Alpha版HTML编辑器应用
  20. 特斯拉数字车钥匙卡评价

热门文章

  1. 动漫漫画商城(Spring,SpringMVC,MyBatis,SSM,MYSQL,JSP,H-UI)
  2. 中国智能互联炊具行业市场供需与战略研究报告
  3. STM32共用中断和共用中断函数的判断
  4. A Survey on Neural Speech Synthesis
  5. vscode之神级插件整理(持续更新)
  6. 大数算法之大数加减法
  7. LCN分布式事务框架解决分布式事务一致性问题
  8. C++与QML交互总结
  9. python生成word文档的表格_2018-10-04 [日常]用Python读取word文档中的表格并比较
  10. 编写Windows下父亲儿子女儿放取水果进程同步的演示程序。(C/C++)