# 版本号规范

研究院所有产品的版本号遵循语义化版本号规范(注意本规范和 https://semver.org/lang/zh-CN/ 有些许差别)。

版本号分为三个部分:X.Y.Z,比如1.1.03.1.0-SNAPSHOT3.1.1-alpha14.1.2-beta1

`X.Y.Z`可以使用的值:

  • X只能是数字,从0开始,不允许前面补0。比如0.Y.Z1.Y.Z10.Y.Z、是可以的,01.Y.Za.Y.Z是不允许的。当X为0时,代表该软件还未正式发布,仍处于一种试验性质的状态。

  • Y只能是数字,从0开始,不允许前面补0。比如X.0.ZX.1.ZX.10.Z、是可以的,X.01.ZX.a.Z是不允许的。

  • Z可以是数字,从0开始,也可以数字后面加后缀,比如:

    • X.Y.0X.Y.1X.Y.10X.Y.11,代表了正式发布的版本,可部署在客户生产环境。

    • X.Y.0-alpha1X.Y.0-alpha2,代表了内测版本(还未经内部测试),不可部署在客户生产环境。对应的正式发布版本是X.Y.0

    • X.Y.0-beta1X.Y.0-beta2,代表了公测版本(经过内部测试,未经客户测试),不可部署在客户生产环境。对应的正式发布版本是X.Y.0

    • X.Y.0-SNAPSHOTSNAPSHOT是Java Maven的版本规范,代表了最新构建的不稳定版本,语义包含alpha和beta,不可部署在客户生产环境。对应的正式发布版本是X.Y.0

版本的升级根据情况在对应的部分上递增,高位递增后,低位要清零:

  • X +1,如:1.1.02.0.0

  • Y +1,如:2.2.32.3.0

  • Z +1,如:3.0.13.0.23.0.1-alpha13.0.1-alpha23.0.1-alpha23.0.1(正式发布)

不同部分的版本递增的语义:

  • X +1:说明软件发生了重大更新,要从前一个版本升级到当前版本需要做很多工作,比如:门户V5→V6、一卡通V4→V5、教务V4→V5。因此X的变化基本上是不太会发生的。

  • Y +1:说明这次升级做了一些不兼容的修改,比如:修改了配置项的名字、添加了没有默认值的配置项、修改/删除了某个功能、修改/删除了某个API。

  • Z +1:说明这次升级做了一些兼容性的修改,比如:修改了配置项的默认值、修复了BUG、增加了新功能、增加了某个API、做了某些优化。

从实施人员的角度来看:

  • X +1:不需要理会。这需要学校和公司签订新的升级合同,并且升级时需要迁移数据库,迁移老版本的二开到新版本中等工作,这些超出了实施人员的工作范畴。

  • Y +1:应该先询问开发人员,了解发生了哪些不兼容的修改,以及对应的处理方法。特别要注意配置项的变更、增加,功能的修改、删除、增加。

  • Z +1:仅需要把软件或docker镜像更新到新版本即可,没有额外工作需要做。

对于开发人员:

  • 版本变更前必须从实施人员角度考虑,如果这次变更实施人员只需要改一下版本号就行了,那么就Z +1。

  • 如果不是,那么就Y +1。

  • X +1不是开发人员可以自行决定的。