#semver #build #commit #date-time #gitversion

构建 dotnet-gitversion-build

使用 dotnet-gitversion 在构建时提供语义版本

1 个不稳定版本

0.3.0 2021 年 7 月 17 日

#371 in 构建工具

MIT 许可证

24KB
432 代码行

dotnet-gitversion 用于 Rust 构建

本项目提供了一个构建时包装器,用于 GitTools/GitVersion,它将当前仓库状态中获取的语义版本信息嵌入。

先决条件

此库需要安装 .NET 运行时(例如 .NET 5)和全局安装的 GitVersion.Tool 包,例如。

$ dotnet tool install --global GitVersion.Tool --version 5.6.10

您可以通过调用以下内容来验证安装:

$ dotnet gitversion
$ dotnet-gitversion

请注意,您的仓库可能需要 GitVersion.yml 配置文件。请参阅此项目的 GitVersion.yml 以获取示例。

用法

dotnet-gitversion 添加到您的构建依赖项

[build-dependencies]
dotnet-gitversion-build = { git = "https://github.com/sunsided/dotnet-gitversion-rs" }

创建或更新您的 build.rs 以调用 dotnet_gitversion_build::build()。此方法填充了各种 GITVERSION_ 环境变量,供 env! 宏使用,在 OUT_DIR 目录中创建 gitversion.rs 文件,并额外返回中间表示形式

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let _gv = dotnet_gitversion_build::build()?;
    Ok(())
}

可以立即使用 GITVERSION_... 环境变量

fn main() {
    // Use the build-generated environment variables.
    println!("Info version: {}", env!("GITVERSION_INFORMATIONAL_VERSION"));
    println!("Full SemVer:  {}", env!("GITVERSION_FULL_SEMVER"));
}

上述代码的示例输出

Info version: 0.2.0+Branch.main.Sha.645a21e7b6358e9b72978a1b46cbd6c55a85a9af
Full SemVer:  0.2.0

包含生成的 gitversion.rs 文件后,您还可以访问静态 GIT_VERSION 常量和 GitVersion 结构体

include!(concat!(env!("OUT_DIR"), "/gitversion.rs"));

fn main() {
    // Use the "global" constant.
    println!("Display:      {}", GIT_VERSION);
    println!("Debug:        {:?}", GIT_VERSION);
    println!("SHA:          {}", GIT_VERSION.sha);
    println!("Commit:       {}", GIT_VERSION.commit_date);

    // The GitVersion::new() function allows you to obtain
    // the struct as a constant.
    const GV: GitVersion = GitVersion::new();
    println!("Branch name:  {}", GV.branch_name);

    // Alternatively you can use the Default trait to obtain a new instance.
    let gv = GitVersion::default();
    println!("Short commit: {}", gv.short_sha);
}

上述代码的示例输出

Display:      0.2.0
Debug:        0.2.0+Branch.main.Sha.2e3c96c6dbd30a0ca25e51d2fb10982042670a46
SHA:          2e3c96c6dbd30a0ca25e51d2fb10982042670a46
Commit:       2021-06-20
Branch name:  main
Short commit: 2e3c96c

导入的 GitVersion 结构体本身如下所示。有关字段值的信息,请参阅 GitTools/GitVersion 的文档,或运行 dotnet gitversion。环境变量名称以 GITVERSION_ 前缀开头,后跟字段名称,例如 GITVERSION_MAJOR_MINOR_PATCH

pub struct GitVersion {
    pub major: u32,
    pub minor: u32,
    pub patch: u32,
    pub pre_release_tag: &'static str,
    pub pre_release_tag_with_dash: &'static str,
    pub pre_release_label: &'static str,
    pub pre_release_label_with_dash: &'static str,
    pub pre_release_number: Option<u32>,
    pub weighted_pre_release_number: u32,
    pub build_meta_data: Option<u32>,
    pub build_meta_data_padded: &'static str,
    pub full_build_meta_data: &'static str,
    pub major_minor_patch: &'static str,
    pub semver: &'static str,
    #[deprecated]
    pub legacy_semver: &'static str,
    #[deprecated]
    pub legacy_semver_padded: &'static str,
    pub assembly_semver: &'static str,
    pub assembly_sem_file_version: &'static str,
    pub informational_version: &'static str,
    pub branch_name: &'static str,
    pub escaped_branch_name: &'static str,
    pub sha: &'static str,
    pub short_sha: &'static str,
    #[deprecated]
    pub nuget_version_v2: &'static str,
    #[deprecated]
    pub nuget_version: &'static str,
    #[deprecated]
    pub nuget_prerelease_tag_v2: &'static str,
    #[deprecated]
    pub nuget_prerelease_tag: &'static str,
    pub version_source_sha: &'static str,
    pub commits_since_version_source: u32,
    pub commits_since_version_source_padded: &'static str,
    pub uncommitted_changes: u32,
    pub commit_date: &'static str,
}

依赖项

~0.8–1.6MB
~35K SLoC