☰
Apache Fesod(Incubating) 版本发布全流程指南:从 PGP 签名到 IPMC 投票与正式发布
2026/10/4 1:52:53 网站建设 项目流程
  • 后端

【免费下载链接】fesod

Fast. Easy. Done. Processing spreadsheets without worrying about large files causing OOM.

项目地址:https://gitcode.com/gh_mirrors/fast/fesod
点击查看免费下载

Apache Fesod(孵化中)是一个面向海量表格文件处理的高性能 Java 库(核心实现位于 fesod-sheet 模块)。作为 Apache 孵化器项目,其每个版本的发布都必须遵循 ASF 规范化的 Release 流程。本文以仓库中 website/community/release/release-version.md 为骨架,完整讲解从 Release Manager 准备(PGP 密钥、KEYS 文件、Maven 配置)、RC 产物构建与签名、社区投票、Incubator 投票到最终发布公告的全过程,并辅以仓库源码与配置作为佐证。读完本文,你将能够独立完成 Apache Fesod 一次完整版本的发布与验证。


1. 发布前准备(Preparation)

1.1 阅读官方发布指南

在动手之前,Release Manager 应首先通读 ASF 官方发布规则,理解「发布即合规」的核心要求。文档中列出的关键参考包括:

  • Apache Release Guide:发布物如何发布到 downloads.apache.org
  • Apache Release Policy:版本号、投票、归档等整体政策
  • Apache Incubator Release:孵化项目特有的发布与投票约束
  • Maven Release Info:Maven 构件如何发布到 Central

孵化项目与成熟项目最大的差异在于:除了社区(dev 列表)投票,还必须在general@incubator.apache.org上获得 IPMC 成员的binding投票,并且发布物根目录必须包含 DISCLAIMER 文件(详见第 5 章)。

1.2 PGP 签名密钥

首次担任 Release Manager的成员,必须先按 ASF 的 Release Signing 文档与 OpenPGP 指南生成一个专门用于发布签名的 PGP 密钥。仓库 website/community/release/release-version.md 给出了从安装到上传的完整操作步骤。

1.2.1 安装 GnuPG 2.x

建议安装你所在操作系统对应的GnuPG 2.x(尽量使用最新版)。例如 Debian/Ubuntu 系:

apt-get install gnupg2
1.2.2 生成密钥

使用你的Apache ID(形如<你的Apache ID>@apache.org)作为用户标识(USER-ID)生成新密钥:

gpg --full-gen-key

交互过程示例(不同 GnuPG 版本界面略有差异):

$ gpg --full-gen-key gpg (GnuPG) 2.4.8; Copyright (C) 2025 g10 Code GmbH This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Please select what kind of key you want: (1) RSA and RSA (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) (9) ECC (sign and encrypt) *default* (10) ECC (sign only) (14) Existing key from card Your selection? 1 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (3072) 4096 Requested keysize is 4096 bits Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) 0 Key does not expire at all Is this correct? (y/N) y Real name: (use your Apache ID) Email address: (use your Apache email) Comment: (enter a comment) You selected this USER-ID: "Username (Comment) <email@address>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o

配置要点:

  • 密钥类型:根据 gpg 版本选择安全类型,至少推荐RSA and RSA;
  • 密钥长度:推荐 4096 位;
  • 有效期:可设为永不过期,也可按需设置有效期;
  • Real name:使用你的 Apache ID;
  • Email address:使用你的 Apache 邮箱;
  • Comment:可添加备注信息。

确认后输入保护密钥的口令(passphrase):

┌─────────────────────────────────────────────────────────────┐ │ Please enter the passphrase to │ │ protect your new key │ │ │ │ Passphrases match. │ │ │ │ Passphrase: _______________________________________________ │ │ │ │ Repeat: ___________________________________________________ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ <OK> <Cancel> │ └─────────────────────────────────────────────────────────────┘
1.2.3 查看密钥
gpg --list-signatures --keyid-format LONG

执行后本地所有密钥都会被列出,按<你的Apache ID>@apache.org定位到目标密钥。

1.2.4 上传公钥到密钥服务器

示例输出:

$ gpg --list-signatures --keyid-format LONG [keyboxd] --------- pub rsa4096/85E2C3CA72D5936C 2025-12-15 [SC] D71C9B1CA898A2408D55EDC785E2C3CA72D5936C uid [ultimate] XXXXX <xxx@apache.org> sig 3 85E2C3CA72D5936C 2025-12-15 [self-signature] sub rsa4096/DF02F738216EBD6D 2025-12-15 [E] sig 85E2C3CA72D5936C 2025-12-15 [self-signature]

上例中的85E2C3CA72D5936C即需要上传的<key-id>。将公钥上传到 GPG 密钥服务器:

gpg --keyserver keys.openpgp.org --send-key <key-id> # 示例 # gpg --keyserver keys.openpgp.org --send-key 85E2C3CA72D5936C

keys.openpgp.org只是随机选择的服务器,也可以使用keyserver.ubuntu.com等任意可用服务器。命令失败时可改为通过网页手动上传公钥。

上传完成后(通常约 1 分钟生效),校验密钥是否成功创建;若未成功可多次重试:

# 检查密钥是否创建成功 gpg --keyserver keyserver.ubuntu.com --recv-keys <key-id>

示例:

$ gpg --keyserver keyserver.ubuntu.com --recv-keys 85E2C3CA72D5936C gpg: key 85E2C3CA72D5936C: "XXXXXX <xxxxxx@apache.org>" not changed gpg: Total number processed: 1 gpg: unchanged: 1

也可以在 OpenPGP Keyserver 网页输入key-id点击Search key按钮,确认存在对应名称的密钥。

1.2.5 上传到 GitHub

建议把 GPG 公钥同步上传到与你的 Apache ID 关联的 GitHub 账户:

  • 访问 GitHub 的settings/keys页面添加 GPG 密钥;
  • 如果添加后显示 "Unverified",需要把 GPG 密钥中使用的邮箱绑定到你的 GitHub 账户。

2. 发起发布讨论(Discussion)

正式动手之前,必须先向 DEV 邮件列表发送邮件,发起下一版本的发布讨论,这是 ASF「社区驱动、公开透明」原则的直接体现。

收件人(To):

dev@fesod.apache.org

主题(Subject):

[DISCUSS] Release Apache Fesod(Incubating) ${RELEASE_VERSION}

正文(Body):

Hi Community, This is a call for a discussion to release Apache Fesod(Incubating) ${RELEASE_VERSION}. The change lists about this release: https://github.com/apache/fesod/compare/2.0.0-incubating...2.0.1-incubating-rc1 Please leave your comments here about this release plan. We will bump the version in repo and start the release process after the discussion. Best regards, ${RELEASE_MANAGER}

占位符说明:

  • ${RELEASE_VERSION}:替换为下一个要发布的版本号;
  • ${RELEASE_MANAGER}:通常为本版本的发布负责人(Release Manager)。

讨论达成一致后,仓库中的版本号才会被提升并进入正式发布流程。仓库 pom.xml 中当前版本为2.1.0-incubating(<revision>属性),并已设置project.build.outputTimestamp,可作为版本演进的实际参考。


3. 发布材料准备(Material Preparation)

3.1 KEYS 文件

如果你是首次担任 Release Manager,或原密钥已过期,需要将公钥追加到 Apache SVN 项目release仓库中的KEYS文件里。KEYS 文件只在一个权威位置(release 目录)维护,从而保证一致,并供 downloads.apache.org 上的签名校验使用:

  • Release 仓库:https://dist.apache.org/repos/dist/release/incubator/fesod

操作步骤:

# Check out to the local fesod-release directory svn co https://dist.apache.org/repos/dist/release/incubator/fesod/ fesod-release # Enter the local directory cd fesod-release # Export and append to the KEYS file (gpg --list-sigs xxx@apache.org && gpg --export --armor xxx@apache.org) >> KEYS # Commit svn ci -m "add gpg key for xxx"

注意事项:

  • 不要直接覆盖仓库中的KEYS文件,只能追加;
  • KEYS文件只在release目录维护(单一事实来源),不要在 dev 目录另建副本,否则两份副本容易漂移失同步;
  • SVN 仓库需要 PPMC 权限,可由 PPMC 成员协助完成上传。

3.2 POM 配置

为将发布推送到 ASF Nexus 仓库,需要配置本地 POM 文件。

3.2.1 项目配置

确保项目的pom.xml配置了 ASF 父 POM。仓库根 pom.xml 正是这样配置的:

<parent> <groupId>org.apache</groupId> <artifactId>apache</artifactId> <version>31</version> </parent>
3.2.2 Maven Settings

在本地 Apache Maven 配置文件settings.xml中配置你的 Apache ID 与 GPG 密钥信息:

<settings> <profiles> <profile> <id>apache-release</id> <properties> <mavenExecutorId>forked-path</mavenExecutorId> <!-- gpg key-id --> <gpg.keyname>yourKeyName</gpg.keyname> <deploy.url>https://dist.apache.org/repos/dist/dev/incubator/fesod/</deploy.url> </properties> </profile> </profiles> <servers> <!-- Apache ID and password --> <server> <id>apache.snapshots.https</id> <username>yourApacheID</username> <password>yourApachePassword</password> </server> <server> <id>apache.releases.https</id> <username>yourApacheID</username> <password>yourApachePassword</password> </server> <!-- gpg passphrase --> <server> <id>gpg.passphrase</id> <passphrase>yourKeyPassword</passphrase> </server> </servers> </settings>

各配置项说明:

  • mavenExecutorId=forked-path:以 fork 方式执行 Maven 发布相关插件;
  • gpg.keyname:指定签名使用的 GPG key-id,对应你生成的发布密钥;
  • deploy.url:deploy 阶段推送的目标路径,这里是 dev 目录(RC 产物存放处);
  • apache.snapshots.https/apache.releases.https:分别为快照与正式版本发布用的 Nexus 账号认证;
  • gpg.passphrase:GPG 密钥口令,供签名插件使用。

建议对配置中的口令进行加密存储,参考 ASF 的 Maven 构件发布指南与 Maven 口令加密指南。

3.3 发布产物(Release Artifacts)

3.3.1 预发布版本(Pre-Release)

以发布2.0.0-incubating为例,步骤如下:

  • 新建分支2.0.0-incubating作为发布分支;
  • 更新pom.xml中的版本号为2.0.0-incubating;
  • 在pom.xml中设置固定的project.build.outputTimestamp,以确保可重复构建;
  • 推送 RC(Release Candidate)版本标签。
# 切换到发布分支 git checkout -b 2.0.0-incubating # 创建 RC1 版本标签 git tag -s 2.0.0-incubating-rc1 -m "release: release for 2.0.0-incubating RC1" # 推送标签到远程仓库 git push origin 2.0.0-incubating-rc1

更新版本时同时设置固定构建时间戳:

# 设置固定构建时间戳,使每次构建产物完全一致 mvn versions:set-property -Dproperty=project.build.outputTimestamp -DnewVersion=2026-09-10T00:00:00Z # 或直接编辑 pom.xml: # <project.build.outputTimestamp>2026-09-10T00:00:00Z</project.build.outputTimestamp>

仓库 pom.xml 中已实际设置了project.build.outputTimestamp=2026-09-10T00:00:00Z,这正是可重复构建(Reproducible Builds)的落地配置——每次构建都会产出字节级一致的 jar,便于社区对发布产物进行可信校验。

3.3.2 推送二进制包

编译预发布 RC 分支源码,并将二进制包推送到 staging 仓库:

mvn clean deploy -Papache-release -DskipTests -Dgpg.skip=false

参数解读:

  • -Papache-release:激活settings.xml中定义的apache-releaseprofile(指定签名密钥与 deploy 目标);
  • -DskipTests:发布阶段跳过单元测试;
  • -Dgpg.skip=false:强制启用 GPG 签名(防止误用-Dgpg.skip=true导致产物无签名)。

随后用 Apache ID 登录 ASF Nexus 仓库,找到已发布的版本,点击Close。

若 Close 操作失败,很可能是因为签名密钥对应的公钥无法从keys.openpgp.org检索到。请自行到 OpenPGP Keyserver 页面检查。

3.3.3 打包源码

:::warning 不要在你的日常工作目录中打包! :::

本地文件(如node_modules、IDE 配置文件如.idea/.vscode、重构后遗留的空目录)可能被意外打进source-release.zip,引发合规问题(例如分发未经授权的二进制文件),导致投票失败。

必须在全新克隆的 Git 仓库中执行发布流程,确保构建产物可复现且干净。

注意:不要用 IDE(如 IntelliJ 或 VS Code)打开源码目录,以免生成配置文件或编译缓存;直接在终端中执行 Maven 发布命令。

使用git archive确保源码包干净(排除.git目录及其它被忽略的文件):

git archive --format=tar.gz \ --prefix=apache-fesod-2.0.0-incubating-src/ \ -o apache-fesod-2.0.0-incubating-src.tar.gz \ e7546d1138d4d3a638df10193a4c29c50a7e55d8

注意:上例中的哈希e7546d1138d4d3a638df10193a4c29c50a7e55d8对应标签2.0.0-incubating-rc1的 commit 哈希。--prefix参数保证解压后文件位于带版本号的目录下,避免散落污染。

3.3.4 签名

对生成的源码包执行 GPG 签名与 SHA512 校验和计算:

# 1. 用指定 GPG key-id 对源码包签名(生成 .asc) # 将 <key-id> 替换为你的 GPG key-id for i in *.tar.gz; do echo "Signing $i"; gpg -u <key-id> --armor --output $i.asc --detach-sig $i ; done # 2. 生成 SHA512 校验和(.sha512) for i in *.tar.gz; do echo "Hashing $i"; sha512sum $i > $i.sha512 ; done

签名完成后可在本地先行验证:

# 验证签名 for i in *.tar.gz; do echo $i; gpg --verify $i.asc $i ; done # 验证 SHA512 for i in *.tar.gz; do echo $i; sha512sum --check $i.sha512; done
3.3.5 上传到 SVN

将签好名的源码包上传到 SVN dev 仓库:

# Check out the SVN dev repository svn co https://dist.apache.org/repos/dist/dev/incubator/fesod/ fesod-dev cd fesod-dev # 创建版本目录 mkdir 2.0.0-incubating-rc1 cd 2.0.0-incubating-rc1 # 复制源码包文件(假设它们在父目录中) cp ../../apache-fesod-2.0.0-incubating-src.tar.gz . cp ../../apache-fesod-2.0.0-incubating-src.tar.gz.asc . cp ../../apache-fesod-2.0.0-incubating-src.tar.gz.sha512 . # 提交到 SVN cd .. svn add 2.0.0-incubating-rc1 svn commit -m "Add 2.0.0-incubating-rc1 source release"

你需要先配置 SVN 用户;也可以每条命令中直接指定用户名与密码:

svn co --username <apache-id> --password <password>

如果出现意外文件或错误,请删除相关内容,执行svn delete,然后按上述流程重新上传。


4. 社区投票(Community Vote)

每个版本可能经历多轮投票:RCN与 Round N 均表示第 N 轮,即该版本的第 N 次投票。

4.1 发起投票

收件人(To):

dev@fesod.apache.org

主题(Subject):

[VOTE] Release Apache Fesod (Incubating) ${RELEASE_VERSION}-RCN

正文(Body):

Hi Community, This is a call for vote to release Apache Fesod(Incubating) ${RELEASE_VERSION}. The release candidates: https://dist.apache.org/repos/dist/dev/incubator/fesod/${RELEASE_VERSION}-RCN The staging repo: https://repository.apache.org/content/repositories/orgapachefesod-1016 Git tag for the release: https://github.com/apache/fesod/releases/tag/${RELEASE_VERSION}-RCN Hash for the release tag: e7546d1138d4d3a638df10193a4c29c50a7e55d8 Release Notes: https://github.com/apache/fesod/releases/tag/${RELEASE_VERSION}-RCN The artifacts have been signed with Key [ key-id ], corresponding to [ xxx@apache.org ] which can be found in the keys file: https://downloads.apache.org/incubator/fesod/KEYS Build Environment: JDK 8+, Apache Maven 3.6.0+. ./mvnw clean package -DskipTests The vote will be open for at least 72 hours. Please vote accordingly: [ ] +1 approve [ ] +0 no opinion [ ] -1 disapprove with the reason Checklist for reference: [ ] Download links are valid. [ ] Checksums and signatures. [ ] LICENSE/NOTICE files exist [ ] No unexpected binary files [ ] All source files have ASF headers [ ] Can compile from source To learn more about Apache Fesod , please see https://fesod.apache.org/

需将正文中的${RELEASE_VERSION}与RCN轮次信息替换为实际值。邮件中提到的构建环境(./mvnw clean package -DskipTests)可直接在仓库中执行——仓库根目录自带 Maven Wrapper(mvnw 与 mvnw.cmd),无需预先安装特定版本的 Maven。

4.2 关闭投票

投票至少开放 72 小时且获得至少 3 个 binding 的 +1 票后,公布投票结果:

收件人(To):

dev@fesod.apache.org

主题(Subject):

[RESULT][VOTE] Release Apache Fesod (Incubating) ${RELEASE_VERSION}-RCN

正文(Body):

Hi Community, The vote to release Apache Fesod (Incubating) ${RELEASE_VERSION}-RCN has PASSED and closed now. The result is as follows: 3 binding +1 Votes: - XXX - XXX - XXX 2 non-binding +1 Votes: - XXX - XXX no further 0 or -1 votes. The vote thread: https://lists.apache.org/thread/3b8vz8891cjtjblthvnx95l44sh2fmqz Thank you for reviewing and voting for our release candidate. We will now bring this vote to the general@incubator mailing list for IPMC approval.

如果投票失败,先解决提出的问题,再按发布流程准备新一轮RCN材料并重新发起投票。


5. 孵化器投票(Incubator Vote)

社区投票通过并结束后,必须在孵化器邮件列表上发起投票。这是孵化项目独有的环节:由IPMC(Incubator PMC)成员行使 binding 投票权。

5.1 发起投票

与发起社区投票类似,但需要附上社区投票线程链接,证明社区内部已达成共识。

收件人(To):

general@incubator.apache.org

主题(Subject):

[VOTE] Release Apache Fesod (Incubating) ${RELEASE_VERSION}-RCN

正文(Body):

Hi all, This is a call for vote to release Apache Fesod(Incubating) ${RELEASE_VERSION}-RCN. The Apache Fesod community has voted and approved the release of Apache Fesod(Incubating) ${RELEASE_VERSION}. We now kindly request the IPMC members review and vote for this release. Project description: Apache Fesod (Incubating) is a high-performance, easy-to-use Java library for processing spreadsheet files. The vote thread: https://lists.apache.org/thread/r6hsbb9tmsqmn9s7q9qptv3z287lkcbf The vote result thread: https://lists.apache.org/thread/r6hsbb9tmsqmn9s7q9qptv3z287lkcbf The release candidates: https://dist.apache.org/repos/dist/dev/incubator/fesod/x.x.x/ The staging repository: https://repository.apache.org/content/repositories/${STAGING.RELEASE}/ Git tag for the release: https://github.com/apache/fesod/releases/tag/vx.x.x Hash for the release tag: ea6687ff9da3d3389c51a39852d84f3a209708c4 Release Notes: https://github.com/apache/fesod/releases/tag/vx.x.x The artifacts have been signed with Key [ key-id ], corresponding to [ xxxx@apache.org ] which can be found in the keys file: https://downloads.apache.org/incubator/fesod/KEYS Build Environment: JDK 8+, Apache Maven 3.6.0+. ./mvnw clean package -DskipTests The vote will be open for at least 72 hours. Please vote accordingly: [ ] +1 approve [ ] +0 no opinion [ ] -1 disapprove with the reason Checklist for reference: [ ] Download links are valid. [ ] Checksums and signatures. [ ] LICENSE/NOTICE files exist [ ] No unexpected binary files [ ] All source files have ASF headers [ ] Can compile from source To learn more about Apache Fesod , please see https://fesod.apache.org/

5.2 公布孵化器投票结果

投票至少开放 72 小时且获得至少 3 个 binding 的 +1 票后,公布结果:

收件人(To):

general@incubator.apache.org

主题(Subject):

[RESULT][VOTE] Release Apache Fesod (Incubating) ${RELEASE_VERSION}-RCN

正文(Body):

Hi Incubator PMC, The vote to release Apache Fesod(Incubating) ${RELEASE_VERSION}-RCN has passed with 3 +1 binding and 1 +1 non-binding votes, no +0 or -1 votes. Binding votes: - XXX - XXX - XXX Non-Binding votes: - XXX Vote thread: https://lists.apache.org/thread/o7vwdvtolclcv1y4j4ozshj923ppwlnl Thanks for reviewing and voting for our release candidate. We will proceed with publishing the approved artifacts and sending out the announcement soon.

6. 完成发布(Completing the Release)

6.1 迁移源码与二进制包

登录 Apache Nexus 仓库,选中之前 Close 的orgapachefesod-XXX仓库,点击Release图标完成发布。

  1. 将签名文件、src 与 bin 从 dev 迁移到 release 路径:

    svn mv https://dist.apache.org/repos/dist/dev/incubator/fesod/x.x.x-RCN https://dist.apache.org/repos/dist/release/incubator/fesod/x.x.x -m "Release X.X.X"
  2. 将上一个版本 Release Note 设置为最新(Set as the latest release)并提交;

  3. 在 Fesod 网站上更新 x.x.x 版本的文档,并补充对应的二进制与源码下载链接。

发布后的版本会体现在仓库的下载文档中。仓库 website/docs/download.md 的「Latest Stable Release」表格即展示当前最新版本2.0.2-incubating(含apache-fesod-2.0.2-incubating-src.tar.gz、.asc签名与.sha512校验文件),历史归档版本则列出2.0.1-incubating与2.0.0-incubating,这正是本节流程的实际产物。

6.2 发布公告

收件人(To):

announce@apache.org,dev@fesod.apache.org

主题(Subject):

[ANNOUNCE] Apache Fesod(Incubating) ${RELEASE_VERSION} released

正文(Body):

Hello everyone, The Apache Fesod(Incubating) ${RELEASE_VERSION} has been released! Apache Fesod is an easy-to-use, high-performance, open source distributed transaction solution. Download Links: https://fesod.apache.org/download/fesod/ Release Notes: https://github.com/apache/fesod/releases/tag/x.x.x/ Website: https://fesod.apache.org/ Resources: - Issue: https://github.com/apache/fesod/issues - Mailing list: dev@fesod.apache.org We would like to thank all the contributors who made this release possible, and to our Incubator mentors for their great guidance. ${RELEASE_MANAGER} On behalf of Apache Fesod (Incubating) PPMC

仓库中的实际发布公告可作为模板参考,例如 website/blog/2026-02-27-apache-fesod-2-0-1-incubating-released.md 记录了 2.0.1-incubating 作为 Fesod 加入 ASF 孵化器后首个官方版本的发布内容,包括多模块架构重构、JDK 25 支持、afterSheetDispose生命周期方法、Header Merge Strategy、每日 fuzz 测试、依赖安全升级等。


附:发布产物合规性验证速查

发布流程中的产物合规要求可以借助仓库本身验证。结合 website/community/release/verify-release.md 的核对清单:

  • DISCLAIMER:孵化项目根目录必须存在 DISCLAIMER 文件,声明项目正处于 ASF 孵化期;
  • LICENSE / NOTICE:根目录 LICENSE 必须包含 Apache License 2.0;NOTICE 需包含当前版权年份(如 2025-2026)以及对捆绑依赖(如基于 Alibaba EasyExcel 的声明)的必要署名;
  • ASF License Header:所有.java、.xml、.yml等源码文件需带 ASF 头。仓库通过 licenserc.toml(Spotless 插件apache-rat:check的配套配置)与根 pom.xml 中apache-rat-plugin的 excludes 配置(如排除website/**、**/*.md、**/*.xlsx等)实现自动化 License Header 管理;
  • 可重复构建:project.build.outputTimestamp固定后,每次构建产物一致;
  • 编译验证:./mvnw clean install -DskipTests(仓库内置 mvnw 包装器,且当前版本支持 JDK 8+,详见 website/docs/quickstart/guide.md 中的版本支持表)。

将上述检查项逐条勾选后,即可放心地在投票邮件中投出 +1 票。


结语

Apache Fesod(Incubating)的发布流程以「公开讨论 → 材料准备 → 社区投票 → IPMC 投票 → 正式发布」为主线,环环相扣:PGP 密钥与 KEYS 文件保证签名可信,git archive+ 固定outputTimestamp保证源码包干净可复现,72 小时投票窗口与 binding 票门槛保证社区共识,最后的svn mv与公告完成归档闭环。本文所有命令与配置均可直接套用到仓库 website/community/release/release-version.md 描述的流程中;每次 Fesod 新版本的发布,都是这套「Apache Way」流程的一次完整实践。

  • 后端

【免费下载链接】fesod

Fast. Easy. Done. Processing spreadsheets without worrying about large files causing OOM.

项目地址:https://gitcode.com/gh_mirrors/fast/fesod
点击查看免费下载

相关推荐

上一篇:IngressMonitorController故障排查指南:常见问题与解决方案
下一篇:Nuklear UI渲染调试指南:5个实战技巧解决即时模式GUI开发难题

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询