
区块链【免费下载链接】polkadotPolkadot Node Implementation项目地址https://gitcode.com/gh_mirrors/po/polkadot点击查看免费下载导读本文聚焦 Polkadot 节点实现仓库polkadot中的版本发布说明Changelog / Release Notes自动化生成方案围绕 scripts/ci/changelog/README.md 展开并结合 bin/changelog、lib/changelog.rb 与 templates 下全部 Tera 模板源码完整还原从 GitHub PR 数据抓取、srtool 运行时摘要合并到最终 Markdown 渲染的整条链路。读完本文你将掌握如何在本机构建一次 Polkadot 版本发布说明、如何理解并维护 C/D/B/T/E 等 PR 标签的语义与互斥规则、如何利用热重载与本地缓存加速迭代以及如何生成未过滤的完整 PR 清单。工具定位本地构建、面向未来的 CI 迁移README 开篇即明确了工具的定位当前发布说明在本机local构建待标签体系labels稳定后迁移到 CI 流水线。也就是说scripts/ci/changelog是一套可本地运行、以 GitHub 为数据源、以 srtool 摘要为辅助输入的 Ruby Tera 渲染管线。从仓库结构看整套工具由四部分组成入口脚本bin/changelog负责拉取数据、组装context.json、调用模板渲染辅助类库lib/changelog.rb封装 GitHub APIOctokit访问负责解析Cargo.lock定位 Substrate 依赖提交模板集合templates21 个.tera片段按职责拆分最终由 template.md.tera 作为入口组装成完整发布说明依赖与测试Gemfile 声明 Ruby 依赖octokit、changelogerator 0.10.1、toml、git_diff_parser、optparse等test/test_basic.rb 提供单元测试。运行前的准备工作在运行脚本之前README 要求完成三项准备获取 srtool digestssrtool 是用于构建 Substrate/Polkadot 运行时 Wasm 的确定性构建工具每个链对应一份运行时摘要存放摘要文件将摘要存放在digests文件夹下按 README 的约定命名为chain-srtool-digest.json。需要说明的是实际脚本 bin/changelog第 7477 行的默认查找路径为digests/kusama_srtool_output.json、digests/westend_srtool_output.json、digests/rococo_srtool_output.json、digests/polkadot_srtool_output.json且四个路径均可通过环境变量KUSAMA_DIGEST、WESTEND_DIGEST、ROCOCO_DIGEST、POLKADOT_DIGEST覆盖实操时以脚本默认路径为准或显式设置环境变量避免文件找不到确认.env文件确保其中信息最新下文“ENV 环境变量”一节给出了完整示例。此外由于脚本通过 GitHub API 读取仓库与 PR 数据还需设置GITHUB_TOKEN见 bin/changelog 第 13 行注释及 lib/changelog.rb 第 1112 行并安装 Ruby 依赖bundle installGemfile 位于 scripts/ci/changelog/Gemfile以及changelogerator、jq、tera三个外部命令行工具。核心用法生成发布说明README 给出的命令格式为./bin/changelog ref_until [ref_since]第一个参数ref_until是截止引用本次发布的目标 tag 或提交第二个可选参数ref_since是起始引用上次发布的 tag。例如为v0.9.18生成发布说明./bin/changelog v0.9.18脚本实际支持三个位置参数见 bin/changelog 第 610 行、3134 行to [from] [output_file]即位置 1截止引用默认HEAD位置 2起始引用默认自动取上次 release 的 tag通过SubRef#get_last_ref调用 GitHub 最新 release API 得到位置 3输出文件名默认release-notes.md。运行成功后会在当前目录生成release-notes.md可直接用于版本发布。底层数据流changelogerator → context.json → tera理解 README 命令背后的完整流水线对排查问题很有帮助。从 bin/changelog 源码可以还原出四步流程解析依赖引用SubRef#get_dependency_reference(ref, sp-io)通过 GitHub Contents API 读取指定 ref 下仓库的Cargo.lock用toml解析后取出sp-io包的source中的 git 提交哈希从而得到当前 Polkadot 版本对应的 Substrate 依赖版本lib/changelog.rb 第 2031 行。注意 test/test_basic.rb 中测试的是sc-cli包脚本正文使用sp-io两者都是定位 Substrate 依赖提交的有效锚点抓取 PR 数据分别对paritytech/polkadot与paritytech/substrate执行changelogerator owner/repo -f from -t to结果分别写入polkadot.json与substrate.json组装 context用jq将两份 changelogerator 输出与四个 srtool 摘要合并为context.json结构为{ substrate, polkadot, srtool: [kusama, westend, rococo, polkadot] }模板渲染执行tera --env --env-key env --include-path templates --template templates/template.md.tera context.json生成发布说明--env-key env意味着模板内可通过env.XXX读取进程环境变量这正是 ENV 配置参与渲染的通道。ENV 环境变量README 提供了可用于本地测试的环境变量示例RUSTC_STABLErustc 1.56.1 (59eed8a2a 2021-11-01) RUSTC_NIGHTLYrustc 1.57.0-nightly (51e514c0f 2021-09-12) PRE_RELEASEtrue HIDE_SRTOOL_SHELLtrue DEBUG1 NO_CACHE1各变量的作用可从模板与脚本源码中确认变量作用源码依据RUSTC_STABLE/RUSTC_NIGHTLY写入发布说明“Rust compiler versions”一节声明构建与测试所用 rustc 版本compiler.md.teraPRE_RELEASE取值为true时发布说明顶部插入“This is a pre-release”警告块release candidate 提醒同时版本区间措辞从“This release contains”变为“This pre-release contains”pre_release.md.tera、template.md.tera 第 59 行HIDE_SRTOOL_CHAIN隐藏某个链的 srtool 运行时详情块。模板按HIDE_SRTOOL_runtime.name 大写拼接变量名README 示例中的HIDE_SRTOOL_SHELLtrue即演示了这一机制例如隐藏 kusama 则设HIDE_SRTOOL_KUSAMAtrueruntimes.md.tera 第 1418 行DEBUG控制脚本的调试日志输出RubyLogger默认输出 DEBUG 级别日志到 stdoutbin/changelog 第 1819 行NO_CACHE跳过本地缓存强制重新抓取 GitHub 数据见下文“缓存机制”bin/changelog 第 54、56、65 行GITHUB_TOKENGitHub API 鉴权令牌Octokit 客户端必需lib/changelog.rb 第 1112 行PR 标签体系Considered Labels发布说明的分类与优先级完全由 PR 的 GitHub 标签驱动。README 明确指出标签体系“大概率会随实践演进”并建议“若想找到全部被使用的标签直接在模板中搜索meta”。当前被纳入考虑范围的标签如下PriorityCN—— 优先级标签AuditDN—— 审计状态标签E4—— 新增 host functionE2—— 数据库迁移注意README 此处写 E2而当前模板源码中数据库迁移统计实际使用E1见下文说明B0—— silent不展示的静默变更B1—— noteworthy值得关注的变更T0—— node客户端节点变更T1—— runtime运行时变更。README 特别强调相同字母前缀的标签互斥。一个 PR 不应同时带B0与B5也不应同时带C1与C9若出现冲突由模板决定最终采用哪个标签。标签语义的模板级实现结合模板源码各标签族在发布说明中的具体行为可以精确到代码行C 优先级与升级建议在 high_priority.md.tera 中取 Polkadot 与 Substrate 两侧meta.C.max的最大值作为全局优先级p 7输出“‼️ HIGH”文案为“high priority release, upgrade as soon as possible”p 3输出“❗️ Medium”否则为“Low”。单条 PR 的标注在 change.md.tera 第 412 行agg.max 7显示‼️ HIGH 3显示❗️ Medium 3显示LowD 审计状态在 change.md.tera 第 1626 行D1渲染为“✅ audited”D2/D3渲染为“✅ trivial”D5渲染为“⏳ pending non-critical audit”E 族当前模板的实现与 README 的标注略有出入以模板为准——E0计数运行时迁移migrations-runtime.md.teraE1计数数据库迁移migrations-db.md.teraE3计入 host functions 变更清单E4新增 host function则触发“Node upgrade required”警示区提示“必须在运行时升级前先升级客户端”host_functions.md.teraB 静默规则B0的 PR 在客户端、运行时、API、杂项、迁移与 host functions 各分区中一律被跳过各模板中均有pr.meta.B.B0判断其数量只作为注释统计写入 debug.md.teraT 分区规则T0归入 Client 分区changes_client.md.teraT1归入 Runtime 分区changes_runtime.md.teraT2归入 API 分区changes_api.md.teraT.agg.max 2的其余类型归入 Misc 分区超过 10 条时折叠进details块changes_misc.md.teraT6会在条目后附加[✉️ XCM]标记change.md.tera 第 3640 行来源标记每个条目根据 PR URL 是否包含polkadot/substrate分别打上[P]/[S]前缀标题被首字母大写并截断到 120 字符change.md.tera 第 2842 行。模板系统发布说明的组装骨架README 强调“发布说明内容由templates文件夹下的模板文件生成为可读性与可维护性模板被拆分为多个小片段”。入口模板 template.md.tera 定义了最终发布说明的章节顺序pre_release预发布警告 debug统计注释total / silent / remaining _free_notes手工备注区 global_priority升级优先级 host_functionsHost functions 与 Node upgrade required migrations-db数据库迁移 migrations-runtime运行时迁移 compilerRust 编译器版本 runtimes各链 srtool 运行时详情 changesClient / Runtime / API / Misc 分类变更 docker_imageDocker 镜像拉取说明几个值得展开的片段_free_notes.md.tera手工撰写区其内容会插入到发布说明顶部且随每次 release candidate 重新生成。模板明确要求在文件顶部与底部各保留一个空行!-- Edit below this line --与!-- Edit above this line --之间的内容即自由备注区runtimes.md.tera runtime.md.tera遍历context.json中的srtool数组并按链名排序输出包含️ Runtime Size字节与人类可读尺寸、 Core VersionspecName-specVersion / implName-implVersion、 Compressed压缩率按size_compressed / size_decompressed计算、 Metadata version、️ system.setCode hash、️ authorizeUpgrade hash、️ Blake2-256 hash、 IPFS的详情块构建工具与 rustc 信息取自第一条 srtool 记录migrations-runtime.md.tera定义“Runtime migrations 是在运行时升级期间执行一次的操作”根据计数输出 0/1/N 三种措辞migrations-db.md.tera定义“数据库迁移是将数据库升级到最新状态的操作”并提醒“部分迁移可能破坏兼容性强烈建议备份数据库”docker_image.md.tera发布说明末尾提供 Docker 镜像获取方式示意命令为docker pull parity/polkadot:latest镜像通常在发布后数分钟才可用。开发与调试技巧Hot Reload模板改动即时预览由于发布说明由模板渲染而来调模板是高频操作。README 提供的热重载命令使用fswatch监听模板目录排除.md文件并逐次重新运行脚本fswatch templates -e .*\.md$ | xargs -n1 -I{} ./bin/changelog v0.9.18任何.tera文件的保存都会触发一次渲染便于边改边看输出。缓存机制与刷新脚本默认启用 GitHub 数据本地缓存只要polkadot.json或substrate.json已存在就会跳过对应的 GitHub API 调用直接复用本地数据bin/changelog 第 5672 行这显著加速了反复渲染的过程。但若 GitHub 上的标签发生了变化就需要刷新数据README 给出两种方式手动删除本地chain.json缓存文件设置export NO_CACHE1强制重新抓取。生成完整 PR 列表Full PR List默认发布说明会按标签过滤但某些场景如发布评审需要不带任何分类的“原始”完整 PR 清单。步骤为从发布草稿流水线仓库中对应的release-30_publish-draft-release.yml工作流产出的release-notes-contextartifacts 中获取最新的context.json将其放到scripts/ci/changelog目录下该文件与本地渲染产生的context.json结构一致包含substrate.changes与polkadot.changes使用 full_pr_list.md.tera 模板渲染。该模板刻意独立于发布说明主模板按 Substrate、Polkadot 两部分输出形如[S] #123 - title/[P] #456 - title的清单命令为cd scripts/ci/changelog tera --env --env-key env --template templates/full_pr_list.md.tera context.json与 CI 发布流程的衔接README 说明当前为本地构建但仓库中同时保留了一套面向 GitHub Actions 环境的 Ruby 发布文本生成脚本 scripts/ci/github/generate_release_text.rb。从源码看其核心思路与本地脚本一致通过GITHUB_TOKEN建立 Octokit 客户端、读取GITHUB_REF作为当前引用、取最近 release tag 作为基线、再从Cargo.lock解析sc-cli依赖提交定位 Substrate 基线随后分别构造paritytech/polkadot与paritytech/substrate的Changelog对象最后用 polkadot_release.erbERB 模板渲染发布文本。这印证了 README 中“标签稳定后迁至 CI”的规划方向——两套代码共享同一数据获取与渲染哲学。测试与质量保障仓库为工具本身提供了单元测试 test/test_basic.rb覆盖两个关键行为test_get_dep_ref_polkadot给定一个真实提交13c2695与包名sc-cli断言get_dependency_reference能从对应Cargo.lock解析出 Substrate 依赖提交7db0768a85dc36a3f2a44d042b32f3715c00a90dtest_get_dep_ref_invalid_ref传入不存在的 ref9999999断言方法抛异常。该测试验证了整条链路中最脆弱的一环——通过 GitHub API 跨仓库解析依赖提交确保发布说明能正确覆盖 Substrate 侧的变更。小结Polkadot 的发布说明生成方案是一个典型的“数据抓取 元数据驱动渲染”流水线以 GitHub PR 标签为分类与优先级依据以Cargo.lock为跨仓库版本锚点以 srtool 摘要补充运行时二进制信息最终由 21 个 Tera 片段组装为结构化的release-notes.md。对本工具的使用者而言掌握 README 中的命令、ENV 与标签语义即可完成一次发布对希望扩展它的人来说模板中的meta访问模式与B0静默规则、E族迁移/主机函数计数、T族分区等实现细节就是最直接的二次开发入口。赞分享区块链【免费下载链接】polkadotPolkadot Node Implementation项目地址https://gitcode.com/gh_mirrors/po/polkadot点击查看免费下载相关推荐Renovate 发布说明提取机制深度解析从 js-yaml CHANGELOG 测试夹具看 changelog 解析与 PR 渲染链路Renovate 发布说明提取机制深度解析从 js yaml CHANGELOG 测试夹具看 changelog 解析与 PR 渲染链路 Renovate 在开发工具DevOps后端Gatsby 发布说明模板解析从占位符到自动化 Release Notes 生成Gatsby 发布说明模板解析从占位符到自动化 Release Notes 生成 scripts/create release notes.template.前端静态站点Web框架huggingface_hub 发布说明生成 Skill 全解析从 PR 数据到 Markdown 发布文档的自动化流水线huggingface_hub 发布说明生成 Skill 全解析从 PR 数据到 Markdown 发布文档的自动化流水线 本文深入解析 .opencode/开发工具CLI机器学习上一篇《机器学习训练秘籍》基础误差分析小结快速雏形、人工误差分析与 Eyeball/Blackbox 开发集拆分下一篇终极指南Visual C运行库合集一键安装告别DLL缺失烦恼创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考