#git-commit #commit #monorepo #git #repository #affected

app is_affected

用于检查和列出一系列提交中受影响的资源,在处理单仓仓库时非常有用。

2 个版本

0.4.2 2021年11月9日
0.4.1 2021年10月29日

#2417 in 开发工具

AGPL-3.0

72KB
1K SLoC

Rust 562 SLoC // 0.1% comments Gherkin (Cucumber) 286 SLoC Python 198 SLoC

crates.io pipeline status Conventional Commits License: AGPL v3

用于检查和列出一系列提交中受影响的资源,在处理单仓仓库时非常有用。

内容

使用方法

Is Affected 在存储库历史中的一系列 Git 提交上运行。要指定提交范围,可以使用 --from-commit-hash <commit-hash>--from-reference <reference> 参数。提交范围从指定的提交开始,直到包括 HEAD。这些参数之一是必需的,但它们是冲突的,不能同时使用。

在提交范围内,你可以执行两种可能的操作。或者你可以通过提供 --list 标志来列出所有受影响的资源。或者,你可以通过 --affects-current-directory 标志或 --affects <resources> 参数来检查特定资源是否已受影响。使用 --affects-current-directory 标志时,会检查受影响的资源是否位于当前目录或子目录中。使用 --affects <resource> 参数时,你可以提供多个正则表达式,并检查是否有任何受影响的资源与之一致。如果满足任何受影响检查,则 Is Affected 返回零状态码,否则返回非零状态码。必须提供输出参数之一,但它们是冲突的,不能同时使用。

使用方法 - Git 环境变量

在查找存储库时,Git环境变量会被尊重。当设置了 $GIT_DIR 时,它将具有优先级,Is Affected 开始在 $GIT_DIR 指定的目录中查找存储库。当没有设置 $GIT_DIR 时,Is Affected 从当前目录开始查找存储库。

使用方法 - 记录日志

使用 pretty_env_loggerlog 这两个crate来提供日志功能。可以使用环境变量 RUST_LOG 来设置日志级别。有关更详细的文档,请参阅 https://crates.io/crates/pretty_env_logger

CICD 示例

GitLab CI Rust 项目示例

通过 Cargo

有关通过Cargo安装的更多信息,请参阅 通过Cargo编译

注意 - 此示例下载了最新版本的 0.*

example-stage:
  stage: example-stage
  image: rust
  before_script:
    - cargo install is_affected --version ^0
  script:
    - cd monorepo/
    # Check the monorepo is affected in the merge request or else skip the stage.
    - /usr/local/cargo/bin/is_affected --from-reference "origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" --affects-current-directory || exit 0
    - ... rest of the stage
  rules:
    - if: $CI_MERGE_REQUEST_ID

通过二进制下载

有关二进制下载的更多信息,请参阅 下载二进制文件

注意 - 此示例下载了版本 0.4.1

example-stage:
  stage: example-stage
  image: rust
  before_script:
    - wget -q -O tmp.zip "https://gitlab.com/DeveloperC/is_affected/-/jobs/artifacts/0.4.1/download?job=release-binary-compiling-x86_64-linux-musl" && unzip tmp.zip && rm tmp.zip
    - is_affected="$(pwd)/is_affected"
  script:
    - cd monorepo/
    # Check the monorepo is affected in the merge request or else skip the stage.
    - ${is_affected} --from-reference "origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" --affects-current-directory || exit 0
    - ... rest of the stage
  rules:
    - if: $CI_MERGE_REQUEST_ID

下载二进制文件

静态链接的编译二进制文件可供下载。访问 https://gitlab.com/DeveloperC/is_affected/-/releases 页面以查看所有发布内容,发布说明中包含各种架构的二进制下载链接。

如果您不信任提供的二进制文件,另一个选项是编译自己的版本并使其可供远程下载,这样您的CICD等就可以下载它。

通过本地仓库编译

在本地检出代码存储库,切换到存储库目录,然后通过Cargo进行构建。使用 --release 标志会产生一个优化的二进制文件,但编译时间会更长。

git clone [email protected]:DeveloperC/is_affected.git
cd is_affected/
cargo build --release

编译的二进制文件位于 target/release/is_affected

通过 Cargo 编译

Cargo 是 Rust 的包管理器,install 子命令从 crates.io 拉取,并在本地编译二进制文件,将编译后的二进制文件放置在 $HOME/.cargo/bin/is_affected

cargo install is_affected

默认情况下,它会在执行时安装最新版本。您可以使用 --version 参数指定要安装的特定版本。在某些环境(如CICD等)中,您可能希望锁定版本。

例如:

cargo install is_affected --version 0.4.1

您可以通过指定主版本号或次版本号来指定主要版本,而不是锁定到特定版本。

例如:

cargo install is_affected --version ^0

将下载最新的 0.* 发布版,无论它是 0.4.1 还是 0.7.0

单元测试

单元测试套件有几个参数化测试,使用Cargo来设置和运行所有单元测试。

cargo test

问题/功能请求

要报告问题或请求新功能,请使用 https://gitlab.com/DeveloperC/is_affected/-/issues

依赖项

~13–22MB
~383K SLoC