尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Falcon 发布全流程指南:从版本号到稳定分支的 Release Manager 实操手册

发布时间:2026/9/25 3:00:26

资讯中心
01
ARTICLE

Falcon 发布全流程指南:从版本号到稳定分支的 Release Manager 实操手册

Falcon 发布全流程指南:从版本号到稳定分支的 Release Manager 实操手册
后端Web框架API设计【免费下载链接】falconThe no-magic web API and microservices framework for Python developers, with a focus on reliability and performance at scale.项目地址https://gitcode.com/gh_mirrors/fa/falcon点击查看免费下载导读本文以 Falcon 仓库中的 RELEASE.mdRelease Managers Guide为骨架完整讲解 Falcon 框架一次正式发布含预发布的全流程版本号管理、towncrier 变更日志渲染、基准测试回归检查、文档审核、PyPI 发布、社区公告以及稳定系列分支合并。读完本文你既能掌握在 Falcon 仓库中执行一次合规发布的可操作步骤也能理解每一步背后的源码与配置机制如falcon/version.py单一版本源、pyproject.toml的 towncrier 配置、docs/ext/falcon_releases.py的发布日期解析等。Falcon 发布流程总览RELEASE.md将整个发布过程拆分为十个连续步骤每一步都是上一阶段的验收门更新版本号如适用含预发布后缀。更新 changelog 并渲染 towncrier fragments。发布 beta 或 rc 预发布版本。运行基准测试检查性能回归。审阅并编辑自上次发布以来的文档改动确保清晰一致。发布最终版本并添加发布说明。运行基准测试并将最新数字更新到 falconframework.org。在 Gitter 频道与社交平台上公告新版本。将 tag 合并进当前稳定系列分支stable series branch。持续改进本文档记录本次发布踩过的坑供未来发布者参考。下面逐节展开并结合仓库源码说明每一步的落地细节。第一步Bump 版本号版本单一事实源版本号的唯一存放位置Falcon 已经完全弃用setup.cfg版本信息统一存放在 falcon/version.py 的__version__变量中且该变量必须包含完整版本号包括过去由tag_build单独管理的后缀。当前仓库中该文件的内容即为一个典型示例__version__ 4.4.0.dev1发布者只需在每次发布前确认该值是否已自上次发布更新若未更新则依据渲染后的 changelog 决定应修改哪个 SEMVER 字段major/minor/patch。RELEASE.md给出了四种典型形态# Development version __version__ 4.0.0.dev1 # First alpha __version__ 4.0.0a1 # Release candidate __version__ 4.0.0rc1 # Stable release __version__ 4.0.0为什么__version__是唯一事实源从 pyproject.toml 的打包配置可以确认这一设计是刻意为之[build-system] build-backend setuptools.build_meta requires [ setuptools77.0.3, cython3.0.8; python_implementation CPython, # Skip cython when using pypy ] [tool.setuptools.dynamic] version {attr falcon.version.__version__}[tool.setuptools.dynamic] version通过attr指令直接从falcon.version.__version__读取版本号意味着构建 wheel/sdist 时不再需要任何额外的版本拼接逻辑。这也是为什么在分支合入等场景下只要改一处文件即可保证源码、构建产物与包元数据三者一致。同步更新 towncrier 目标文件名版本号更新后还需要在 pyproject.toml 中把[tool.towncrier]的filename改为对应新版本的 changelog 路径[tool.towncrier] package falcon package_dir filename docs/changes/4.4.0.rst directory docs/_newsfragments issue_format #{issue} https://github.com/falconry/falcon/issues/{issue}__ title_format falsedirectory指向docs/_newsfragments存放待渲染的新闻片段filename则是渲染输出的目标 changelog 文件。issue_format定义了每个 issue 编号在 changelog 中的超链接渲染格式。仓库还通过[[tool.towncrier.type]]声明了四类新闻片段目录与docs/_newsfragments中的实际文件一一对应breakingchange→ Breaking Changesnewandimproved→ New Improvedbugfix→ Fixedmisc→ Misc例如当前仓库的 docs/_newsfragments/1942.newandimproved.rst 即是一个 New Improved 类片段内容介绍了新增的App.set_error_reporter()方法。第二步更新 Changelog 并渲染 towncrier fragments新建 changelog RST 模板如果对应版本的 changelog RST 还不存在需要按RELEASE.md提供的模板在 docs/changes 目录下新建。仓库中 docs/changes/4.4.0.rst 正是该模板的活体示例Changelog for Falcon 4.4.0 Summary ------- Falcon 4.4 is in development. The progress is tracked via the Version 4.4 milestone https://github.com/falconry/falcon/milestone/46__ on GitHub. Changes to Supported Platforms ------------------------------ - CPython 3.15 is now fully supported. .. towncrier release notes start Contributors to this Release ---------------------------- Many thanks to all of our talented and stylish contributors for this release! - alexchen-sys https://github.com/alexchen-sys__ - ...模板中的关键标记是.. towncrier release notes start——towncrier 会把docs/_newsfragments下的全部片段渲染后替换到这个标记位置。如果 changelog 已存在则只需把 Summary 部分更新到位突出本次发布的关键变化。一键渲染tox -e changelog_releaseRELEASE.md推荐通过 tox 环境一次完成更新贡献者列表 渲染 fragments两步$ tox -e changelog_release该环境在 tox.ini 中定义为依次执行两个仓库内工具[testenv:changelog_release] deps -r{toxinidir}/requirements/docs toml commands python {toxinidir}/tools/add_contributors.py python {toxinidir}/tools/towncrier_draft.pytools/add_contributors.py通过 GitHub API 自最近一个稳定 tag 起聚合贡献者默认写入 AUTHORS 文件并把新贡献者追加到 towncrier 模板的 Contributors 列表。支持-a/--auth传入 GitHub token、-t/--treeish指定聚合起点、-n/--dry-run只预览不落盘、--no-authors与--no-towncrier分别跳过两类写入。tools/towncrier_draft.py读取pyproject.toml中tool.towncrier.filename得到目标文件执行towncrier --draft生成草稿手动替换模板中的.. towncrier release notes start标记随后调用sphinx-build -W -E -b html渲染 HTML 文档供预览。分支发布场景的 GitHub 限流问题RELEASE.md特别提醒如果上一次发布是在分支上完成的add_contributors.py的分页遍历可能扫描过多 commit 而触发 GitHub API 限流rate-limited导致失败。此时的工作区方案是先在先前提交中聚合好贡献者名单然后只单独运行 towncrier 工具$ tools/towncrier_draft.py预览与返工流程渲染完成后需要同时检查 RST 源文件和 HTML 渲染效果。RELEASE.md给出了 macOS 与 Linux 下的预览命令# macOS $ open docs/_build/html/changes/index.html # Linux $ xdg-open docs/_build/html/changes/index.html若需要退回重新调整$ git restore docs/changes之后重新运行tox做下一轮校对如果只是手工编辑了已更新的 RST、想在不覆盖 changelog 的前提下单独重渲文档则运行$ tox -e docstox -e docs在 tox.ini 中执行sphinx-build -j auto -W -E -b html docs docs/_build/html其中-W会把 Sphinx 警告当作错误处理确保文档构建严格无警告。校对无误后删除docs/_newsfragments下已渲染的片段文件提交包含上述所有改动的 PR合并文档 PR 后检查 falcon.readthedocs.io 上一切渲染正常。需要注意的是若本次发布不是基于master/main可能需要手动在 ReadTheDocs 上为对应分支或 tag 开启构建。文档构建中的自动化机制仓库文档层为 changelog 提供了两个配套扩展docs/ext/newsfragments.py通过 Sphinx 的source-read钩子在构建文档时自动把docs/_newsfragments中的 towncrier 片段草稿嵌入 changelog RST。若目录中没有任何片段则注入No significant changes.占位文本避免对第三方打包者强制要求 towncrier 可执行文件一旦检测到 changelog 已包含.. falcon-release:标记即已定稿的发布则不再干预。docs/ext/falcon_releases.py注册falcon-releasesSphinx 指令扫描docs/changes下形如4.4.0.rst的文件用正则^\.\.\sfalcon-release\:\s([\d-])解析发布日期并聚合出 stable 系列发布状态表Current / Security / EOL。第三步发布 beta 或 rc完成 changelog 渲染后即可发布预发布版本。RELEASE.md给出的核心要求是发布后务必从 PyPI 实际安装并测试作为健全性检查sanity check。随后根据反馈迭代修复文档问题、性能回归和已报告的 bug再发布后续的 beta 或 release candidate直到质量达标。这一步没有固定的预发布数量取决于即将发布的稳定版范围、beta 阶段发现问题的多少由发布经理与核心维护团队酌情决定。第四步运行基准测试并检查回归RELEASE.md中这一步目前标注为TODO: Replace with CI gate计划未来用 CI 门禁替代人工跑测但在当前流程中仍由发布者手动执行。仓库提供了完整的基准测试工具链。入口脚本为 falcon/bench/bench.py并通过 pyproject.toml 的[project.scripts]暴露为命令行工具[project.scripts] falcon-bench falcon.cmd.bench:main falcon-inspect-app falcon.cmd.inspect_app:main falcon-print-routes falcon.cmd.inspect_app:route_main在 tox.ini 中可以看到多个基准测试环境例如[testenv:py310_bench] basepython python3.10 deps -r{toxinidir}/requirements/bench commands falcon-bench [] [testenv:py310_bench_cython] basepython python3.10 deps -r{toxinidir}/requirements/bench cython commands falcon-bench []其中py310_bench_cython用于验证 Cython 化构建falcon/cyutil下的.pyx模块下的性能表现。基准测试的支撑应用位于 falcon/bench 目录含dj、nuts、queues等对比应用Docker 镜像构建脚本见 docker 目录。发布者在正式发布前后各跑一轮用于发现与上次发布相比的性能回归。第五步审阅并编辑文档改动补发布日正式发布前需要审阅自上次发布以来的全部文档改动保证清晰与一致性。同时务必在 changelog 文件中以注释形式加上真实发布日期.. falcon-release: 2025-05-05这个日期注释是稳定发布状态表的聚合依据如前面所述docs/ext/falcon_releases.py 用正则从 changelog 中提取该日期用于在 docs/community/releases.rst 中渲染各系列版本的首发时间、最新 patch 版本与维护状态current / security / EOL。EOL 时间线则按旧稳定系列距当前系列首个发布满两年_OLDSTABLE_MAINTENANCE_PERIOD datetime.timedelta(days365 * 2)或落后两个大版本计算。第六步发布最终版本并添加发布说明与预发布阶段相同正式发布后同样要从 PyPI 安装并测试作为健全性检查。RELEASE.md原文对此步骤的描述很简短其要点是发布最终版本含完整__version__如4.4.0在发布渠道添加发布说明release note。同时结合 docs/changes/index.rst 可以看到每次正式发布后需要把新版本的 changelog 追加到文档的 changelog 目录树中该文件以 toctree 形式按新到旧罗列了从 0.2.0 到 4.4.0 的全部版本。文档层面的版本策略SemVer、支持范围、预发布约定详见 docs/community/releases.rstFalcon 严格遵循 SemVer破坏性变更只在大版本引入且会提前至少一个 minor 版本做弃用警告仅主动支持当前 SemVer 大/小版本并为旧稳定大系列的最新版本提供有限的安全维护。第七步运行基准测试并更新官网数据正式发布后再次运行基准测试工具与第四步相同即falcon-bench及其 Cython 变体将最新数字更新到 falconframework.org。这一步的目的是让官网展示的基准数据与当前稳定版本保持一致。第八步在 Gitter 与社交平台公告在 Gitter 频道项目元数据中登记的社区频道见 pyproject.toml 的[project.urls]Chat 字段以及各社交平台发布新版本公告同步告知社区本次发布的亮点、升级路径与已知问题。第九步将 tag 合入当前稳定系列分支发布完成后需要把新版本 tag 合并进当前 Falcon 系列的维护分支。RELEASE.md给出的标准流程是git checkout falcon-4.x git merge 4.$YOUR_MINOR.$YOUR_PATCH # E.g., git merge 4.2.3 git push正常情况下上述命令即可完成但需人工核对并处理可能出现的合并冲突。仓库当前维护的稳定系列分支包括falcon-1.x、falcon-2.x、falcon-3.x、falcon-4.xRELEASE.md原文附带各分支链接此处不再重复外部地址。如果是发布新的主版本则需要新建对应分支例如falcon-5.x。该分支体系与 docs/community/releases.rst 中描述的维护策略一一对应只有当前 SemVer 大/小版本获得主动支持旧系列仅享受有限的安全维护期。第十步持续改进本文档RELEASE.md本身也在迭代之中。发布者在流程中发现的任何不一致、过时说明或缺失信息都应直接改进 RELEASE.md 本身让下一位发布者包括未来的自己少踩坑。这也是该文档被设计为活文档的原因——例如第四步的基准测试一节目前标注为TODO: Replace with CI gate正是流程演进中的待办痕迹。常见问题与注意事项汇总版本号遗漏falcon/version.py的__version__是唯一事实源pyproject.toml 通过attr动态读取发布前务必确认其是否已更新到目标版本预发布后缀dev1/a1/rc1也必须完整写在同一个字符串里。towncrier 文件名漂移版本 bump 后同步修改 pyproject.toml 中[tool.towncrier] filename否则渲染会落到错误的 changelog 文件。GitHub 限流分支上发布的场景下add_contributors.py可能扫过多 commit 被限流改用手动聚合 tools/towncrier_draft.py单独渲染。日期注释必填changelog 中的.. falcon-release: YYYY-MM-DD是稳定发布状态表的唯一日期来源见 docs/ext/falcon_releases.py漏填会导致发布表缺失首发时间甚至被文档构建的断言拦下。PyPI 健全性检查预发布与正式发布后都建议从 PyPI 安装测试验证构建产物而非仅源码树。分支合并合入稳定系列分支前检查冲突新主版本需新建falcon-N.x分支。小结Falcon 的发布流程是一套源码版本单一事实源 towncrier 自动化渲染 基准回归检查 文档定稿 分支归档的闭环体系。通过 RELEASE.md 这份 Release Managers Guide配合 falcon/version.py、pyproject.toml、tools/add_contributors.py、tools/towncrier_draft.py、tox.ini 以及 docs/changes 下的 changelog 实例任何维护者都可以按部就班地完成一次合规发布并借助 docs/community/releases.rst 中的维护策略文档理解每一步的取舍依据。赞分享后端Web框架API设计【免费下载链接】falconThe no-magic web API and microservices framework for Python developers, with a focus on reliability and performance at scale.项目地址https://gitcode.com/gh_mirrors/fa/falcon点击查看免费下载相关推荐Thanos 版本发布全流程指南从 6 周发布节奏到 Release Shepherd 实操手册Thanos 版本发布全流程指南从 6 周发布节奏到 Release Shepherd 实操手册 ThanosCNCF Incubating 项目以固定可观测性云原生时序数据库运维kOps 发布流程完全指南从版本分支到 GitHub Release 的全链路实操kOps 发布流程完全指南从版本分支到 GitHub Release 的全链路实操 kOpsKubernetes Operations采用按需发布a云原生集群管理运维IaCHome Manager 维护指南版本发布流程、release 分支管理与 backport 实操Home Manager 维护指南版本发布流程、release 分支管理与 backport 实操 本文以 Home Manager 仓库的 MAINTAIN配置管理CLI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。