首页/新闻资讯/正文详情

在 SourceHut Builds 中自动化生成 git-cliff 变更日志(Changelog)的完整指南

发布时间:2026/9/23 9:50:39 来源:云帆数科 栏目:资讯中心
在 SourceHut Builds 中自动化生成 git-cliff 变更日志(Changelog)的完整指南
在 SourceHut Builds 中自动化生成 git-cliff 变更日志Changelog的完整指南【免费下载链接】git-cliffA highly customizable Changelog Generator that follows Conventional Commit specifications ⛰️项目地址: https://gitcode.com/gh_mirrors/gi/git-cliff导读本文面向使用 SourceHut 托管代码、并希望借助其免费 CI 服务 builds.sr.ht 自动维护变更日志的开发者。你将掌握如何在.build.yml中编排任务让 git-cliff 在 Alpine 容器内基于 Conventional Commits 生成CHANGELOG.md再通过 SSH 密钥认证自动提交并推回仓库同时会深入理解该流程背后 git-cliff 的命令行参数、输出机制与 CI 安全细节让自动化真正可落地、可复现。为什么选择 SourceHut Builds 来运行 git-cliffgit-cliff 是一个高度可定制的变更日志生成器它从 Git 提交历史出发遵循 Conventional Commits 规范并通过正则驱动的自定义解析器commit_parsers对提交进行分类最终套用可配置的模板生成 changelog。相关能力可以参阅仓库根目录的 cliff.toml 与 config/cliff.toml 中的默认配置以及 website/docs/configuration/git.md 对解析器的说明。将这一流程放到 CI 中有三个直接收益自动化每次合并提交后自动更新CHANGELOG.md无需开发者手动执行git cliff一致性所有成员使用同一份配置与同一版本的工具避免本地环境差异可审计CI 生成的每次变更都以独立提交commit形式记录配合chore(release): Update CHANGELOG这样的提交信息历史清晰可追溯。SourceHut Builds 的.build.yml采用 YAML 描述构建环境天然适合这种拉取源码 → 运行工具 → 回推结果的轻量任务。官方文档 website/docs/sourcehut.md 即为此场景提供了可直接复制的完整方案下文将逐段拆解。完整工作流一份可直接运行的 .build.yml以下配置来自 website/docs/sourcehut.md 的核心示例它完成生成 changelog → 提交 → 推回全流程image: alpine/edge packages: - git-cliff secrets: - your-builds.sr.ht-secret sources: - git://gitgit.sr.ht:~username/repo-name environment: dir: repo-name source: your-source tasks: - git-cliff: | cd $dir git cliff -o CHANGELOG.md ssh-keyscan -t rsa git.sr.ht ~/.ssh/known_hosts git remote set-url origin $source git checkout main git add CHANGELOG.md git commit -m chore(release): Update CHANGELOG git push -o skip-ci逐字段拆解字段取值作用imagealpine/edge指定构建镜像。alpine/edge仓库包含git-cliff包可直接通过apk安装详见 website/docs/installation/alpine-linux.mdpackages- git-cliff在镜像启动后预装 git-cliff无需手动apk addsecrets构建机私钥将 SourceHut 私钥注入构建环境用于向git.sr.ht认证推送sourcesgit://...构建机启动时自动 clone 你的仓库到工作目录environmentdir/source定义任务内可直接引用的变量减少重复书写tasksgit-cliff任务实际执行的命令序列任务内命令按顺序运行核心原理git-cliff 命令在 CI 中的执行链路任务里的git cliff -o CHANGELOG.md是整个流程的心脏。从命令行参数定义 git-cliff/src/args.rs 可以看到-o/--output用于指定输出文件路径且支持不带路径的简写形式——此时默认输出到CHANGELOG.md默认值由git-cliff-core的DEFAULT_OUTPUT常量提供见 git-cliff-core/src/lib.rs。因此上面的写法与git cliff -o、git cliff --output CHANGELOG.md等价。命令的实际执行入口在 git-cliff/src/main.rs程序先解析参数并调用git_cliff::run()生成 changelog随后根据--output参数或配置中changelog.output决定写入目标——是指定文件还是标准输出。流程可概括为main.rs解析 CLI 参数设置日志级别-v对应 debug-vv对应 tracerun()读取配置、遍历 Git 标签与提交、应用commit_parsers与模板渲染根据输出路径将结果写入CHANGELOG.md或 stdout。值得注意的是git-cliff/src/main.rs 中output的取值优先来自命令行参数其次才回落到配置文件的changelog.output。这意味着在 CI 脚本里显式传-o CHANGELOG.md可以覆盖仓库内任何配置文件中定义的输出路径行为完全可控。环境准备密钥与占位符替换按照 website/docs/sourcehut.md 的说明首次配置需要完成 4 个步骤1. 生成专用 SSH 密钥ssh-keygen -t ed25519 -C builds.sr.ht -f ~/.ssh/builds-srht使用ed25519而非 RSA 可以获得更短的密钥与更快的握手-C指定注释便于日后区分该密钥用途。2. 将公钥加入 SourceHut 账户把上一步生成的~/.ssh/builds-srht.pub公钥内容添加到 SourceHut 账户的 SSH keys 页面meta.sr.ht 的 Keys 管理入口。这一步让构建机推送时能被git.sr.ht识别为该账户的合法来源。3. 将私钥注册为 Builds 机密把~/.ssh/builds-srht私钥作为 secret 添加到 builds.sr.ht 的 Secrets 管理页面。注册后SourceHut 会在构建环境中把该私钥以~/.ssh/secret-name的形式暴露给任务使用。4. 替换 .build.yml 中的占位符对照上文完整示例需要替换 4 处占位符替换为示例your-builds.sr.ht-secret第 3 步中注册的 secret 名称builds-srhtusername你的 SourceHut 用户名alicerepo-name仓库名称my-projectyour-source仓库的 SSH 地址gitgit.sr.ht:~alice/my-project提示your-source通常是gitgit.sr.ht:~username/repo-name形式与sources中声明的地址保持同构但走 SSH 协议以便推送。任务脚本逐行解析从生成到推送的完整链路任务块中的 shell 脚本是整个自动化的精华逐行拆解如下1. 进入仓库目录cd $dir$dir来自environment段即sources中 clone 下来的目录名与仓库同名。SourceHut 默认把sources克隆到构建工作目录下。2. 生成变更日志git cliff -o CHANGELOG.md在仓库根目录执行 git-cliff。它会自动发现项目中的cliff.toml/.cliff.toml/.config/cliff.toml配置发现逻辑见 git-cliff/src/args.rs若没有则回落到内置默认配置将生成的 changelog 写入CHANGELOG.md。若仓库尚未配置可先用git cliff --init生成默认配置再提交到仓库参见 website/docs/index.md 的快速开始。3. 信任 SourceHut 主机ssh-keyscan -t rsa git.sr.ht ~/.ssh/known_hosts由于构建环境是全新的~/.ssh/known_hosts为空。直接git push会因 host key 校验失败而中止所以先用ssh-keyscan抓取git.sr.ht的 RSA 公钥并写入 known_hosts跳过首次连接确认。4. 切换推送协议git remote set-url origin $source$source为 SSH 形式地址。构建机初始 clone 用的是git://协议只读推送前必须切换到 SSH 地址否则无法写回远端。5. 提交变更git checkout main git add CHANGELOG.md git commit -m chore(release): Update CHANGELOGgit checkout main确保在目标分支上操作避免构建机默认 checkout 的 HEAD 不在main提交信息chore(release): Update CHANGELOG是标准的 Conventional Commits 类型即使后续再对该提交运行 git-cliff它也会被归入chore分组不会污染下一版 changelog 的语义分类。6. 推送并跳过 CI 递归git push -o skip-ci-o skip-ci是 SourceHut 特有的推送选项push option通知 builds.sr.ht 忽略本次推送触发的构建。这是防止无限递归的关键若省略更新CHANGELOG.md的提交会再次触发构建构建再次推送、再次触发……形成死循环。深入源码git-cliff 在 CI 中的输出与兼容性保证输出优先级结合 git-cliff/src/main.rs 的源码输出目标的决策顺序为命令行--output 配置changelog.output 标准输出。在 CI 场景下只要配置中未写死output-o CHANGELOG.md就能稳定生效反过来若你想在 CI 中只打印不落盘例如先人工审查则不加-o即可让结果流向 stdout配合构建日志查看。git cliff与git-cliff的互换性示例脚本使用了git cliff子命令形式。根据 website/docs/index.md 的说明在安装了 Git 的环境中git cliff与git-cliff带连字符可互换使用SourceHut 的 Alpine 镜像自带 Git因此两种写法均可。若希望脚本更通用例如未来迁移到不含 Git 的环境可改用git-cliff。Alpine 包与 Dockerfile 的佐证Alpine 可用性git-cliff 已打包进 Alpine Edge 的 community 仓库website/docs/installation/alpine-linux.md 明确apk add git-cliff即可安装这正是.build.yml中packages直接声明git-cliff的前提容器行为参考仓库根目录的 Dockerfile 展示了官方容器镜像的构建方式以 Debian slim 为基础、内置git与安全目录豁免配置。它验证了 git-cliff 二进制在容器化 CI 环境中的标准运行形态SourceHut 的 Alpine 环境遵循同样的二进制 Git 仓库运行模型。常见问题与排错建议现象可能原因处理建议构建在git push处失败私钥未注册为 secret或 secret 名称与占位符不一致核对secrets段名称与 builds.sr.ht Secrets 页面中的注册名推送被拒绝权限不足公钥未添加到 SourceHut 账户检查 meta.sr.ht 的 Keys 页面是否包含builds-srht.pubssh-keyscan报 host key 冲突多次运行后 known_hosts 残留旧条目在任务开头先清空或改用-H选项重新扫描changelog 未包含最新提交main分支与构建机 checkout 的默认分支不一致确认git checkout main与仓库默认分支名一致若默认分支为master同步修改构建无限循环触发推送时未携带-o skip-ci确保git push -o skip-ci保留在脚本末尾扩展将 changelog 生成与版本发布结合在 SourceHut 构建中你还可以把 git-cliff 的版本能力一并纳入自动化。例如先计算下一版本号再生成 changeloggit cliff --bump --unreleased --output CHANGELOG.md git commit -m chore(release): Update CHANGELOG git push -o skip-ci--bump会基于未发布提交自动推导 SemVer 版本fix:递增 PATCH、feat:递增 MINOR、破坏性变更递增 MAJOR详见 website/docs/usage/bump-version.md如需在发布标签后生成可在任务中先git tag再运行git cliffgit-cliff 会依据 config/cliff.toml 中的tag_pattern识别标签并分段生成各版本 changelog。这样一套构建即可同时完成版本号 变更日志 提交推送的发布流水线。小结通过 SourceHut Builds 的.build.yml配合git-cliff的 Alpine 软件包与 SSH 密钥认证你可以在每次代码合并后自动生成并回推CHANGELOG.md。核心要点可以归结为四句话用packages预装工具、用secrets注入推送权限、用ssh-keyscan解决首次信任、用git push -o skip-ci防止 CI 死循环。对照本仓库的 示例配置 和 命令行用法文档 按需调整后即可将这套自动化直接应用到自己的 SourceHut 项目中。【免费下载链接】git-cliffA highly customizable Changelog Generator that follows Conventional Commit specifications ⛰️项目地址: https://gitcode.com/gh_mirrors/gi/git-cliff创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

企业级智能体效能管理:从能跑通到可问责的实战指南
企业级智能体效能管理:从能跑通到可问责的实战指南

1. 这不是AI工具说明书,而是一份企业真实运转中“管人管事管智能体”的实战手记“企业级智能体效能管理指南”——这标题乍看像某家SaaS厂商的白皮书副标题,但如果你真在一家中型以上企业里带过技术团队、做过流程优化、操盘过AI落地项目,你马… · 2026/9/23 9:50:39

Python车牌识别源码解析:基于OpenCV与PyQt5的完整实现
Python车牌识别源码解析:基于OpenCV与PyQt5的完整实现

简介:基于Python的车牌识别参考项目源码,面向计算机视觉学习者、智能交通系统研究人员及有二次开发需求的开发者,综合应用OpenCV图像处理与PyQt5界面设计,展示车牌定位、字符分割与识别等核心流程。资源共2000个文件,以… · 2026/9/23 9:50:39

CodeBurn 版本演进与技术架构解析:从本地 AI 用量追踪器到全平台观测工具
CodeBurn 版本演进与技术架构解析:从本地 AI 用量追踪器到全平台观测工具

CodeBurn 版本演进与技术架构解析:从本地 AI 用量追踪器到全平台观测工具 【免费下载链接】codeburn Free, local tool to track AI coding token usage and cost across 37 tools and agents (Claude Code, Cursor, Codex, Gemini and more), by model, project, a… · 2026/9/23 9:50:26

3个避坑点讲透日本白光证书查询与执业风险最佳实践
3个避坑点讲透日本白光证书查询与执业风险最佳实践

3个避坑点讲透日本白光证书查询与执业风险最佳实践 看了一堆教程还是不会写项目?别急,先把“日本白光”这个概念里的电子证书查询和执业风险搞明白。很多学员在 CSDN 上看到关于跨境合规的讨论,却发现实操中全是坑。今天我们就用 最佳实践… · 2026/9/23 11:16:00

软件检测入门到精通:源码拆解避坑指南
软件检测入门到精通:源码拆解避坑指南

软件检测入门到精通:源码拆解避坑指南 配置环境就卡半天,是不是你刚接手“软件检测”模块时的真实写照?别急,这行代码背后的逻辑比你想的复杂。很多人以为软件检测就是跑个脚本,其实它是从底层依赖到上层业务逻辑的全链路排查。想从入门到精通,光看文档… · 2026/9/23 11:15:54

dep 卸载完全指南:install.sh、Homebrew 与 pacman 三种安装方式的清理方案
dep 卸载完全指南:install.sh、Homebrew 与 pacman 三种安装方式的清理方案

dep 卸载完全指南:install.sh、Homebrew 与 pacman 三种安装方式的清理方案 【免费下载链接】dep Go dependency management tool experiment (deprecated) 项目地址: https://gitcode.com/gh_mirrors/de/dep dep(Go dependency management tool … · 2026/9/23 11:15:41

KDD-CUP99网络攻击检测实战:从特征工程到随机森林与Web部署
KDD-CUP99网络攻击检测实战:从特征工程到随机森林与Web部署

简介:面向数据挖掘与网络安全相关的课程设计与期末大作业场景,这份基于KDD-CUP99数据集的网络攻击检测项目,提供了完整的Python实现和配套资料。项目源码经过本地编译验证,难度适中,内容由助教老师审定,可直… · 2026/9/23 11:15:41

魔兽指令实战项目避坑指南:3个版本差异解决API报错
魔兽指令实战项目避坑指南:3个版本差异解决API报错

魔兽指令实战项目避坑指南:3个版本差异解决API报错 刚把老项目从 WoW 3.3.5 迁到 4.0.1,编译直接炸锅。报错满屏 SpellCastFailed ,以前好用的 CastSpellByID… · 2026/9/23 11:15:41

Dart SDK 基准测试解析:用 SoundSplayTreeSet 验证声音型变(Sound Variance)对 Splay 树性能的影响
Dart SDK 基准测试解析:用 SoundSplayTreeSet 验证声音型变(Sound Variance)对 Splay 树性能的影响

编程语言编译器语言运行时标准库开发工具 【免费下载链接】sdk The Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more. 项目地址: https://gitcode.com/gh_mirrors/sdk1/sdk 点击查看 免费下载 导读 本文围绕 Dart SDK 仓… · 2026/9/23 11:15:35

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码