2 个版本
0.4.2 | 2021年11月9日 |
---|---|
0.4.1 | 2021年10月29日 |
#2417 in 开发工具
72KB
1K SLoC
用于检查和列出一系列提交中受影响的资源,在处理单仓仓库时非常有用。
内容
使用方法
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_logger
和 log
这两个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