
!GitHub Release Date
https://github.com/denisa/clq/actions/workflows/ci.yaml/badge.svg?branch=main](https://github.com/denisa/clq/actions/workflows/ci.yaml?query=branch%3Amain)  https://github.com/denisa/clq/actions/workflows/linter.yaml/badge.svg](https://github.com/denisa/clq/actions/workflows/linter.yaml)
clq是一款用于变更日志(Changelog)验证与查询的工具,旨在确保变更日志符合规范格式,并支持通过查询语言提取关键信息(如版本号、变更内容等)。它支持两种验证模式,可集成到开发流程中,帮助团队维护规范的变更日志,确保语义化版本控制的准确性。
clq始终先验证完整变更日志,遇到首个错误即停止。若提供查询,验证后返回查询结果。支持标准输入(无参数或参数为"-")或多个文件。
命令选项
textUsage: clq { options } path_to_changelog.md 选项: -changeMap name 定义变更类型到语义化版本变更映射的文件路径 -output format 查询结果输出格式,支持json和md(markdown),默认json -query string 用于提取变更日志信息的查询语句 -release 启用发布模式验证 -with-filename 始终在输出行添加文件名前缀
使用示例
验证文件:
clq CHANGELOG.md
验证CHANGELOG.md的格式合规性。
发布模式验证:
clq -release CHANGELOG.md
验证文件并确保最新版本非"[Unreleased]"或"[YANKED]"状态,建议发布前或合并到主分支前使用。
查询最新版本:
clq -query releases[0].version CHANGELOG.md
验证完整变更日志并返回最新版本号。
提供轻量Docker镜像,标签为发布版本,次要标签以"-slim"结尾(如1.2.3-slim)。
单文件验证
bashdocker run -i denisa/clq < CHANGELOG.md
多文件处理
建议使用多次单独调用或安装原生二进制文件。也可通过Whalebrew简化使用:
安装Whalebrew:
whalebrew install denisa/clq
验证一个或多个文件:
clq CHANGELOG.md 或 clq */CHANGELOG.md
其他镜像版本
项目还提供标签以"-alpine"结尾的镜像(如1.2.3-alpine),体积较大,主要用于https://github.com/denisa/clq-action%E3%80%82
详见https://github.com/denisa/clq-action%E6%96%87%E6%A1%A3%EF%BC%8C%E5%8F%AF%E5%B0%86clq%E9%9B%86%E6%88%90%E5%88%B0GitHub%E5%B7%A5%E4%BD%9C%E6%B5%81%E4%B8%AD%E3%80%82
CHANGELOG = 引言部分, 发布记录; 引言部分 = 标题, { markdown段落 }; 标题 = "# ", 行内内容, 行结束符; 发布记录 = [ 未发布版本 ], { 已发布版本 }; 未发布版本 = 未发布版本标题, { 变更内容 }; 已发布版本 = 已发布版本标题, { 变更内容 }; 未发布版本标题 = "## [Unreleased]", 行结束符; 已发布版本标题 = "## [", 语义化版本, "] - ", ISO日期, [ " [YANKED]" ], [ 标签 ], 行结束符; 标签 = 行内内容(但不是"[YANKED]"); 变更内容 = 变更类型, { 变更描述 }; 变更类型 = "### ", ( "Added" | "Changed" | "Deprecated" | "Removed" | "Fixed" | "Security" ), 行结束符; 变更描述 = "- ", 行内内容, 行结束符; 语义化版本 = 参见 https://semver.org; ISO日期 = 年, "-", 月, "-" 日; 年 = 数字, 数字, 数字, 数字; 月 = 数字, 数字; 日 = 数字, 数字; 行结束符 = "U+000A" | "U+000D" | "U+000DU+000A"; 数字 = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
注意:
## [1.5.2] - 2019.10.02 Espelho)。验证变更日志是否符合语法,并确保:
默认变更映射规则
Added(新增功能)Removed(移除功能)Changed(现有功能变更)Deprecated(即将移除的功能)Fixed(错误修复)Security(安全漏洞修复)自定义变更映射
通过-changeMap选项指定JSON文件自定义规则。例如,将Added仅触发minor版本变更:
json[ { "name": "Added", "increment": "minor" }, { "name": "Changed", "increment": "minor" }, { "name": "Deprecated", "increment": "minor" }, { "name": "Fixed", "increment": "patch" }, { "name": "Removed", "increment": "major" }, { "name": "Security", "increment": "patch" } ]
在特性模式基础上,进一步验证变更日志的首个条目为实际发布版本(非未发布或已撤销状态)。
注意:目前可能不支持预发布版本。
变更映射文件可通过emoji属性为变更类型分配表情符号。示例:
json[ { "name": "Added", "increment": "minor", "emoji": "✨" }, { "name": "Changed", "increment": "major", "emoji": "💥" }, { "name": "Deprecated", "increment": "minor", "emoji": "👎" }, { "name": "Fixed", "increment": "patch", "emoji": "🐛" }, { "name": "Removed", "increment": "major", "emoji": "🗑️" }, { "name": "Security", "increment": "patch", "emoji": "🔒" } ]
可通过变更映射文件定义其他变更类型(如翻译或新增类型),或为"build"类型的语义化版本分配变更类型(但此类变更不能作为版本递增的唯一依据)。示例:
查询由一系列"查询元素"组成,用于遍历变更日志结构获取目标字段。首个查询元素必须是变更日志的字段。
QUERY = ( 简单查询 | 复杂查询 ); 简单查询 = { 数组字段, "." }, 字段; 复杂查询 = { 数组字段, "." }, 数组字段, ["/"]; 数组字段 = 字段, "[", [选择器], "]"; 字段 = 见下文文档模型部分; 选择器 = 数字+; 数字 = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
-output指定格式输出。以"/"结尾时包含子元素;无选择器时返回对象集合。markdown# Change log ## [Unreleased] ### Added - waldo - fred ## [1.0.0] - 2020-06-20 ### Removed - foo - bar
releases[1].version → 1.0.0releases[1] → {"version":"1.0.0", "date":"2020-06-20"}releases[0].changes[] → [{"title":"Added"}]releases[0].changes[]/ → [{"title":"Added", "descriptions":["waldo", "fred"]}]changelog(变更日志)
releases[]:所有发布记录,可通过索引(从0开始)访问单个发布。title:变更日志标题。release(发布)
changes[]:该发布的所有变更,不可索引。date:发布日期,未发布时为空。label:可选发布标签。status:状态,可选值:prereleased、released、unreleased、yanked。title:版本、日期和可选标签组成的标题。version:版本号。change(变更)
descriptions[]:所有变更描述,不可索引。title:变更类型(如Added、Changed)。您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务