新闻详情

新闻详情

首页 / 资讯中心 / 详情

update_manifest.py 脚本逆向拆解:Cangjie Nightly Builds 的版本校验、SHA256 计算与回写自校验

发布时间:2026/11/4 11:17:08来源:尧图网络
update_manifest.py 脚本逆向拆解:Cangjie Nightly Builds 的版本校验、SHA256 计算与回写自校验
update_manifest.py 脚本逆向拆解Cangjie Nightly Builds 的版本校验、SHA256 计算与回写自校验【免费下载链接】nightly_buildCangjie Nightly Builds 版本归档Nightly版本暂存时间为30天项目地址: https://gitcode.com/Cangjie/nightly_buildCangjie Nightly Builds 是仓颉语言每日构建版本的归档仓库Nightly 版本仅暂存 30 天而 tools/update_manifest.py 是这条发布流水线上的关键脚本——每次 nightly 构建发布后它负责校验版本串、计算或接收SHA256 摘要并把 version / url / hash 三个字段回写到 Scoop 清单文件 bucket/cangjie-nightly.json最后再做一次自校验确保 Windows 用户scoop install时拿到的下载地址与哈希值绝对可靠。本文带你完整拆解这个脚本的四步工作流。这个脚本在整个项目中扮演什么角色仓库结构非常精简核心就三个部分 bucket/cangjie-nightly.jsonScoop bucket 清单告诉 Scoop 去哪里下载、下载后如何校验和部署 tools/update_manifest.py流水线专用脚本负责维护上面这份清单 docs/scoop-install.md面向用户的 Scoop 安装指南Windows。每日流程是构建机产出 SDK zip → 发布为 release → 流水线调用update_manifest.py→ 清单更新 → 用户侧scoop update即可升级。脚本头部注释明确了它的四项职责与退出码约定0 成功 / 1 校验失败 / 2 用法错误见 tools/update_manifest.py#L11-L21。注意它只改 manifest 文件git add/commit/push由调用方完成职责边界非常干净。第一步版本串格式校验与文件名一致性检查这是脚本的第一道防线。脚本用正则约束 nightly 版本串必须是X.Y.Z-pre.数字形态例如1.3.0-alpha.20260902010013两个正则定义在 tools/update_manifest.py#L36-L37版本正则^[0-9.]-[A-Za-z]\.[0-9]$SHA256 正则^[0-9a-fA-F]{64}$更关键的是tag 与文件名必须同串的一致性校验脚本根据版本串拼出期望的文件名cangjie-sdk-windows-x64-版本.zip与实际 zip 文件名比对不一致立即报错退出见 tools/update_manifest.py#L90-L94。 为什么要这么严格注释里提到2025-12 曾出现过 release tag 与产物文件名不一致的事故导致用户按版本号安装直接 404。这道校验就是从事故中沉淀下来的防复发机制。版本串写错任何一位都会 404所以逐字符精确是 nightly 版本管理的铁律。第二步SHA256 摘要如何确定SHA256 是 Scoop 下载后的完整性校验值来源有两条路径tools/update_manifest.py#L96-L104--hash直传如果流水线在构建阶段已经算好哈希直接传参即可脚本只做 64 位十六进制格式校验并统一转小写省掉一次重复计算本地分块计算未传--hash时脚本调用local_sha256函数自行计算核心实现在 tools/update_manifest.py#L45-L51。本地计算采用的是分块读取策略每次从 zip 文件读 1MB1 20字节再喂给 hashlib 累加。nightly 的 SDK 压缩包含 252MB 级别如果一次性read()进内存会直接撑爆构建机内存分块方案则让内存占用恒定在 1MB 左右是处理大文件哈希的标准写法对新手也是很好的范例。第三步回写 manifest 的三个字段校验全部通过后脚本进入回写环节tools/update_manifest.py#L108-L116只精确改动三个位置字段新值来源version命令行传入的版本串architecture.64bit.url下载基址 版本 tag 期望文件名拼接而成的 release 下载地址architecture.64bit.hash第二步确定的 SHA256写文件时有两个容易被忽视的细节以 UTF-8无 BOM编码、newline\n强制换行符、indent4保持 4 空格缩进——这与清单现有的格式风格完全一致避免产生无意义的 diff 噪音。对照 bucket/cangjie-nightly.json 可以看到version、url、hash三处正是每天被脚本刷新的字段其余如bin二进制列表、env_add_path环境变量、checkver版本探测等配置则保持不动。第四步写回后自校验双保险收尾写完不能就算完。脚本会重新读取刚写好的文件解析 JSON 并逐一核对tools/update_manifest.py#L118-L126version是否与传入值一致hash是否一致url是否以期望的产物文件名结尾。任何一项不符就die(self-check failed: ...)退出。这一步防的是磁盘写入异常、JSON 序列化意外等写的时候觉得成功、读的时候面目全非的隐蔽故障——对自动化流水线来说宁可当场失败也不能把一份坏清单推给用户。最后脚本打印更新后的三字段与哈希来源方便在流水线日志中留痕。实际调用方式流水线里长什么样脚本只依赖 Python3 标准库argparse / hashlib / json / re构建机无需安装任何第三方包。标准调用形如摘自脚本头部用法说明python3 tools/update_manifest.py \ --version 1.3.0-alpha.20260902010013 \ --sdk-zip /path/to/cangjie-sdk-windows-x64-1.3.0-alpha.20260902010013.zip \ [--hash sha256] \ [--repo-root /path/to/nightly_build]参数要点--version、--sdk-zip必填--hash可选流水线已算好时传入可免去本地计算--repo-root默认为脚本所在目录的上一级即仓库根一般无需显式指定若 manifest 或 zip 文件不存在、文件名与版本串不符脚本会输出ERROR:前缀信息到 stderr 并以退出码 1 终止流水线据此判定发布失败。对普通用户来说这些细节的好处体现在安装体验上按 docs/scoop-install.md 添加 bucket 后一条命令即可用上当天构建scoop install cangjie-nightly scoop update cangjie-nightly而近 30 天内的任意历史版本也可以用scoop install cangjie-nightly完整版本号精确安装、多版本共存——这背后正是脚本每天维护好的versionurlhash在起作用。小结update_manifest.py不到 140 行却把自动化发布中最容易出事故的环节全部覆盖 版本串与文件名一致性校验防错版、 分块 SHA256 计算兼顾大文件内存安全、✍️ 保持格式风格的最小化回写、️ 写后自校验兜底。对于想理解Nightly Builds 版本归档这类仓库如何保证每日构建可靠可装的读者这个脚本是一个麻雀虽小、五脏俱全的参考样本。【免费下载链接】nightly_buildCangjie Nightly Builds 版本归档Nightly版本暂存时间为30天项目地址: https://gitcode.com/Cangjie/nightly_build创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/3 7:07:39

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/3 12:09:35

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/3 12:09:38

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/3 12:09:41

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/4 1:25:31

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/4 3:51:11

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉