Rugged发布指南

本发布指南主要受到Hipparchus发布指南Orekit发布指南的启发。它列出了过去发布新版本Rugged所使用的步骤。如果有疑问,请咨询专家:Sébastien Dinot sebastien.dinot@csgroup.eu(有关网站问题)和Luc Maisonobe luc.maisonobe@csgroup.eu(有关其他问题)。

先决条件

  1. 获取Rugged签名密钥的私钥,密钥ID:9A928E5485FBC44A2A4F9C2E9128808ECB6C9DED
  2. 在OSSRH上注册账号,并将其与Rugged项目关联,参见:https://central.sonatype.org/pages/ossrh-guide.html

如果需要帮助,请在Rugged论坛的开发部分提问。

一旦您拥有SonaType OSS账号,相应的凭据必须在$HOME/.m2/settings.xml文件的servers部分中设置,使用ossrh作为id:

<servers>
  <server>
    <id>ossrh</id>
    <username>连接到OSS网站的用户名</username>
    <password>加密的密码</password>
  </server>
</servers>

使用mvn -ep生成加密密码。

安装Graphviz

Graphviz (dot)用于生成技术文档(静态网站)的图表。

验证develop分支的状态

在进行任何操作之前,请在持续集成网站上检查develop分支的状态是否正常:

  • 所有测试通过;
  • 代码覆盖率达到要求;
  • 没有错误、漏洞或代码异味。

如果有问题,请先修复警告和错误!

还需要在Gitlab CI/CD上检查develop分支的状态是否正常(即所有阶段都通过)。

准备发布的Git分支

发布将在专用分支上进行,而不是直接在主分支或develop分支上进行。因此,必须创建一个新分支,并用于其他所有操作:

git branch release-X.Y
git checkout release-X.Y

更新maven插件版本

发布是更新maven插件版本的好机会。它们都集中在一个地方,在rugged/pom.xml中的一组属性中,例如:

<rugged.spotbugs-maven-plugin.version>4.0.4</rugged.spotbugs-maven-plugin.version>
<rugged.jacoco-maven-plugin.version>0.8.5</rugged.jacoco-maven-plugin.version>
<rugged.maven-assembly-plugin.version>3.1.1</rugged.maven-assembly-plugin.version>
...

您可以使用http://search.maven.org/#search上的搜索功能找到插件的最新版本。所有属性的名称都遵循rugged.some-plugin-name.version的模式,应该在Web表单中使用插件名称来检查可用版本。

请注意,在某些情况下,由于不兼容性,无法使用最新版本。例如,当插件最近没有更新并且与其依赖项的较新版本发生冲突时。

还要注意,某些插件使用可能需要更新的配置文件。这通常是maven-checkstyle-pluginspotbugs-maven-plugin的情况。可能需要检查/checkstyle.xml/spotbugs-exclude-filter.xml文件。

在提交这些更改之前,您必须检查一切是否正常运行。因此,请运行以下命令:

mvn clean
LANG=C mvn -Prelease site

如果出现问题,请通过更改插件配置来修复问题,或者回滚到插件的早期版本。

浏览生成的站点,从页面target/site/index.html开始,检查是否正确呈现了所有内容。您还可以检查页面的内容。

当一切正常运行且生成的站点正常时,您可以提交更改:

git add rugged/pom.xml rugged/checkstyle.xml rugged/spotbugs-exclude-filter.xml
git commit -m "更新maven插件版本。"

更新changes.xml

完成src/changes/changes.xml文件。

发布日期和描述通常在开发过程中仅设置为TBD,必须设置为适当的值。此步骤中的发布日期只是一个猜测,大约在未来一两周内,以考虑到5天的发布投票延迟。

用描述版本发布的文本替换TBD描述:说明它是一个次要版本还是主要版本,列出版本引入的主要功能等(请参见以前版本的描述示例)。

提交changes.xml文件。

git add src/changes/changes.xml
git commit -m "为正式发布更新changes.xml。"

更新文档

需要更新多个文件以考虑新版本:

文件名 用途 需要更新
src/site/markdown/index.md 站点首页 更新关于新功能的文本(参见 changes.xml 中的更改)
src/site/markdown/downloads.md.vm 下载链接 声明新版本,不要忘记日期

更新完文件后,提交更改:

git add src/site/markdown/*.md
git commit -m "为发布更新文档。"

更改库版本号

pom.xml 文件包含库的版本号。在开发过程中,该版本号的形式为 X.Y-SNAPSHOT。发布时,必须去掉 -SNAPSHOT 部分。

提交更改:

git add pom.xml
git commit -m "为正式发布删除版本号中的 -SNAPSHOT。"

检查 JavaDoc

根据 JDK 版本(Oracle、OpenJDK 等),可能会出现一些 JavaDoc 警告。通过运行以下命令确保没有 JavaDoc 警告:

mvn javadoc:javadoc

如果可能,使用不同的 JDK 版本运行上述命令。

标记和签署 git 仓库

当完成了所有前面的步骤后,本地 git 仓库保存了发布的源代码和构建文件的最终状态。必须对其进行标记并签署。请注意,在投票结束之前,标记只能用 -RCx 后缀进行签署,以表示发布候选版本。一旦投票成功,将在同一提交上放置没有 -RCx 后缀的最终标记(因此该提交将有两个标记)。使用以下命令进行标记和签署,将 -RCn 替换为发布候选版本号:

git tag X.Y-RCn -s -u 9A928E5485FBC44A2A4F9C2E9128808ECB6C9DED -m "版本 X.Y 的第 n 个发布候选版本。"

应使用以下命令验证标记:

git tag -v X.Y-RCn

推送分支和标记

当标记准备好后,必须将分支和标记推送到 Gitlab,以便每个人都可以审查:

git push --tags origin release-X.Y

静态网站(技术文档)

静态网站是在本地生成的,使用以下命令:

mvn clean
LANG=C mvn site

当工作合并到developrelease-*master分支时,官方网站会自动更新到托管平台。

生成签名文件

当这些设置已经完成后,通过运行以下命令来生成签名文件:

mvn deploy -DskipStagingRepositoryClose=true -Prelease

在生成过程中,maven会触发gpg,要求用户输入密码来访问签名密钥。如果maven没有提示您,请添加-Dgpg.passphrase=[密码]

命令执行完毕后,登录到SonaType OSS网站https://oss.sonatype.org/,检查暂存库中是否包含预期的带有关联签名和校验和的文件:

  • rugged-X.Y.pom
  • rugged-X.Y.jar
  • rugged-X.Y-sources.jar
  • rugged-X.Y-javadoc.jar

签名和校验和文件的名称类似,添加了扩展名.asc.md5.sha1

有时,部署到Sonatype OSS网站还会添加带有双扩展名.asc.md5.asc.sha1的文件,实际上它们是签名文件上的校验和文件,没有任何用途,可以删除。

删除rugged-X.Y.source-jar*,因为它们是rugged-X.Y-sources.jar*文件的重复项。然后点击“Close”按钮。

更新Rugged测试网站中的Rugged版本

在发起投票之前,需要对Rugged网站进行一次编辑。获取当前代码:

git clone https://gitlab.orekit.org/orekit/website-2015

切换到develop分支,并编辑_data/rugged/versions.yml,将新版本X.Y添加到列表中。

一旦修改推送到develop分支,测试网站将会更新

发起投票

现在一切准备就绪,开发人员和PMC可以对发布进行投票。在论坛的Rugged开发类别中创建一个帖子,主题行的格式如下:

[VOTE] 从发布候选版本n中发布Rugged X.Y

内容的格式如下:

这是一个投票,目的是发布Rugged库的X.Y版本。
X.Y版本是一个维护版本。

X.Y版本的亮点包括:
  - 功能1描述
  ...
  - 功能n描述

发布候选版本n可以在GitLab仓库的release-X.Y分支中找到,标签为X.Y-RCn:
<https://gitlab.orekit.org/orekit/rugged/tree/X.Y-RCn>

发布说明可以在这里阅读:
<https://test.orekit.org/site-rugged-X.Y/changes-report.html>

Maven构件可在此处获取:
<https://oss.sonatype.org/content/repositories/orgorekit-xxxx/>

投票将在120小时后进行统计,时间为20yy-mm-ddThh:mm:00Z(这是UTC时间)。

您还应该提醒PMC成员,让他们知道投票。根据项目治理,他们的投票对于发布是至关重要的。

投票失败

如果投票失败,必须通过删除存储库来从OSS网站中删除Maven构件。然后必须创建一个新的发布候选版本,包括新的编号、新的标签和新的构件。需要对这个新的发布候选版本进行另一次投票。因此,请进行必要的更改,然后从“标记和签署git存储库”步骤开始。

投票成功

如果发布候选版本的投票成功,请按照以下步骤发布发布版本。

标记发布版本

由于投票通过,必须向成功的发布候选版本添加最终签名的标签,并进行验证和推送:

git tag X.Y -s -u 9A928E5485FBC44A2A4F9C2E9128808ECB6C9DED -m "版本 X.Y."
git tag -v X.Y
git push --tags

将发布分支合并到主分支

将发布分支合并到master分支中,以包含所做的任何更改。

git checkout master
git merge --no-ff release-X.Y

然后提交并推送。

将主分支合并到开发分支

master分支合并到develop分支中,以包含所做的任何更改。

git checkout develop
git merge --no-ff master

然后更新版本号,为下一个开发周期做准备:

  • 编辑pom.xml文件,将版本更新为SNAPSHOT,
  • /src/changes/changes.xml文件中为新的更改腾出空间。

然后提交并推送。

发布Maven构件

必须使用OSS网站发布Maven构件以发布存储库。在“Staging Repositories”中选择Rugged存储库,然后在Nexus Repository Manager中点击“Release”按钮。

上传到Gitlab

导航到Projects > Rugged > Repository > Tags。找到X.Y标签,点击编辑按钮进入发布说明。使用Nexus存储库中的路径设置发布说明中的构件。

  • rugged-X.Y.jar
  • rugged-X.Y-sources.jar
  • rugged-X.Y-javadoc.jar

导航到Projects > Rugged > Project Overview > Releases,确保显示正常。

同步Github镜像

为了增加项目的可见性,维护了一个镜像在Github上。在Gitlab上创建的发布不会自动推送到这个镜像上。必须手动声明它们,以展示Rugged的活力。

  1. 登录Github
  2. 转到Rugged发布页面
  3. 点击“Draft a new release”按钮
  4. 在表单的“Tag version”字段和“Release title”字段中输入要声明的发布的标签
  5. 描述与在Gitlab上所做的发布相同
  6. 点击“Publish release”

Github会自动添加两个资产(标记源代码的zip和tarball存档)。

更新Rugged网站

在投票后,需要对Rugged网站进行一些编辑。

编辑download/.htaccess,将3个Rugged构件的URL替换为用于创建发布说明的URL。

编辑_layouts/home_rugged.html,编辑按钮的文本以使用新版本。

使用新的Orekit和Hipparchus版本编辑rugged/overview.html。不要忘记使用新的依赖项更新rugged/img/rugged-architecture.png图像。

_post/中创建一个新的发布帖子,使用之前的Rugged帖子作为模板(以便在Rugged新闻页面上发布)。请注意,需要使用--future选项才能在未来看到帖子,否则jekyll serve将忽略它!

运行:

jekyll serve --future

确保网站看起来不错。在http://localhost:4000/上查看。

关闭X.Y里程碑

在Gitlab中,导航到项目 > Rugged > 问题 > 里程碑。点击对应于发布X.Y的行的“关闭里程碑”。

发布公告

最后一步是在论坛的Rugged公告分类中创建一个帖子来宣布发布,主题行的格式如下:

Rugged X.Y发布

内容的格式如下:

Rugged团队很高兴地宣布发布Rugged版本X.Y。
这是一个次要/主要版本,包括新功能和错误修复。
主要更改包括:

  - 功能1描述
  ...
  - 功能n描述

此版本依赖于Orekit X.x和Hipparchus Y.y。

完整的发布说明请参见:
https://www.orekit.org/site-rugged-X.Y/changes-report.html

Maven构件可在Maven中央获取。
源代码和二进制文件可从Forge发布页面获取:
https://gitlab.orekit.org/orekit/rugged/-/releases