@canyonjs/git-diff
v0.0.12
Published
Generate git diff file for GitLab CI pipelines
Downloads
995
Readme
@canyonjs/git-diff
一个可以自动识别 CI/CD 流水线类型的 npm 包,支持 GitLab CI 和 GitHub Actions。通过侦测 pipeline 的变量来判断当前是 merge request/pull request 还是 commit/push 流水线,从而执行不同的 git diff 逻辑并输出到 diff.txt 文件。
功能
- 自动检测 CI 平台(GitLab CI / GitHub Actions)
- GitLab CI:
- 支持 Merge Request 事件:比较
CI_MERGE_REQUEST_DIFF_BASE_SHA和HEAD - 支持 Commit 事件:比较
HEAD~1和HEAD
- 支持 Merge Request 事件:比较
- GitHub Actions:
- 支持 Pull Request 事件:比较
origin/GITHUB_BASE_REF和GITHUB_SHA - 支持 Push 事件:比较
GITHUB_SHA~1和GITHUB_SHA
- 支持 Pull Request 事件:比较
- 输出统一的 diff 格式到
diff.txt文件
安装
npm install -g @canyonjs/git-diff
# 或
pnpm add -g @canyonjs/git-diff使用方法
在 GitLab CI 中使用
# .gitlab-ci.yml
generate-diff:
script:
- git-diff
# 或者指定输出路径
- git-diff --output custom-diff.txt
artifacts:
paths:
- diff.txt在 GitHub Actions 中使用
# .github/workflows/diff.yml
name: Generate Diff
on:
pull_request:
push:
jobs:
generate-diff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # 需要完整历史记录
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install git-diff
run: npm install -g @canyonjs/git-diff
- name: Generate diff
run: git-diff
# 或者指定输出路径
# run: git-diff --output custom-diff.txt
- name: Upload diff artifact
uses: actions/upload-artifact@v4
with:
name: diff
path: diff.txt作为 npm 脚本使用
{
"scripts": {
"diff": "git-diff"
}
}命令行选项
--output <path>: 指定输出文件路径(默认为当前目录下的diff.txt)
工作原理
GitLab CI
Merge Request 事件 (
CI_PIPELINE_SOURCE=merge_request_event)- 自动 fetch
CI_MERGE_REQUEST_DIFF_BASE_SHA - 执行
git diff --unified=0 --no-color CI_MERGE_REQUEST_DIFF_BASE_SHA HEAD
- 自动 fetch
Commit 事件 (其他情况)
- 执行
git diff --unified=0 --no-color HEAD~1 HEAD - 如果
HEAD~1不存在(如首次提交),会输出空内容
- 执行
GitHub Actions
Pull Request 事件 (
GITHUB_EVENT_NAME=pull_request)- 自动 fetch
origin/GITHUB_BASE_REF - 执行
git diff --unified=0 --no-color origin/GITHUB_BASE_REF GITHUB_SHA
- 自动 fetch
Push 事件 (其他情况)
- 执行
git diff --unified=0 --no-color GITHUB_SHA~1 GITHUB_SHA - 如果前一个提交不存在(如首次提交),会输出空内容
- 执行
环境变量
包会自动检测以下 CI 环境变量:
GitLab CI
CI_PIPELINE_SOURCE: 流水线触发源CI_MERGE_REQUEST_DIFF_BASE_SHA: Merge Request 的基础 SHACI_COMMIT_SHA: 当前提交的 SHACI_COMMIT_REF_NAME: 当前分支名称
GitHub Actions
GITHUB_EVENT_NAME: 事件类型(pull_request, push等)GITHUB_BASE_REF: Pull Request 的基础分支GITHUB_HEAD_REF: Pull Request 的头分支GITHUB_SHA: 当前提交的 SHAGITHUB_REF: 分支引用
开发
# 安装依赖
pnpm install
# 构建
pnpm build
# 开发模式(监听文件变化)
pnpm devLicense
MIT
