自动化生成与更新 Changelog 文件
在软件开发中,保持 Changelog 文件的更新是一项至关重要的任务。
Changelog 文件记录了项目的每一个重要变更,包括新功能、修复的问题以及任何可能破坏现有功能的变更。对于维护者、贡献者和最终用户来说,这都是一个宝贵的资源。然而,手动维护 Changelog 文件既耗时又容易出错。我们可以利用 Git 和 Bash 脚本来自动化这一过程。
为什么需要自动化的 Changelog
- 节省时间:自动化工具可以快速从 Git 提交历史中提取相关信息,并生成格式化的 Changelog。
- 减少错误:手动编辑 Changelog 时容易遗漏或错误地记录某些变更。自动化工具可以确保所有相关提交都被正确记录。
- 保持一致性:自动化的 Changelog 生成工具可以确保每次发布的 Changelog 都遵循相同的格式和约定。
如何自动化生成和更新 Changelog
下面是一个基于 Bash 脚本的自动化 Changelog 生成和更新方案的详细步骤:
1. 定义 Changelog 的格式
首先,你需要确定 Changelog 的格式。一个常见的格式包括版本号、发布日期、以及一个或多个包含具体变更的列表。例如:
## [1.2.0] - 2023-04-01### Added
- 新功能:支持多用户登录。### Fixed
- 修复了登录时的认证问题。
- 修正了用户资料页面的显示错误。
2. 编写 Bash 脚本
接下来,你可以编写一个 Bash 脚本来自动化地生成和更新 Changelog。这个脚本将执行以下任务:
- 确定当前版本号和下一个版本号的 Git 标签。
- 使用 Git 提交历史来查找两个标签之间的所有相关提交(例如,包含 “feat:” 或 “fix:” 前缀的提交)。
- 将这些提交格式化为 Changelog 条目,并插入到指定的 Changelog 文件中。
以下是一个 Bash 脚本示例:
#!/bin/bash -e # 脚本所在的顶层目录
toplevel="$(dirname "$(readlink -f "$0")")/.."
cd "$toplevel" || exit 1 # 获取当前版本标签及其对应的提交
CURRENT_TAG_NAME=$(git describe --abbrev=0 --tags)
CURRENT_TAG_COMMIT=$(git rev-parse "$CURRENT_TAG_NAME") # 尝试找到下一个版本标签的提交(这里简化了逻辑,假设存在且直接获取下一个)
NEXT_TAG_NAMES=$(git tag --sort=-version:refname | grep -Eo 'v[0-9]+\.[0-9]+\.[0-9]+(-[a-z]+\.[0-9]+)?' | grep -vE "^$CURRENT_TAG_NAME$" | head -n 1)
if [ -n "$NEXT_TAG_NAMES" ]; then NEXT_TAG_COMMIT=$(git rev-parse "$NEXT_TAG_NAMES")
else echo "No next tag found. Exiting." exit 1
fi # 提取版本号
VERSION_NUM="${CURRENT_TAG_NAME#v}" # 检查指定的 Changelog 文件是否已经包含当前版本号
if grep -q "^## [$VERSION_NUM] " "$1"; then echo "Version $VERSION_NUM already in Changelog. Exiting." exit 0
fi # 临时 Changelog 文件
TMP_CHANGELOG="/tmp/${VERSION_NUM}_changelog.tmp" # 函数:为给定路径生成 Changelog 片段
generate_changelog_for_path() { local path="$1" local sha1=$(git ls-tree "$CURRENT_TAG_COMMIT" "$path" | awk '/blob/ {print $3}') local sha2=$(git ls-tree "$NEXT_TAG_COMMIT" "$path" | awk '/blob/ {print $3}') if [ "$sha1" != "$sha2" ]; then echo "## [$VERSION_NUM] - $path" >> "$TMP_CHANGELOG" git log --oneline --format=" * %s" "$sha1...$sha2" -- "$path" | grep -E '^(fix:|feat:)' >> "$TMP_CHANGELOG" echo >> "$TMP_CHANGELOG" fi
} # 为主仓库生成 Changelog 片段(空路径表示根仓库)
generate_changelog_for_path "" # 为每个子模块生成 Changelog 片段
git submodule foreach --quiet 'bash -c "$(declare -f generate_changelog_for_path); path=\"\$sm_path\"; generate_changelog_for_path \"\$path\""' # 将生成的 Changelog 插入到指定的文件中
if [ -s "$TMP_CHANGELOG" ]; then # 在 Changelog 文件的指定位置(例如,开头)插入内容 # 这里假设在文件开头插入,你可以根据需要调整 sed 命令 sed -i "1i\\$(cat $TMP_CHANGELOG)" "$1" # 或者,如果你想要在某个特定的标记(如 "## [Unreleased]")之后插入 # sed -i "/^## [Unreleased]$/r $TMP_CHANGELOG" "$1"
else echo "No changes found between $CURRENT_TAG_NAME and $NEXT_TAG_NAMES."
fi # 清理临时文件
rm -f "$TMP_CHANGELOG" echo "Changelog for $VERSION_NUM has been updated."
3. 集成到 CI/CD 流程
将 Changelog 生成脚本集成到 CI/CD 流程中。这样,每当有新版本发布时,CI/CD 系统都会自动运行该脚本,并更新 Changelog 文件。
4. 注意事项
- 确保 Git 仓库是干净的:在生成 Changelog 之前,确保所有的提交都已经推送到远程仓库,并且没有未提交的更改。
- 测试脚本:在正式使用之前,在测试环境中测试脚本,以确保它按预期工作。
- 处理子模块:如果你的项目包含 Git 子模块,请确保你的脚本能够正确处理这些子模块的 Changelog。
相关文章:
自动化生成与更新 Changelog 文件
在软件开发中,保持 Changelog 文件的更新是一项至关重要的任务。 Changelog 文件记录了项目的每一个重要变更,包括新功能、修复的问题以及任何可能破坏现有功能的变更。对于维护者、贡献者和最终用户来说,这都是一个宝贵的资源。然而&#x…...
(六)WebAPI方法的调用
1.WebAPI中定义的GET、POST方法 [HttpGet(Name "GetWeatherForecast")]public IEnumerable<WeatherForecast> Get(){return Enumerable.Range(1, 5).Select(index > new WeatherForecast{Date DateTime.Now.AddDays(index),TemperatureC Random.Shared.N…...
运维工程师面试整理-故障排查常见故障的排查步骤及方法
故障排查是运维工程师的重要技能之一。在面试中,面试官通常会通过故障排查相关的问题来评估你解决问题的能力和系统思维。以下是关于常见故障的排查步骤及方法的详细内容,帮助你更好地准备面试。 1. 故障排查的基本步骤 1. 问题识别 a. 描述问题:明确问题的具体表现...
OpenAI o1解决了「Quiet-STaR」的挑战吗?
随着OpenAI o1近期的发布,业界讨论o1关联论文最多之一可能是早前这篇斯坦福大学和Notbad AI Inc的研究人员开发的Quiet-STaR,即让AI学会先安静的“思考”再“说话” ,回想自己一年前对于这一领域的思考和探索,当初也将这篇论文进行…...
PDF产品册营销推广利器FLBOOK
在互联网高速发展的时代,营销推广已成为企业拓展市场的重要手段。而一款优秀的营销工具,可以为企业带来事半功倍的推广效果。今天,就为大家介绍一款集创意与实用于一体的PDF产品册营销推广利器——FLBOOK,帮助企业轻松提升品牌影响…...
华为OD机试 - 字符串划分(Python/JS/C/C++ 2024 E卷 100分)
华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…...
nginx和php-fpm连接超时的相关配置以及Nginx中的try_files以及root、alias的使用
一、nginx和php-fpm连接超时的相关配置 线上的PHP服务器架构大都是nginx proxy->nginx web->php-fpm。在服务器运行正常,服务器之间的连接正常,未被防火墙阻止的情况下,对这种架构排查504报错时需要注意以下几个地方的参数。 1是nginx…...
在MAC中Ollama开放其他电脑访问
ollama安装完毕后默认只能在本地访问,之前我都是安装其他的软件之后可以结合开放其他端口访问,其实是可以新增或修改下电脑的系统配置,就可以打开端口允许除本机IP或localhost访问。 步骤如下: 1、查看端口(默认是&…...
NE555芯片制作的节拍器
NE555芯片的节拍器,以一定的频率发出声音和闪烁灯光,起到节拍指示的作用。...
如何使用 Next.js 进行服务端渲染(Server-Side Rendering, SSR)
文章目录 前言步骤 1: 创建 Next.js 应用步骤 2: 创建页面组件示例页面组件 步骤 3: 自定义 _app.js 文件步骤 4: 自定义 _document.js 文件步骤 5: 运行应用步骤 6: 构建和部署总结 前言 Next.js 本身就支持 SSR 并提供了一系列内置的方法来简化这个过程。下面将详细介绍如何使…...
【machine learning-八-可视化loss funciton】
可视化lossfunction loss funciton可视化损失函数等高图 loss funciton 上一节讲过损失函数,也就是代价函数,它是衡量模型训练好坏的指标,对于线性回归来说,模型、参数、损失函数以及目标如下:、 损失函数的目标当然…...
Android 将EasyPermissions进一步封装,使得动态权限申请更加简明
1.引入依赖: implementation pub.devrel:easypermissions:3.0.0 2.在BaseActivity处理统一的结果回调和请求Code 核心内容: (1)处理Activity本身继承的方法onRequestPermissionsResult (2)实现接口EasyPermissions.PermissionCallbacks来接收请求结果 (3)定义申请权…...
我的AI工具箱Tauri版-VideoReapeat视频解说复述克隆
本教程基于自研的AI工具箱Tauri版进行VideoReapeat视频解说复述克隆。 VideoReapeat视频解说复述克隆 是自研的AI工具箱Tauri版中的一款专用模块,旨在通过AI技术对视频解说内容进行复述和克隆。该工具可自动洗稿并重新生成视频解说,通过简单配置即可对大…...
MySQL5.7.42高可用MHA搭建及故障切换演示
系列文章目录 rpmbuild构建mysql5.7RPM安装包 MySQL基于GTID同步模式搭建主从复制 文章目录 系列文章目录前言一、MHA架构介绍1.MHA的功能2.MHA组成3.MHA故障转移过程4.MHA架构优缺点 二、环境准备1.服务器免密2.基于GTID主从复制搭建3.下载mha组件 三、MHA组件安装1.安装依赖…...
快速搭建最简单的前端项目vue+View UI Plus
1 引言 Vue是一套用于构建Web前端界面的渐进式JavaScript框架。它以其易学易用、性能出色、灵活多变而深受开发者喜爱,并且与其他前端框架(如React和Angular)相比,在国内市场上受到了广泛的认可和使用。点击进入官方…...
倍增练习(1)
A - ST 表 && RMQ 问题 题目思路:st表的板子题用于静态区间求最值,通过倍增的思想,先通过预处理将各个区间的最大值通过转移式求出f[i][j] max(f[i][j - 1], f[i (1 << (j - 1))][j - 1]);然后再进行重叠查询查询,k log2(r - l 1);,max(f[l][k], f[r - (1 &l…...
MATLAB 在数学建模中的深入应用:从基础到高级实践
目录 前言 一、MATLAB基础知识 1.1 MATLAB工作环境简介 1.1.1 命令窗口(Command Window) 1.1.2 工作区(Workspace) 1.1.3 命令历史(Command History) 1.1.4 编辑器(Editor) 1…...
Unity 设计模式 之 【什么是设计模式】/ 【为什么要使用设计模式】/ 【架构和设计模式的区别】
Unity 设计模式 之 【什么是设计模式】/ 【为什么要使用设计模式】/ 【架构和设计模式的区别】 目录 Unity 设计模式 之 【什么是设计模式】/ 【为什么要使用设计模式】/ 【架构和设计模式的区别】 一、简单介绍 二、 Unity 设计模式 1、Unity 开发中使用设计模式的特点 2…...
[数据集][目标检测]智慧交通铁路异物入侵检测数据集VOC+YOLO格式802张7类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):802 标注数量(xml文件个数):802 标注数量(txt文件个数):802 标注类别…...
飞驰云联FTP替代方案:安全高效文件传输的新选择
FTP协议广泛应用各行业的文件传输场景中,由于FTP应用获取门槛低、使用普遍,因此大部分企业都习惯使用FTP进行文件传输。然而面临激增的数据量和网络安全威胁的不断演变,FTP在传输安全性与传输性能上有所欠缺,无法满足企业现在的高…...
基于Arduino与应变片传感器的高精度厨房电子秤DIY全攻略
1. 项目概述:用Arduino打造一台高精度厨房电子秤作为一个喜欢在厨房里折腾的硬件爱好者,我经常遇到需要精确称量食材的场合。市面上的电子秤要么精度不够,要么价格不菲,要么功能单一。于是,我萌生了自己动手做一台的想…...
自制射频功率计:基于AD8317芯片,成本43欧元实现1MHz-10GHz测量
1. 项目概述:为什么我要亲手打造一台射频功率计在无人机和模型飞行器的圈子里,尤其是在我们荷兰FMS Spaarnwoude俱乐部,合规飞行是头等大事。我给我的八轴飞行器加装了云台相机和图传系统,工作在5.8GHz频段。根据本地法规…...
Python基础语法:生成器 generator(yield)
一、简介根据指定的规则循环生成数据,当条件不成立时则生成数据结束。数据不是一次性全部生成出来,而是使用一个,再生成一个,好处是可以节约大量的内存。就像设计模式中的懒汉式。适合处理大数据或流数。生成器是一种特殊的迭代器…...
为内部知识库问答机器人接入Taotoken多模型增强回答效果
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为内部知识库问答机器人接入Taotoken多模型增强回答效果 构建一个高效的企业内部知识库问答机器人,核心挑战在于如何让…...
学术写作创新突破!2026全流程AI论文工具精选指南
2026 年 AI 论文写作工具已进入全流程闭环 学术合规时代,千笔 AI(综合评分 99 分)中文学术场景标杆;Grammarly Academic与Elicit为英文论文写作首选;按需求匹配度 - 数据可信度 - 成本承受力三维模型选型,…...
使用TaotokenCLI工具一键配置开发环境中的API密钥
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken CLI工具一键配置开发环境中的API密钥 在团队协作或个人开发中,为每个项目或成员手动配置大模型API密钥和…...
人类防伪指南:为什么你越写错字,HR越信你是真人?
前言各位码农、算法侠、CtrlC/V十级学者请注意:你有没有过这样的经历?辛辛苦苦肝了一晚上文档,逻辑严密、语法丝滑、连Markdown都对齐得像军训方阵,结果老板幽幽来一句:“这真是你自己写的?”那一刻&#x…...
OmenSuperHub:释放惠普游戏本性能的纯净开源控制中心
OmenSuperHub:释放惠普游戏本性能的纯净开源控制中心 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为官方…...
sngan_projection论文解读:ICLR2018两大GAN技术的完美结合
sngan_projection论文解读:ICLR2018两大GAN技术的完美结合 【免费下载链接】sngan_projection GANs with spectral normalization and projection discriminator 项目地址: https://gitcode.com/gh_mirrors/sn/sngan_projection sngan_projection是一个实现了…...
WTF Auto Layout? 实战:10个常见约束冲突案例解析与解决方案
WTF Auto Layout? 实战:10个常见约束冲突案例解析与解决方案 【免费下载链接】wtfautolayout The source code for Why The Failure, Auto Layout? 项目地址: https://gitcode.com/gh_mirrors/wt/wtfautolayout 在iOS开发中,Auto Layout是构建灵…...
