我管理一堆免费&amp的发布;开源软件。只要每次我发布发布,我都会发现一种新颖的方式来搞砸它。现在已经积累了足够的斯多克ups我想分享我的一些错误和howi(试图)阻止他们发生两次。
起初,我手动做了一切。这足以满足具有简单的简易进程的东西 - 基本上要计算提交,推送和每天调用它的东西。但即使这也令人疑惑,我经常在挑选正确的版本号时进行次要。所以,我写了一个小脚本:emvver。 Semver Patchs颠簸补丁版本,Semver次要颠簸的次要版本,以及Semver主要版本,基于语义版本化。我习惯了使用这个脚本而不是手动制作标记。 Nextfuckup很快就呈现了:在准备短路时,我经常会喂它交换的提交,并且变更搞砸了。因此,我更新了脚本托伦相应的Shortlog命令并使用它预先填充注释标记,启动编辑器根据需要调整ChangeLog。
很快我想将这个脚本应用于其他项目,但并非所有这些脚本都使用过Mymantic versioning。我更新了它为刚刚使用Major.Minor版本的项目工作。但是,出现了另一个问题:MakeFile或Meson.Build中指定的版本号.Build。我不会以许多创造性方式他妈的这一点:完全忘记它;更新但没有提交;更新它并提交它,但标记错误的消息;特别是Wlroots indifficires,因为我也不得不更新渗透,这有一个特殊的。要解决这些问题,我添加了一个自定义.git / _incr_versionscript,它可以在每个回购的基础上添加其他逻辑,如果存在,则更新了Semver ToCall此脚本。 1
最终,我去了度假并在那里发了一个释放。我在家庭工作站上放入的_incr_version脚本被录制为版本控制,并没有和我一起度假,导致yenanother搞砸了发布。我将它从.git / _incr_version移动到Contract / _incr_version。然而,我犯了错误,离开了旧的道路,这意味着我从未注意到另一个项目的脚本仍然在.git,直到我去另一个假期并搞砸了。添加警告,检测脚本是否位于旧路径中...
我的一些项目根本不使用语义版本,但仍然有所有其他GOTCHAS,因此我添加了一个选项只需使用用户指定的覆盖来覆盖自动版本批量的选项。有一段时间,这很好。但是,不可避免地,无论我多么统治我的错误,我将永远发现重新搞砸的新颖和新的方式。当我在高山Linux机器上发布释放时,下一个船只来了,该机器已经邮寄了BusyBox而不是GNU Tools.Turns Out BusyBox Gzip产生与GNU输出不匹配的输出,这意味着我签名的Tarballs与ByGithub所生成的Tarballs不同。更新签名脚本以将tarball保存到磁盘(以前,它在管道中居住),并将这些与发布一起... 2
当然,没有额外的方法在这一点上搞砸了。我必须haveevey基地覆盖,对吗?错误的。错了错了。在下次释放ISHipped上,我错误地从一个特征分支中讨论了所有内容,并在稳定的释放中发送了不完整的代码。更新脚本,如果没有检查大师分支,那么,当然,当然,另一个恐惧:我在没有先拉动的情况下taggetgeda发行版,当我推送时,git愉快地拒绝了mybranch并接受了标签,作为发布。 updatethe脚本给git拉扯...
我注定要创造出来的释放工具。如果你想拯救它来自我所犯的一些错误,你可以找到我的Semver脚本。
当然,这些_incr_version脚本中的每一个都证明了他们自己的许多错误。 ↩︎ Arch Linux的Eli Schwartz还将一个补丁发送到BusyBox,这使得他们的GZIP实现与GNU一致。 ↩︎