#git-commit #commit #monorepo #git-repository #repository #git #effected

app is_effected

一个用于检查和列出一系列提交中受影响的资源的实用程序,当与单仓库一起使用时非常有用。

6 个版本 (破坏性更新)

0.4.1 2021 年 9 月 20 日
0.4.0 2021 年 9 月 19 日
0.3.0 2021 年 9 月 11 日
0.2.0 2021 年 9 月 8 日
0.0.1 2021 年 7 月 3 日

#2310 in 开发工具

每月 38 次下载

AGPL-3.0

65KB
1K SLoC

Rust 597 SLoC // 0.1% comments Gherkin (Cucumber) 238 SLoC Python 188 SLoC

crates.io pipeline status Conventional Commits License: AGPL v3

一个用于检查和列出一系列提交中受影响的资源的实用程序,当与单仓库一起使用时非常有用。

内容

用法

Is Effected 在仓库历史中操作一系列 Git 提交。要指定提交范围,可以使用 --from-commit-hash <commit-hash>--from-reference <reference> 参数。提交范围从指定的提交开始,直到包含 HEAD。必须使用这些参数之一,但不能同时使用。

在提交范围内,您可以执行两种可能的操作。您可以通过提供 --list 标志来列出所有受影响的资源。或者,您可以通过 --effects-current-directory 标志或 --effects <resources> 参数来检查特定资源是否受到影响。使用 --effects-current-directory 标志时,将检查受影响的资源是否在当前目录或子目录中。使用 --effects <resource> 参数时,您可以提供多个正则表达式,并检查是否任何受影响的资源与任何正则表达式匹配。如果满足任何效果检查条件,则 Is Effected 返回零状态码,否则返回非零状态码。必须提供这些输出参数之一,但不能同时使用。

用法 - Git 环境变量

在查找仓库时,Git 环境变量会被尊重。当设置了 $GIT_DIR,它会优先使用,并从指定的目录开始搜索仓库。当没有设置 $GIT_DIR 时,Is Effected 会从当前目录开始搜索仓库。

用法 - 记录

使用 pretty_env_loggerlog 库来提供日志记录功能。可以使用环境变量 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_effected --version ^0
  script:
    - cd monorepo/
    # Check the monorepo is effected in the merge request or else skip the stage.
    - /usr/local/cargo/bin/is_effected --from-reference "origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" --effects-current-directory || exit 0
    - ... rest of the stage
  rules:
    - if: $CI_MERGE_REQUEST_ID

通过二进制下载

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

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

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

下载二进制文件

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

如果您不相信提供的二进制文件,另一种选择是自行编译并使其可用于远程下载,这样您的 CICD 等工具就可以下载它。

通过本地仓库编译

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

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

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

通过 Cargo 编译

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

cargo install is_effected

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

例如:

cargo install is_effected --version 0.2.0

而不是固定到特定版本,您可以指定主版本或次要版本。

例如:

cargo install is_effected --version ^0

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

单元测试

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

cargo test

问题/功能请求

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

依赖项

~13–22MB
~381K SLoC