#changelog #parser #version #format #notes #prefix #information

bin+lib parse-changelog

简单的变更日志解析器,使用 Rust 编写

29 次发布

0.6.8 2024 年 4 月 20 日
0.6.5 2024 年 3 月 5 日
0.6.4 2023 年 10 月 18 日
0.6.1 2023 年 7 月 3 日
0.2.0 2020 年 11 月 30 日

#63解析实现

Download history 754/week @ 2024-04-25 1307/week @ 2024-05-02 1106/week @ 2024-05-09 1333/week @ 2024-05-16 1148/week @ 2024-05-23 839/week @ 2024-05-30 988/week @ 2024-06-06 940/week @ 2024-06-13 873/week @ 2024-06-20 868/week @ 2024-06-27 600/week @ 2024-07-04 778/week @ 2024-07-11 715/week @ 2024-07-18 656/week @ 2024-07-25 818/week @ 2024-08-01 800/week @ 2024-08-08

每月 3,084 次下载
10 软件包中(直接 5 个)使用

Apache-2.0 OR MIT

310KB
787

parse-changelog

crates.io docs.rs license msrv github actions

简单的变更日志解析器,使用 Rust 编写。

安装

命令行界面

从源代码

cargo +stable install parse-changelog --locked

从预构建的二进制文件

您可以从发行页面下载预构建的二进制文件。预构建的二进制文件适用于 macOS、Linux(gnu 和 musl)和 Windows(静态可执行文件)。

下载 parse-changelog 的脚本示例
# Get host target
host=$(rustc -Vv | grep host | sed 's/host: //')
# Download binary and install to $HOME/.cargo/bin
curl --proto '=https' --tlsv1.2 -fsSL https://github.com/taiki-e/parse-changelog/releases/latest/download/parse-changelog-$host.tar.gz | tar xzf - -C "$HOME/.cargo/bin"

通过 Homebrew

您可以从我们维护的 Homebrew tap 安装 parse-changelog(x86_64/aarch64 macOS、x86_64/aarch64 Linux)

brew install taiki-e/tap/parse-changelog

通过 Scoop(Windows)

您可以从我们维护的 Scoop bucket 安装 parse-changelog

scoop bucket add taiki-e https://github.com/taiki-e/scoop-bucket
scoop install parse-changelog

通过 cargo-binstall

您可以使用 cargo-binstall 安装 parse-changelog

cargo binstall parse-changelog

通过 MPR(Debian/Ubuntu)

您可以从 MPR 安装 parse-changelog

git clone 'https://mpr.makedeb.org/parse-changelog'
cd parse-changelog/
makedeb -si
通过 Prebuilt-MPR

您还可以从提供通过 APT 直接自动升级的 Prebuilt-MPR 安装 parse-changelog。首先 在您的系统上设置 Prebuilt-MPR,然后运行以下命令

sudo apt install parse-changelog

注意:MPR/Prebuilt-MPR 软件包由社区维护,而不是 parse-changelog 的维护者。

在 GitHub Actions 上

您可以使用 taiki-e/install-action 在 Linux、macOS 和 Windows 上安装预构建的二进制文件。这使得安装更快,并可能避免上游更改导致的 问题

- uses: taiki-e/install-action@parse-changelog

要将此软件包用作库,请在您的 Cargo.toml 中添加以下内容

[dependencies]
parse-changelog = { version = "0.6", default-features = false }

注意:当将此软件包用作库时,我们建议禁用默认功能,因为默认功能启用了与 CLI 相关的依赖项,而此软件包的库部分不使用它们。

使用(命令行界面)

parse-changelog 命令解析变更日志并为指定的版本返回发布说明。

点击以显示完整选项列表
$ parse-changelog --help
parse-changelog

Simple changelog parser, written in Rust.

Parses changelog and returns a release note for the specified version.

USAGE:
    parse-changelog [OPTIONS] <PATH> [VERSION]

ARGS:
    <PATH>       Path to the changelog file (use '-' for standard input)
    [VERSION]    Specify version (by default, select the latest release)

OPTIONS:
    -t, --title                       Returns title instead of notes
        --title-no-link               Similar to --title, but remove links from title
        --json                        Returns JSON representation of all releases in changelog
        --version-format <PATTERN>    Specify version format
        --prefix-format <PATTERN>     Specify prefix format [aliases: prefix]
    -h, --help                        Print help information
    -V, --version                     Print version information

示例:获取 Rust 的发布说明

Rust的发布说明获取版本1.46.0的发布说明。

curl -fsSL https://raw.githubusercontent.com/rust-lang/rust/master/RELEASES.md \
  | parse-changelog - 1.46.0

上述命令的输出。

示例:获取Cargo的变更日志

Cargo的变更日志中,标题以"Cargo "开头,省略了补丁版本。这是parse-changelog默认不支持的一种格式,因此请使用--prefix--version-format来指定自定义格式。例如

curl -fsSL https://raw.githubusercontent.com/rust-lang/cargo/master/CHANGELOG.md \
  | parse-changelog --prefix 'Cargo ' --version-format '^[0-9]+\.[0-9]+$' - 1.50

上述命令的输出。

--prefix等同于Parser::prefix_format,而--version-format等同于Parser::version_format。有关更多信息,请参阅这些方法的文档。

示例:从变更日志创建新的GitHub发布

使用GitHub CLI

tag=...
version=...

# Get notes for $version from CHANGELOG.md.
notes=$(parse-changelog CHANGELOG.md "$version")
# Create a new GitHub release with GitHub CLI.
gh release create "$tag" --title "$version" --notes "$notes"

另请参阅create-gh-release-action

使用(库)

let changelog = "\
## 0.1.2 - 2020-03-01

- Bug fixes.

## 0.1.1 - 2020-02-01

- Added `Foo`.
- Added `Bar`.

## 0.1.0 - 2020-01-01

Initial release
";

// Parse changelog.
let changelog = parse_changelog::parse(changelog).unwrap();

// Get the latest release.
assert_eq!(changelog[0].version, "0.1.2");
assert_eq!(changelog[0].title, "0.1.2 - 2020-03-01");
assert_eq!(changelog[0].notes, "- Bug fixes.");

// Get the specified release.
assert_eq!(changelog["0.1.0"].title, "0.1.0 - 2020-01-01");
assert_eq!(changelog["0.1.0"].notes, "Initial release");
assert_eq!(changelog["0.1.1"].title, "0.1.1 - 2020-02-01");
assert_eq!(
    changelog["0.1.1"].notes,
    "- Added `Foo`.\n\
     - Added `Bar`."
);

有关parse-changelog作为库的更多信息,请参阅文档

支持格式

默认情况下,这个crate旨在支持以markdown为基础的变更日志,其中每个发布的标题都以基于语义化版本控制的版本格式开头。(例如,Keep a Changelog的变更日志格式。)

标题

每个发布的标题必须是Atx样式(1-6个#)或Setext样式(文本下的一行中包含=-),并且标题级别必须与其他发布匹配。

Atx样式标题

# 0.1.0
## 0.1.0

Setext样式标题

0.1.0
=====
0.1.0
-----

标题

每个发布的标题必须以一个文本或链接文本(带有[]的文本)开头,该文本以有效的版本格式前缀格式开头。例如

# [0.2.0]

description...

# 0.1.0

description...

前缀

您可以在版本之前包含字符作为前缀。

## Version 0.1.0
   ^^^^^^^^

默认情况下,仅允许"v"、"Version "、"Release "和""(无前缀)作为前缀。

要自定义前缀格式,请使用Parser::prefix_format方法(库)或--prefix-format选项(CLI)。

版本

## v0.1.0 -- 2020-01-01
    ^^^^^

默认版本格式基于语义化版本控制

它通过以下正则表达式进行解析

^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z\.-]+)?(\+[0-9A-Za-z\.-]+)?$|^Unreleased$

注意:要获取CLI中的'Unreleased'部分,您需要显式指定'Unreleased'作为版本。

要自定义版本格式,请使用Parser::version_format方法(库)或--version-format选项(CLI)。

后缀

您可以在版本之后自由包含字符。

# 0.1.0 - 2020-01-01
       ^^^^^^^^^^^^^
  • create-gh-release-action:基于变更日志创建GitHub发布的GitHub Action。 (使用此crate进行变更日志解析。)

许可证

根据您的选择,受Apache License, Version 2.0MIT许可证许可。

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在内的任何贡献,应按上述方式双授权,不附加任何额外条款或条件。

依赖关系

~3.5–5.5MB
~92K SLoC